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 Apr 23, 2018 by Michael Kozono
Assignee Loading
Time tracking Loading