Merge pull request #2201 from nextcloud/disable_parallelism_for_e2e_remote_mkdir_jobs

Disable parallelism for e2e remote mkdir jobs
This commit is contained in:
Kevin Ottens 2020-07-15 17:24:11 +02:00 committed by GitHub
commit 15f9eeeb08
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 45 additions and 6 deletions

View file

@ -28,6 +28,46 @@ namespace OCC {
Q_LOGGING_CATEGORY(lcPropagateRemoteMkdir, "nextcloud.sync.propagator.remotemkdir", QtInfoMsg)
PropagateRemoteMkdir::PropagateRemoteMkdir(OwncloudPropagator *propagator, const SyncFileItemPtr &item)
: PropagateItemJob(propagator, item)
, _deleteExisting(false)
, _uploadEncryptedHelper(nullptr)
, _parallelism(FullParallelism)
{
const auto rootPath = [=]() {
const auto result = propagator->_remoteFolder;
if (result.startsWith('/')) {
return result.mid(1);
} else {
return result;
}
}();
const auto path = _item->_file;
const auto slashPosition = path.lastIndexOf('/');
const auto parentPath = slashPosition >= 0 ? path.left(slashPosition) : QString();
SyncJournalFileRecord parentRec;
bool ok = propagator->_journal->getFileRecord(parentPath, &parentRec);
if (!ok) {
done(SyncFileItem::NormalError);
return;
}
const auto remoteParentPath = parentRec._e2eMangledName.isEmpty() ? parentPath : parentRec._e2eMangledName;
const auto absoluteRemoteParentPath = remoteParentPath.isEmpty() ? rootPath : rootPath + remoteParentPath + '/';
const auto account = propagator->account();
if (account->capabilities().clientSideEncryptionAvailable() &&
account->e2e()->isFolderEncrypted(absoluteRemoteParentPath)) {
_parallelism = WaitForFinished;
}
}
PropagatorJob::JobParallelism PropagateRemoteMkdir::parallelism()
{
return _parallelism;
}
void PropagateRemoteMkdir::start()
{
if (propagator()->_abortRequested.fetchAndAddRelaxed(0))

View file

@ -30,14 +30,13 @@ class PropagateRemoteMkdir : public PropagateItemJob
QPointer<AbstractNetworkJob> _job;
bool _deleteExisting;
PropagateUploadEncrypted *_uploadEncryptedHelper;
JobParallelism _parallelism;
friend class PropagateDirectory; // So it can access the _item;
public:
PropagateRemoteMkdir(OwncloudPropagator *propagator, const SyncFileItemPtr &item)
: PropagateItemJob(propagator, item)
, _deleteExisting(false)
, _uploadEncryptedHelper(nullptr)
{
}
PropagateRemoteMkdir(OwncloudPropagator *propagator, const SyncFileItemPtr &item);
JobParallelism parallelism() override;
void start() override;
void abort(PropagatorJob::AbortType abortType) override;