nextcloud-desktop/src/common
Olivier Goffart 64014dd374 Upload: Store the size in the UploadInfo, and compare it when resolving potential conflict
This is about the conflicts that happens when the file has been uploaded
correctly to the server, but the etag was not recieved because the connection
was closed before we got the reply.

We used to compare only the mtime when comparing the uploaded file and the
existing file.  However, to be perfectly correct, we also should check the
size.

This was found because TestChunkingNG::connectionDroppedBeforeEtagRecieved is
flaky. Example of faillure found in https://drone.owncloud.com/owncloud/client/481/5
while testing PR #6626

(very trimmed log:)

06-29 07:58:02:015 [ info sync.csync.csync ]:	## Starting local discovery ##
06-29 07:58:02:016 [ info sync.csync.updater ]:	Database entry found, compare: 1530259082 <-> 1530259051, etag:  <-> 1644a8c8750, inode: 1935629 <-> 1935629, size: 301 <-> 300, perms: 0 <-> ff, type: 0 <-> 0, checksum:  <-> SHA1:cc9adedebe27a6259efb8d6ed09f4f2eff559ad1, ignore: 0
06-29 07:58:02:016 [ info sync.csync.updater ]:	file: A/a0, instruction: INSTRUCTION_EVAL <<=
06-29 07:58:02:972 [ warning sync.networkjob ]:	QNetworkReply::NetworkError(OperationCanceledError) "Connection timed out" QVariant(Invalid)
.. next sync...
06-29 07:58:02:980 [ info sync.engine ]:	#### Discovery start ####################################################
06-29 07:58:02:981 [ info sync.csync.csync ]:	## Starting local discovery ##
06-29 07:58:02:983 [ info sync.csync.updater ]:	Database entry found, compare: 1530259082 <-> 1530259051, etag:  <-> 1644a8c8750, inode: 1935629 <-> 1935629, size: 302 <-> 300, perms: 0 <-> ff, type: 0 <-> 0, checksum:  <-> SHA1:cc9adedebe27a6259efb8d6ed09f4f2eff559ad1, ignore: 0
06-29 07:58:02:983 [ info sync.csync.updater ]:	file: A/a0, instruction: INSTRUCTION_EVAL <<=
06-29 07:58:02:985 [ info sync.csync.csync ]:	## Starting remote discovery ##
06-29 07:58:02:985 [ info sync.networkjob ]:	OCC::LsColJob created for "http://localhost/owncloud" + "" "OCC::DiscoverySingleDirectoryJob"
06-29 07:58:02:987 [ info sync.csync.updater ]:	Database entry found, compare: 1530259082 <-> 1530259051, etag: 1644a8c8b26 <-> 1644a8c8750, inode: 0 <-> 1935629, size: 301 <-> 300, perms: ff <-> ff, type: 0 <-> 0, checksum: SHA1:5adcdac9608ae0811247f07f4cf1ab0a2ef99154 <-> SHA1:cc9adedebe27a6259efb8d6ed09f4f2eff559ad1, ignore: 0
06-29 07:58:02:987 [ info sync.csync.updater ]:	file: A/a0, instruction: INSTRUCTION_EVAL <<=
06-29 07:58:02:989 [ info sync.csync.csync ]:	Update detection for remote replica took 0.004 seconds walking 13 files
06-29 07:58:02:990 [ info sync.engine ]:	#### Discovery end ####################################################  9 ms
06-29 07:58:02:990 [ info sync.database ]:	Updating file record for path: "A/a0" inode: 1935629 modtime: 1530259082 type: 0 etag: "1644a8c8b26" fileId: "16383ea4" remotePerm: "WDNVCKR" fileSize: 301 checksum: "SHA1:cc9adedebe27a6259efb8d6ed09f4f2eff559ad1"
06-29 07:58:02:990 [ info sync.csync.reconciler ]:	INSTRUCTION_UPDATE_METADATA    client file: A/a0
06-29 07:58:02:990 [ info sync.csync.csync ]:	Reconciliation for local replica took  0 seconds visiting  13  files.
06-29 07:58:02:990 [ info sync.csync.reconciler ]:	INSTRUCTION_UPDATE_METADATA    server dir:  A
06-29 07:58:02:990 [ info sync.csync.csync ]:	Reconciliation for remote replica took  0 seconds visiting  13  files.
06-29 07:58:02:990 [ info sync.engine ]:	#### Reconcile end ####################################################  9 ms
06-29 07:58:02:990 [ info sync.database ]:	Updating local metadata for: "A/a0" 1530259082 302 1935629
FAIL!  : TestChunkingNG::connectionDroppedBeforeEtagRecieved(small file) '!fakeFolder.syncOnce()' returned FALSE. ()
2018-07-04 17:26:56 +02:00
..
asserts.h Move SyncJournalDB to src/common 2017-09-18 14:00:52 +02:00
c_jhash.h GCC: Fix implicit-fallthrough warnings 2018-01-05 09:43:53 +01:00
checksums.cpp Checksum: Ignore unkown OC-Checksum header when downloading... 2017-11-20 10:51:15 +01:00
checksums.h Checksum: Ignore unkown OC-Checksum header when downloading... 2017-11-20 10:51:15 +01:00
common.cmake RemotePermissions: Store in a class rather than in a QByteArray to save memory 2017-09-22 09:29:08 +02:00
filesystembase.cpp Merge remote-tracking branch 'origin/2.4' 2018-02-16 10:17:19 +01:00
filesystembase.h Merge remote-tracking branch 'origin/2.4' 2018-02-16 10:17:19 +01:00
ownsql.cpp OwnSql: Fixup after feedback for #6388 2018-03-15 19:30:21 +01:00
ownsql.h Minor header fixup 2018-03-16 13:41:57 +01:00
README Move Utility to a new common static library 2017-09-05 17:25:19 +02:00
remotepermissions.cpp RemotePermissions: Store in a class rather than in a QByteArray to save memory 2017-09-22 09:29:08 +02:00
remotepermissions.h RemotePermissions: Store in a class rather than in a QByteArray to save memory 2017-09-22 09:29:08 +02:00
syncjournaldb.cpp Virtual Files: Allow to download a folder recursively from the socket API 2018-05-30 11:57:57 +02:00
syncjournaldb.h Upload: Store the size in the UploadInfo, and compare it when resolving potential conflict 2018-07-04 17:26:56 +02:00
syncjournalfilerecord.cpp Unify item type enum 2017-12-15 18:02:04 +01:00
syncjournalfilerecord.h Blacklist: remember the X-Request-ID 2018-05-15 18:11:01 +02:00
utility_mac.cpp utility_mac: Check for NULL from LSSharedFileListItemResolve #6123 2017-11-28 13:35:15 +01:00
utility_unix.cpp Make setLaunchOnStartup debug output more meaningful 2018-01-11 16:11:23 +01:00
utility_win.cpp Windows: Add sync folders to Explorer's navigation pane 2017-10-24 16:10:53 +02:00
utility.cpp Conflicts: Change tags to be more user friendly #6365 2018-04-03 14:03:03 +02:00
utility.h Conflicts: Add user name to conflict file name #6325 2018-02-20 10:10:34 +01:00

This folder contains code covered by the CLA being licensed as LGPL.
This allows it to be linked together with the rest of the LGPL code in csync.