in glean/src/core/glean.ts [131:182]
function clearMetrics(): void {
// Clear enqueued upload jobs and clear pending pings queue.
//
// The only job that will still be sent is the deletion-request ping.
pingUploader.clearPendingPingsQueue();
// There is only one metric that we want to survive after clearing all
// metrics: first_run_date. Here, we store its value
// so we can restore it after clearing the metrics.
//
// Note: This will throw in case the stored metric is incorrect or inexistent.
// The most likely is that it throws if the metrics hasn't been set,
// e.g. we start Glean for the first with upload disabled.
let firstRunDate: Date;
try {
firstRunDate = new DatetimeMetric(
Context.metricsDatabase.getMetric(
CLIENT_INFO_STORAGE,
Context.coreMetrics.firstRunDate
)
).date;
} catch {
firstRunDate = new Date();
}
// Clear the databases.
Context.eventsDatabase.clearAll();
Context.metricsDatabase.clearAll();
Context.pingsDatabase.clearAll();
// We need to briefly set upload_enabled to true here so that `set`
// is not a no-op.
//
// This is safe.
//
// `clearMetrics` is either called on `initialize` or `setUploadEnabled`.
// Both are dispatched tasks, which means that any other dispatched task
// called after them will only be executed after they are done.
// Since all external API calls are dispatched, it is not possible
// for any other API call to be execute concurrently with this one.
Context.uploadEnabled = true;
// Store a "dummy" KNOWN_CLIENT_ID in the client_id metric. This will
// make it easier to detect if pings were unintentionally sent after
// uploading is disabled.
Context.coreMetrics.clientId.set(KNOWN_CLIENT_ID);
// Restore the first_run_date.
Context.coreMetrics.firstRunDate.set(firstRunDate);
Context.uploadEnabled = false;
}