mirror of
https://github.com/abraunegg/onedrive
synced 2024-05-19 22:26:37 +02:00
Fix that a HTTP 504 - Gateway Timeout causes local files to be deleted when using --download-only & --cleanup-local-files mode (#2342)
* Fix that a HTTP 504 - Gateway Timeout causes local files to be deleted when using --download-only & --cleanup-local-files mode
This commit is contained in:
parent
6607ba537b
commit
cfb4933778
29
src/sync.d
29
src/sync.d
|
@ -1798,20 +1798,49 @@ final class SyncEngine
|
||||||
log.vdebug("Retrying Query: changesAvailable = onedrive.viewChangesByItemId(driveId, idToQuery, deltaLinkAvailable)");
|
log.vdebug("Retrying Query: changesAvailable = onedrive.viewChangesByItemId(driveId, idToQuery, deltaLinkAvailable)");
|
||||||
changesAvailable = onedrive.viewChangesByItemId(driveId, idToQuery, deltaLinkAvailable);
|
changesAvailable = onedrive.viewChangesByItemId(driveId, idToQuery, deltaLinkAvailable);
|
||||||
log.vdebug("Query 'changesAvailable = onedrive.viewChangesByItemId(driveId, idToQuery, deltaLinkAvailable)' performed successfully on re-try");
|
log.vdebug("Query 'changesAvailable = onedrive.viewChangesByItemId(driveId, idToQuery, deltaLinkAvailable)' performed successfully on re-try");
|
||||||
|
if (changesAvailable.type() == JSONType.object) {
|
||||||
|
// are there any delta changes?
|
||||||
|
if (("value" in changesAvailable) != null) {
|
||||||
|
deltaChanges = count(changesAvailable["value"].array);
|
||||||
|
log.log("changesAvailable query reports that there are " , deltaChanges , " changes that need processing on OneDrive");
|
||||||
|
}
|
||||||
|
}
|
||||||
} catch (OneDriveException e) {
|
} catch (OneDriveException e) {
|
||||||
// display what the error is
|
// display what the error is
|
||||||
log.vdebug("Query Error: changesAvailable = onedrive.viewChangesByItemId(driveId, idToQuery, deltaLinkAvailable) on re-try after delay");
|
log.vdebug("Query Error: changesAvailable = onedrive.viewChangesByItemId(driveId, idToQuery, deltaLinkAvailable) on re-try after delay");
|
||||||
if (e.httpStatusCode == 504) {
|
if (e.httpStatusCode == 504) {
|
||||||
log.log("OneDrive returned a 'HTTP 504 - Gateway Timeout' when attempting to query for changes - retrying applicable request");
|
log.log("OneDrive returned a 'HTTP 504 - Gateway Timeout' when attempting to query for changes - retrying applicable request");
|
||||||
log.vdebug("changesAvailable = onedrive.viewChangesByItemId(driveId, idToQuery, deltaLinkAvailable) previously threw an error - retrying with empty deltaLinkAvailable");
|
log.vdebug("changesAvailable = onedrive.viewChangesByItemId(driveId, idToQuery, deltaLinkAvailable) previously threw an error - retrying with empty deltaLinkAvailable");
|
||||||
|
// Increase delay and wait again before retry
|
||||||
|
log.vdebug("Thread sleeping for 90 seconds as the server did not receive a timely response from the upstream server it needed to access in attempting to complete the request");
|
||||||
|
Thread.sleep(dur!"seconds"(90));
|
||||||
|
log.vdebug("Retrying Query - using a null deltaLinkAvailable after delay");
|
||||||
try {
|
try {
|
||||||
// try query with empty deltaLinkAvailable value
|
// try query with empty deltaLinkAvailable value
|
||||||
deltaLinkAvailable = null;
|
deltaLinkAvailable = null;
|
||||||
changesAvailable = onedrive.viewChangesByItemId(driveId, idToQuery, deltaLinkAvailable);
|
changesAvailable = onedrive.viewChangesByItemId(driveId, idToQuery, deltaLinkAvailable);
|
||||||
log.vdebug("Query 'changesAvailable = onedrive.viewChangesByItemId(driveId, idToQuery, deltaLinkAvailable)' performed successfully on re-try");
|
log.vdebug("Query 'changesAvailable = onedrive.viewChangesByItemId(driveId, idToQuery, deltaLinkAvailable)' performed successfully on re-try");
|
||||||
|
if (changesAvailable.type() == JSONType.object) {
|
||||||
|
// are there any delta changes?
|
||||||
|
if (("value" in changesAvailable) != null) {
|
||||||
|
deltaChanges = count(changesAvailable["value"].array);
|
||||||
|
log.vdebug("changesAvailable query reports that there are " , deltaChanges , " changes that need processing on OneDrive when using a null deltaLink value");
|
||||||
|
}
|
||||||
|
}
|
||||||
} catch (OneDriveException e) {
|
} catch (OneDriveException e) {
|
||||||
// Tried 3 times, give up
|
// Tried 3 times, give up
|
||||||
displayOneDriveErrorMessage(e.msg, getFunctionName!({}));
|
displayOneDriveErrorMessage(e.msg, getFunctionName!({}));
|
||||||
|
|
||||||
|
// OK .. if this was a 504, and running with --download-only & --cleanup-local-files
|
||||||
|
// need to exit to preserve local data, otherwise potential files will be deleted that should not be deleted
|
||||||
|
// leading to undesirable potential data loss scenarios
|
||||||
|
if ((e.httpStatusCode == 504) && (cleanupLocalFiles)) {
|
||||||
|
// log why we are exiting
|
||||||
|
log.log("Exiting application due to OneDrive API Gateway Timeout & --download-only & --cleanup-local-files configured to preserve local data");
|
||||||
|
// Must exit here
|
||||||
|
onedrive.shutdown();
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in a new issue