Summary
Since v10.5.42, active and engaged telemetry pings are silently dropped on a subset of desktop Firefox profiles. Telemetry shows ~7% of desktop-Firefox DAU (Windows/Mac/Linux, uniform) went silent from mid-May and never recovered; Chrome/Edge/Safari and Firefox-Android are unaffected. Tracker blocking is not affected — this is a metrics-only regression (affected users are still active, just uncounted).
Cause
#3331 added a pv ping param, which put an unguarded IndexedDB read on the ping's critical path in src/background/telemetry/index.js (getConf):
const [options, config, dailyStats] = await Promise.all([
store.resolve(Options),
store.resolve(Config),
store.resolve(DailyStats, yesterdayId), // rejects if the `insights` DB fails to open
]);
store.resolve rejects on a failed DB open. Long-lived (pre-v10) desktop-Firefox profiles hit a throwing branch in the daily-stats.js v31 upgrade() (deleteObjectStore('search'/'tabs'), or missing daily store). The rejection flows through getConf → _buildMetricsUrl and is swallowed by the .catch in _recordActive/_recordEngaged, so both pings are dropped — and since the timestamps are already advanced, there's no retry until the next window, where it fails again. Fresh installs create a clean v31 DB and are unaffected.
Fix
Make the DailyStats read non-fatal: wrap it in try/catch and default yesterdayPages to 0 (→ pv=0) instead of letting it reject getConf. Logging the caught IndexedDB error name would confirm the exact failure on affected profiles.
Summary
Since v10.5.42,
activeandengagedtelemetry pings are silently dropped on a subset of desktop Firefox profiles. Telemetry shows ~7% of desktop-Firefox DAU (Windows/Mac/Linux, uniform) went silent from mid-May and never recovered; Chrome/Edge/Safari and Firefox-Android are unaffected. Tracker blocking is not affected — this is a metrics-only regression (affected users are still active, just uncounted).Cause
#3331 added a
pvping param, which put an unguarded IndexedDB read on the ping's critical path insrc/background/telemetry/index.js(getConf):store.resolverejects on a failed DB open. Long-lived (pre-v10) desktop-Firefox profiles hit a throwing branch in thedaily-stats.jsv31upgrade()(deleteObjectStore('search'/'tabs'), or missingdailystore). The rejection flows throughgetConf→_buildMetricsUrland is swallowed by the.catchin_recordActive/_recordEngaged, so both pings are dropped — and since the timestamps are already advanced, there's no retry until the next window, where it fails again. Fresh installs create a clean v31 DB and are unaffected.Fix
Make the
DailyStatsread non-fatal: wrap it in try/catch and defaultyesterdayPagesto0(→pv=0) instead of letting it rejectgetConf. Logging the caught IndexedDB error name would confirm the exact failure on affected profiles.