From: Matthieu Gallien Date: Fri, 10 Dec 2021 09:39:33 +0000 (+0100) Subject: do not get stuck forever in sync in case of errors X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~12^2~17^2~249^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=8ead03501647e01236490d8c73cb1a92fd72676c;p=nextcloud-desktop.git do not get stuck forever in sync in case of errors when a local file has invalid date and we try to upload it, properly handle the error such that we are not stuck forever in sync state Signed-off-by: Matthieu Gallien --- diff --git a/src/libsync/bulkpropagatorjob.cpp b/src/libsync/bulkpropagatorjob.cpp index 9650bfa18..b659b293d 100644 --- a/src/libsync/bulkpropagatorjob.cpp +++ b/src/libsync/bulkpropagatorjob.cpp @@ -276,10 +276,12 @@ void BulkPropagatorJob::slotStartUpload(SyncFileItemPtr item, item->_modtime = FileSystem::getModTime(originalFilePath); if (item->_modtime <= 0) { - return slotOnErrorStartFolderUnlock(item, SyncFileItem::SoftError, tr("Local file has invalid modified time. Do not upload to the server.")); + _pendingChecksumFiles.remove(item->_file); + return slotOnErrorStartFolderUnlock(item, SyncFileItem::NormalError, tr("File %1 has invalid modified time. Do not upload to the server.").arg(QDir::toNativeSeparators(item->_file))); } if (prevModtime != item->_modtime) { propagator()->_anotherSyncNeeded = true; + _pendingChecksumFiles.remove(item->_file); qDebug() << "trigger another sync after checking modified time of item" << item->_file << "prevModtime" << prevModtime << "Curr" << item->_modtime; return slotOnErrorStartFolderUnlock(item, SyncFileItem::SoftError, tr("Local file changed during syncing. It will be resumed.")); } @@ -292,6 +294,7 @@ void BulkPropagatorJob::slotStartUpload(SyncFileItemPtr item, // or not yet fully copied to the destination. if (fileIsStillChanging(*item)) { propagator()->_anotherSyncNeeded = true; + _pendingChecksumFiles.remove(item->_file); return slotOnErrorStartFolderUnlock(item, SyncFileItem::SoftError, tr("Local file changed during sync.")); } diff --git a/src/libsync/propagateupload.cpp b/src/libsync/propagateupload.cpp index c18fe7069..b655cfdfb 100644 --- a/src/libsync/propagateupload.cpp +++ b/src/libsync/propagateupload.cpp @@ -316,9 +316,9 @@ void PropagateUploadFileCommon::slotComputeContentChecksum() // and not the _fileToUpload because we are checking the original file, not there // probably temporary one. _item->_modtime = FileSystem::getModTime(filePath); - Q_ASSERT(_item->_modtime > 0); if (_item->_modtime <= 0) { - qCWarning(lcPropagateUpload()) << "invalid modified time" << _item->_file << _item->_modtime; + slotOnErrorStartFolderUnlock(SyncFileItem::NormalError, tr("File %1 has invalid modified time. Do not upload to the server.").arg(QDir::toNativeSeparators(_item->_file))); + return; } const QByteArray checksumType = propagator()->account()->capabilities().preferredUploadChecksumType(); @@ -392,8 +392,8 @@ void PropagateUploadFileCommon::slotStartUpload(const QByteArray &transmissionCh return slotOnErrorStartFolderUnlock(SyncFileItem::SoftError, tr("File Removed (start upload) %1").arg(fullFilePath)); } if (_item->_modtime <= 0) { - return slotOnErrorStartFolderUnlock( - SyncFileItem::SoftError, tr("Local file has invalid modified time. Do not upload to the server.")); + slotOnErrorStartFolderUnlock(SyncFileItem::NormalError, tr("File %1 has invalid modified time. Do not upload to the server.").arg(QDir::toNativeSeparators(_item->_file))); + return; } Q_ASSERT(_item->_modtime > 0); if (_item->_modtime <= 0) { @@ -405,8 +405,8 @@ void PropagateUploadFileCommon::slotStartUpload(const QByteArray &transmissionCh _item->_modtime = FileSystem::getModTime(originalFilePath); if (_item->_modtime <= 0) { - return slotOnErrorStartFolderUnlock( - SyncFileItem::SoftError, tr("Local file has invalid modified time. Do not upload to the server.")); + slotOnErrorStartFolderUnlock(SyncFileItem::NormalError, tr("File %1 has invalid modified time. Do not upload to the server.").arg(QDir::toNativeSeparators(_item->_file))); + return; } Q_ASSERT(_item->_modtime > 0); if (_item->_modtime <= 0) {