Closed
Bug 987225
Opened 11 years ago
Closed 11 years ago
Telemetry experiments: Combine pending tasks into a serial task
Categories
(Firefox Health Report Graveyard :: Client: Desktop, defect)
Firefox Health Report Graveyard
Client: Desktop
Tracking
(Not tracked)
RESOLVED
FIXED
Firefox 31
People
(Reporter: gfritzsche, Assigned: benjamin)
References
Details
Attachments
(1 file, 2 obsolete files)
37.64 KB,
patch
|
gfritzsche
:
review+
|
Details | Diff | Splinter Review |
No description provided.
Assignee | ||
Comment 1•11 years ago
|
||
You really need to review the -w version of this patch, but I can't get reviewboard to work.
Attachment #8396092 -
Flags: feedback?(georg.fritzsche)
Reporter | ||
Comment 2•11 years ago
|
||
Comment on attachment 8396092 [details] [diff] [review]
telex-singletask
Review of attachment 8396092 [details] [diff] [review]:
-----------------------------------------------------------------
This is definitely better and easier to argue about, thanks.
Mostly smaller comments/questions following.
::: browser/experiments/Experiments.jsm
@@ +272,5 @@
> + // The _main task handles all other actions:
> + // * refreshing the manifest off the network (if _refresh)
> + // * disabling/enabling experiments
> + // * saving the cache (if _dirty)
> + this._runningTask = null;
Nit: _runningTask sounds like a boolean, maybe _mainTask or _runTask?
@@ +331,5 @@
> gPrefsTelemetry.ignore(PREF_TELEMETRY_PRERELEASE, this._telemetryStatusChanged, this);
>
> if (this._timer) {
> this._timer.clear();
> + this._timer = null;
You don't need to null out the timer here or later, clear() already takes care of that:
http://hg.mozilla.org/mozilla-central/annotate/5c0673441fc8/services/common/utils.js#l216
@@ +492,5 @@
> +
> + _main: function*() {
> + do {
> + if (this._loadTask) {
> + yield this._loadTask;
Checking on this, you can actually just |yield null| so we don't need the branching here.
@@ +526,5 @@
> +
> + let data = JSON.parse(responseText);
> + this._updateExperiments(data);
> + } catch (e) {
> + gLogger.error("Experiments::_loadManifest - failure to fetch/parse manifest (continuing anyway)" + e);
Add some separation/space between the message and the error here?
@@ +691,5 @@
> _populateFromCache: function (data) {
> gLogger.trace("Experiments::populateFromCache() - data: " + JSON.stringify(data));
>
> + // If the user has a newer cache version than we can understand, we fail
> + // hard; no experiments should be active in this older client.
Might potentially be "newer client"/"older cache version" too? (e.g. switching from Nightly to Release)
@@ +786,2 @@
>
> + this._terminateCurrent = userDisabled ? TELEMETRY_LOG.TERMINATION.USERDISABLED : TELEMETRY_LOG.TERMINATION.FROM_API;
_terminateCurrent is overloaded and used both as a flag and to carry the reason.
Maybe _terminateCurrent should be _terminateReason to convey what's actually stored in it?
@@ +826,5 @@
> } catch (e) {
> gLogger.error(e);
> // On failure try the next experiment.
> activeExperiment = null;
> + this._dirty = true;
I think we should also set _dirty when it didn't fail as details on the entry can have changed (e.g. the description/name).
::: browser/experiments/test/xpcshell/test_api.js
@@ +166,5 @@
> gTimerScheduleOffset = -1;
> defineNow(gPolicy, now);
>
> yield experiments.updateManifest();
> + dump("updateManifest done\n");
Left-over.
@@ +207,5 @@
> Assert.equal(gTimerScheduleOffset, startDate2 - now,
> "Experiment re-evaluation should have been scheduled correctly.");
>
> // Trigger update, clock set for experiment 2 to start.
> + // Use _run() to wait for "synchonous" re-evaluation
Why drop our coverage for the notify() path?
Attachment #8396092 -
Flags: feedback?(georg.fritzsche) → feedback+
Assignee | ||
Comment 3•11 years ago
|
||
Felipe, not sure how much you want to review this or delegate to gfritzsche based on his prior f+.
Attachment #8396432 -
Flags: review?(felipc)
Assignee | ||
Comment 4•11 years ago
|
||
> > + // If the user has a newer cache version than we can understand, we fail
> > + // hard; no experiments should be active in this older client.
>
> Might potentially be "newer client"/"older cache version" too? (e.g.
> switching from Nightly to Release)
Newer clients ought to be able to import/upgrade older cache versions.
Reporter | ||
Comment 5•11 years ago
|
||
Comment on attachment 8396432 [details] [diff] [review]
telex-singletask
Review of attachment 8396432 [details] [diff] [review]:
-----------------------------------------------------------------
::: browser/experiments/Experiments.jsm
@@ +798,5 @@
> + if (activeExperiment) {
> + this._pendingUninstall = activeExperiment._addonId;
> + try {
> + let wasStopped;
> + if (this._terminateReason) {
Cross-checking my rebases i noticed that you don't seem to actually reset _terminateReason if this path hit.
It looks like this will always do a second iteration in _main() and only null it then.
Comment 6•11 years ago
|
||
Comment on attachment 8396432 [details] [diff] [review]
telex-singletask
Review of attachment 8396432 [details] [diff] [review]:
-----------------------------------------------------------------
I'm happy with gfritzsche doing the final review. Just two notes:
::: browser/experiments/Experiments.jsm
@@ +652,3 @@
> * Save the experiment data on disk. Returns a promise that
> * is resolved when the operation is done.
> */
Some of the comments are incorrect now as this function doesn't return a promise by itself, but it's meant to be run as a task from Task.spawn.
Can we have a brief comment on all functions that are not meant to be called directly?
@@ +685,5 @@
> _populateFromCache: function (data) {
> gLogger.trace("Experiments::populateFromCache() - data: " + JSON.stringify(data));
>
> + // If the user has a newer cache version than we can understand, we fail
> + // hard; no experiments should be active in this older client.
Does it mean though that after a version downgrade, an experiment can still be re-activated after retrieving the manifest again? I imagine we want to support version downgrades if there are still experiments targeting that version
Attachment #8396432 -
Flags: review?(felipc) → feedback+
Assignee | ||
Comment 7•11 years ago
|
||
In general I don't expect the cache format to change, so I don't expect version downgrades to matter. In the event we do change the cache format, the following behavior would apply:
* Once the profile has upgraded, older clients won't run the experiment system at all. The experiment list in the addon manager will be empty
* New clients will continue to run applicable experiments while their conditions matched
I'll go through the doccomments and make sure that everything is up to date.
Assignee | ||
Comment 8•11 years ago
|
||
Attachment #8396092 -
Attachment is obsolete: true
Attachment #8396432 -
Attachment is obsolete: true
Attachment #8396502 -
Flags: review?(georg.fritzsche)
Reporter | ||
Comment 9•11 years ago
|
||
Comment on attachment 8396502 [details] [diff] [review]
telex-singletask rev. 3
Review of attachment 8396502 [details] [diff] [review]:
-----------------------------------------------------------------
This looks good to me.
I'd personally love to unnest _evaluateExperiments() as it is becoming harder to follow, but we can do that later.
Attachment #8396502 -
Flags: review?(georg.fritzsche) → review+
Assignee | ||
Comment 10•11 years ago
|
||
Target Milestone: --- → Firefox 31
Status: NEW → RESOLVED
Closed: 11 years ago
Resolution: --- → FIXED
Updated•7 years ago
|
Product: Firefox Health Report → Firefox Health Report Graveyard
You need to log in
before you can comment on or make changes to this bug.
Description
•