)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"6c47d11818d8b19c0a7cae776de54d019f4dd946","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"30824d78_8ace8009","updated":"2022-08-17 16:55:30.000000000","message":"I think I like this plan -- it\u0027ll look even better if we do something similar in the auditor.\n\nNow I\u0027m wondering what happens in the reconstructor if there\u0027s a metadata-checksum-mismatch... I guess we raise DiskFileBadMetadataChecksum at some point, but I\u0027m not sure if/when that gets caught. See https://github.com/openstack/swift/blob/2.29.1/swift/obj/diskfile.py#L232-L239","commit_id":"5b853a24bb0a63e4c6f44069367d7dac983ff98f"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2197182200a72a4546e3516f234ce962460ff020","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"6ccdae40_1edcd591","updated":"2022-08-29 20:44:23.000000000","message":"I wonder if we could just merge this patch, and skip the parent...","commit_id":"912aaa085128064aa05bd780962302a2ff731d5d"}],"swift/obj/diskfile.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"6c47d11818d8b19c0a7cae776de54d019f4dd946","unresolved":true,"context_lines":[{"line_number":3362,"context_line":""},{"line_number":3363,"context_line":"    def validate_metadata(self):"},{"line_number":3364,"context_line":"        if self._datafile_metadata[\u0027X-Object-Sysmeta-Ec-Frag-Index\u0027] or \\"},{"line_number":3365,"context_line":"                self._datafile_metadata[\u0027X-Object-Sysmeta-Ec-Etag\u0027] is None:"},{"line_number":3366,"context_line":"            return False"},{"line_number":3367,"context_line":"        else:"},{"line_number":3368,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":2,"id":"460a4af8_2e3fb0af","line":3365,"updated":"2022-08-17 16:55:30.000000000","message":"Pretty sure this is equivalent to\n\n if self._datafile_metadata[\u0027X-Object-Sysmeta-Ec-Frag-Index\u0027]:\n     return False\n if self._datafile_metadata[\u0027X-Object-Sysmeta-Ec-Etag\u0027] is None:\n     return False\n return True\n\nwhich is going to want to quarantine all non-zero frag indexes. Also, these may raise KeyError -- I think we\u0027ll want something like\n\n if self._datafile_metadata.get(\u0027X-Object-Sysmeta-Ec-Frag-Index\u0027) is None:\n     return False\n if self._datafile_metadata.get(\u0027X-Object-Sysmeta-Ec-Etag\u0027) is None:\n     return False\n return True","commit_id":"2ff5e4b2544654fec38496e3b58ad7b5773a4763"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"853bdb77f3d04c6cfd5a977f59e844079df651dd","unresolved":false,"context_lines":[{"line_number":3362,"context_line":""},{"line_number":3363,"context_line":"    def validate_metadata(self):"},{"line_number":3364,"context_line":"        if self._datafile_metadata[\u0027X-Object-Sysmeta-Ec-Frag-Index\u0027] or \\"},{"line_number":3365,"context_line":"                self._datafile_metadata[\u0027X-Object-Sysmeta-Ec-Etag\u0027] is None:"},{"line_number":3366,"context_line":"            return False"},{"line_number":3367,"context_line":"        else:"},{"line_number":3368,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":2,"id":"24d37863_4cf00731","line":3365,"in_reply_to":"460a4af8_2e3fb0af","updated":"2022-09-07 17:32:19.000000000","message":"Ack","commit_id":"2ff5e4b2544654fec38496e3b58ad7b5773a4763"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"be30b79554a50a2ca527ba110186b94a92b7c861","unresolved":false,"context_lines":[{"line_number":3362,"context_line":""},{"line_number":3363,"context_line":"    def validate_metadata(self):"},{"line_number":3364,"context_line":"        if self._datafile_metadata[\u0027X-Object-Sysmeta-Ec-Frag-Index\u0027] or \\"},{"line_number":3365,"context_line":"                self._datafile_metadata[\u0027X-Object-Sysmeta-Ec-Etag\u0027] is None:"},{"line_number":3366,"context_line":"            return False"},{"line_number":3367,"context_line":"        else:"},{"line_number":3368,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":2,"id":"65e3852f_c7dc82e9","line":3365,"in_reply_to":"460a4af8_2e3fb0af","updated":"2022-08-30 22:37:56.000000000","message":"Done","commit_id":"2ff5e4b2544654fec38496e3b58ad7b5773a4763"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2197182200a72a4546e3516f234ce962460ff020","unresolved":true,"context_lines":[{"line_number":2690,"context_line":"        return exc"},{"line_number":2691,"context_line":""},{"line_number":2692,"context_line":"    def validate_metadata(self):"},{"line_number":2693,"context_line":"        return True"},{"line_number":2694,"context_line":""},{"line_number":2695,"context_line":"    def _verify_name_matches_hash(self, data_file):"},{"line_number":2696,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"536e3b57_3749e0dc","line":2693,"updated":"2022-08-29 20:44:23.000000000","message":"Might want to at least check for Content-Length -- I think the auditor would blow up around https://github.com/openstack/swift/blob/2.30.0/swift/obj/auditor.py#L261 if it\u0027s missing.","commit_id":"912aaa085128064aa05bd780962302a2ff731d5d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"be30b79554a50a2ca527ba110186b94a92b7c861","unresolved":false,"context_lines":[{"line_number":2690,"context_line":"        return exc"},{"line_number":2691,"context_line":""},{"line_number":2692,"context_line":"    def validate_metadata(self):"},{"line_number":2693,"context_line":"        return True"},{"line_number":2694,"context_line":""},{"line_number":2695,"context_line":"    def _verify_name_matches_hash(self, data_file):"},{"line_number":2696,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"b453e13f_fdd90c1d","line":2693,"in_reply_to":"536e3b57_3749e0dc","updated":"2022-08-30 22:37:56.000000000","message":"Done in the follow-up.","commit_id":"912aaa085128064aa05bd780962302a2ff731d5d"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"853bdb77f3d04c6cfd5a977f59e844079df651dd","unresolved":true,"context_lines":[{"line_number":2690,"context_line":"        return exc"},{"line_number":2691,"context_line":""},{"line_number":2692,"context_line":"    def validate_metadata(self):"},{"line_number":2693,"context_line":"        return True"},{"line_number":2694,"context_line":""},{"line_number":2695,"context_line":"    def _verify_name_matches_hash(self, data_file):"},{"line_number":2696,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"2c2bfa2a_f1fc36eb","line":2693,"in_reply_to":"536e3b57_3749e0dc","updated":"2022-09-07 17:32:19.000000000","message":"I do believe that its handled here : https://github.com/openstack/swift/blob/master/swift/obj/diskfile.py#L2748\n\ntry:\n            metadata_size \u003d int(self._metadata[\u0027Content-Length\u0027])\n        except KeyError:\n            raise self._quarantine(\n                data_file, \"missing content-length in metadata\")\n        except ValueError:\n            # Quarantine, the content-length key is present but not an\n            # integer.\n            raise self._quarantine(\n                data_file, \"bad metadata content-length value %s\" % (\n                    self._metadata[\u0027Content-Length\u0027]))","commit_id":"912aaa085128064aa05bd780962302a2ff731d5d"}],"swift/obj/reconstructor.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"6c47d11818d8b19c0a7cae776de54d019f4dd946","unresolved":true,"context_lines":[{"line_number":651,"context_line":"        # of the node we\u0027re rebuilding to within the primary part list"},{"line_number":652,"context_line":"        fi_to_rebuild \u003d node[\u0027backend_index\u0027]"},{"line_number":653,"context_line":"        datafile_metadata \u003d df.get_datafile_metadata()"},{"line_number":654,"context_line":"        if df.validate_ec_metadata() is False:"},{"line_number":655,"context_line":"            raise df._quarantine("},{"line_number":656,"context_line":"                df._data_file, \"Invalid fragment #%s\" % df._frag_index)"},{"line_number":657,"context_line":"        local_timestamp \u003d Timestamp(datafile_metadata[\u0027X-Timestamp\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"6d1dc9a0_b7023bfa","line":654,"updated":"2022-08-17 16:55:30.000000000","message":"Just validate_metadata(), yeah? I\u0027d also rephrase as\n\n if not df.validate_metadata():","commit_id":"2ff5e4b2544654fec38496e3b58ad7b5773a4763"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"be30b79554a50a2ca527ba110186b94a92b7c861","unresolved":false,"context_lines":[{"line_number":651,"context_line":"        # of the node we\u0027re rebuilding to within the primary part list"},{"line_number":652,"context_line":"        fi_to_rebuild \u003d node[\u0027backend_index\u0027]"},{"line_number":653,"context_line":"        datafile_metadata \u003d df.get_datafile_metadata()"},{"line_number":654,"context_line":"        if df.validate_ec_metadata() is False:"},{"line_number":655,"context_line":"            raise df._quarantine("},{"line_number":656,"context_line":"                df._data_file, \"Invalid fragment #%s\" % df._frag_index)"},{"line_number":657,"context_line":"        local_timestamp \u003d Timestamp(datafile_metadata[\u0027X-Timestamp\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"0d514740_3e26f6ef","line":654,"in_reply_to":"6d1dc9a0_b7023bfa","updated":"2022-08-30 22:37:56.000000000","message":"Ack","commit_id":"2ff5e4b2544654fec38496e3b58ad7b5773a4763"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"853bdb77f3d04c6cfd5a977f59e844079df651dd","unresolved":false,"context_lines":[{"line_number":651,"context_line":"        # of the node we\u0027re rebuilding to within the primary part list"},{"line_number":652,"context_line":"        fi_to_rebuild \u003d node[\u0027backend_index\u0027]"},{"line_number":653,"context_line":"        datafile_metadata \u003d df.get_datafile_metadata()"},{"line_number":654,"context_line":"        if df.validate_ec_metadata() is False:"},{"line_number":655,"context_line":"            raise df._quarantine("},{"line_number":656,"context_line":"                df._data_file, \"Invalid fragment #%s\" % df._frag_index)"},{"line_number":657,"context_line":"        local_timestamp \u003d Timestamp(datafile_metadata[\u0027X-Timestamp\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"3daf251b_444d6622","line":654,"in_reply_to":"6d1dc9a0_b7023bfa","updated":"2022-09-07 17:32:19.000000000","message":"Done","commit_id":"2ff5e4b2544654fec38496e3b58ad7b5773a4763"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"6c47d11818d8b19c0a7cae776de54d019f4dd946","unresolved":true,"context_lines":[{"line_number":653,"context_line":"        datafile_metadata \u003d df.get_datafile_metadata()"},{"line_number":654,"context_line":"        if df.validate_ec_metadata() is False:"},{"line_number":655,"context_line":"            raise df._quarantine("},{"line_number":656,"context_line":"                df._data_file, \"Invalid fragment #%s\" % df._frag_index)"},{"line_number":657,"context_line":"        local_timestamp \u003d Timestamp(datafile_metadata[\u0027X-Timestamp\u0027])"},{"line_number":658,"context_line":"        path \u003d datafile_metadata[\u0027name\u0027]"},{"line_number":659,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"b5c6b366_e2d464e8","line":656,"range":{"start_line":656,"start_character":59,"end_line":656,"end_character":70},"updated":"2022-08-17 16:55:30.000000000","message":"If the frag index metadata isn\u0027t set (causing us to fail validation), do we know what this will be set to? It *will* be set, right? I\u0027d hate to miss quarantining because of an AttributeError or something.","commit_id":"2ff5e4b2544654fec38496e3b58ad7b5773a4763"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"be30b79554a50a2ca527ba110186b94a92b7c861","unresolved":false,"context_lines":[{"line_number":653,"context_line":"        datafile_metadata \u003d df.get_datafile_metadata()"},{"line_number":654,"context_line":"        if df.validate_ec_metadata() is False:"},{"line_number":655,"context_line":"            raise df._quarantine("},{"line_number":656,"context_line":"                df._data_file, \"Invalid fragment #%s\" % df._frag_index)"},{"line_number":657,"context_line":"        local_timestamp \u003d Timestamp(datafile_metadata[\u0027X-Timestamp\u0027])"},{"line_number":658,"context_line":"        path \u003d datafile_metadata[\u0027name\u0027]"},{"line_number":659,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ea8a39f0_e0cc81bf","line":656,"range":{"start_line":656,"start_character":59,"end_line":656,"end_character":70},"in_reply_to":"43feecf3_2fc5f029","updated":"2022-08-30 22:37:56.000000000","message":"Ack","commit_id":"2ff5e4b2544654fec38496e3b58ad7b5773a4763"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"853bdb77f3d04c6cfd5a977f59e844079df651dd","unresolved":false,"context_lines":[{"line_number":653,"context_line":"        datafile_metadata \u003d df.get_datafile_metadata()"},{"line_number":654,"context_line":"        if df.validate_ec_metadata() is False:"},{"line_number":655,"context_line":"            raise df._quarantine("},{"line_number":656,"context_line":"                df._data_file, \"Invalid fragment #%s\" % df._frag_index)"},{"line_number":657,"context_line":"        local_timestamp \u003d Timestamp(datafile_metadata[\u0027X-Timestamp\u0027])"},{"line_number":658,"context_line":"        path \u003d datafile_metadata[\u0027name\u0027]"},{"line_number":659,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"d7bed9b1_bedb16f8","line":656,"range":{"start_line":656,"start_character":59,"end_line":656,"end_character":70},"in_reply_to":"43feecf3_2fc5f029","updated":"2022-09-07 17:32:19.000000000","message":"Done","commit_id":"2ff5e4b2544654fec38496e3b58ad7b5773a4763"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2197182200a72a4546e3516f234ce962460ff020","unresolved":true,"context_lines":[{"line_number":653,"context_line":"        datafile_metadata \u003d df.get_datafile_metadata()"},{"line_number":654,"context_line":"        if df.validate_ec_metadata() is False:"},{"line_number":655,"context_line":"            raise df._quarantine("},{"line_number":656,"context_line":"                df._data_file, \"Invalid fragment #%s\" % df._frag_index)"},{"line_number":657,"context_line":"        local_timestamp \u003d Timestamp(datafile_metadata[\u0027X-Timestamp\u0027])"},{"line_number":658,"context_line":"        path \u003d datafile_metadata[\u0027name\u0027]"},{"line_number":659,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"43feecf3_2fc5f029","line":656,"range":{"start_line":656,"start_character":59,"end_line":656,"end_character":70},"in_reply_to":"b5c6b366_e2d464e8","updated":"2022-08-29 20:44:23.000000000","message":"Yeah, looks like it\u0027ll be None if not otherwise set: https://github.com/openstack/swift/blob/2.30.0/swift/obj/diskfile.py#L3320","commit_id":"2ff5e4b2544654fec38496e3b58ad7b5773a4763"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2197182200a72a4546e3516f234ce962460ff020","unresolved":true,"context_lines":[{"line_number":651,"context_line":"        # of the node we\u0027re rebuilding to within the primary part list"},{"line_number":652,"context_line":"        fi_to_rebuild \u003d node[\u0027backend_index\u0027]"},{"line_number":653,"context_line":"        datafile_metadata \u003d df.get_datafile_metadata()"},{"line_number":654,"context_line":"        if not df.validate_metadata():"},{"line_number":655,"context_line":"            raise df._quarantine("},{"line_number":656,"context_line":"                df._data_file, \"Invalid fragment #%s\" % df._frag_index)"},{"line_number":657,"context_line":"        local_timestamp \u003d Timestamp(datafile_metadata[\u0027X-Timestamp\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"a82d8c7f_b7ff3c84","line":654,"updated":"2022-08-29 20:44:23.000000000","message":"Should we do something similar in object_audit() in the auditor?","commit_id":"912aaa085128064aa05bd780962302a2ff731d5d"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"853bdb77f3d04c6cfd5a977f59e844079df651dd","unresolved":true,"context_lines":[{"line_number":651,"context_line":"        # of the node we\u0027re rebuilding to within the primary part list"},{"line_number":652,"context_line":"        fi_to_rebuild \u003d node[\u0027backend_index\u0027]"},{"line_number":653,"context_line":"        datafile_metadata \u003d df.get_datafile_metadata()"},{"line_number":654,"context_line":"        if not df.validate_metadata():"},{"line_number":655,"context_line":"            raise df._quarantine("},{"line_number":656,"context_line":"                df._data_file, \"Invalid fragment #%s\" % df._frag_index)"},{"line_number":657,"context_line":"        local_timestamp \u003d Timestamp(datafile_metadata[\u0027X-Timestamp\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"cd7ae07e_00dec2b3","line":654,"in_reply_to":"a82d8c7f_b7ff3c84","updated":"2022-09-07 17:32:19.000000000","message":"Kindly see my reply to your suggestion for swift/obj/diskfile.py","commit_id":"912aaa085128064aa05bd780962302a2ff731d5d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"be30b79554a50a2ca527ba110186b94a92b7c861","unresolved":true,"context_lines":[{"line_number":651,"context_line":"        # of the node we\u0027re rebuilding to within the primary part list"},{"line_number":652,"context_line":"        fi_to_rebuild \u003d node[\u0027backend_index\u0027]"},{"line_number":653,"context_line":"        datafile_metadata \u003d df.get_datafile_metadata()"},{"line_number":654,"context_line":"        if not df.validate_metadata():"},{"line_number":655,"context_line":"            raise df._quarantine("},{"line_number":656,"context_line":"                df._data_file, \"Invalid fragment #%s\" % df._frag_index)"},{"line_number":657,"context_line":"        local_timestamp \u003d Timestamp(datafile_metadata[\u0027X-Timestamp\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"f7283393_a15a3f2d","line":654,"in_reply_to":"a82d8c7f_b7ff3c84","updated":"2022-08-30 22:37:56.000000000","message":"Pushed up https://review.opendev.org/c/openstack/swift/+/855296 to try it out.","commit_id":"912aaa085128064aa05bd780962302a2ff731d5d"}]}
