)]}'
{"swift/common/ring/ring.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ec310b07d19c423f60e3984039a25278114e8c6c","unresolved":false,"context_lines":[{"line_number":310,"context_line":"    def get_more_nodes(self, part):"},{"line_number":311,"context_line":"        return iter([dict(node, index\u003di) for i, node in enumerate("},{"line_number":312,"context_line":"                    self._get_more_nodes(part),"},{"line_number":313,"context_line":"                    start\u003dlen(self._get_part_nodes(part)))])"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"    def _get_more_nodes(self, part):"},{"line_number":316,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_dcc6dd9b","line":313,"updated":"2015-01-05 18:33:09.000000000","message":"well that call back into _get_part_nodes just to get the replica count for this part doesn\u0027t seem super efficient?\n\nAlso I\u0027m pretty sure we never use the index of a handoff anyway?  Only primary indexes matter, and if we go to a handoff we have to assign it a failed primary\u0027s index anyway - right?","commit_id":"b85781721a85a13045dde6f3770d3d43e55520cf"}],"swift/proxy/controllers/obj.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"078c28dde6a185375867c82eb775dc91e2a8d32d","unresolved":false,"context_lines":[{"line_number":591,"context_line":"        for index, node in node_iter:"},{"line_number":592,"context_line":"            try:"},{"line_number":593,"context_line":"                putter \u003d Putter.connect("},{"line_number":594,"context_line":"                    node, part, path, headers, index,"},{"line_number":595,"context_line":"                    conn_timeout\u003dself.app.conn_timeout,"},{"line_number":596,"context_line":"                    node_timeout\u003dself.app.node_timeout,"},{"line_number":597,"context_line":"                    chunked\u003dchunked, need_metadata_footer\u003dneed_metadata_footer)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_acabbf1b","line":594,"updated":"2014-11-13 01:12:28.000000000","message":"yeah i don\u0027t think that\u0027s right.  once your index is \u003e your replica_count you need to back fill in the index\u0027s that got skipped because of bad connections or whatever.","commit_id":"24c0f8907dd31d69544180437a771571e1e9650f"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"e71d31862fe372db5147a78171d6f257a2e7f858","unresolved":false,"context_lines":[{"line_number":999,"context_line":"                         if x not in chunk_index.values()]"},{"line_number":1000,"context_line":"                handoff_conns.sort(key\u003doperator.attrgetter(\u0027index\u0027))"},{"line_number":1001,"context_line":"                for hole, p in zip(holes, handoff_conns):"},{"line_number":1002,"context_line":"                    chunk_index[p] \u003d hole"},{"line_number":1003,"context_line":""},{"line_number":1004,"context_line":"                for putter in putters:"},{"line_number":1005,"context_line":"                    putter.spawn_sender_greenthread("}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_bd1beb19","line":1002,"updated":"2014-11-13 02:50:51.000000000","message":"hrmm... ok I obviously missed something this code seems to be trying to fill in handoffs with unused index but I definitely got FA indexes that didn\u0027t make sense when I shut down backend servers.  not sure what I am observing - maybe it\u0027s as simple as bug in this code somewhere.","commit_id":"24c0f8907dd31d69544180437a771571e1e9650f"},{"author":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"change_message_id":"72ed41e2a88ae4eec1e26678cde44e890556dbcd","unresolved":false,"context_lines":[{"line_number":648,"context_line":""},{"line_number":649,"context_line":"    def _determine_chunk_destinations(self, putters):"},{"line_number":650,"context_line":"        \"\"\""},{"line_number":651,"context_line":"        Given a list of putters, return a dict where they key is the putter"},{"line_number":652,"context_line":"        and the value is the node index to use."},{"line_number":653,"context_line":""},{"line_number":654,"context_line":"        This is done so that we line up handoffs using the same node index"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_5c54ad21","line":651,"updated":"2015-01-05 18:44:33.000000000","message":"nit: s/they/the/","commit_id":"b85781721a85a13045dde6f3770d3d43e55520cf"}],"swift/proxy/server.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ec310b07d19c423f60e3984039a25278114e8c6c","unresolved":false,"context_lines":[{"line_number":472,"context_line":"        Yields nodes for a ring partition, skipping over error"},{"line_number":473,"context_line":"        limited nodes and stopping at the configurable number of nodes. If a"},{"line_number":474,"context_line":"        node yielded subsequently gets error limited, an extra node will be"},{"line_number":475,"context_line":"        yielded to take its place."},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"        Note that if you\u0027re going to iterate over this concurrently from"},{"line_number":478,"context_line":"        multiple greenthreads, you\u0027ll want to use a"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_9ca1b5ab","line":475,"updated":"2015-01-05 18:33:09.000000000","message":"un-needed whitespace change - and the only one in the file, if another patch comes up maybe remember to just `git checkout swift/proxy/server.py`","commit_id":"b85781721a85a13045dde6f3770d3d43e55520cf"}],"test/unit/common/ring/test_ring.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ec310b07d19c423f60e3984039a25278114e8c6c","unresolved":false,"context_lines":[{"line_number":430,"context_line":"        self.assertEquals(part, 2)"},{"line_number":431,"context_line":"        self.assertEquals(nodes, [dict(node, index\u003di) for i, node in"},{"line_number":432,"context_line":"                          enumerate([self.intended_devs[0],"},{"line_number":433,"context_line":"                          self.intended_devs[3]])])"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"    def add_dev_to_ring(self, new_dev):"},{"line_number":436,"context_line":"        self.ring.devs.append(new_dev)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_5c72ed4a","line":433,"updated":"2015-01-05 18:33:09.000000000","message":"nit: might look cleaner as a utility\n\ndef expected_nodes(*indexes):\n    return [dict(node, index\u003di) for i, node in enumerate(self.intended_devs[j] for j in indexes))]\n\nself.assertEqual(nodes, expected_nodes(0, 3))","commit_id":"b85781721a85a13045dde6f3770d3d43e55520cf"}]}
