)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"5a6c8ff3060a0b3fd9f38a4ffa32840cc211c510","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"74cffbe2_053fac05","updated":"2024-08-28 20:28:53.000000000","message":"Nice!\n\nI feel like I\u0027m seeing some duplication in this code, maybe worth some constants if there\u0027s really only two ways we\u0027ll handle these filesystem errors.  Probably worth some unittesting to make sure we got all the spots; but some greps suggest these are all the places we\u0027re currently handling ENODATA","commit_id":"9209ba79025ca46e6eeb709aa31386f199020684"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"8ca918a185a1e3990f745032c6802fd4dba067e4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3c43605f_eeaaa372","updated":"2024-08-28 20:33:46.000000000","message":"old enough not to worry about versioning","commit_id":"9209ba79025ca46e6eeb709aa31386f199020684"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"5d1361ca5477a0bb83257f0ded8ad3d4fe9e9845","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"589fdea8_3556efa2","updated":"2024-09-10 09:15:08.000000000","message":"Cool. I guess an xfs-repair may fix the fs. But eaither way, get it out of the way so we can keep on going.","commit_id":"5e079635483baa34d781bfcf78129a7057e627e4"}],"swift/obj/diskfile.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8fee7aaafc0b08910181835476c1106c50dab988","unresolved":true,"context_lines":[{"line_number":1226,"context_line":"                        orig_path \u003d hsh_path"},{"line_number":1227,"context_line":"                    except (OSError, IOError):"},{"line_number":1228,"context_line":"                        # We\u0027ve *also* seen the bad sectors lead to us needing"},{"line_number":1229,"context_line":"                        # to quarantine the whole suffix"},{"line_number":1230,"context_line":"                        quar_path \u003d quarantine_renamer(device_path, hsh_path)"},{"line_number":1231,"context_line":"                        orig_path \u003d path"},{"line_number":1232,"context_line":"                    logging.exception("}],"source_content_type":"text/x-python","patch_set":1,"id":"07c1a73c_12add875","line":1229,"updated":"2024-08-28 18:53:25.000000000","message":"Trying to manually move an affected hashdir to quarantines *also* tripped `EUCLEAN`, so we want to be able to quarantine the whole suffix.","commit_id":"9209ba79025ca46e6eeb709aa31386f199020684"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"1292e51a7e2ff9b1edfd8a011894aea1d9b7da20","unresolved":true,"context_lines":[{"line_number":2601,"context_line":"        \"\"\""},{"line_number":2602,"context_line":"        # First figure out if the data directory exists"},{"line_number":2603,"context_line":"        try:"},{"line_number":2604,"context_line":"            files \u003d os.listdir(self._datadir)"},{"line_number":2605,"context_line":"        except OSError as err:"},{"line_number":2606,"context_line":"            if err.errno \u003d\u003d errno.ENOTDIR:"},{"line_number":2607,"context_line":"                # If there\u0027s a file here instead of a directory, quarantine"}],"source_content_type":"text/x-python","patch_set":1,"id":"eb61d447_84c4bfa5","line":2604,"updated":"2024-08-28 20:33:20.000000000","message":"so it looks like this was probably the call site that was in the traceback","commit_id":"9209ba79025ca46e6eeb709aa31386f199020684"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"1292e51a7e2ff9b1edfd8a011894aea1d9b7da20","unresolved":true,"context_lines":[{"line_number":2628,"context_line":"                        \"Failed to list directory at %s\" % self._datadir)"},{"line_number":2629,"context_line":"            elif err.errno !\u003d errno.ENOENT:"},{"line_number":2630,"context_line":"                raise DiskFileError("},{"line_number":2631,"context_line":"                    \"Error listing directory %s: %s\" % (self._datadir, err))"},{"line_number":2632,"context_line":"            # The data directory does not exist, so the object cannot exist."},{"line_number":2633,"context_line":"            files \u003d []"},{"line_number":2634,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"30c9af2b_e70570bf","line":2631,"updated":"2024-08-28 20:33:20.000000000","message":"and previously we would have raised the error here","commit_id":"9209ba79025ca46e6eeb709aa31386f199020684"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"1292e51a7e2ff9b1edfd8a011894aea1d9b7da20","unresolved":true,"context_lines":[{"line_number":2630,"context_line":"                raise DiskFileError("},{"line_number":2631,"context_line":"                    \"Error listing directory %s: %s\" % (self._datadir, err))"},{"line_number":2632,"context_line":"            # The data directory does not exist, so the object cannot exist."},{"line_number":2633,"context_line":"            files \u003d []"},{"line_number":2634,"context_line":""},{"line_number":2635,"context_line":"        # gather info about the valid files to use to open the DiskFile"},{"line_number":2636,"context_line":"        file_info \u003d self._get_ondisk_files(files, self.policy)"}],"source_content_type":"text/x-python","patch_set":1,"id":"84f96860_d885cdfd","line":2633,"updated":"2024-08-28 20:33:20.000000000","message":"but now we\u0027ll quarantine the whole suffix (!!) and return an empty files","commit_id":"9209ba79025ca46e6eeb709aa31386f199020684"}]}
