)]}'
{"bin/swift-reconciler-enqueue":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"cf728398a979161186df5b9dd54d36a98d4db6cf","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    }"},{"line_number":53,"context_line":"    direct_put_container_entry(container_ring,"},{"line_number":54,"context_line":"                               \u0027.misplaced_objects\u0027, container, obj,"},{"line_number":55,"context_line":"                               headers\u003dheaders)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"def main():"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"AAAAWH%2F%2FnZw%3D","line":55,"updated":"2014-03-15 01:47:55.000000000","message":"this should use the real reconciler.enqueue.add_to_queue function","commit_id":"58401fa6fdea4d3b0b809e308db7242cb9626c16"}],"swift/common/internal_client.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"cf728398a979161186df5b9dd54d36a98d4db6cf","unresolved":false,"context_lines":[{"line_number":626,"context_line":"        headers \u003d headers or {}"},{"line_number":627,"context_line":"        path \u003d self.make_path(account, container, obj)"},{"line_number":628,"context_line":"        resp \u003d self.make_request(\u0027GET\u0027, path, headers, acceptable_statuses)"},{"line_number":629,"context_line":"        return (resp.status_int, resp.headers, resp.app_iter)"},{"line_number":630,"context_line":""},{"line_number":631,"context_line":"    def iter_object_lines("},{"line_number":632,"context_line":"            self, account, container, obj, headers\u003dNone,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2FnXY%3D","line":629,"updated":"2014-03-15 01:47:55.000000000","message":"I didn\u0027t see a test for this one added to test_internal_client.py","commit_id":"58401fa6fdea4d3b0b809e308db7242cb9626c16"}],"swift/common/utils.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"cf728398a979161186df5b9dd54d36a98d4db6cf","unresolved":false,"context_lines":[{"line_number":540,"context_line":""},{"line_number":541,"context_line":"def last_modified_date_to_timestamp(last_modified_date_str):"},{"line_number":542,"context_line":"    \"\"\""},{"line_number":543,"context_line":"    Convert a last modified date (liked you\u0027d get from a container listing,"},{"line_number":544,"context_line":"    e.g. 2014-02-28T23:22:36.698390) to a float."},{"line_number":545,"context_line":"    \"\"\""},{"line_number":546,"context_line":"    return float("}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2FnXQ%3D","line":543,"updated":"2014-03-15 01:47:55.000000000","message":"s/liked/like/","commit_id":"58401fa6fdea4d3b0b809e308db7242cb9626c16"}],"swift/container/reconciler.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"cf728398a979161186df5b9dd54d36a98d4db6cf","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def pop_queue(self, container, obj, q_timestamp):"},{"line_number":183,"context_line":"        self.logger.debug(\u0027deleting %s (%s) from the queue\u0027, obj, q_timestamp)"},{"line_number":184,"context_line":"        headers \u003d {\u0027X-Timestamp\u0027: slightly_later_timestamp(q_timestamp)}"},{"line_number":185,"context_line":"        direct_delete_container_entry("},{"line_number":186,"context_line":"            self.swift.container_ring, MISPLACED_OBJECTS_ACCOUNT,"},{"line_number":187,"context_line":"            container, obj, headers\u003dheaders)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2FnYU%3D","line":184,"updated":"2014-03-15 01:47:55.000000000","message":"so this one is fine, it\u0027s deleting a row in the container - it could just as easily use time.time (maybe it should!?)","commit_id":"58401fa6fdea4d3b0b809e308db7242cb9626c16"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"cf728398a979161186df5b9dd54d36a98d4db6cf","unresolved":false,"context_lines":[{"line_number":192,"context_line":"                          \u0027%s/%s/%s\u0027 % (account, container, obj), timestamp,"},{"line_number":193,"context_line":"                          storage_policy_index)"},{"line_number":194,"context_line":"        headers \u003d {\u0027X-Timestamp\u0027: slightly_later_timestamp(timestamp),"},{"line_number":195,"context_line":"                   \u0027X-Override-Storage-Policy-Index\u0027: storage_policy_index}"},{"line_number":196,"context_line":"        self.swift.delete_object(account, container, obj,"},{"line_number":197,"context_line":"                                 headers\u003dheaders, acceptable_statuses\u003d(2, 4))"},{"line_number":198,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2FnYM%3D","line":195,"updated":"2014-03-15 01:47:55.000000000","message":"this one is scarier - I\u0027m pretty sure we could prove that if your DELETE request does not include X-Container-Update headers that is safe for the Object Server to accept a .ts timestamp with an \u003e\u003d to .data\u0027s timestamp without breaking any consistency processes.\n\nI\u0027ll look into that.","commit_id":"58401fa6fdea4d3b0b809e308db7242cb9626c16"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"cf728398a979161186df5b9dd54d36a98d4db6cf","unresolved":false,"context_lines":[{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        self.throw_tombstones(account, container, obj, real_ts,"},{"line_number":277,"context_line":"                              real_storage_policy_index)"},{"line_number":278,"context_line":"        return True"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    def log_stats(self):"},{"line_number":281,"context_line":"        now \u003d time.time()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2FnYI%3D","line":278,"updated":"2014-03-15 01:47:55.000000000","message":"be nice to see this method broken up a bit - it\u0027s go so many (too many?) early returns and conditional blocks...","commit_id":"58401fa6fdea4d3b0b809e308db7242cb9626c16"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"cf728398a979161186df5b9dd54d36a98d4db6cf","unresolved":false,"context_lines":[{"line_number":317,"context_line":"            self.logger.debug(\u0027finished container %s\u0027, container)"},{"line_number":318,"context_line":"            self.swift.delete_container("},{"line_number":319,"context_line":"                MISPLACED_OBJECTS_ACCOUNT, container,"},{"line_number":320,"context_line":"                acceptable_statuses\u003d(2, 404, 409, 412))"},{"line_number":321,"context_line":"        self.log_stats()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2FnYE%3D","line":320,"updated":"2014-03-15 01:47:55.000000000","message":"rather than always issue the DELETE and don\u0027t care - I think it\u0027d be better to iterate over containers, and track which ones are empty (found_objects \u003d False) - then just issue the delete on empty containers that are older than say.... reclaim age?","commit_id":"58401fa6fdea4d3b0b809e308db7242cb9626c16"},{"author":{"_account_id":2649,"name":"Zhang Hua","email":"zhuadl@cn.ibm.com","username":"zhang-hare"},"change_message_id":"f81563da284fcc74aacf870b92f15a28f81797e8","unresolved":false,"context_lines":[{"line_number":170,"context_line":"    # This either worked or it didn\u0027t; if it didn\u0027t, we\u0027ll retry on the next"},{"line_number":171,"context_line":"    # reconciler loop when we see the queue entry again."},{"line_number":172,"context_line":"    pool.waitall()"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"def direct_cleanup_object(object_ring, account_name, container_name,"},{"line_number":175,"context_line":"                          object_name, headers\u003dNone):"},{"line_number":176,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAWH%2F%2BYFM%3D","line":173,"updated":"2014-03-27 08:58:47.000000000","message":"2 blank lines","commit_id":"f01466220302c1deb6bd7d0bfbfcebdecb0a723c"}],"swift/proxy/controllers/obj.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"cf728398a979161186df5b9dd54d36a98d4db6cf","unresolved":false,"context_lines":[{"line_number":453,"context_line":"        obj_ring \u003d self.app.get_object_ring(policy_idx)"},{"line_number":454,"context_line":"        # pass the policy index to storage nodes via req header"},{"line_number":455,"context_line":"        req.headers[POLICY_INDEX] \u003d req.headers.get("},{"line_number":456,"context_line":"            \u0027X-Storage-Policy-Index-Override\u0027, policy_idx)"},{"line_number":457,"context_line":"        container_partition \u003d container_info[\u0027partition\u0027]"},{"line_number":458,"context_line":"        containers \u003d container_info[\u0027nodes\u0027]"},{"line_number":459,"context_line":"        req.acl \u003d container_info[\u0027write_acl\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2FnXE%3D","line":456,"updated":"2014-03-15 01:47:55.000000000","message":"Need a gatekeeper change to keep a client from using this header.  DELETE too.","commit_id":"58401fa6fdea4d3b0b809e308db7242cb9626c16"}],"test/unit/proxy/test_server.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"cf728398a979161186df5b9dd54d36a98d4db6cf","unresolved":false,"context_lines":[{"line_number":905,"context_line":"        if hasattr(_test_servers[-1], \u0027_filesystem\u0027):"},{"line_number":906,"context_line":"            # ironically, the _filesystem attribute on the object server means"},{"line_number":907,"context_line":"            # the in-memory diskfile is in use, so this test does not apply"},{"line_number":908,"context_line":"            return"},{"line_number":909,"context_line":""},{"line_number":910,"context_line":"        prosrv \u003d _test_servers[0]"},{"line_number":911,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2FnX0%3D","line":908,"updated":"2014-03-15 01:47:55.000000000","message":"this was copied from somewhere right?  should probably be a decorator.","commit_id":"58401fa6fdea4d3b0b809e308db7242cb9626c16"}]}
