Bug 1308337 - Part 6: Instrument FetchInfoConfiguration stage r=nalexander

MozReview-Commit-ID: HvDWBVBxb5I

--HG--
extra : rebase_source : 5e884830eaf1004e98ec1f6bca923fc4c84d1068
This commit is contained in:
Grigory Kruglov 2017-05-31 17:38:47 -04:00
parent 31f9e82f6f
commit 77bca8c547

View File

@ -4,12 +4,16 @@
package org.mozilla.gecko.sync.stage; package org.mozilla.gecko.sync.stage;
import android.os.SystemClock;
import org.mozilla.gecko.sync.ExtendedJSONObject; import org.mozilla.gecko.sync.ExtendedJSONObject;
import org.mozilla.gecko.sync.HTTPFailureException;
import org.mozilla.gecko.sync.InfoConfiguration; import org.mozilla.gecko.sync.InfoConfiguration;
import org.mozilla.gecko.sync.JSONRecordFetcher; import org.mozilla.gecko.sync.JSONRecordFetcher;
import org.mozilla.gecko.sync.delegates.JSONRecordFetchDelegate; import org.mozilla.gecko.sync.delegates.JSONRecordFetchDelegate;
import org.mozilla.gecko.sync.net.AuthHeaderProvider; import org.mozilla.gecko.sync.net.AuthHeaderProvider;
import org.mozilla.gecko.sync.net.SyncStorageResponse; import org.mozilla.gecko.sync.net.SyncStorageResponse;
import org.mozilla.gecko.sync.telemetry.TelemetryCollector;
/** /**
* Fetches configuration data from info/configurations endpoint. * Fetches configuration data from info/configurations endpoint.
@ -18,6 +22,9 @@ public class FetchInfoConfigurationStage extends AbstractNonRepositorySyncStage
private final String configurationURL; private final String configurationURL;
private final AuthHeaderProvider authHeaderProvider; private final AuthHeaderProvider authHeaderProvider;
private static final String TELEMETRY_ERROR_NAME = "infoconfig";
private static final String TELEMETRY_ERROR_MISSING = "missing";
public FetchInfoConfigurationStage(final String configurationURL, final AuthHeaderProvider authHeaderProvider) { public FetchInfoConfigurationStage(final String configurationURL, final AuthHeaderProvider authHeaderProvider) {
super(); super();
this.configurationURL = configurationURL; this.configurationURL = configurationURL;
@ -28,25 +35,41 @@ public class FetchInfoConfigurationStage extends AbstractNonRepositorySyncStage
@Override @Override
public void handleSuccess(final ExtendedJSONObject result) { public void handleSuccess(final ExtendedJSONObject result) {
session.config.infoConfiguration = new InfoConfiguration(result); session.config.infoConfiguration = new InfoConfiguration(result);
telemetryStageCollector.finished = SystemClock.elapsedRealtime();
session.advance(); session.advance();
} }
@Override @Override
public void handleFailure(final SyncStorageResponse response) { public void handleFailure(final SyncStorageResponse response) {
telemetryStageCollector.finished = SystemClock.elapsedRealtime();
// Handle all non-404 failures upstream. // Handle all non-404 failures upstream.
if (response.getStatusCode() != 404) { if (response.getStatusCode() != 404) {
telemetryStageCollector.error = new TelemetryCollector.StageErrorBuilder()
.setLastException(new HTTPFailureException(response))
.build();
session.handleHTTPError(response, "Failure fetching info/configuration"); session.handleHTTPError(response, "Failure fetching info/configuration");
return; return;
} }
// End-point might not be available (404) if server is running an older version. // End-point might not be available (404) if server is running an older version.
// We will use default config values in this case. // We will use default config values in this case.
// While this is not strictly an error in a sense that it's recoverable, going forward the
// expectation of having info/config endpoint will solidify, and it should be easy enough
// to interpret this error by correlating it to the current state of deployed servers.
telemetryStageCollector.error = new TelemetryCollector
.StageErrorBuilder(TELEMETRY_ERROR_NAME, TELEMETRY_ERROR_MISSING)
.build();
session.config.infoConfiguration = new InfoConfiguration(); session.config.infoConfiguration = new InfoConfiguration();
session.advance(); session.advance();
} }
@Override @Override
public void handleError(final Exception e) { public void handleError(final Exception e) {
telemetryStageCollector.finished = SystemClock.elapsedRealtime();
telemetryStageCollector.error = new TelemetryCollector.StageErrorBuilder()
.setLastException(e)
.build();
session.abort(e, "Failure fetching info/configuration"); session.abort(e, "Failure fetching info/configuration");
} }
} }