diff options
author | allexzander <blackslayer4@gmail.com> | 2022-08-04 16:47:39 +0300 |
---|---|---|
committer | Matthieu Gallien <matthieu_gallien@yahoo.fr> | 2022-09-17 10:47:15 +0300 |
commit | d7950304ee78cc9c67d5e8772fb1bbcdca1034db (patch) | |
tree | 90ec74213a5577fe78f3ec5432ab45df26ef83b9 /src | |
parent | 1694be9d7287959116a1c9df0180167fd636fe07 (diff) |
Do not ignore return values for SyncJournalDB calls in propagator jobs and discovery.
Signed-off-by: allexzander <blackslayer4@gmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/libsync/discovery.cpp | 14 | ||||
-rw-r--r-- | src/libsync/owncloudpropagator.cpp | 12 | ||||
-rw-r--r-- | src/libsync/propagatedownload.cpp | 21 | ||||
-rw-r--r-- | src/libsync/propagateremotemove.cpp | 12 |
4 files changed, 49 insertions, 10 deletions
diff --git a/src/libsync/discovery.cpp b/src/libsync/discovery.cpp index a437dc48d..4f2dc9610 100644 --- a/src/libsync/discovery.cpp +++ b/src/libsync/discovery.cpp @@ -914,7 +914,10 @@ void ProcessDirectoryJob::processFileAnalyzeLocalInfo( } else if (noServerEntry) { // Not locally, not on the server. The entry is stale! qCInfo(lcDisco) << "Stale DB entry"; - _discoveryData->_statedb->deleteFileRecord(path._original, true); + if (!_discoveryData->_statedb->deleteFileRecord(path._original, true)) { + _discoveryData->fatalError(tr("Error while deleting file record %1 from the database").arg(path._original)); + qCWarning(lcDisco) << "Failed to delete a file record from the local DB" << path._original; + } return; } else if (dbEntry._type == ItemTypeVirtualFile && isVfsWithSuffix()) { // If the virtual file is removed, recreate it. @@ -1270,7 +1273,9 @@ void ProcessDirectoryJob::processFileAnalyzeLocalInfo( if (wasDeletedOnClient.first) { // More complicated. The REMOVE is canceled. Restore will happen next sync. qCInfo(lcDisco) << "Undid remove instruction on source" << originalPath; - _discoveryData->_statedb->deleteFileRecord(originalPath, true); + if (!_discoveryData->_statedb->deleteFileRecord(originalPath, true)) { + qCWarning(lcDisco) << "Failed to delete a file record from the local DB" << originalPath; + } _discoveryData->_statedb->schedulePathForRemoteDiscovery(originalPath); _discoveryData->_anotherSyncNeeded = true; } else { @@ -1423,7 +1428,10 @@ void ProcessDirectoryJob::processFileConflict(const SyncFileItemPtr &item, Proce rec._fileSize = serverEntry.size; rec._remotePerm = serverEntry.remotePerm; rec._checksumHeader = serverEntry.checksumHeader; - _discoveryData->_statedb->setFileRecord(rec); + const auto result = _discoveryData->_statedb->setFileRecord(rec); + if (!result) { + qCWarning(lcDisco) << "Error when setting the file record to the database" << result.error(); + } } return; } diff --git a/src/libsync/owncloudpropagator.cpp b/src/libsync/owncloudpropagator.cpp index 0591483cf..9ed5662d3 100644 --- a/src/libsync/owncloudpropagator.cpp +++ b/src/libsync/owncloudpropagator.cpp @@ -319,7 +319,11 @@ bool PropagateItemJob::hasEncryptedAncestor() const auto pathComponents = parentPath.split('/'); while (!pathComponents.isEmpty()) { SyncJournalFileRecord rec; - propagator()->_journal->getFileRecord(pathComponents.join('/'), &rec); + const auto pathCompontentsJointed = pathComponents.join('/'); + if (!propagator()->_journal->getFileRecord(pathCompontentsJointed, &rec)) { + qCWarning(lcPropagator) << "could not get file from local DB" << pathCompontentsJointed; + } + if (rec.isValid() && rec._isE2eEncrypted) { return true; } @@ -1194,7 +1198,11 @@ void PropagateDirectory::slotSubJobsFinished(SyncFileItem::Status status) // that may still exist below the old path. if (_item->_instruction == CSYNC_INSTRUCTION_RENAME && _item->_originalFile != _item->_renameTarget) { - propagator()->_journal->deleteFileRecord(_item->_originalFile, true); + + if (!propagator()->_journal->deleteFileRecord(_item->_originalFile, true)) { + qCWarning(lcDirectory) << "could not delete file from local DB" << _item->_originalFile; + return; + } } if (_item->_instruction == CSYNC_INSTRUCTION_NEW && _item->_direction == SyncFileItem::Down) { diff --git a/src/libsync/propagatedownload.cpp b/src/libsync/propagatedownload.cpp index 57e5572de..90564deac 100644 --- a/src/libsync/propagatedownload.cpp +++ b/src/libsync/propagatedownload.cpp @@ -459,7 +459,11 @@ void PropagateDownloadFile::start() const auto parentPath = slashPosition >= 0 ? path.left(slashPosition) : QString(); SyncJournalFileRecord parentRec; - propagator()->_journal->getFileRecord(parentPath, &parentRec); + if (!propagator()->_journal->getFileRecord(parentPath, &parentRec)) { + qCWarning(lcPropagateDownload) << "could not get file from local DB" << parentPath; + done(SyncFileItem::NormalError, tr("could not get file %1 from local DB").arg(parentPath)); + return; + } const auto account = propagator()->account(); if (!account->capabilities().clientSideEncryptionAvailable() || @@ -502,7 +506,13 @@ void PropagateDownloadFile::startAfterIsEncryptedIsChecked() done(SyncFileItem::NormalError, r.error()); return; } - propagator()->_journal->deleteFileRecord(_item->_originalFile); + + if (!propagator()->_journal->deleteFileRecord(_item->_originalFile)) { + qCWarning(lcPropagateDownload) << "could not delete file from local DB" << _item->_originalFile; + done(SyncFileItem::NormalError, tr("could not delete file %1 from local DB").arg(_item->_originalFile)); + return; + } + updateMetadata(false); if (!_item->_remotePerm.isNull() && !_item->_remotePerm.hasPermission(RemotePermissions::CanWrite)) { @@ -1236,7 +1246,12 @@ void PropagateDownloadFile::downloadFinished() auto fn = propagator()->fullLocalPath(virtualFile); qCDebug(lcPropagateDownload) << "Download of previous virtual file finished" << fn; QFile::remove(fn); - propagator()->_journal->deleteFileRecord(virtualFile); + + if (!propagator()->_journal->deleteFileRecord(virtualFile)) { + qCWarning(lcPropagateDownload) << "could not delete file from local DB" << virtualFile; + done(SyncFileItem::NormalError, tr("could not delete file %1 from local DB").arg(virtualFile)); + return; + } // Move the pin state to the new location auto pin = propagator()->_journal->internalPinStates().rawForPath(virtualFile.toUtf8()); diff --git a/src/libsync/propagateremotemove.cpp b/src/libsync/propagateremotemove.cpp index a101feb12..dd90c966f 100644 --- a/src/libsync/propagateremotemove.cpp +++ b/src/libsync/propagateremotemove.cpp @@ -245,7 +245,11 @@ void PropagateRemoteMove::finalize() // The db is only queried to transfer the content checksum from the old // to the new record. It is not a problem to skip it here. SyncJournalFileRecord oldRecord; - propagator()->_journal->getFileRecord(_item->_originalFile, &oldRecord); + if (!propagator()->_journal->getFileRecord(_item->_originalFile, &oldRecord)) { + qCWarning(lcPropagateRemoteMove) << "could not get file from local DB" << _item->_originalFile; + done(SyncFileItem::NormalError, tr("could not get file %1 from local DB").arg(_item->_originalFile)); + return; + } auto &vfs = propagator()->syncOptions()._vfs; auto pinState = vfs->pinState(_item->_originalFile); @@ -253,7 +257,11 @@ void PropagateRemoteMove::finalize() if (QFileInfo::exists(targetFile)) { // Delete old db data. - propagator()->_journal->deleteFileRecord(_item->_originalFile); + if (!propagator()->_journal->deleteFileRecord(_item->_originalFile)) { + qCWarning(lcPropagateRemoteMove) << "could not delete file from local DB" << _item->_originalFile; + done(SyncFileItem::NormalError, tr("could not delete file %1 from local DB").arg(_item->_originalFile)); + return; + } if (!vfs->setPinState(_item->_originalFile, PinState::Inherited)) { qCWarning(lcPropagateRemoteMove) << "Could not set pin state of" << _item->_originalFile << "to inherited"; } |