)]}'
{"swift/obj/auditor.py":[{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"18dcd34f492a8aa42448ba09f1de692bf765c23c","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        # can find all diskfile locations regardless of policy -- so for now"},{"line_number":96,"context_line":"        # just use Policy-0\u0027s manager."},{"line_number":97,"context_line":"        all_locs \u003d (self.diskfile_router[POLICIES[0]]"},{"line_number":98,"context_line":"                    .object_audit_location_generator(device_dirs\u003ddevice_dirs))"},{"line_number":99,"context_line":"        for location in all_locs:"},{"line_number":100,"context_line":"            loop_time \u003d time.time()"},{"line_number":101,"context_line":"            self.failsafe_object_audit(location)"}],"source_content_type":"text/x-python","patch_set":11,"id":"bae84128_ff5eff10","line":98,"updated":"2016-02-25 06:50:47.000000000","message":"This seems we have no way to resume the process for ZBF mode?\nPlease look at the test in [1] (sorry another cleanup included in the paste) \n\n1: http://paste.openstack.org/show/488143/","commit_id":"185fc6c60a3ffab14fc1cedcf7de70b118eb06f7"}],"swift/obj/diskfile.py":[{"author":{"_account_id":16896,"name":"Ondřej Nový","email":"novy@ondrej.org","username":"onovy"},"change_message_id":"e2969d7c2cdfa24eed44c0602dd75aef014f8ba8","unresolved":false,"context_lines":[{"line_number":314,"context_line":"            if len(partitions) \u003d\u003d 0:"},{"line_number":315,"context_line":"                partitions \u003d listdir(datadir_path)"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"            for partition in partitions:"},{"line_number":318,"context_line":"                pos \u003d partitions.index(partition)"},{"line_number":319,"context_line":"                update_remaining_partitions(datadir_path, partitions[pos:])"},{"line_number":320,"context_line":"                part_path \u003d os.path.join(datadir_path, partition)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a57f1b5_152db7a7","line":317,"updated":"2016-02-12 11:46:15.000000000","message":"why not use:\nfor pos, partition in enumerate(partitions):\n?","commit_id":"08f3129cb5c9c0ced75d936e164bbdc04ae61425"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"03bba275665b233316a760b597edff15160f723c","unresolved":false,"context_lines":[{"line_number":314,"context_line":"            if len(partitions) \u003d\u003d 0:"},{"line_number":315,"context_line":"                partitions \u003d listdir(datadir_path)"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"            for partition in partitions:"},{"line_number":318,"context_line":"                pos \u003d partitions.index(partition)"},{"line_number":319,"context_line":"                update_remaining_partitions(datadir_path, partitions[pos:])"},{"line_number":320,"context_line":"                part_path \u003d os.path.join(datadir_path, partition)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a57f1b5_8e951888","line":317,"in_reply_to":"3a57f1b5_152db7a7","updated":"2016-02-12 12:32:14.000000000","message":"Good idea, done!","commit_id":"08f3129cb5c9c0ced75d936e164bbdc04ae61425"},{"author":{"_account_id":5600,"name":"Brian Cline","email":"bcline@softlayer.com","username":"briancline"},"change_message_id":"a74bc334f18b825576908f79c181d6cb40d81656","unresolved":false,"context_lines":[{"line_number":348,"context_line":"        with open(auditor_status) as statusfile:"},{"line_number":349,"context_line":"            status \u003d statusfile.read()"},{"line_number":350,"context_line":"    except (OSError, IOError):"},{"line_number":351,"context_line":"        return"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"    try:"},{"line_number":354,"context_line":"        status \u003d json.loads(status)"}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_aeaf30e2","line":351,"updated":"2016-02-15 09:54:20.000000000","message":"If there\u0027s a problem here and it\u0027s something other than the file not existing, we should throw operators a bone and log the exception instead of silently failing. If it does exist and a weird pervasive issue prevents a read it\u0027s very valuable to know why.","commit_id":"3a7cee770d26f769ef7510fd6c311e5abf8db533"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"4ff5389926046c173889e12573e31fddca17d55f","unresolved":false,"context_lines":[{"line_number":348,"context_line":"        with open(auditor_status) as statusfile:"},{"line_number":349,"context_line":"            status \u003d statusfile.read()"},{"line_number":350,"context_line":"    except (OSError, IOError):"},{"line_number":351,"context_line":"        return"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"    try:"},{"line_number":354,"context_line":"        status \u003d json.loads(status)"}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_77bcd46c","line":351,"in_reply_to":"dae33548_aeaf30e2","updated":"2016-02-15 13:45:16.000000000","message":"Done","commit_id":"3a7cee770d26f769ef7510fd6c311e5abf8db533"},{"author":{"_account_id":5600,"name":"Brian Cline","email":"bcline@softlayer.com","username":"briancline"},"change_message_id":"a74bc334f18b825576908f79c181d6cb40d81656","unresolved":false,"context_lines":[{"line_number":365,"context_line":"        with open(auditor_status, \"wb\") as statusfile:"},{"line_number":366,"context_line":"            statusfile.write(status)"},{"line_number":367,"context_line":"    except (OSError, IOError):"},{"line_number":368,"context_line":"        pass"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"def clear_auditor_status(devices, auditor_type\u003d\"ALL\"):"}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_4e5ca425","line":368,"updated":"2016-02-15 09:54:20.000000000","message":"Same here for the write. If there\u0027s an issue that will potentially keep setting back the auditor\u0027s overall progress, operators will definitely want to know about it.","commit_id":"3a7cee770d26f769ef7510fd6c311e5abf8db533"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"4ff5389926046c173889e12573e31fddca17d55f","unresolved":false,"context_lines":[{"line_number":365,"context_line":"        with open(auditor_status, \"wb\") as statusfile:"},{"line_number":366,"context_line":"            statusfile.write(status)"},{"line_number":367,"context_line":"    except (OSError, IOError):"},{"line_number":368,"context_line":"        pass"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"def clear_auditor_status(devices, auditor_type\u003d\"ALL\"):"}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_f7b0e48d","line":368,"in_reply_to":"dae33548_4e5ca425","updated":"2016-02-15 13:45:16.000000000","message":"Done","commit_id":"3a7cee770d26f769ef7510fd6c311e5abf8db533"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"100b96bdf8797ec6f6c2e75d28ca172732dd7b2b","unresolved":false,"context_lines":[{"line_number":278,"context_line":"    :param mount_check: flag to check if a mount check should be performed"},{"line_number":279,"context_line":"                        on devices"},{"line_number":280,"context_line":"    :param logger: a logger object"},{"line_number":281,"context_line":"    :device_dirs: a list of directories under devices to traverse"},{"line_number":282,"context_line":"    \"\"\""},{"line_number":283,"context_line":"    if not device_dirs:"},{"line_number":284,"context_line":"        device_dirs \u003d listdir(devices)"}],"source_content_type":"text/x-python","patch_set":10,"id":"dae33548_c760fbd1","line":281,"updated":"2016-02-17 21:11:41.000000000","message":"Need to add  the auditor_type param","commit_id":"016a6a5cc159e42946e27c613ce1e8e525cba6e0"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"c652a4d64b06b7cd564936f862558a74d5e92a94","unresolved":false,"context_lines":[{"line_number":278,"context_line":"    :param mount_check: flag to check if a mount check should be performed"},{"line_number":279,"context_line":"                        on devices"},{"line_number":280,"context_line":"    :param logger: a logger object"},{"line_number":281,"context_line":"    :device_dirs: a list of directories under devices to traverse"},{"line_number":282,"context_line":"    \"\"\""},{"line_number":283,"context_line":"    if not device_dirs:"},{"line_number":284,"context_line":"        device_dirs \u003d listdir(devices)"}],"source_content_type":"text/x-python","patch_set":10,"id":"dae33548_9aa5aa48","line":281,"in_reply_to":"dae33548_c760fbd1","updated":"2016-02-17 21:44:28.000000000","message":"Done","commit_id":"016a6a5cc159e42946e27c613ce1e8e525cba6e0"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"100b96bdf8797ec6f6c2e75d28ca172732dd7b2b","unresolved":false,"context_lines":[{"line_number":355,"context_line":"        status \u003d json.loads(status)"},{"line_number":356,"context_line":"    except ValueError:"},{"line_number":357,"context_line":"        logger.warning(_(\u0027Loading JSON from %s failed (%s)\u0027) % ("},{"line_number":358,"context_line":"                       auditor_status, e))"},{"line_number":359,"context_line":"    return status.get(\u0027partitions\u0027, None)"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"dae33548_c753dbe0","line":358,"updated":"2016-02-17 21:11:41.000000000","message":"If the json file fails to load here, can we pass back status.get.. We probably need a return here.","commit_id":"016a6a5cc159e42946e27c613ce1e8e525cba6e0"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"b12f3482bd94eea52dbc377afa5b87cc7d599f9a","unresolved":false,"context_lines":[{"line_number":355,"context_line":"        status \u003d json.loads(status)"},{"line_number":356,"context_line":"    except ValueError:"},{"line_number":357,"context_line":"        logger.warning(_(\u0027Loading JSON from %s failed (%s)\u0027) % ("},{"line_number":358,"context_line":"                       auditor_status, e))"},{"line_number":359,"context_line":"    return status.get(\u0027partitions\u0027, None)"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"dae33548_bd74e835","line":358,"in_reply_to":"dae33548_1a707adb","updated":"2016-02-17 22:01:49.000000000","message":"That works too :)","commit_id":"016a6a5cc159e42946e27c613ce1e8e525cba6e0"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"c652a4d64b06b7cd564936f862558a74d5e92a94","unresolved":false,"context_lines":[{"line_number":355,"context_line":"        status \u003d json.loads(status)"},{"line_number":356,"context_line":"    except ValueError:"},{"line_number":357,"context_line":"        logger.warning(_(\u0027Loading JSON from %s failed (%s)\u0027) % ("},{"line_number":358,"context_line":"                       auditor_status, e))"},{"line_number":359,"context_line":"    return status.get(\u0027partitions\u0027, None)"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"dae33548_1a707adb","line":358,"in_reply_to":"dae33548_c753dbe0","updated":"2016-02-17 21:44:28.000000000","message":"I set status \u003d {} in line 346 on the latest patchset, therefore it will return a None in the next line.","commit_id":"016a6a5cc159e42946e27c613ce1e8e525cba6e0"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"18dcd34f492a8aa42448ba09f1de692bf765c23c","unresolved":false,"context_lines":[{"line_number":313,"context_line":"            partitions \u003d get_auditor_status(datadir_path, logger, auditor_type)"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"            if partitions is None:"},{"line_number":316,"context_line":"                partitions \u003d listdir(datadir_path)"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"            for pos, partition in enumerate(partitions):"},{"line_number":319,"context_line":"                update_auditor_status(datadir_path, logger,"}],"source_content_type":"text/x-python","patch_set":11,"id":"bae84128_1cbe51ff","line":316,"updated":"2016-02-25 06:50:47.000000000","message":"I thought it would be good \"get_auditor_status\" returns partitions to audit anyway.\n\ni.e. if no json is there, return the result of list dir, other case return partitions written in json to be simple.\n\n def get_auditor_status(datadir_path, logger, auditor_type):\n    auditor_status \u003d os.path.join(\n        datadir_path, \"auditor_status_%s.json\" % auditor_type)\n    status \u003d {}\n    try:\n        with open(auditor_status) as statusfile:\n            status \u003d statusfile.read()\n    except (OSError, IOError) as e:\n        if e.errno !\u003d errno.ENOENT and logger:\n            logger.warning(_(\u0027Cannot read %s (%s)\u0027) % (auditor_status, e))\n        # If we cannot resume the process from stat file, do everything again.\n        return listdir(datadir_path)\n    try:\n        status \u003d json.loads(status)\n    except ValueError:\n        logger.warning(_(\u0027Loading JSON from %s failed (%s)\u0027) % (\n                       auditor_status, e))\n    # Strictly, we means partitions should be there to prevent silence error.\n    return status[\u0027partitions\u0027]","commit_id":"185fc6c60a3ffab14fc1cedcf7de70b118eb06f7"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"b39cc77bacfd10aa8811a7f84df521df8d93ca0c","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        status \u003d json.loads(status)"},{"line_number":354,"context_line":"    except ValueError:"},{"line_number":355,"context_line":"        logger.warning(_(\u0027Loading JSON from %s failed (%s)\u0027) % ("},{"line_number":356,"context_line":"                       auditor_status, e))"},{"line_number":357,"context_line":"    return status[\u0027partitions\u0027]"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7af24918_15e8adb3","line":356,"updated":"2016-03-02 14:24:30.000000000","message":"Sorry one more comment, we should return listdir(datadir_path) here too, right?","commit_id":"5e2bf98645fd5b50f25becd5e5aa73d92f4abf25"}]}
