)]}'
{"swift/common/swob.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"98043b29442bb52fa737899bfdddb685bf7fbe44","unresolved":false,"context_lines":[{"line_number":938,"context_line":""},{"line_number":939,"context_line":"    @property"},{"line_number":940,"context_line":"    def is_chunked(self):"},{"line_number":941,"context_line":"        return \u0027chunked\u0027 in self.headers.get(\u0027transfer-encoding\u0027, \u0027\u0027)"},{"line_number":942,"context_line":""},{"line_number":943,"context_line":"    @property"},{"line_number":944,"context_line":"    def url(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_62e76e47","line":941,"updated":"2015-03-17 00:02:40.000000000","message":"seems like a good candidate for a simple test in test.unit.common.test_swob","commit_id":"65811da5130863d597adff178334b3efb4473e23"}],"swift/proxy/controllers/obj.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"98043b29442bb52fa737899bfdddb685bf7fbe44","unresolved":false,"context_lines":[{"line_number":873,"context_line":"        else:"},{"line_number":874,"context_line":"            req.headers[\u0027X-Timestamp\u0027] \u003d Timestamp(time.time()).internal"},{"line_number":875,"context_line":""},{"line_number":876,"context_line":"        if object_versions and not req.environ.get(\u0027swift_versioned_copy\u0027):"},{"line_number":877,"context_line":"            is_manifest \u003d \u0027X-Object-Manifest\u0027 in req.headers or \\"},{"line_number":878,"context_line":"                          \u0027X-Object-Manifest\u0027 in hresp.headers"},{"line_number":879,"context_line":"            if hresp.status_int !\u003d HTTP_NOT_FOUND and not is_manifest:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_9febde77","side":"PARENT","line":876,"updated":"2015-03-17 00:02:40.000000000","message":"it sure seems like this if block are the one above are both using the same conditionals?","commit_id":"2a51d505f2a668b66d470a7d7079f7678104e828"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"98043b29442bb52fa737899bfdddb685bf7fbe44","unresolved":false,"context_lines":[{"line_number":869,"context_line":"            self.object_name \u003d orig_obj_name"},{"line_number":870,"context_line":"            self.container_name \u003d orig_container_name"},{"line_number":871,"context_line":"            self.account_name \u003d orig_account_name"},{"line_number":872,"context_line":"        return sink_req, source_resp"},{"line_number":873,"context_line":""},{"line_number":874,"context_line":"    def _make_copy_context(self, req, new_req, source_resp):"},{"line_number":875,"context_line":"        data_source \u003d iter(source_resp.app_iter)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_3a4be060","line":872,"updated":"2015-03-17 00:02:40.000000000","message":"the way this is written it sure looks like source_resp could potentially be a name error if self.GET blows up.  Oh... no nm, I guess it would just raise.  Which i guess was the idea behind the finally - safer to reset the monkey patched attributes before doing the exception handling...\n\nHrmm... i guess a new test to show how this works better would be helpful.","commit_id":"65811da5130863d597adff178334b3efb4473e23"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"98043b29442bb52fa737899bfdddb685bf7fbe44","unresolved":false,"context_lines":[{"line_number":954,"context_line":"            raise HTTPServiceUnavailable(request\u003dreq)"},{"line_number":955,"context_line":""},{"line_number":956,"context_line":"    def _transfer_data(self, req, data_source, chunk_hashers, putters, nodes,"},{"line_number":957,"context_line":"                       policy, etag_hasher, min_puts):"},{"line_number":958,"context_line":""},{"line_number":959,"context_line":"        statuses \u003d [p.current_status() for p in putters]"},{"line_number":960,"context_line":"        if (req.if_none_match is not None"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_62992ed0","line":957,"updated":"2015-03-17 00:02:40.000000000","message":"this is still a fairly big method and there\u0027s a good amount of EC specific churn in here.  I will be interesting to see how much more we can break it up so the ECObjectController can do less munging of the replicated PUT path.","commit_id":"65811da5130863d597adff178334b3efb4473e23"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"98043b29442bb52fa737899bfdddb685bf7fbe44","unresolved":false,"context_lines":[{"line_number":998,"context_line":"                        chunk_hashers[putter.hshr_index].update(backend_chunk)"},{"line_number":999,"context_line":"                    putter.send_chunk(backend_chunk)"},{"line_number":1000,"context_line":"                else:"},{"line_number":1001,"context_line":"                    putters.remove(putter)"},{"line_number":1002,"context_line":"            self._check_min_putters("},{"line_number":1003,"context_line":"                req, putters, min_puts, msg\u003d\u0027Object PUT exceptions during\u0027"},{"line_number":1004,"context_line":"                \u0027 send, %(conns)s/%(nodes)s required connections\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_2218161e","line":1001,"updated":"2015-03-17 00:02:40.000000000","message":"I think we should look at adding a close method to putters.","commit_id":"65811da5130863d597adff178334b3efb4473e23"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"98043b29442bb52fa737899bfdddb685bf7fbe44","unresolved":false,"context_lines":[{"line_number":1129,"context_line":"                req, putters, len(nodes), final_phase, min_resp,"},{"line_number":1130,"context_line":"                need_quorum\u003dneed_quorum)"},{"line_number":1131,"context_line":"        except HTTPException as resp:"},{"line_number":1132,"context_line":"            return resp"},{"line_number":1133,"context_line":""},{"line_number":1134,"context_line":"        if len(etags) \u003e 1 and policy.stores_objects_verbatim:"},{"line_number":1135,"context_line":"            self.app.logger.error("}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_02f4f2cd","line":1132,"updated":"2015-03-17 00:02:40.000000000","message":"so this is one of the places where https://review.openstack.org/#/c/156825/4/swift/proxy/controllers/obj.py,unified tries a little harder to close down backend connections.","commit_id":"65811da5130863d597adff178334b3efb4473e23"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"98043b29442bb52fa737899bfdddb685bf7fbe44","unresolved":false,"context_lines":[{"line_number":1249,"context_line":"            if source_resp.content_length \u003e constraints.MAX_FILE_SIZE:"},{"line_number":1250,"context_line":"                return HTTPRequestEntityTooLarge(request\u003dreq)"},{"line_number":1251,"context_line":"            req, data_source, update_response \u003d self._make_copy_context("},{"line_number":1252,"context_line":"                req, new_req, source_resp)"},{"line_number":1253,"context_line":"        else:"},{"line_number":1254,"context_line":"            reader \u003d req.environ[\u0027wsgi.input\u0027].read"},{"line_number":1255,"context_line":"            data_source \u003d iter(lambda: reader(self.app.client_chunk_size), \u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_ff7135df","line":1252,"updated":"2015-03-17 00:02:40.000000000","message":"the shuffling of new_req so you can keep the error response returns from the initial GET request in the main PUT method may not add a lot to the readability - OTOH, if you bury the error checking for content-length inside a single method that does all of the COPY work with a raise you still have guard on the 4/5XX status and figure out how to do an early return.\n\n    err_resp, req, data_source, update_response \u003d self._do_all_copy_things(req)\n    if err_resp:\n        return err_resp\n\n... and somewhere in _do_all_copy_things is a wart like:\n\n    if source_resp.status_int \u003e\u003d HTTP_MULTIPLE_CHOICES:\n        return source_resp, None, None, None\n\n... even if we could figure out how to make any swob response raise-able it\u0027d probably still feel like a goto exception.","commit_id":"65811da5130863d597adff178334b3efb4473e23"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"98043b29442bb52fa737899bfdddb685bf7fbe44","unresolved":false,"context_lines":[{"line_number":1253,"context_line":"        else:"},{"line_number":1254,"context_line":"            reader \u003d req.environ[\u0027wsgi.input\u0027].read"},{"line_number":1255,"context_line":"            data_source \u003d iter(lambda: reader(self.app.client_chunk_size), \u0027\u0027)"},{"line_number":1256,"context_line":"            update_response \u003d lambda req, resp: resp"},{"line_number":1257,"context_line":""},{"line_number":1258,"context_line":"        req, delete_at_container, delete_at_part, \\"},{"line_number":1259,"context_line":"            delete_at_nodes \u003d self._config_obj_expiration(req)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_fc1f836e","line":1256,"updated":"2015-03-17 00:02:40.000000000","message":"i hate this update_response callback, but I seem to remember trying to do with with a context manager was even worse somehow...\n\nyou either end up with a noop context manager for the common path - or two different entry points to _store_object depending on if you\u0027re using the client\u0027s req or the one you make up from copy.","commit_id":"65811da5130863d597adff178334b3efb4473e23"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"98043b29442bb52fa737899bfdddb685bf7fbe44","unresolved":false,"context_lines":[{"line_number":1262,"context_line":"            req, data_source, obj_ring, policy,"},{"line_number":1263,"context_line":"            nodes, partition,"},{"line_number":1264,"context_line":"            containers, container_partition,"},{"line_number":1265,"context_line":"            delete_at_nodes, delete_at_container, delete_at_part)"},{"line_number":1266,"context_line":"        return update_response(req, resp)"},{"line_number":1267,"context_line":""},{"line_number":1268,"context_line":"    @public"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_e23efeb8","line":1265,"updated":"2015-03-17 00:02:40.000000000","message":"it\u0027s nice to see how everything that EC will need to change in the object PUT path is buried under this method.","commit_id":"65811da5130863d597adff178334b3efb4473e23"}],"test/unit/proxy/test_sysmeta.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"98043b29442bb52fa737899bfdddb685bf7fbe44","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def close(self):"},{"line_number":79,"context_line":"        pass"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def __call__(self, ipaddr, port, device, partition, method, path,"},{"line_number":82,"context_line":"                 headers\u003dNone, query_string\u003dNone):"},{"line_number":83,"context_line":"        self.path \u003d quote(\u0027/\u0027 + device + \u0027/\u0027 + str(partition) + path)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_ff8dba7d","line":80,"updated":"2015-03-17 00:02:40.000000000","message":"hey that\u0027s a good sign!","commit_id":"65811da5130863d597adff178334b3efb4473e23"}]}
