mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 19:35:51 +00:00
Bug 692700 part 1 - Set X-If-Unmodified-Since when uploading meta/global. r=markh
MozReview-Commit-ID: IoiThiDlvCj --HG-- extra : rebase_source : f78434e661810f9b42da6d58422713fd20687e28
This commit is contained in:
parent
ab6a82461d
commit
1ee65dc313
@ -902,16 +902,9 @@ Sync11Service.prototype = {
|
||||
|
||||
if (this.recordManager.response.status == 404) {
|
||||
this._log.debug("No meta/global record on the server. Creating one.");
|
||||
newMeta = new WBORecord("meta", "global");
|
||||
newMeta.payload.syncID = this.syncID;
|
||||
newMeta.payload.storageVersion = STORAGE_VERSION;
|
||||
newMeta.payload.declined = this.engineManager.getDeclined();
|
||||
|
||||
newMeta.isNew = true;
|
||||
|
||||
this.recordManager.set(this.metaURL, newMeta);
|
||||
let uploadRes = newMeta.upload(this.resource(this.metaURL));
|
||||
if (!uploadRes.success) {
|
||||
try {
|
||||
this._uploadNewMetaGlobal();
|
||||
} catch (uploadRes) {
|
||||
this._log.warn("Unable to upload new meta/global. Failing remote setup.");
|
||||
this.errorHandler.checkServerError(uploadRes);
|
||||
return false;
|
||||
@ -1116,20 +1109,36 @@ Sync11Service.prototype = {
|
||||
},
|
||||
|
||||
/**
|
||||
* Upload meta/global, throwing the response on failure.
|
||||
* Upload a fresh meta/global record
|
||||
* @throws the response object if the upload request was not a success
|
||||
*/
|
||||
_uploadNewMetaGlobal() {
|
||||
let meta = new WBORecord("meta", "global");
|
||||
meta.payload.syncID = this.syncID;
|
||||
meta.payload.storageVersion = STORAGE_VERSION;
|
||||
meta.payload.declined = this.engineManager.getDeclined();
|
||||
meta.modified = 0;
|
||||
meta.isNew = true;
|
||||
|
||||
this.uploadMetaGlobal(meta);
|
||||
},
|
||||
|
||||
/**
|
||||
* Upload meta/global, throwing the response on failure
|
||||
* @param {WBORecord} meta meta/global record
|
||||
* @throws the response object if the request was not a success
|
||||
*/
|
||||
uploadMetaGlobal(meta) {
|
||||
this._log.debug("Uploading meta/global: " + JSON.stringify(meta));
|
||||
|
||||
// It would be good to set the X-If-Unmodified-Since header to `timestamp`
|
||||
// for this PUT to ensure at least some level of transactionality.
|
||||
// Unfortunately, the servers don't support it after a wipe right now
|
||||
// (bug 693893), so we're going to defer this until bug 692700.
|
||||
this._log.debug("Uploading meta/global", meta);
|
||||
let res = this.resource(this.metaURL);
|
||||
res.setHeader("X-If-Unmodified-Since", meta.modified);
|
||||
let response = res.put(meta);
|
||||
if (!response.success) {
|
||||
throw response;
|
||||
}
|
||||
// From https://docs.services.mozilla.com/storage/apis-1.5.html:
|
||||
// "Successful responses will return the new last-modified time for the collection."
|
||||
meta.modified = response.obj;
|
||||
this.recordManager.set(this.metaURL, meta);
|
||||
},
|
||||
|
||||
@ -1142,17 +1151,11 @@ Sync11Service.prototype = {
|
||||
this.wipeServer();
|
||||
|
||||
// Upload a new meta/global record.
|
||||
let meta = new WBORecord("meta", "global");
|
||||
meta.payload.syncID = this.syncID;
|
||||
meta.payload.storageVersion = STORAGE_VERSION;
|
||||
meta.payload.declined = this.engineManager.getDeclined();
|
||||
meta.isNew = true;
|
||||
|
||||
// uploadMetaGlobal throws on failure -- including race conditions.
|
||||
// _uploadNewMetaGlobal throws on failure -- including race conditions.
|
||||
// If we got into a race condition, we'll abort the sync this way, too.
|
||||
// That's fine. We'll just wait till the next sync. The client that we're
|
||||
// racing is probably busy uploading stuff right now anyway.
|
||||
this.uploadMetaGlobal(meta);
|
||||
this._uploadNewMetaGlobal();
|
||||
|
||||
// Wipe everything we know about except meta because we just uploaded it
|
||||
// TODO: there's a bug here. We should be calling resetClient, no?
|
||||
|
Loading…
Reference in New Issue
Block a user