Geo: Fix bug that allowed attachments on secondary to not match the files on the primary
Summary
I verified checksums for all uploads
in the file_registry
on GPRD, and found 2 mismatches:
[ gprd ] production> u = Upload.find(993033)
=> #<Upload id: 993033, size: 952071, path: "59b58c5af0ae046d0965a1d5cc54d2fe/image.png", checksum: "7ba6fd6c7c02b004783288e76123edc5cb1020286e641f5f58...", model_id: 4113393, model_type: "Project", uploader: "FileUploader", created_at: "2017-10-11 04:14:59", store: nil, mount_point: nil, secret: nil>
[ gprd ] production> Upload.hexdigest(u.absolute_path)
=> "b2e064e6d6aacfb8e238fd83b9495ec1789bb83229f5bcad38ffa46b7ef7c04a"
[ gprd ] production> Geo::FileRegistry.find_by(file_id: u.id, file_type: 'file')
=> #<Geo::FileRegistry id: 2731338, file_type: "file", file_id: 993033, bytes: 146893, sha256: nil, created_at: "2018-02-12 14:41:24", success: true, retry_count: nil, retry_at: nil, missing_on_primary: false>
[ gprd ] production> File.ctime(u.absolute_path)
=> 2018-03-16 06:54:28 +0000
[ gprd ] production> File.mtime(u.absolute_path)
=> 2018-02-12 14:41:24 +0000
[ gprd ] production> File.atime(u.absolute_path)
=> 2018-04-23 15:40:55 +0000
[ gprd ] production> u = Upload.find(1615867)
=> #<Upload id: 1615867, size: 794842, path: "5dbf153cb638ec416fe93d20cc679546/Screen_Shot_2017-...", checksum: "670e4f499b46a8064d13a3dca95fd439f10a4cbdc572322c34...", model_id: 1862613, model_type: "Project", uploader: "FileUploader", created_at: "2017-12-20 17:31:26", store: nil, mount_point: nil, secret: nil>
[ gprd ] production> Upload.hexdigest(u.absolute_path)
=> "3c29860e65313ae349aae9a0a6f71e6f0aae8bac4f0131be0dace843b1309fb9"
[ gprd ] production> Geo::FileRegistry.find_by(file_id: u.id, file_type: 'file')
=> #<Geo::FileRegistry id: 3630653, file_type: "file", file_id: 1615867, bytes: 921274, sha256: nil, created_at: "2018-02-13 11:17:08", success: true, retry_count: nil, retry_at: nil, missing_on_primary: false>
[ gprd ] production> File.ctime(u.absolute_path)
=> 2018-03-16 01:47:30 +0000
[ gprd ] production> File.mtime(u.absolute_path)
=> 2018-02-13 11:17:08 +0000
[ gprd ] production> File.atime(u.absolute_path)
=> 2018-04-23 15:41:15 +0000
These checksums match the files on the primary, so a resync would resolve the mismatch on the secondary.
On the primary:
*** PRODUCTION *** production> u = Upload.find(993033)
=> #<Upload id: 993033, size: 952071, path: "59b58c5af0ae046d0965a1d5cc54d2fe/image.png", checksum: "7ba6fd6c7c02b004783288e76123edc5cb1020286e641f5f58...", model_id: 4113393, model_type: "Project", uploader: "FileUploader", created_at: "2017-10-11 04:14:59", store: nil, mount_point: nil, secret: nil>
*** PRODUCTION *** production> Upload.hexdigest(u.absolute_path)
=> "7ba6fd6c7c02b004783288e76123edc5cb1020286e641f5f58a18ddeff537d73"
*** PRODUCTION *** production> File.ctime(u.absolute_path)
=> 2017-10-11 04:14:59 +0000
*** PRODUCTION *** production> File.mtime(u.absolute_path)
=> 2017-10-11 04:14:59 +0000
*** PRODUCTION *** production> File.atime(u.absolute_path)
=> 2017-10-11 04:14:59 +0000
*** PRODUCTION *** production> u = Upload.find(1615867)
=> #<Upload id: 1615867, size: 794842, path: "5dbf153cb638ec416fe93d20cc679546/Screen_Shot_2017-...", checksum: "670e4f499b46a8064d13a3dca95fd439f10a4cbdc572322c34...", model_id: 1862613, model_type: "Project", uploader: "FileUploader", created_at: "2017-12-20 17:31:26", store: nil, mount_point: nil, secret: nil>
*** PRODUCTION *** production> Upload.hexdigest(u.absolute_path)
=> "670e4f499b46a8064d13a3dca95fd439f10a4cbdc572322c3438b148ec6bef8d"
*** PRODUCTION *** production> File.ctime(u.absolute_path)
=> 2017-02-22 21:10:15 +0000
*** PRODUCTION *** production> File.mtime(u.absolute_path)
=> 2017-02-22 09:38:43 +0000
*** PRODUCTION *** production> File.atime(u.absolute_path)
=> 2017-02-22 21:10:15 +0000
But before attempting to resync them, we should try to fix the root cause.
Steps to reproduce
Don't know yet.
Possible fixes
Edited by Michael Kozono