)]}'
{"swift/proxy/controllers/obj.py":[{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"842c5f7278f48864ef2904050e614bc53baa6a7f","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    return None"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"def replicated_chunk_transform_function(nchunks):"},{"line_number":87,"context_line":"    def chunkfn(chunk):"},{"line_number":88,"context_line":"        return [chunk] * nchunks"},{"line_number":89,"context_line":"    return chunkfn"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac7a964_69ba98c1","line":86,"updated":"2014-08-15 18:24:56.000000000","message":"suggest comment although maybe its too obvious:\n# for replication, each connection gets the same chunk","commit_id":"97a5c3557b0c70a69fbdf8ed0f436812f255cc32"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"842c5f7278f48864ef2904050e614bc53baa6a7f","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    return chunkfn"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"class DeadConn(object):"},{"line_number":93,"context_line":"    \"\"\""},{"line_number":94,"context_line":"    Dummy HTTPConnection object that looks failed."},{"line_number":95,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac7a964_56065bcf","line":92,"updated":"2014-08-15 18:24:56.000000000","message":"leftover debug stuff?","commit_id":"97a5c3557b0c70a69fbdf8ed0f436812f255cc32"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"e0ccef68cec287703cf084344b2c5987ade44a8d","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        rest of the nodes as normal. It is a re-ordering of the nodes such"},{"line_number":179,"context_line":"        that the local ones come first; no node is omitted. The effect is"},{"line_number":180,"context_line":"        that the request will be serviced by local object servers first, but"},{"line_number":181,"context_line":"        nonlocal ones will be employed if not enough local ones are available."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        :param ring: ring to get nodes from"},{"line_number":184,"context_line":"        :param partition: ring partition to yield nodes for"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac7a964_9004b316","line":181,"updated":"2014-08-14 12:51:35.000000000","message":"could probably use some additional comments here explaining the pairs concept","commit_id":"97a5c3557b0c70a69fbdf8ed0f436812f255cc32"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"842c5f7278f48864ef2904050e614bc53baa6a7f","unresolved":false,"context_lines":[{"line_number":721,"context_line":"                    {\u0027statuses\u0027: statuses})"},{"line_number":722,"context_line":"                return HTTPPreconditionFailed(request\u003dreq)"},{"line_number":723,"context_line":""},{"line_number":724,"context_line":"        # This is where erasure-code transforms can be plumbed in"},{"line_number":725,"context_line":"        chunk_xform \u003d replicated_chunk_transform_function(len(nodes))"},{"line_number":726,"context_line":""},{"line_number":727,"context_line":"        if len(conns) \u003c min_conns:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac7a964_29eee0b4","line":724,"updated":"2014-08-15 18:24:56.000000000","message":"should this be a conditional here or maybe make the transform method part of the policy?","commit_id":"97a5c3557b0c70a69fbdf8ed0f436812f255cc32"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"842c5f7278f48864ef2904050e614bc53baa6a7f","unresolved":false,"context_lines":[{"line_number":747,"context_line":"                    else:"},{"line_number":748,"context_line":"                        handoff_conns.append(conn)"},{"line_number":749,"context_line":""},{"line_number":750,"context_line":"                # Note: we may have more holes than handoffs. This is okay; it"},{"line_number":751,"context_line":"                # just means that we failed to connect to one or more storage"},{"line_number":752,"context_line":"                # nodes."},{"line_number":753,"context_line":"                holes \u003d [x for x in range(len(nodes))"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac7a964_6c03860d","line":750,"updated":"2014-08-15 18:24:56.000000000","message":"I don\u0027t totally understand this comment.  Maybe I\u0027m reading it wrong but it seems like you\u0027d always have the number of holes equal to the number of handoffs - maybe an example of clarification of the comment?","commit_id":"97a5c3557b0c70a69fbdf8ed0f436812f255cc32"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"842c5f7278f48864ef2904050e614bc53baa6a7f","unresolved":false,"context_lines":[{"line_number":752,"context_line":"                # nodes."},{"line_number":753,"context_line":"                holes \u003d [x for x in range(len(nodes))"},{"line_number":754,"context_line":"                         if x not in chunk_index.values()]"},{"line_number":755,"context_line":"                holes.sort()"},{"line_number":756,"context_line":"                handoff_conns.sort(key\u003doperator.attrgetter(\u0027index\u0027))"},{"line_number":757,"context_line":""},{"line_number":758,"context_line":"                for hole, conn in zip(holes, handoff_conns):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac7a964_a90d9039","line":755,"updated":"2014-08-15 18:24:56.000000000","message":"won\u0027t this list (holes) already be sorted simply based on how its created - for x in range will always be 0..len(nodes) right?","commit_id":"97a5c3557b0c70a69fbdf8ed0f436812f255cc32"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"e0ccef68cec287703cf084344b2c5987ade44a8d","unresolved":false,"context_lines":[{"line_number":757,"context_line":""},{"line_number":758,"context_line":"                for hole, conn in zip(holes, handoff_conns):"},{"line_number":759,"context_line":"                    chunk_index[conn] \u003d hole"},{"line_number":760,"context_line":""},{"line_number":761,"context_line":"                for conn in conns:"},{"line_number":762,"context_line":"                    conn.failed \u003d False"},{"line_number":763,"context_line":"                    conn.queue \u003d Queue(self.app.put_queue_depth)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac7a964_f03ec728","line":760,"updated":"2014-08-14 12:51:35.000000000","message":"sidenote:  with this code, plus the PUT handling code, I think we\u0027re going to add a lot more to this function that initially though.  Think we should get it all in and then take a good look at refactoring (at least pulling some of this out into functions)","commit_id":"97a5c3557b0c70a69fbdf8ed0f436812f255cc32"}]}
