Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/owncloud/client.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier Goffart <ogoffart@woboq.com>2018-11-06 12:30:33 +0300
committerOlivier Goffart <olivier@woboq.com>2018-11-15 09:26:44 +0300
commit682cc6f199d64f11f42d89fc8a60b2a15d3d7086 (patch)
treec7b0c170360ba238264c5c4056ed27fd1484f8f1
parentb557aab09de8c39a425ebf874e54929e9ad66b13 (diff)
Sync: optimize by removing setFileRecordMetadata
Inh most case we already have a record from before, so avoid doing a useless lookup in the database. In owncloudpropagator.cpp, directories do not have a checksum so no need to call a function that preserves it
-rw-r--r--src/common/syncjournaldb.cpp23
-rw-r--r--src/common/syncjournaldb.h3
-rw-r--r--src/libsync/discovery.cpp2
-rw-r--r--src/libsync/owncloudpropagator.cpp2
-rw-r--r--src/libsync/syncengine.cpp9
-rw-r--r--test/testsyncjournaldb.cpp2
6 files changed, 8 insertions, 33 deletions
diff --git a/src/common/syncjournaldb.cpp b/src/common/syncjournaldb.cpp
index 4c72b802e..5b8b7287f 100644
--- a/src/common/syncjournaldb.cpp
+++ b/src/common/syncjournaldb.cpp
@@ -1217,29 +1217,6 @@ bool SyncJournalDb::updateLocalMetadata(const QString &filename,
return _setFileRecordLocalMetadataQuery.exec();
}
-bool SyncJournalDb::setFileRecordMetadata(const SyncJournalFileRecord &record)
-{
- SyncJournalFileRecord existing;
- if (!getFileRecord(record._path, &existing))
- return false;
-
- // If there's no existing record, just insert the new one.
- if (!existing.isValid()) {
- return setFileRecord(record);
- }
-
- // Update the metadata on the existing record.
- existing._inode = record._inode;
- existing._modtime = record._modtime;
- existing._type = record._type;
- existing._etag = record._etag;
- existing._fileId = record._fileId;
- existing._remotePerm = record._remotePerm;
- existing._fileSize = record._fileSize;
- existing._serverHasIgnoredFiles = record._serverHasIgnoredFiles;
- return setFileRecord(existing);
-}
-
static void toDownloadInfo(SqlQuery &query, SyncJournalDb::DownloadInfo *res)
{
bool ok = true;
diff --git a/src/common/syncjournaldb.h b/src/common/syncjournaldb.h
index f6932092f..c17cefa4a 100644
--- a/src/common/syncjournaldb.h
+++ b/src/common/syncjournaldb.h
@@ -63,9 +63,6 @@ public:
bool listFilesInPath(const QByteArray &path, const std::function<void(const SyncJournalFileRecord&)> &rowCallback);
bool setFileRecord(const SyncJournalFileRecord &record);
- /// Like setFileRecord, but preserves checksums
- bool setFileRecordMetadata(const SyncJournalFileRecord &record);
-
bool deleteFileRecord(const QString &filename, bool recursively = false);
bool updateFileRecordChecksum(const QString &filename,
const QByteArray &contentChecksum,
diff --git a/src/libsync/discovery.cpp b/src/libsync/discovery.cpp
index cd63d81b5..a97ece0f2 100644
--- a/src/libsync/discovery.cpp
+++ b/src/libsync/discovery.cpp
@@ -876,7 +876,7 @@ void ProcessDirectoryJob::processFileConflict(const SyncFileItemPtr &item, Proce
rec._fileSize = serverEntry.size;
rec._remotePerm = serverEntry.remotePerm;
rec._checksumHeader = serverEntry.checksumHeader;
- _discoveryData->_statedb->setFileRecordMetadata(rec);
+ _discoveryData->_statedb->setFileRecord(rec);
}
return;
}
diff --git a/src/libsync/owncloudpropagator.cpp b/src/libsync/owncloudpropagator.cpp
index 609bf70fc..4cf35ffe7 100644
--- a/src/libsync/owncloudpropagator.cpp
+++ b/src/libsync/owncloudpropagator.cpp
@@ -976,7 +976,7 @@ void PropagateDirectory::slotSubJobsFinished(SyncFileItem::Status status)
}
}
SyncJournalFileRecord record = _item->toSyncJournalFileRecordWithInode(propagator()->_localDir + _item->_file);
- bool ok = propagator()->_journal->setFileRecordMetadata(record);
+ bool ok = propagator()->_journal->setFileRecord(record);
if (!ok) {
status = _item->_status = SyncFileItem::FatalError;
_item->_errorString = tr("Error writing metadata to the database");
diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp
index a52e381cb..3c66fc749 100644
--- a/src/libsync/syncengine.cpp
+++ b/src/libsync/syncengine.cpp
@@ -320,15 +320,16 @@ void OCC::SyncEngine::slotItemDiscovered(const OCC::SyncFileItemPtr &item)
const bool isReadOnly = !item->_remotePerm.isNull() && !item->_remotePerm.hasPermission(RemotePermissions::CanWrite);
FileSystem::setFileReadOnlyWeak(filePath, isReadOnly);
}
-
- _journal->setFileRecordMetadata(item->toSyncJournalFileRecordWithInode(filePath));
+ auto rec = item->toSyncJournalFileRecordWithInode(filePath);
+ if (rec._checksumHeader.isEmpty())
+ rec._checksumHeader = prev._checksumHeader;
+ rec._serverHasIgnoredFiles |= prev._serverHasIgnoredFiles;
+ _journal->setFileRecord(rec);
// This might have changed the shared flag, so we must notify SyncFileStatusTracker for example
emit itemCompleted(item);
} else {
- // The local tree is walked first and doesn't have all the info from the server.
// Update only outdated data from the disk.
- // FIXME! I think this is no longer the case so a setFileRecordMetadata should work
_journal->updateLocalMetadata(item->_file, item->_modtime, item->_size, item->_inode);
}
_hasNoneFiles = true;
diff --git a/test/testsyncjournaldb.cpp b/test/testsyncjournaldb.cpp
index 4748f64f7..79bd29fe9 100644
--- a/test/testsyncjournaldb.cpp
+++ b/test/testsyncjournaldb.cpp
@@ -81,7 +81,7 @@ private slots:
record._fileId = "efg";
record._remotePerm = RemotePermissions::fromDbValue("NV");
record._fileSize = 289055;
- _db.setFileRecordMetadata(record);
+ _db.setFileRecord(record);
QVERIFY(_db.getFileRecord(QByteArrayLiteral("foo"), &storedRecord));
QVERIFY(storedRecord == record);