Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/owncloud/client.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHannah von Reth <hannah.vonreth@owncloud.com>2021-12-09 18:11:46 +0300
committerHannah von Reth <vonreth@kde.org>2021-12-13 20:53:56 +0300
commitf776818cf599a55df4431dc21a20173e6a9d11bf (patch)
tree28ca5559ceb05a2fba1b217d6f9ba7c7099f8780 /src/libsync
parentf100deb90127fa169b5d25e380569dadbf6fdf07 (diff)
Handle local errors with the ignore list
Fixes: #9208, #9133
Diffstat (limited to 'src/libsync')
-rw-r--r--src/libsync/owncloudpropagator.cpp40
-rw-r--r--src/libsync/syncengine.cpp17
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;
}