diff options
author | Hannah von Reth <hannah.vonreth@owncloud.com> | 2021-12-09 18:11:46 +0300 |
---|---|---|
committer | Hannah von Reth <vonreth@kde.org> | 2021-12-13 20:53:56 +0300 |
commit | f776818cf599a55df4431dc21a20173e6a9d11bf (patch) | |
tree | 28ca5559ceb05a2fba1b217d6f9ba7c7099f8780 /src/libsync | |
parent | f100deb90127fa169b5d25e380569dadbf6fdf07 (diff) |
Handle local errors with the ignore list
Fixes: #9208, #9133
Diffstat (limited to 'src/libsync')
-rw-r--r-- | src/libsync/owncloudpropagator.cpp | 40 | ||||
-rw-r--r-- | src/libsync/syncengine.cpp | 17 |
2 files changed, 26 insertions, 31 deletions
diff --git a/src/libsync/owncloudpropagator.cpp b/src/libsync/owncloudpropagator.cpp index 6f0874d8a..1321ed07e 100644 --- a/src/libsync/owncloudpropagator.cpp +++ b/src/libsync/owncloudpropagator.cpp @@ -173,13 +173,11 @@ static SyncJournalErrorBlacklistRecord createBlacklistEntry( entry._ignoreDuration = qBound(minBlacklistTime, entry._ignoreDuration, maxBlacklistTime); - if (item._status == SyncFileItem::SoftError) { - // Track these errors, but don't actively suppress them. - entry._ignoreDuration = 0; - } - if (item._httpErrorCode == 507) { - entry._errorCategory = SyncJournalErrorBlacklistRecord::InsufficientRemoteStorage; + entry._errorCategory = SyncJournalErrorBlacklistRecord::Category::InsufficientRemoteStorage; + } else if (item._httpErrorCode == 0 && item._status == SyncFileItem::SoftError) { + // assume a local error + entry._errorCategory = SyncJournalErrorBlacklistRecord::Category::LocalSoftError; } return entry; @@ -193,11 +191,9 @@ static void blacklistUpdate(SyncJournalDb *journal, SyncFileItem &item) { SyncJournalErrorBlacklistRecord oldEntry = journal->errorBlacklistEntry(item._file); - const bool mayBlacklist = (item._status == SyncFileItem::NormalError) - || ((item._status == SyncFileItem::SoftError - || item._status == SyncFileItem::DetailError) - && item._httpErrorCode != 0 // or non-local error - ); + const bool mayBlacklist = item._status == SyncFileItem::NormalError + || item._status == SyncFileItem::SoftError + || item._status == SyncFileItem::DetailError; // No new entry? Possibly remove the old one, then done. if (!mayBlacklist) { @@ -213,24 +209,20 @@ static void blacklistUpdate(SyncJournalDb *journal, SyncFileItem &item) // Suppress the error if it was and continues to be blacklisted. // An ignoreDuration of 0 mean we're tracking the error, but not actively // suppressing it. - if (item._hasBlacklistEntry && newEntry._ignoreDuration > 0) { - item._status = SyncFileItem::BlacklistedError; - - qCInfo(lcPropagator) << "blacklisting " << item._file - << " for " << newEntry._ignoreDuration - << ", retry count " << newEntry._retryCount; - - return; - } - // Some soft errors might become louder on repeat occurrence if (item._status == SyncFileItem::SoftError - && newEntry._retryCount > 1) { - qCWarning(lcPropagator) << "escalating soft error on " << item._file + && newEntry._retryCount > 1 + && item._httpErrorCode != 0) { + qCWarning(lcPropagator) << "escalating http soft error on " << item._file << " to normal error, " << item._httpErrorCode; item._status = SyncFileItem::NormalError; - return; + } else if (item._status != SyncFileItem::SoftError && item._hasBlacklistEntry && newEntry._ignoreDuration > 0) { + item._status = SyncFileItem::BlacklistedError; } + + qCInfo(lcPropagator) << "blacklisting " << item._file + << " for " << newEntry._ignoreDuration + << ", retry count " << newEntry._retryCount; } void PropagateItemJob::done(SyncFileItem::Status statusArg, const QString &errorString) diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index ed5d19fa1..69a5820c6 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -173,21 +173,24 @@ bool SyncEngine::checkErrorBlacklisting(SyncFileItem &item) qCInfo(lcEngine) << "Item is on blacklist: " << entry._file << "retries:" << entry._retryCount << "for another" << waitSeconds << "s"; - // We need to indicate that we skip this file due to blacklisting // for reporting and for making sure we don't update the blacklist // entry yet. // Classification is this _instruction and _status item._instruction = CSYNC_INSTRUCTION_IGNORE; - item._status = SyncFileItem::BlacklistedError; + if (entry._errorCategory == SyncJournalErrorBlacklistRecord::Category::LocalSoftError) { + item._status = SyncFileItem::SoftError; + item._errorString = entry._errorString; + } else { + item._status = SyncFileItem::BlacklistedError; - auto waitSecondsStr = Utility::durationToDescriptiveString1(1000 * waitSeconds); - item._errorString = tr("%1 (skipped due to earlier error, trying again in %2)").arg(entry._errorString, waitSecondsStr); + auto waitSecondsStr = Utility::durationToDescriptiveString1(1000 * waitSeconds); + item._errorString = tr("%1 (skipped due to earlier error, trying again in %2)").arg(entry._errorString, waitSecondsStr); - if (entry._errorCategory == SyncJournalErrorBlacklistRecord::InsufficientRemoteStorage) { - slotInsufficientRemoteStorage(); + if (entry._errorCategory == SyncJournalErrorBlacklistRecord::Category::InsufficientRemoteStorage) { + slotInsufficientRemoteStorage(); + } } - return true; } |