From d72f7e91094d5cfa96629128e0a966aa8b45ed48 Mon Sep 17 00:00:00 2001 From: Felix Weilbach Date: Fri, 23 Jul 2021 17:30:48 +0200 Subject: [PATCH] Check result of setPinState() Signed-off-by: Felix Weilbach --- src/csync/vio/csync_vio_local_unix.cpp | 3 ++- src/gui/accountsettings.cpp | 8 ++++++-- src/gui/folder.cpp | 8 ++++++-- src/gui/socketapi.cpp | 8 ++++++-- src/libsync/propagatedownload.cpp | 12 +++++++++--- src/libsync/propagateremotemove.cpp | 4 +++- src/libsync/propagateupload.cpp | 4 +++- src/libsync/propagatorjobs.cpp | 4 +++- test/testsyncvirtualfiles.cpp | 12 ++++++------ test/testsyncxattr.cpp | 10 +++++----- 10 files changed, 49 insertions(+), 24 deletions(-) diff --git a/src/csync/vio/csync_vio_local_unix.cpp b/src/csync/vio/csync_vio_local_unix.cpp index b0e5957bb..ed045b16e 100644 --- a/src/csync/vio/csync_vio_local_unix.cpp +++ b/src/csync/vio/csync_vio_local_unix.cpp @@ -124,7 +124,8 @@ std::unique_ptr csync_vio_local_readdir(csync_vio_handle_t *h if (vfs) { // Directly modifies file_stat->type. // We can ignore the return value since we're done here anyway. - vfs->statTypeVirtualFile(file_stat.get(), &handle->path); + const auto result = vfs->statTypeVirtualFile(file_stat.get(), &handle->path); + Q_UNUSED(result); } return file_stat; diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 1df8d3251..43dab82a5 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -826,7 +826,9 @@ void AccountSettings::slotEnableVfsCurrentFolder() folder->setRootPinState(PinState::Unspecified); for (const auto &entry : oldBlacklist) { folder->journalDb()->schedulePathForRemoteDiscovery(entry); - folder->vfs().setPinState(entry, PinState::OnlineOnly); + if (!folder->vfs().setPinState(entry, PinState::OnlineOnly)) { + qCWarning(lcAccountSettings) << "Could not set pin state of" << entry << "to online only"; + } } folder->slotNextSyncFullLocalDiscovery(); @@ -932,7 +934,9 @@ void AccountSettings::slotSetSubFolderAvailability(Folder *folder, const QString Q_ASSERT(!path.endsWith('/')); // Update the pin state on all items - folder->vfs().setPinState(path, state); + if (!folder->vfs().setPinState(path, state)) { + qCWarning(lcAccountSettings) << "Could not set pin state of" << path << "to" << state; + } // Trigger sync folder->schedulePathForLocalDiscovery(path); diff --git a/src/gui/folder.cpp b/src/gui/folder.cpp index b5bc8007c..cda9b0cb2 100644 --- a/src/gui/folder.cpp +++ b/src/gui/folder.cpp @@ -636,7 +636,9 @@ void Folder::implicitlyHydrateFile(const QString &relativepath) // (suffix-virtual file's pin state is stored at the hydrated path) const auto pin = _vfs->pinState(relativepath); if (pin && *pin == PinState::OnlineOnly) { - _vfs->setPinState(relativepath, PinState::Unspecified); + if (!_vfs->setPinState(relativepath, PinState::Unspecified)) { + qCWarning(lcFolder) << "Could not set pin state of" << relativepath << "to unspecified"; + } } // Add to local discovery @@ -675,7 +677,9 @@ void Folder::setVirtualFilesEnabled(bool enabled) void Folder::setRootPinState(PinState state) { - _vfs->setPinState(QString(), state); + if (!_vfs->setPinState(QString(), state)) { + qCWarning(lcFolder) << "Could not set root pin state of" << _definition.alias; + } // We don't actually need discovery, but it's important to recurse // into all folders, so the changes can be applied. diff --git a/src/gui/socketapi.cpp b/src/gui/socketapi.cpp index 79e1e5482..16b618868 100644 --- a/src/gui/socketapi.cpp +++ b/src/gui/socketapi.cpp @@ -796,7 +796,9 @@ void SocketApi::command_MAKE_AVAILABLE_LOCALLY(const QString &filesArg, SocketLi continue; // Update the pin state on all items - data.folder->vfs().setPinState(data.folderRelativePath, PinState::AlwaysLocal); + if (!data.folder->vfs().setPinState(data.folderRelativePath, PinState::AlwaysLocal)) { + qCWarning(lcSocketApi) << "Could not set pin state of" << data.folderRelativePath << "to always local"; + } // Trigger sync data.folder->schedulePathForLocalDiscovery(data.folderRelativePath); @@ -815,7 +817,9 @@ void SocketApi::command_MAKE_ONLINE_ONLY(const QString &filesArg, SocketListener continue; // Update the pin state on all items - data.folder->vfs().setPinState(data.folderRelativePath, PinState::OnlineOnly); + if (!data.folder->vfs().setPinState(data.folderRelativePath, PinState::OnlineOnly)) { + qCWarning(lcSocketApi) << "Could not set pin state of" << data.folderRelativePath << "to online only"; + } // Trigger sync data.folder->schedulePathForLocalDiscovery(data.folderRelativePath); diff --git a/src/libsync/propagatedownload.cpp b/src/libsync/propagatedownload.cpp index 285446ec1..64773953a 100644 --- a/src/libsync/propagatedownload.cpp +++ b/src/libsync/propagatedownload.cpp @@ -1079,15 +1079,21 @@ void PropagateDownloadFile::downloadFinished() // Move the pin state to the new location auto pin = propagator()->_journal->internalPinStates().rawForPath(virtualFile.toUtf8()); if (pin && *pin != PinState::Inherited) { - vfs->setPinState(_item->_file, *pin); - vfs->setPinState(virtualFile, PinState::Inherited); + if (!vfs->setPinState(_item->_file, *pin)) { + qCWarning(lcPropagateDownload) << "Could not set pin state of" << _item->_file; + } + if (!vfs->setPinState(virtualFile, PinState::Inherited)) { + qCWarning(lcPropagateDownload) << "Could not set pin state of" << virtualFile << " to inherited"; + } } } // Ensure the pin state isn't contradictory auto pin = vfs->pinState(_item->_file); if (pin && *pin == PinState::OnlineOnly) - vfs->setPinState(_item->_file, PinState::Unspecified); + if (!vfs->setPinState(_item->_file, PinState::Unspecified)) { + qCWarning(lcPropagateDownload) << "Could not set pin state of" << _item->_file << "to unspecified"; + } } updateMetadata(isConflict); diff --git a/src/libsync/propagateremotemove.cpp b/src/libsync/propagateremotemove.cpp index e65a5d4aa..edd29306c 100644 --- a/src/libsync/propagateremotemove.cpp +++ b/src/libsync/propagateremotemove.cpp @@ -239,7 +239,9 @@ void PropagateRemoteMove::finalize() // Delete old db data. propagator()->_journal->deleteFileRecord(_item->_originalFile); - vfs->setPinState(_item->_originalFile, PinState::Inherited); + if (!vfs->setPinState(_item->_originalFile, PinState::Inherited)) { + qCWarning(lcPropagateRemoteMove) << "Could not set pin state of" << _item->_originalFile << "to inherited"; + } SyncFileItem newItem(*_item); newItem._type = _item->_type; diff --git a/src/libsync/propagateupload.cpp b/src/libsync/propagateupload.cpp index dc7fc766c..3136603cd 100644 --- a/src/libsync/propagateupload.cpp +++ b/src/libsync/propagateupload.cpp @@ -781,7 +781,9 @@ void PropagateUploadFileCommon::finalize() auto &vfs = propagator()->syncOptions()._vfs; const auto pin = vfs->pinState(_item->_file); if (pin && *pin == PinState::OnlineOnly) { - vfs->setPinState(_item->_file, PinState::Unspecified); + if (!vfs->setPinState(_item->_file, PinState::Unspecified)) { + qCWarning(lcPropagateUpload) << "Could not set pin state of" << _item->_file << "to unspecified"; + } } } diff --git a/src/libsync/propagatorjobs.cpp b/src/libsync/propagatorjobs.cpp index b651aec81..bf21e5e19 100644 --- a/src/libsync/propagatorjobs.cpp +++ b/src/libsync/propagatorjobs.cpp @@ -248,7 +248,9 @@ void PropagateLocalRename::start() auto &vfs = propagator()->syncOptions()._vfs; auto pinState = vfs->pinState(_item->_originalFile); - vfs->setPinState(_item->_originalFile, PinState::Inherited); + if (!vfs->setPinState(_item->_originalFile, PinState::Inherited)) { + qCWarning(lcPropagateLocalRename) << "Could not set pin state of" << _item->_originalFile << "to inherited"; + } const auto oldFile = _item->_file; diff --git a/test/testsyncvirtualfiles.cpp b/test/testsyncvirtualfiles.cpp index f46888518..5505c1f26 100644 --- a/test/testsyncvirtualfiles.cpp +++ b/test/testsyncvirtualfiles.cpp @@ -1211,8 +1211,8 @@ private slots: QCOMPARE(*vfs->availability("local"), VfsItemAvailability::Mixed); QCOMPARE(*vfs->availability("online"), VfsItemAvailability::Mixed); - vfs->setPinState("local", PinState::AlwaysLocal); - vfs->setPinState("online", PinState::OnlineOnly); + QVERIFY(vfs->setPinState("local", PinState::AlwaysLocal)); + QVERIFY(vfs->setPinState("online", PinState::OnlineOnly)); QVERIFY(fakeFolder.syncOnce()); QCOMPARE(*vfs->availability("online"), VfsItemAvailability::OnlineOnly); @@ -1293,13 +1293,13 @@ private slots: QCOMPARE(*vfs->pinState("onlinerenamed2/file1rename" DVSUFFIX), PinState::OnlineOnly); // When a file is hydrated or dehydrated due to pin state it retains its pin state - vfs->setPinState("onlinerenamed2/file1rename" DVSUFFIX, PinState::AlwaysLocal); + QVERIFY(vfs->setPinState("onlinerenamed2/file1rename" DVSUFFIX, PinState::AlwaysLocal)); QVERIFY(fakeFolder.syncOnce()); QVERIFY(fakeFolder.currentLocalState().find("onlinerenamed2/file1rename")); QCOMPARE(*vfs->pinState("onlinerenamed2/file1rename"), PinState::AlwaysLocal); - vfs->setPinState("onlinerenamed2", PinState::Unspecified); - vfs->setPinState("onlinerenamed2/file1rename", PinState::OnlineOnly); + QVERIFY(vfs->setPinState("onlinerenamed2", PinState::Unspecified)); + QVERIFY(vfs->setPinState("onlinerenamed2/file1rename", PinState::OnlineOnly)); QVERIFY(fakeFolder.syncOnce()); QVERIFY(fakeFolder.currentLocalState().find("onlinerenamed2/file1rename" DVSUFFIX)); QCOMPARE(*vfs->pinState("onlinerenamed2/file1rename" DVSUFFIX), PinState::OnlineOnly); @@ -1376,7 +1376,7 @@ private slots: cleanup(); // Dehydrate - vfs->setPinState(QString(), PinState::OnlineOnly); + QVERIFY(vfs->setPinState(QString(), PinState::OnlineOnly)); QVERIFY(!fakeFolder.syncOnce()); QVERIFY(itemInstruction(completeSpy, "A/igno" DVSUFFIX, CSYNC_INSTRUCTION_IGNORE)); diff --git a/test/testsyncxattr.cpp b/test/testsyncxattr.cpp index bfcba680d..896d1171e 100644 --- a/test/testsyncxattr.cpp +++ b/test/testsyncxattr.cpp @@ -956,8 +956,8 @@ private slots: QCOMPARE(*vfs->availability("local"), VfsItemAvailability::Mixed); QCOMPARE(*vfs->availability("online"), VfsItemAvailability::Mixed); - vfs->setPinState("local", PinState::AlwaysLocal); - vfs->setPinState("online", PinState::OnlineOnly); + QVERIFY(vfs->setPinState("local", PinState::AlwaysLocal)); + QVERIFY(vfs->setPinState("online", PinState::OnlineOnly)); QVERIFY(fakeFolder.syncOnce()); QCOMPARE(*vfs->availability("online"), VfsItemAvailability::OnlineOnly); @@ -1037,13 +1037,13 @@ private slots: QCOMPARE(*vfs->pinState("onlinerenamed2/file1rename"), PinState::OnlineOnly); // When a file is hydrated or dehydrated due to pin state it retains its pin state - vfs->setPinState("onlinerenamed2/file1rename", PinState::AlwaysLocal); + QVERIFY(vfs->setPinState("onlinerenamed2/file1rename", PinState::AlwaysLocal)); QVERIFY(fakeFolder.syncOnce()); QVERIFY(fakeFolder.currentLocalState().find("onlinerenamed2/file1rename")); QCOMPARE(*vfs->pinState("onlinerenamed2/file1rename"), PinState::AlwaysLocal); - vfs->setPinState("onlinerenamed2", PinState::Unspecified); - vfs->setPinState("onlinerenamed2/file1rename", PinState::OnlineOnly); + QVERIFY(vfs->setPinState("onlinerenamed2", PinState::Unspecified)); + QVERIFY(vfs->setPinState("onlinerenamed2/file1rename", PinState::OnlineOnly)); QVERIFY(fakeFolder.syncOnce()); XAVERIFY_VIRTUAL(fakeFolder, "onlinerenamed2/file1rename"); -- 2.30.2