)]}'
{"swift/cli/recon.py":[{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"e480dfe7780180824ef2d4e91f4195cf5783ee3f","unresolved":false,"context_lines":[{"line_number":203,"context_line":"                block \u003d f.read(4096)"},{"line_number":204,"context_line":"        return md5sum.hexdigest()"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def get_hosts(self, region_filter, zone_filter, zeroweight_filter,"},{"line_number":207,"context_line":"                  swift_dir, ring_names):"},{"line_number":208,"context_line":"        \"\"\""},{"line_number":209,"context_line":"        Get a list of hosts in the rings."}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_b35d8c7b","line":206,"updated":"2016-07-25 15:01:35.000000000","message":"I think this new option should be the last option, and it should have a default\u003dFalse.","commit_id":"0d10cdd5fe0997820640f906d141ff647cb43814"},{"author":{"_account_id":21239,"name":"Alex Szarka","email":"szarka@inf.u-szeged.hu","username":"xavvior"},"change_message_id":"e59fe34173434cd4c8970e39a019302a6f84917c","unresolved":false,"context_lines":[{"line_number":203,"context_line":"                block \u003d f.read(4096)"},{"line_number":204,"context_line":"        return md5sum.hexdigest()"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def get_hosts(self, region_filter, zone_filter, zeroweight_filter,"},{"line_number":207,"context_line":"                  swift_dir, ring_names):"},{"line_number":208,"context_line":"        \"\"\""},{"line_number":209,"context_line":"        Get a list of hosts in the rings."}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_cfab281d","line":206,"range":{"start_line":206,"start_character":52,"end_line":206,"end_character":69},"updated":"2016-07-25 17:29:11.000000000","message":"Please move to last option and use default parameter False.\n\ndef get_hosts(self, region_filter, zone_filter, swift_dir, ring_names,zeroweight_filter\u003dFalse):","commit_id":"0d10cdd5fe0997820640f906d141ff647cb43814"},{"author":{"_account_id":12050,"name":"Charles Hsu","email":"charles0126@gmail.com","username":"charz"},"change_message_id":"31b863cace18160aeafd5e4a2155bcb10cd5f032","unresolved":false,"context_lines":[{"line_number":203,"context_line":"                block \u003d f.read(4096)"},{"line_number":204,"context_line":"        return md5sum.hexdigest()"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def get_hosts(self, region_filter, zone_filter, zeroweight_filter,"},{"line_number":207,"context_line":"                  swift_dir, ring_names):"},{"line_number":208,"context_line":"        \"\"\""},{"line_number":209,"context_line":"        Get a list of hosts in the rings."}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_4a1ba61b","line":206,"range":{"start_line":206,"start_character":52,"end_line":206,"end_character":69},"in_reply_to":"dada55a8_cfab281d","updated":"2016-07-25 17:38:52.000000000","message":"will do.","commit_id":"0d10cdd5fe0997820640f906d141ff647cb43814"},{"author":{"_account_id":21239,"name":"Alex Szarka","email":"szarka@inf.u-szeged.hu","username":"xavvior"},"change_message_id":"e59fe34173434cd4c8970e39a019302a6f84917c","unresolved":false,"context_lines":[{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        :param region_filter: Only list regions matching given filter"},{"line_number":212,"context_line":"        :param zone_filter: Only list zones matching given filter"},{"line_number":213,"context_line":"        :param zeroweight_filter: Include zero weight devices if True"},{"line_number":214,"context_line":"        :param swift_dir: Directory of swift config, usually /etc/swift"},{"line_number":215,"context_line":"        :param ring_names: Collection of ring names, such as"},{"line_number":216,"context_line":"         [\u0027object\u0027, \u0027object-2\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_8f7010de","line":213,"range":{"start_line":213,"start_character":8,"end_line":213,"end_character":69},"updated":"2016-07-25 17:29:11.000000000","message":"ditto.\nMove to last option.","commit_id":"0d10cdd5fe0997820640f906d141ff647cb43814"},{"author":{"_account_id":12050,"name":"Charles Hsu","email":"charles0126@gmail.com","username":"charz"},"change_message_id":"31b863cace18160aeafd5e4a2155bcb10cd5f032","unresolved":false,"context_lines":[{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        :param region_filter: Only list regions matching given filter"},{"line_number":212,"context_line":"        :param zone_filter: Only list zones matching given filter"},{"line_number":213,"context_line":"        :param zeroweight_filter: Include zero weight devices if True"},{"line_number":214,"context_line":"        :param swift_dir: Directory of swift config, usually /etc/swift"},{"line_number":215,"context_line":"        :param ring_names: Collection of ring names, such as"},{"line_number":216,"context_line":"         [\u0027object\u0027, \u0027object-2\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_ea1b7a1a","line":213,"range":{"start_line":213,"start_character":8,"end_line":213,"end_character":69},"in_reply_to":"dada55a8_8f7010de","updated":"2016-07-25 17:38:52.000000000","message":"will do.","commit_id":"0d10cdd5fe0997820640f906d141ff647cb43814"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"e480dfe7780180824ef2d4e91f4195cf5783ee3f","unresolved":false,"context_lines":[{"line_number":1012,"context_line":"        args.add_option(\u0027--zone\u0027, \u0027-z\u0027, type\u003d\"int\","},{"line_number":1013,"context_line":"                        help\u003d\"Only query servers in specified zone\")"},{"line_number":1014,"context_line":"        args.add_option(\u0027--zeroweight\u0027, \u0027-w\u0027, action\u003d\"store_true\","},{"line_number":1015,"context_line":"                        help\u003d\"Include zero weight devices\")"},{"line_number":1016,"context_line":"        args.add_option(\u0027--timeout\u0027, \u0027-t\u0027, type\u003d\"int\", metavar\u003d\"SECONDS\","},{"line_number":1017,"context_line":"                        help\u003d\"Time to wait for a response from a server\","},{"line_number":1018,"context_line":"                        default\u003d5)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_13dc58e3","line":1015,"updated":"2016-07-25 15:01:35.000000000","message":"This changes the default behaviour, which might be unexpected by an operator. How about an --exclude-zeroweight filter that must be requested explicitly?","commit_id":"0d10cdd5fe0997820640f906d141ff647cb43814"},{"author":{"_account_id":21239,"name":"Alex Szarka","email":"szarka@inf.u-szeged.hu","username":"xavvior"},"change_message_id":"e59fe34173434cd4c8970e39a019302a6f84917c","unresolved":false,"context_lines":[{"line_number":1051,"context_line":"                args.print_help()"},{"line_number":1052,"context_line":"                sys.exit(0)"},{"line_number":1053,"context_line":"            hosts \u003d self.get_hosts(options.region, options.zone,"},{"line_number":1054,"context_line":"                                   options.zeroweight,"},{"line_number":1055,"context_line":"                                   swift_dir, ring_names)"},{"line_number":1056,"context_line":"            print(\"--\u003e Starting reconnaissance on %s hosts (%s)\" %"},{"line_number":1057,"context_line":"                  (len(hosts), self.server_type))"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_0f7d40b1","line":1054,"range":{"start_line":1054,"start_character":35,"end_line":1054,"end_character":54},"updated":"2016-07-25 17:29:11.000000000","message":"Move to last argument","commit_id":"0d10cdd5fe0997820640f906d141ff647cb43814"},{"author":{"_account_id":12050,"name":"Charles Hsu","email":"charles0126@gmail.com","username":"charz"},"change_message_id":"31b863cace18160aeafd5e4a2155bcb10cd5f032","unresolved":false,"context_lines":[{"line_number":1051,"context_line":"                args.print_help()"},{"line_number":1052,"context_line":"                sys.exit(0)"},{"line_number":1053,"context_line":"            hosts \u003d self.get_hosts(options.region, options.zone,"},{"line_number":1054,"context_line":"                                   options.zeroweight,"},{"line_number":1055,"context_line":"                                   swift_dir, ring_names)"},{"line_number":1056,"context_line":"            print(\"--\u003e Starting reconnaissance on %s hosts (%s)\" %"},{"line_number":1057,"context_line":"                  (len(hosts), self.server_type))"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_6ad66a28","line":1054,"range":{"start_line":1054,"start_character":35,"end_line":1054,"end_character":54},"in_reply_to":"dada55a8_0f7d40b1","updated":"2016-07-25 17:38:52.000000000","message":"will do.","commit_id":"0d10cdd5fe0997820640f906d141ff647cb43814"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"e7e9ae80499685fe942c84990c371ac4dc294652","unresolved":false,"context_lines":[{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        unique_hosts \u003d {\u0027ip\u0027: [], \u0027dev\u0027: []}"},{"line_number":229,"context_line":"        for d in devs:"},{"line_number":230,"context_line":"            if d[\u0027ip\u0027] not in unique_hosts[\u0027ip\u0027]:"},{"line_number":231,"context_line":"                unique_hosts[\u0027ip\u0027].append(d[\u0027ip\u0027])"},{"line_number":232,"context_line":"                unique_hosts[\u0027dev\u0027].append(d)"},{"line_number":233,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_3ba14af9","line":230,"updated":"2016-07-26 08:03:45.000000000","message":"The unique_hosts filtering is wrong IMO (code works as expected, but the result is unwanted).\n\nWith this patch applied you no longer get information about the disks on the server - mounted, unmounted, diskusage all becomes useless because only a single disk will be reported back here.\n\nTry it for yourself: use a ring with multiple disks on the same node, but different ports, and do a \"swift-recon -u\". Compare that with the output on master.\n\nIf you remove the changes in line 228-232 you no longer need to change any test - so there is no regression there (however, an updated test for the zeroweight filter is more than welcome then).","commit_id":"a84bc553bc1e79c25b107554462a9ed619fc305e"},{"author":{"_account_id":12050,"name":"Charles Hsu","email":"charles0126@gmail.com","username":"charz"},"change_message_id":"a3a073769c79aa37c8143ed872931cd13d8b907a","unresolved":false,"context_lines":[{"line_number":235,"context_line":"            else:"},{"line_number":236,"context_line":"                unique_hosts[d[\u0027ip\u0027]].append(d[\u0027port\u0027])"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"        # TODO: Try to find the base bind_port for each object server,"},{"line_number":239,"context_line":"        #       we need a robust way to find the base bind_port."},{"line_number":240,"context_line":"        unique_hosts_list \u003d []"},{"line_number":241,"context_line":"        for ip, port in unique_hosts.iteritems():"},{"line_number":242,"context_line":"            base_ports \u003d []"},{"line_number":243,"context_line":"            for k, g in groupby(enumerate(port), lambda (i, x): i - x):"},{"line_number":244,"context_line":"                port_group \u003d map(itemgetter(1), g)"},{"line_number":245,"context_line":"                if port_group[0] not in base_ports:"},{"line_number":246,"context_line":"                    base_ports.append(port_group[0])"},{"line_number":247,"context_line":"            for base in base_ports:"},{"line_number":248,"context_line":"                unique_hosts_list.append((str(ip), base))"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        return unique_hosts_list"},{"line_number":251,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bacf61ea_9e20a2f9","line":248,"range":{"start_line":238,"start_character":0,"end_line":248,"end_character":57},"updated":"2016-07-27 17:58:28.000000000","message":"if we can find the base bind_port that defines in object-server.conf. that\u0027ll be easy to make sure we don\u0027t missing anything in swift-recon output. All operations will be same as the servers_per_port is disabled.","commit_id":"a8992bdc0e61d0d6179b39b791cc5c30d7cabdb6"}],"swift/common/middleware/recon.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"857bd2383b2a5095b9984f7c05bbea89e852dde8","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    def __init__(self, app, conf, *args, **kwargs):"},{"line_number":47,"context_line":"        self.app \u003d app"},{"line_number":48,"context_line":"        self.devices \u003d conf.get(\u0027devices\u0027, \u0027/srv/node\u0027)"},{"line_number":49,"context_line":"        self.bind_port \u003d conf.get(\u0027bind_port\u0027, 6000)"},{"line_number":50,"context_line":"        swift_dir \u003d conf.get(\u0027swift_dir\u0027, \u0027/etc/swift\u0027)"},{"line_number":51,"context_line":"        self.logger \u003d get_logger(conf, log_route\u003d\u0027recon\u0027)"},{"line_number":52,"context_line":"        self.recon_cache_path \u003d conf.get(\u0027recon_cache_path\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa6399be_179d8b59","line":49,"updated":"2016-10-17 17:34:56.000000000","message":"I didn\u0027t think bind_port really had any effect when using server-per-port?","commit_id":"f083ebd76ef2a81bc76469b8692d0e5fb285a06f"},{"author":{"_account_id":12050,"name":"Charles Hsu","email":"charles0126@gmail.com","username":"charz"},"change_message_id":"3fe6a2cc0576cb197df7f48d722fe14e9a4553c3","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    def __init__(self, app, conf, *args, **kwargs):"},{"line_number":47,"context_line":"        self.app \u003d app"},{"line_number":48,"context_line":"        self.devices \u003d conf.get(\u0027devices\u0027, \u0027/srv/node\u0027)"},{"line_number":49,"context_line":"        self.bind_port \u003d conf.get(\u0027bind_port\u0027, 6000)"},{"line_number":50,"context_line":"        swift_dir \u003d conf.get(\u0027swift_dir\u0027, \u0027/etc/swift\u0027)"},{"line_number":51,"context_line":"        self.logger \u003d get_logger(conf, log_route\u003d\u0027recon\u0027)"},{"line_number":52,"context_line":"        self.recon_cache_path \u003d conf.get(\u0027recon_cache_path\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa6399be_19512e0f","line":49,"in_reply_to":"fa6399be_179d8b59","updated":"2016-10-18 05:23:02.000000000","message":"It won\u0027t effect, but it provides an API endpoint to find the base port for swift-recon when it wants to get the recon data back. \nWe don\u0027t have clue to figure out which port is the correct port swift-recon only needs to talk.","commit_id":"f083ebd76ef2a81bc76469b8692d0e5fb285a06f"}],"test/unit/cli/test_recon.py":[{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"e7e9ae80499685fe942c84990c371ac4dc294652","unresolved":false,"context_lines":[{"line_number":159,"context_line":"    def _make_object_rings(self):"},{"line_number":160,"context_line":"        ringbuilder \u003d builder.RingBuilder(2, 3, 1)"},{"line_number":161,"context_line":"        devs \u003d ["},{"line_number":162,"context_line":"            \u0027r0z0-127.0.0.1:10000/sda1\u0027,"},{"line_number":163,"context_line":"            \u0027r0z1-127.0.0.1:10001/sda1\u0027,"},{"line_number":164,"context_line":"            \u0027r1z0-127.0.0.1:10002/sda1\u0027,"},{"line_number":165,"context_line":"            \u0027r1z1-127.0.0.1:10003/sda1\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_1b8e0679","side":"PARENT","line":162,"updated":"2016-07-26 08:03:45.000000000","message":"A lot of changes here are required because of the unique_host filtering. I much prefer to avoid large test changes; in fact this shows some significant change in the results, and I think this is not wanted from an operator point of view.","commit_id":"5ace4955629c6e098ffb117e59321694a9ebde05"}]}
