[Pkg-owncloud-commits] [owncloud-client] 183/484: Checksum: Don't lose it on metadata update #3735
Sandro Knauß
hefee-guest at moszumanska.debian.org
Wed Dec 16 00:37:41 UTC 2015
This is an automated email from the git hooks/post-receive script.
hefee-guest pushed a commit to branch master
in repository owncloud-client.
commit 496b1e907df2ae63f3c01570c12b0bdaaa9bbbe6
Author: Christian Kamm <mail at ckamm.de>
Date: Wed Oct 28 14:42:44 2015 +0100
Checksum: Don't lose it on metadata update #3735
Also improve tests.
---
src/libsync/propagateupload.cpp | 2 +-
src/libsync/syncengine.cpp | 2 +-
src/libsync/syncjournaldb.cpp | 66 +++++++++++++++++++++++++++++++++++++----
src/libsync/syncjournaldb.h | 8 +++--
test/testsyncjournaldb.h | 20 +++++++++++++
5 files changed, 88 insertions(+), 10 deletions(-)
diff --git a/src/libsync/propagateupload.cpp b/src/libsync/propagateupload.cpp
index eb509a2..b34ea21 100644
--- a/src/libsync/propagateupload.cpp
+++ b/src/libsync/propagateupload.cpp
@@ -246,7 +246,7 @@ void PropagateUploadFileQNAM::slotStartUpload(const QByteArray& checksumType, co
|| checksum != _item->_transmissionChecksum) {
_item->_transmissionChecksum = checksum;
_item->_transmissionChecksumType = checksumType;
- _propagator->_journal->updateFileRecordChecksumHeader(
+ _propagator->_journal->updateFileRecordChecksum(
_item->_file, checksum, checksumType);
}
diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp
index 7b8f3e1..6e5b3ed 100644
--- a/src/libsync/syncengine.cpp
+++ b/src/libsync/syncengine.cpp
@@ -471,7 +471,7 @@ int SyncEngine::treewalkFile( TREE_WALK_FILE *file, bool remote )
// the file system in the DB, this is to avoid spurious upload on the next sync
item->_modtime = file->other.modtime;
- _journal->setFileRecord(SyncJournalFileRecord(*item, _localPath + item->_file));
+ _journal->updateFileRecordMetadata(SyncJournalFileRecord(*item, _localPath + item->_file));
item->_should_update_metadata = false;
}
if (item->_isDirectory && file->should_update_metadata) {
diff --git a/src/libsync/syncjournaldb.cpp b/src/libsync/syncjournaldb.cpp
index 67e2365..358f0f3 100644
--- a/src/libsync/syncjournaldb.cpp
+++ b/src/libsync/syncjournaldb.cpp
@@ -369,7 +369,17 @@ bool SyncJournalDb::checkConnect()
"VALUES (?1 , ?2, ?3 , ?4 , ?5 , ?6 , ?7, ?8 , ?9 , ?10, ?11, ?12, ?13, ?14, ?15, ?16);" );
_setFileRecordChecksumQuery.reset(new SqlQuery(_db) );
- _setFileRecordChecksumQuery->prepare("UPDATE metadata SET transmissionChecksum = ?2, transmissionChecksumTypeId = ?3 WHERE phash == ?1;");
+ _setFileRecordChecksumQuery->prepare(
+ "UPDATE metadata"
+ " SET transmissionChecksum = ?2, transmissionChecksumTypeId = ?3"
+ " WHERE phash == ?1;");
+
+ _setFileRecordMetadataQuery.reset(new SqlQuery(_db) );
+ _setFileRecordMetadataQuery->prepare(
+ "UPDATE metadata"
+ " SET inode=?2, mode=?3, modtime=?4, type=?5, md5=?6, fileid=?7,"
+ " remotePerm=?8, filesize=?9, ignoredChildrenRemote=?10"
+ " WHERE phash == ?1;");
_getDownloadInfoQuery.reset(new SqlQuery(_db) );
_getDownloadInfoQuery->prepare( "SELECT tmpfile, etag, errorcount FROM "
@@ -872,9 +882,9 @@ int SyncJournalDb::getFileRecordCount()
return 0;
}
-bool SyncJournalDb::updateFileRecordChecksumHeader(const QString& filename,
- const QByteArray& transmisisonChecksum,
- const QByteArray& transmissionChecksumType)
+bool SyncJournalDb::updateFileRecordChecksum(const QString& filename,
+ const QByteArray& transmisisonChecksum,
+ const QByteArray& transmissionChecksumType)
{
QMutexLocker locker(&_mutex);
@@ -893,7 +903,7 @@ bool SyncJournalDb::updateFileRecordChecksumHeader(const QString& filename,
query->bindValue(3, checksumTypeId);
if( !query->exec() ) {
- qWarning() << "Error SQL statement setFileRecordChecksumHeaderQuery: "
+ qWarning() << "Error SQL statement setFileRecordChecksumQuery: "
<< query->lastQuery() << " :"
<< query->error();
return false;
@@ -906,6 +916,52 @@ bool SyncJournalDb::updateFileRecordChecksumHeader(const QString& filename,
return true;
}
+bool SyncJournalDb::updateFileRecordMetadata(const SyncJournalFileRecord& record)
+{
+ QMutexLocker locker(&_mutex);
+
+ qlonglong phash = getPHash(record._path);
+ QString etag( record._etag );
+ if( etag.isEmpty() ) etag = "";
+ QString fileId( record._fileId);
+ if( fileId.isEmpty() ) fileId = "";
+ QString remotePerm (record._remotePerm);
+ if (remotePerm.isEmpty()) remotePerm = QString(); // have NULL in DB (vs empty)
+
+ if( !checkConnect() ) {
+ qDebug() << "Failed to connect database.";
+ return false;
+ }
+
+ auto & query = _setFileRecordMetadataQuery;
+
+ query->reset();
+ query->bindValue(1, QString::number(phash));
+ query->bindValue(2, record._inode);
+ query->bindValue(3, record._mode);
+ query->bindValue(4, QString::number(Utility::qDateTimeToTime_t(record._modtime)));
+ query->bindValue(5, QString::number(record._type));
+ query->bindValue(6, etag);
+ query->bindValue(7, fileId);
+ query->bindValue(8, remotePerm);
+ query->bindValue(9, record._fileSize);
+ query->bindValue(10, record._serverHasIgnoredFiles ? 1 : 0);
+
+ if( !query->exec() ) {
+ qWarning() << "Error SQL statement setFileRecordMetadataQuery: "
+ << query->lastQuery() << " :"
+ << query->error();
+ return false;
+ }
+
+ qDebug() << query->lastQuery() << record._path << record._inode << record._mode << record._modtime
+ << record._type << etag << fileId << remotePerm << record._fileSize
+ << record._serverHasIgnoredFiles;
+
+ query->reset();
+ return true;
+}
+
static void toDownloadInfo(SqlQuery &query, SyncJournalDb::DownloadInfo * res)
{
bool ok = true;
diff --git a/src/libsync/syncjournaldb.h b/src/libsync/syncjournaldb.h
index 775c9f4..69c7a76 100644
--- a/src/libsync/syncjournaldb.h
+++ b/src/libsync/syncjournaldb.h
@@ -42,9 +42,10 @@ public:
bool setFileRecord( const SyncJournalFileRecord& record );
bool deleteFileRecord( const QString& filename, bool recursively = false );
int getFileRecordCount();
- bool updateFileRecordChecksumHeader(const QString& filename,
- const QByteArray& transmisisonChecksum,
- const QByteArray& transmissionChecksumType);
+ bool updateFileRecordChecksum(const QString& filename,
+ const QByteArray& transmisisonChecksum,
+ const QByteArray& transmissionChecksumType);
+ bool updateFileRecordMetadata(const SyncJournalFileRecord& record);
bool exists();
void walCheckpoint();
@@ -168,6 +169,7 @@ private:
QScopedPointer<SqlQuery> _getFileRecordQuery;
QScopedPointer<SqlQuery> _setFileRecordQuery;
QScopedPointer<SqlQuery> _setFileRecordChecksumQuery;
+ QScopedPointer<SqlQuery> _setFileRecordMetadataQuery;
QScopedPointer<SqlQuery> _getDownloadInfoQuery;
QScopedPointer<SqlQuery> _setDownloadInfoQuery;
QScopedPointer<SqlQuery> _deleteDownloadInfoQuery;
diff --git a/test/testsyncjournaldb.h b/test/testsyncjournaldb.h
index 618b655..47cd6b4 100644
--- a/test/testsyncjournaldb.h
+++ b/test/testsyncjournaldb.h
@@ -67,6 +67,26 @@ private slots:
SyncJournalFileRecord storedRecord = _db.getFileRecord("foo");
QVERIFY(storedRecord == record);
+ // Update checksum
+ record._transmissionChecksum = "newchecksum";
+ record._transmissionChecksumType = "Adler32";
+ _db.updateFileRecordChecksum("foo", record._transmissionChecksum, record._transmissionChecksumType);
+ storedRecord = _db.getFileRecord("foo");
+ QVERIFY(storedRecord == record);
+
+ // Update metadata
+ record._inode = 12345;
+ record._modtime = dropMsecs(QDateTime::currentDateTime().addDays(1));
+ record._type = 7;
+ record._etag = "789FFF";
+ record._fileId = "efg";
+ record._remotePerm = "777";
+ record._mode = 12;
+ record._fileSize = 289055;
+ _db.updateFileRecordMetadata(record);
+ storedRecord = _db.getFileRecord("foo");
+ QVERIFY(storedRecord == record);
+
QVERIFY(_db.deleteFileRecord("foo"));
record = _db.getFileRecord("foo");
QVERIFY(!record.isValid());
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud-client.git
More information about the Pkg-owncloud-commits
mailing list