Fix one cause of "operation timed out" during sync
Remove some unnecessary transactions in Sync.Data.Local
This commit is contained in:
parent
3e0ab63b9b
commit
8de0b024f0
1 changed files with 50 additions and 58 deletions
|
@ -640,22 +640,20 @@ Zotero.Sync.Data.Local = {
|
||||||
var sql = "INSERT OR REPLACE INTO syncCache "
|
var sql = "INSERT OR REPLACE INTO syncCache "
|
||||||
+ "(libraryID, key, syncObjectTypeID, version, data) VALUES ";
|
+ "(libraryID, key, syncObjectTypeID, version, data) VALUES ";
|
||||||
var chunkSize = Math.floor(Zotero.DB.MAX_BOUND_PARAMETERS / 5);
|
var chunkSize = Math.floor(Zotero.DB.MAX_BOUND_PARAMETERS / 5);
|
||||||
return Zotero.DB.executeTransaction(function* () {
|
return Zotero.Utilities.Internal.forEachChunkAsync(
|
||||||
return Zotero.Utilities.Internal.forEachChunkAsync(
|
jsonArray,
|
||||||
jsonArray,
|
chunkSize,
|
||||||
chunkSize,
|
Zotero.Promise.coroutine(function* (chunk) {
|
||||||
Zotero.Promise.coroutine(function* (chunk) {
|
var params = [];
|
||||||
var params = [];
|
for (let i = 0; i < chunk.length; i++) {
|
||||||
for (let i = 0; i < chunk.length; i++) {
|
let o = chunk[i];
|
||||||
let o = chunk[i];
|
params.push(libraryID, o.key, syncObjectTypeID, o.version, JSON.stringify(o));
|
||||||
params.push(libraryID, o.key, syncObjectTypeID, o.version, JSON.stringify(o));
|
}
|
||||||
}
|
return Zotero.DB.queryAsync(
|
||||||
return Zotero.DB.queryAsync(
|
sql + chunk.map(() => "(?, ?, ?, ?, ?)").join(", "), params
|
||||||
sql + chunk.map(() => "(?, ?, ?, ?, ?)").join(", "), params
|
);
|
||||||
);
|
})
|
||||||
})
|
);
|
||||||
);
|
|
||||||
}.bind(this));
|
|
||||||
}),
|
}),
|
||||||
|
|
||||||
|
|
||||||
|
@ -1646,18 +1644,16 @@ Zotero.Sync.Data.Local = {
|
||||||
|
|
||||||
var syncObjectTypeID = Zotero.Sync.Data.Utilities.getSyncObjectTypeID(objectType);
|
var syncObjectTypeID = Zotero.Sync.Data.Utilities.getSyncObjectTypeID(objectType);
|
||||||
var sql = "DELETE FROM syncDeleteLog WHERE libraryID=? AND syncObjectTypeID=? AND key IN (";
|
var sql = "DELETE FROM syncDeleteLog WHERE libraryID=? AND syncObjectTypeID=? AND key IN (";
|
||||||
return Zotero.DB.executeTransaction(function* () {
|
return Zotero.Utilities.Internal.forEachChunkAsync(
|
||||||
return Zotero.Utilities.Internal.forEachChunkAsync(
|
keys,
|
||||||
keys,
|
Zotero.DB.MAX_BOUND_PARAMETERS - 2,
|
||||||
Zotero.DB.MAX_BOUND_PARAMETERS - 2,
|
Zotero.Promise.coroutine(function* (chunk) {
|
||||||
Zotero.Promise.coroutine(function* (chunk) {
|
var params = [libraryID, syncObjectTypeID].concat(chunk);
|
||||||
var params = [libraryID, syncObjectTypeID].concat(chunk);
|
return Zotero.DB.queryAsync(
|
||||||
return Zotero.DB.queryAsync(
|
sql + Array(chunk.length).fill('?').join(',') + ")", params
|
||||||
sql + Array(chunk.length).fill('?').join(',') + ")", params
|
);
|
||||||
);
|
})
|
||||||
})
|
);
|
||||||
);
|
|
||||||
}.bind(this));
|
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
@ -1691,24 +1687,22 @@ Zotero.Sync.Data.Local = {
|
||||||
);
|
);
|
||||||
|
|
||||||
// Insert or update
|
// Insert or update
|
||||||
yield Zotero.DB.executeTransaction(function* () {
|
var sql = "INSERT OR REPLACE INTO syncQueue "
|
||||||
var sql = "INSERT OR REPLACE INTO syncQueue "
|
+ "(libraryID, key, syncObjectTypeID, lastCheck, tries) VALUES ";
|
||||||
+ "(libraryID, key, syncObjectTypeID, lastCheck, tries) VALUES ";
|
return Zotero.Utilities.Internal.forEachChunkAsync(
|
||||||
return Zotero.Utilities.Internal.forEachChunkAsync(
|
keys,
|
||||||
keys,
|
Math.floor(Zotero.DB.MAX_BOUND_PARAMETERS / 5),
|
||||||
Math.floor(Zotero.DB.MAX_BOUND_PARAMETERS / 5),
|
function (chunk) {
|
||||||
function (chunk) {
|
var params = chunk.reduce(
|
||||||
var params = chunk.reduce(
|
(arr, key) => arr.concat(
|
||||||
(arr, key) => arr.concat(
|
[libraryID, key, syncObjectTypeID, now, keyTries[key]]
|
||||||
[libraryID, key, syncObjectTypeID, now, keyTries[key]]
|
), []
|
||||||
), []
|
);
|
||||||
);
|
return Zotero.DB.queryAsync(
|
||||||
return Zotero.DB.queryAsync(
|
sql + Array(chunk.length).fill('(?, ?, ?, ?, ?)').join(', '), params
|
||||||
sql + Array(chunk.length).fill('(?, ?, ?, ?, ?)').join(', '), params
|
);
|
||||||
);
|
}
|
||||||
}
|
);
|
||||||
);
|
|
||||||
}.bind(this));
|
|
||||||
}),
|
}),
|
||||||
|
|
||||||
|
|
||||||
|
@ -1746,18 +1740,16 @@ Zotero.Sync.Data.Local = {
|
||||||
removeObjectsFromSyncQueue: function (objectType, libraryID, keys) {
|
removeObjectsFromSyncQueue: function (objectType, libraryID, keys) {
|
||||||
var syncObjectTypeID = Zotero.Sync.Data.Utilities.getSyncObjectTypeID(objectType);
|
var syncObjectTypeID = Zotero.Sync.Data.Utilities.getSyncObjectTypeID(objectType);
|
||||||
var sql = "DELETE FROM syncQueue WHERE libraryID=? AND syncObjectTypeID=? AND key IN (";
|
var sql = "DELETE FROM syncQueue WHERE libraryID=? AND syncObjectTypeID=? AND key IN (";
|
||||||
return Zotero.DB.executeTransaction(function* () {
|
return Zotero.Utilities.Internal.forEachChunkAsync(
|
||||||
return Zotero.Utilities.Internal.forEachChunkAsync(
|
keys,
|
||||||
keys,
|
Zotero.DB.MAX_BOUND_PARAMETERS - 2,
|
||||||
Zotero.DB.MAX_BOUND_PARAMETERS - 2,
|
Zotero.Promise.coroutine(function* (chunk) {
|
||||||
Zotero.Promise.coroutine(function* (chunk) {
|
var params = [libraryID, syncObjectTypeID].concat(chunk);
|
||||||
var params = [libraryID, syncObjectTypeID].concat(chunk);
|
return Zotero.DB.queryAsync(
|
||||||
return Zotero.DB.queryAsync(
|
sql + Array(chunk.length).fill('?').join(',') + ")", params
|
||||||
sql + Array(chunk.length).fill('?').join(',') + ")", params
|
);
|
||||||
);
|
})
|
||||||
})
|
);
|
||||||
);
|
|
||||||
}.bind(this));
|
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue