)]}'
{"swift/cli/info.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ed2aad887ad1252884c6f0a536ee747eb05d467f","unresolved":false,"context_lines":[{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        print(\u0027Path: %s\u0027 % path)"},{"line_number":225,"context_line":"        if info[\u0027is_deleted\u0027]:"},{"line_number":226,"context_line":"            print(\u0027  (Deleted)\u0027)"},{"line_number":227,"context_line":"        print(\u0027  Account: %s\u0027 % account)"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        if db_type \u003d\u003d \u0027container\u0027:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_cb10ed03","line":226,"updated":"2019-11-08 04:08:25.000000000","message":"This could probably be its own change -- totally stands on its own merits.","commit_id":"5d69a802b612b6954ff50a1619e524a684f08d08"}],"swift/common/db.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ed2aad887ad1252884c6f0a536ee747eb05d467f","unresolved":false,"context_lines":[{"line_number":529,"context_line":""},{"line_number":530,"context_line":"        :returns: True if the DB is considered to be deleted, False otherwise"},{"line_number":531,"context_line":"        \"\"\""},{"line_number":532,"context_line":"        raise NotImplementedError()"},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"    def _is_deleted(self, conn):"},{"line_number":535,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_abb25105","line":532,"updated":"2019-11-08 04:08:25.000000000","message":"I *think* I like this being the interface to implement more? So we have get_info that shims into _do_get_info_query, and _is_deleted that shims into getting info (which should be about the same expense regardless of how many columns we grab) and _is_deleted_info. A little convoluted, but maybe manageable?\n\nI wonder If I could take out a layer now....","commit_id":"5d69a802b612b6954ff50a1619e524a684f08d08"}],"swift/common/db_replicator.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"abffc9280a522740bae6a4fdb48c13b0b0032402","unresolved":false,"context_lines":[{"line_number":890,"context_line":"        if len(args) \u003e\u003d 9:"},{"line_number":891,"context_line":"            status, status_changed_at \u003d args[7:9]"},{"line_number":892,"context_line":"        else:"},{"line_number":893,"context_line":"            status \u003d status_changed_at \u003d None"},{"line_number":894,"context_line":""},{"line_number":895,"context_line":"        remote_info \u003d {"},{"line_number":896,"context_line":"            \u0027point\u0027: remote_sync,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_538ef932","line":893,"updated":"2019-11-07 07:54:05.000000000","message":"the container overrides this (and already handles status_changed_at) - it\u0027s getting a little hard to keep track of if changes should be in common on the respective backend/replicator modules","commit_id":"5d69a802b612b6954ff50a1619e524a684f08d08"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ed2aad887ad1252884c6f0a536ee747eb05d467f","unresolved":false,"context_lines":[{"line_number":890,"context_line":"        if len(args) \u003e\u003d 9:"},{"line_number":891,"context_line":"            status, status_changed_at \u003d args[7:9]"},{"line_number":892,"context_line":"        else:"},{"line_number":893,"context_line":"            status \u003d status_changed_at \u003d None"},{"line_number":894,"context_line":""},{"line_number":895,"context_line":"        remote_info \u003d {"},{"line_number":896,"context_line":"            \u0027point\u0027: remote_sync,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_eb0129b7","line":893,"in_reply_to":"3fa7e38b_538ef932","updated":"2019-11-08 04:08:25.000000000","message":"Yeah, fair -- I\u0027m not sure this is right at all -- but account replicator is basically db replicator.","commit_id":"5d69a802b612b6954ff50a1619e524a684f08d08"}],"swift/common/memcached.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ed2aad887ad1252884c6f0a536ee747eb05d467f","unresolved":false,"context_lines":[{"line_number":266,"context_line":"                                 python-memcached interface. This"},{"line_number":267,"context_line":"                                 implementation ignores it."},{"line_number":268,"context_line":"        \"\"\""},{"line_number":269,"context_line":"        logging.error(\u0027memcache.set(%r, %r)\u0027, key, value)"},{"line_number":270,"context_line":"        key \u003d md5hash(key)"},{"line_number":271,"context_line":"        timeout \u003d sanitize_timeout(time)"},{"line_number":272,"context_line":"        flags \u003d 0"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_0b6285ae","line":269,"updated":"2019-11-08 04:08:25.000000000","message":"Yeah, back all of this out.","commit_id":"5d69a802b612b6954ff50a1619e524a684f08d08"}],"swift/container/backend.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"abffc9280a522740bae6a4fdb48c13b0b0032402","unresolved":false,"context_lines":[{"line_number":834,"context_line":"            try:"},{"line_number":835,"context_line":"                data \u003d conn.execute((\u0027\u0027\u0027"},{"line_number":836,"context_line":"                    SELECT account, container, created_at, put_timestamp,"},{"line_number":837,"context_line":"                        delete_timestamp, status, status_changed_at,"},{"line_number":838,"context_line":"                        object_count, bytes_used,"},{"line_number":839,"context_line":"                        reported_put_timestamp, reported_delete_timestamp,"},{"line_number":840,"context_line":"                        reported_object_count, reported_bytes_used, hash,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_9310f102","line":837,"updated":"2019-11-07 07:54:05.000000000","message":"what were containers doing with status_changed_at if they weren\u0027t ever looking at status?\n\n... it had something to do with policy reconciliation?","commit_id":"5d69a802b612b6954ff50a1619e524a684f08d08"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ed2aad887ad1252884c6f0a536ee747eb05d467f","unresolved":false,"context_lines":[{"line_number":834,"context_line":"            try:"},{"line_number":835,"context_line":"                data \u003d conn.execute((\u0027\u0027\u0027"},{"line_number":836,"context_line":"                    SELECT account, container, created_at, put_timestamp,"},{"line_number":837,"context_line":"                        delete_timestamp, status, status_changed_at,"},{"line_number":838,"context_line":"                        object_count, bytes_used,"},{"line_number":839,"context_line":"                        reported_put_timestamp, reported_delete_timestamp,"},{"line_number":840,"context_line":"                        reported_object_count, reported_bytes_used, hash,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_8b44351b","line":837,"in_reply_to":"3fa7e38b_9310f102","updated":"2019-11-08 04:08:25.000000000","message":"Yeah, something to sort out which policy should win, I think. I forget.","commit_id":"5d69a802b612b6954ff50a1619e524a684f08d08"}],"test/probe/test_account_replicates_delete_status.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"abffc9280a522740bae6a4fdb48c13b0b0032402","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        with self.assertRaises(ClientException) as caught:"},{"line_number":68,"context_line":"            direct_get_account(nodes[0], part, self.account)"},{"line_number":69,"context_line":"        self.assertEqual(caught.exception.http_status, 404)"},{"line_number":70,"context_line":"        direct_get_account(nodes[1], part, self.account)  # Should 200"},{"line_number":71,"context_line":"        direct_get_account(nodes[2], part, self.account)  # Should 200"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_f369258c","line":69,"updated":"2019-11-07 07:54:05.000000000","message":"oh, i like that phrasing \"as caught\"","commit_id":"5d69a802b612b6954ff50a1619e524a684f08d08"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9687b3960d3c9a8c7a9849be6a1d860188802d5a","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        # Since we have some replicas that aren\u0027t marked as deleted, external"},{"line_number":74,"context_line":"        # clients can still use the account"},{"line_number":75,"context_line":"        _policy, container, obj \u003d self.all_objects[1]"},{"line_number":76,"context_line":"        client.head_object(self.url, self.token, container, obj)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        Manager([\u0027account-replicator\u0027]).once()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_b3b88de8","line":75,"range":{"start_line":75,"start_character":51,"end_line":75,"end_character":52},"updated":"2019-11-07 07:45:33.000000000","message":"So... yeah... this test fails if you use self.all_objects[0] -- apparently we default in policy-0 so even though the container 404s, we can find data *if the container uses policy-0*. :-/","commit_id":"5d69a802b612b6954ff50a1619e524a684f08d08"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ed2aad887ad1252884c6f0a536ee747eb05d467f","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        # Since we have some replicas that aren\u0027t marked as deleted, external"},{"line_number":74,"context_line":"        # clients can still use the account"},{"line_number":75,"context_line":"        _policy, container, obj \u003d self.all_objects[1]"},{"line_number":76,"context_line":"        client.head_object(self.url, self.token, container, obj)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        Manager([\u0027account-replicator\u0027]).once()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_4bc39d58","line":75,"range":{"start_line":75,"start_character":51,"end_line":75,"end_character":52},"in_reply_to":"3fa7e38b_b3b88de8","updated":"2019-11-08 04:08:25.000000000","message":"Looks like this is true not just on master, but for a while on master -- I reproed on 2.10.0 before giving up.","commit_id":"5d69a802b612b6954ff50a1619e524a684f08d08"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9687b3960d3c9a8c7a9849be6a1d860188802d5a","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        print(memcache.get(get_cache_key(self.account, container)))"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        # Now it\u0027s gone"},{"line_number":109,"context_line":"        with self.assertRaises(client.ClientException) as caught:"},{"line_number":110,"context_line":"            client.get_object(self.url, self.token, container, obj)"},{"line_number":111,"context_line":"        self.assertEqual(caught.exception.http_status, 404)"},{"line_number":112,"context_line":"        # TODO: grab one of the broker, fix him so he\u0027s not deleted any more,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_73b21509","line":109,"range":{"start_line":109,"start_character":38,"end_line":109,"end_character":53},"updated":"2019-11-07 07:45:33.000000000","message":"Not raised on policy-0","commit_id":"5d69a802b612b6954ff50a1619e524a684f08d08"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ed2aad887ad1252884c6f0a536ee747eb05d467f","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        print(memcache.get(get_cache_key(self.account, container)))"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        # Now it\u0027s gone"},{"line_number":109,"context_line":"        with self.assertRaises(client.ClientException) as caught:"},{"line_number":110,"context_line":"            client.get_object(self.url, self.token, container, obj)"},{"line_number":111,"context_line":"        self.assertEqual(caught.exception.http_status, 404)"},{"line_number":112,"context_line":"        # TODO: grab one of the broker, fix him so he\u0027s not deleted any more,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_6b91b953","line":109,"range":{"start_line":109,"start_character":38,"end_line":109,"end_character":53},"in_reply_to":"3fa7e38b_73b21509","updated":"2019-11-08 04:08:25.000000000","message":"Guess I gotta look at the account/container layers instead.","commit_id":"5d69a802b612b6954ff50a1619e524a684f08d08"}]}
