)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6f97b525dd960edda38d0c9a97c6bee650ce3097","unresolved":true,"context_lines":[{"line_number":16,"context_line":"tolerate an existing tombstone with different inode in the next part"},{"line_number":17,"context_line":"power location. The relinker will however first confirm that the"},{"line_number":18,"context_line":"tombstone has the same X-Timestamp in metadata as the tombstone in the"},{"line_number":19,"context_line":"current part power location."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Since [1] the relinker had special case handling for EEXIST errors"},{"line_number":22,"context_line":"caused by a different inode tombstone already existing in the next"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"4ae88bbb_ef7ebd98","line":19,"updated":"2021-07-01 13:09:35.000000000","message":"the metadata check has been removed I believe?","commit_id":"9a84a9a99db315095dcf73da677a3fd170298014"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5c6ba684221ee532aa34914be7b1b1cfe48503d6","unresolved":true,"context_lines":[{"line_number":16,"context_line":"tolerate an existing tombstone with different inode in the next part"},{"line_number":17,"context_line":"power location. The relinker will however first confirm that the"},{"line_number":18,"context_line":"tombstone has the same X-Timestamp in metadata as the tombstone in the"},{"line_number":19,"context_line":"current part power location."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Since [1] the relinker had special case handling for EEXIST errors"},{"line_number":22,"context_line":"caused by a different inode tombstone already existing in the next"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"643a5edf_9e86a21c","line":19,"in_reply_to":"4ae88bbb_ef7ebd98","updated":"2021-07-01 14:18:49.000000000","message":"argh, will fix","commit_id":"9a84a9a99db315095dcf73da677a3fd170298014"}],"etc/object-server.conf-sample":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"60755b5eac4b82fe7bebf12ff98c28448cc383d1","unresolved":true,"context_lines":[{"line_number":670,"context_line":"# useful if previous partition power increases have failed to cleanup"},{"line_number":671,"context_line":"# tombstones from their old locations, causing duplicate tombstones with"},{"line_number":672,"context_line":"# different inodes to be relinked to the next partition power location."},{"line_number":673,"context_line":"# link_check_limit \u003d 2"},{"line_number":674,"context_line":"#"},{"line_number":675,"context_line":"# stats_interval \u003d 300.0"},{"line_number":676,"context_line":"# recon_cache_path \u003d /var/cache/swift"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"b4671546_df215a96","side":"PARENT","line":673,"updated":"2021-07-01 22:27:48.000000000","message":"Heh, I just realized -- we haven\u0027t had an upstream release since introducing this option. I think we can fast-track that removal ;-)","commit_id":"8e1209d2b1b41193ddb3f616036d3a1475ed1210"}],"swift/cli/relinker.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d05c2ab02d2893be62f7d8b2a454298d7470c841","unresolved":true,"context_lines":[{"line_number":399,"context_line":"            try:"},{"line_number":400,"context_line":"                with open(path, \u0027rb\u0027) as fd:"},{"line_number":401,"context_line":"                    timestamps.append("},{"line_number":402,"context_line":"                        Timestamp(read_metadata(fd)[\u0027X-Timestamp\u0027]))"},{"line_number":403,"context_line":"            except Exception as exc:"},{"line_number":404,"context_line":"                self.logger.warning("},{"line_number":405,"context_line":"                    \"Error relinking%s: failed to read metadata: %s: %s\","}],"source_content_type":"text/x-python","patch_set":1,"id":"31c30f4c_86fa3837","line":402,"updated":"2021-06-30 13:35:04.000000000","message":"I had assumed filename parsing would be sufficient.","commit_id":"c03ed5c550b7db79671606a8455af0d7260a78db"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f371b11739d2474735ec923158157a8adfa0aa87","unresolved":true,"context_lines":[{"line_number":399,"context_line":"            try:"},{"line_number":400,"context_line":"                with open(path, \u0027rb\u0027) as fd:"},{"line_number":401,"context_line":"                    timestamps.append("},{"line_number":402,"context_line":"                        Timestamp(read_metadata(fd)[\u0027X-Timestamp\u0027]))"},{"line_number":403,"context_line":"            except Exception as exc:"},{"line_number":404,"context_line":"                self.logger.warning("},{"line_number":405,"context_line":"                    \"Error relinking%s: failed to read metadata: %s: %s\","}],"source_content_type":"text/x-python","patch_set":1,"id":"7d25a161_ef6fdacd","line":402,"in_reply_to":"31c30f4c_86fa3837","updated":"2021-06-30 20:30:35.000000000","message":"Given how we construct old_file and new_file at lines 494-495, timestamps parsed from file names should *always* match...","commit_id":"c03ed5c550b7db79671606a8455af0d7260a78db"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5c6ba684221ee532aa34914be7b1b1cfe48503d6","unresolved":false,"context_lines":[{"line_number":399,"context_line":"            try:"},{"line_number":400,"context_line":"                with open(path, \u0027rb\u0027) as fd:"},{"line_number":401,"context_line":"                    timestamps.append("},{"line_number":402,"context_line":"                        Timestamp(read_metadata(fd)[\u0027X-Timestamp\u0027]))"},{"line_number":403,"context_line":"            except Exception as exc:"},{"line_number":404,"context_line":"                self.logger.warning("},{"line_number":405,"context_line":"                    \"Error relinking%s: failed to read metadata: %s: %s\","}],"source_content_type":"text/x-python","patch_set":1,"id":"18a58f3a_c7b2ca72","line":402,"in_reply_to":"7d25a161_ef6fdacd","updated":"2021-07-01 14:18:49.000000000","message":"Done","commit_id":"c03ed5c550b7db79671606a8455af0d7260a78db"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d05c2ab02d2893be62f7d8b2a454298d7470c841","unresolved":true,"context_lines":[{"line_number":507,"context_line":"                    # special case for duplicate tombstones in older partition"},{"line_number":508,"context_line":"                    # power locations"},{"line_number":509,"context_line":"                    # (https://bugs.launchpad.net/swift/+bug/1921718)"},{"line_number":510,"context_line":"                    existing_link, link_created \u003d self.check_existing(new_file)"},{"line_number":511,"context_line":"                    if existing_link:"},{"line_number":512,"context_line":"                        ok \u003d True"},{"line_number":513,"context_line":"                        self.logger.debug("}],"source_content_type":"text/x-python","patch_set":1,"id":"3080bd40_35b36f13","line":510,"updated":"2021-06-30 13:35:04.000000000","message":"when i was looking at this it seemed like it did a number of stat calls and trolling through old part power partiitons... if the outcome is the same it seems like checking the filenames match first would be \"cheaper\"","commit_id":"c03ed5c550b7db79671606a8455af0d7260a78db"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a9d2713cbb659363054a4ab000a342497ad62141","unresolved":true,"context_lines":[{"line_number":507,"context_line":"                    # special case for duplicate tombstones in older partition"},{"line_number":508,"context_line":"                    # power locations"},{"line_number":509,"context_line":"                    # (https://bugs.launchpad.net/swift/+bug/1921718)"},{"line_number":510,"context_line":"                    existing_link, link_created \u003d self.check_existing(new_file)"},{"line_number":511,"context_line":"                    if existing_link:"},{"line_number":512,"context_line":"                        ok \u003d True"},{"line_number":513,"context_line":"                        self.logger.debug("}],"source_content_type":"text/x-python","patch_set":1,"id":"35f9e44d_3ee3485b","line":510,"in_reply_to":"3080bd40_35b36f13","updated":"2021-06-30 14:17:20.000000000","message":"I left this first because of the potential cleanup of unwanted files that follows, but otherwise I would have the simpler check first\n\nIt may be that the cleanup below (line 535) is no longer necessary in light of the increased tolerance - I need to think that through some more.\n\nTBH I consider this first patchset tactical in case some hotfix is needed, but I feel the whole except clause could be better written - the increased indentation is annoying for example","commit_id":"c03ed5c550b7db79671606a8455af0d7260a78db"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5c6ba684221ee532aa34914be7b1b1cfe48503d6","unresolved":false,"context_lines":[{"line_number":507,"context_line":"                    # special case for duplicate tombstones in older partition"},{"line_number":508,"context_line":"                    # power locations"},{"line_number":509,"context_line":"                    # (https://bugs.launchpad.net/swift/+bug/1921718)"},{"line_number":510,"context_line":"                    existing_link, link_created \u003d self.check_existing(new_file)"},{"line_number":511,"context_line":"                    if existing_link:"},{"line_number":512,"context_line":"                        ok \u003d True"},{"line_number":513,"context_line":"                        self.logger.debug("}],"source_content_type":"text/x-python","patch_set":1,"id":"d7d8e71d_5128e56c","line":510,"in_reply_to":"35f9e44d_3ee3485b","updated":"2021-07-01 14:18:49.000000000","message":"Done","commit_id":"c03ed5c550b7db79671606a8455af0d7260a78db"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f371b11739d2474735ec923158157a8adfa0aa87","unresolved":true,"context_lines":[{"line_number":537,"context_line":"                        ok \u003d True"},{"line_number":538,"context_line":"                        self.logger.debug("},{"line_number":539,"context_line":"                            \"Relinking%s: tolerating different inodes with \""},{"line_number":540,"context_line":"                            \"same timestamp: %s to %s\","},{"line_number":541,"context_line":"                            \u0027 (cleanup)\u0027 if self.do_cleanup else \u0027\u0027,"},{"line_number":542,"context_line":"                            old_file, new_file)"},{"line_number":543,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3e9b7d48_bfc82913","line":540,"updated":"2021-06-30 20:30:35.000000000","message":"Might be worth having this message call out that we\u0027re only willing to ignore this because they\u0027re tombstones.","commit_id":"c03ed5c550b7db79671606a8455af0d7260a78db"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5c6ba684221ee532aa34914be7b1b1cfe48503d6","unresolved":false,"context_lines":[{"line_number":537,"context_line":"                        ok \u003d True"},{"line_number":538,"context_line":"                        self.logger.debug("},{"line_number":539,"context_line":"                            \"Relinking%s: tolerating different inodes with \""},{"line_number":540,"context_line":"                            \"same timestamp: %s to %s\","},{"line_number":541,"context_line":"                            \u0027 (cleanup)\u0027 if self.do_cleanup else \u0027\u0027,"},{"line_number":542,"context_line":"                            old_file, new_file)"},{"line_number":543,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9b775a1d_8071b8d4","line":540,"in_reply_to":"3e9b7d48_bfc82913","updated":"2021-07-01 14:18:49.000000000","message":"Done","commit_id":"c03ed5c550b7db79671606a8455af0d7260a78db"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6f97b525dd960edda38d0c9a97c6bee650ce3097","unresolved":true,"context_lines":[{"line_number":466,"context_line":"                        \"Relinking%s: tolerating different inodes for \""},{"line_number":467,"context_line":"                        \"tombstone with same timestamp: %s to %s\","},{"line_number":468,"context_line":"                        \u0027 (cleanup)\u0027 if self.do_cleanup else \u0027\u0027,"},{"line_number":469,"context_line":"                        old_file, new_file)"},{"line_number":470,"context_line":"                else:"},{"line_number":471,"context_line":"                    self.logger.warning("},{"line_number":472,"context_line":"                        \"Error relinking%s: failed to relink %s to %s: %s\","}],"source_content_type":"text/x-python","patch_set":3,"id":"a52d2086_a9044b5e","line":469,"updated":"2021-07-01 13:09:35.000000000","message":"wow, this is so simpple - the referenced bugs is probably a great idea.","commit_id":"9a84a9a99db315095dcf73da677a3fd170298014"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6f97b525dd960edda38d0c9a97c6bee650ce3097","unresolved":true,"context_lines":[{"line_number":787,"context_line":"    # avoid errors after upgrade"},{"line_number":788,"context_line":"    parser.add_argument(\u0027--link-check-limit\u0027, type\u003dnon_negative_int,"},{"line_number":789,"context_line":"                        default\u003dNone, dest\u003d\u0027link_check_limit\u0027,"},{"line_number":790,"context_line":"                        help\u003dargparse.SUPPRESS)"},{"line_number":791,"context_line":""},{"line_number":792,"context_line":"    args \u003d parser.parse_args(args)"},{"line_number":793,"context_line":"    if args.conf_file:"}],"source_content_type":"text/x-python","patch_set":3,"id":"250eb9b0_c5895d4f","line":790,"updated":"2021-07-01 13:09:35.000000000","message":"awesome 👍","commit_id":"9a84a9a99db315095dcf73da677a3fd170298014"}],"test/unit/cli/test_relinker.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e357d60b7b5cdd617833db2ee0d3dca20e3c3639","unresolved":true,"context_lines":[{"line_number":575,"context_line":"                \u0027--skip-mount-check\u0027, \u0027--files-per-second\u0027, \u00272.2\u0027,"},{"line_number":576,"context_line":"                \u0027--policy\u0027, \u00271\u0027, \u0027--partition\u0027, \u0027123\u0027,"},{"line_number":577,"context_line":"                \u0027--partition\u0027, \u0027123\u0027, \u0027--partition\u0027, \u0027456\u0027,"},{"line_number":578,"context_line":"                \u0027--link-check-limit\u0027, \u00273\u0027,  # allowed but ignored"},{"line_number":579,"context_line":"                \u0027--workers\u0027, \u00272\u0027,"},{"line_number":580,"context_line":"                \u0027--stats-interval\u0027, \u0027222\u0027,"},{"line_number":581,"context_line":"            ])"}],"source_content_type":"text/x-python","patch_set":4,"id":"7b47e3e8_680165eb","line":578,"updated":"2021-07-01 20:06:28.000000000","message":"+1, should we make assertions about the warning getting logged?","commit_id":"5632b94d635bf5de24aebaf9781f59293ec7e837"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"48055c8caf5ec9b4c063ea120bc0fe5b82e5fb46","unresolved":false,"context_lines":[{"line_number":575,"context_line":"                \u0027--skip-mount-check\u0027, \u0027--files-per-second\u0027, \u00272.2\u0027,"},{"line_number":576,"context_line":"                \u0027--policy\u0027, \u00271\u0027, \u0027--partition\u0027, \u0027123\u0027,"},{"line_number":577,"context_line":"                \u0027--partition\u0027, \u0027123\u0027, \u0027--partition\u0027, \u0027456\u0027,"},{"line_number":578,"context_line":"                \u0027--link-check-limit\u0027, \u00273\u0027,  # allowed but ignored"},{"line_number":579,"context_line":"                \u0027--workers\u0027, \u00272\u0027,"},{"line_number":580,"context_line":"                \u0027--stats-interval\u0027, \u0027222\u0027,"},{"line_number":581,"context_line":"            ])"}],"source_content_type":"text/x-python","patch_set":4,"id":"752561ae_d61d1853","line":578,"in_reply_to":"7b47e3e8_680165eb","updated":"2021-07-02 11:14:37.000000000","message":"Done","commit_id":"5632b94d635bf5de24aebaf9781f59293ec7e837"}]}
