Skip to content

Commit cb26f51

Browse files
ogoffartguruz
authored andcommitted
Discovery: Do not abort the sync in case of error 404 (or 500)
Issue: #7199
1 parent 0a03fc2 commit cb26f51

File tree

2 files changed

+15
-15
lines changed

2 files changed

+15
-15
lines changed

src/libsync/discovery.cpp

+4-6
Original file line numberDiff line numberDiff line change
@@ -1351,20 +1351,18 @@ DiscoverySingleDirectoryJob *ProcessDirectoryJob::startAsyncServerQuery()
13511351
}
13521352
};
13531353

1354-
if (results.error().code == 403) {
1354+
auto code = results.error().code;
1355+
qCWarning(lcDisco) << "Server error in directory" << _currentFolder._server << code;
1356+
if (code == 403 || code == 404 || code == 500 || code == 503) {
13551357
// 403 Forbidden can be sent by the server if the file firewall is active.
13561358
// A file or directory should be ignored and sync must continue. See #3490
1357-
qCWarning(lcDisco, "Directory access Forbidden (File Firewall?)");
1358-
ignoreOrFatal();
1359-
} else if (results.error().code == 503) {
13601359
// The server usually replies with the custom "503 Storage not available"
13611360
// if some path is temporarily unavailable. But in some cases a standard 503
13621361
// is returned too. Thus we can't distinguish the two and will treat any
13631362
// 503 as request to ignore the folder. See #3113 #2884.
1364-
qCWarning(lcDisco(), "Storage was not available!");
1363+
// Similarly, the server might also return 404 or 500 in case of bugs. #7199
13651364
ignoreOrFatal();
13661365
} else {
1367-
qCWarning(lcDisco) << "Server error in directory" << _currentFolder._server << results.error().message;
13681366
fatalError();
13691367
}
13701368
}

test/testremotediscovery.cpp

+11-9
Original file line numberDiff line numberDiff line change
@@ -63,17 +63,20 @@ private slots:
6363
qRegisterMetaType<ErrorCategory>();
6464
QTest::addColumn<int>("errorKind");
6565
QTest::addColumn<QString>("expectedErrorString");
66+
QTest::addColumn<bool>("syncSucceeds");
6667

6768
QString itemErrorMessage = "Internal Server Fake Error";
6869

69-
QTest::newRow("403") << 403 << itemErrorMessage;
70-
QTest::newRow("404") << 404 << itemErrorMessage;
71-
QTest::newRow("500") << 500 << itemErrorMessage;
72-
QTest::newRow("503") << 503 << itemErrorMessage;
70+
QTest::newRow("400") << 400 << itemErrorMessage << false;
71+
QTest::newRow("401") << 401 << itemErrorMessage << false;
72+
QTest::newRow("403") << 403 << itemErrorMessage << true;
73+
QTest::newRow("404") << 404 << itemErrorMessage << true;
74+
QTest::newRow("500") << 500 << itemErrorMessage << true;
75+
QTest::newRow("503") << 503 << itemErrorMessage << true;
7376
// 200 should be an error since propfind should return 207
74-
QTest::newRow("200") << 200 << itemErrorMessage;
75-
QTest::newRow("InvalidXML") << +InvalidXML << "Unknown error";
76-
QTest::newRow("Timeout") << +Timeout << "Operation canceled";
77+
QTest::newRow("200") << 200 << itemErrorMessage << false;
78+
QTest::newRow("InvalidXML") << +InvalidXML << "Unknown error" << false;
79+
QTest::newRow("Timeout") << +Timeout << "Operation canceled" << false;
7780
}
7881

7982

@@ -82,8 +85,7 @@ private slots:
8285
{
8386
QFETCH(int, errorKind);
8487
QFETCH(QString, expectedErrorString);
85-
// 403/503 just ignore the temporarily unavailable directory
86-
bool syncSucceeds = errorKind == 503 || errorKind == 403;
88+
QFETCH(bool, syncSucceeds);
8789

8890
FakeFolder fakeFolder{ FileInfo::A12_B12_C12_S12() };
8991

0 commit comments

Comments
 (0)