)]}'
{"test/unit/obj/test_updater.py":[{"author":{"_account_id":14766,"name":"Kazuhiro MIYAHARA","email":"miyahara.kazuhiro@lab.ntt.co.jp","username":"miyahara"},"change_message_id":"cb46da8e13217f155c18e42923d309db09f1e389","unresolved":false,"context_lines":[{"line_number":436,"context_line":""},{"line_number":437,"context_line":"    def test_obj_put_async_updates(self):"},{"line_number":438,"context_line":"        ts_iter \u003d make_timestamp_iter()"},{"line_number":439,"context_line":"        policies \u003d (list(POLICIES))"},{"line_number":440,"context_line":"        random.shuffle(policies)"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"        # setup updater"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a74a57a_83f498f2","line":439,"range":{"start_line":439,"start_character":8,"end_line":439,"end_character":35},"updated":"2016-11-25 10:14:40.000000000","message":"Why \"list(POLICIES)\" is put inside parentheses?","commit_id":"4e5b5b24209042e48b361c75f606e7076bbbba26"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f06716d0c3b516d6603ad60df086fda889ab62cc","unresolved":false,"context_lines":[{"line_number":436,"context_line":""},{"line_number":437,"context_line":"    def test_obj_put_async_updates(self):"},{"line_number":438,"context_line":"        ts_iter \u003d make_timestamp_iter()"},{"line_number":439,"context_line":"        policies \u003d (list(POLICIES))"},{"line_number":440,"context_line":"        random.shuffle(policies)"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"        # setup updater"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a74a57a_ac141c44","line":439,"range":{"start_line":439,"start_character":8,"end_line":439,"end_character":35},"in_reply_to":"5a74a57a_83f498f2","updated":"2016-11-25 12:21:17.000000000","message":"Done. I simply forgot to delete the parentheses.","commit_id":"4e5b5b24209042e48b361c75f606e7076bbbba26"},{"author":{"_account_id":14766,"name":"Kazuhiro MIYAHARA","email":"miyahara.kazuhiro@lab.ntt.co.jp","username":"miyahara"},"change_message_id":"cb46da8e13217f155c18e42923d309db09f1e389","unresolved":false,"context_lines":[{"line_number":513,"context_line":"        expected[\u0027X-Backend-Storage-Policy-Index\u0027] \u003d str(int(policies[1]))"},{"line_number":514,"context_line":"        do_test(headers_out, expected)"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"        # check for case insensitivity"},{"line_number":517,"context_line":"        headers_out[\u0027user-agent\u0027] \u003d \u0027object-server %s\u0027 % os.getpid()"},{"line_number":518,"context_line":"        headers_out[\u0027x-backend-storage-policy-index\u0027] \u003d int(policies[1])"},{"line_number":519,"context_line":"        do_test(headers_out, expected)"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a74a57a_691cbb77","line":518,"range":{"start_line":516,"start_character":8,"end_line":518,"end_character":72},"updated":"2016-11-25 10:14:40.000000000","message":"headers_out has not only lower-style keys (\u0027user-agent\u0027 and \u0027x-backend-storage-policy-index\u0027) but also title-style keys (\u0027User-Agent\u0027 and \u0027X-Backend-Storage-Policy-Index\u0027).\nIMO, the title-style keys should be deleted from headers_out for testing case insensitivity.","commit_id":"4e5b5b24209042e48b361c75f606e7076bbbba26"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f06716d0c3b516d6603ad60df086fda889ab62cc","unresolved":false,"context_lines":[{"line_number":513,"context_line":"        expected[\u0027X-Backend-Storage-Policy-Index\u0027] \u003d str(int(policies[1]))"},{"line_number":514,"context_line":"        do_test(headers_out, expected)"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"        # check for case insensitivity"},{"line_number":517,"context_line":"        headers_out[\u0027user-agent\u0027] \u003d \u0027object-server %s\u0027 % os.getpid()"},{"line_number":518,"context_line":"        headers_out[\u0027x-backend-storage-policy-index\u0027] \u003d int(policies[1])"},{"line_number":519,"context_line":"        do_test(headers_out, expected)"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a74a57a_4c2aa87f","line":518,"range":{"start_line":516,"start_character":8,"end_line":518,"end_character":72},"in_reply_to":"5a74a57a_691cbb77","updated":"2016-11-25 12:21:17.000000000","message":"good catch.","commit_id":"4e5b5b24209042e48b361c75f606e7076bbbba26"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"f1ff26a36740da1572eb0282f9d0a24bc57659f5","unresolved":false,"context_lines":[{"line_number":451,"context_line":""},{"line_number":452,"context_line":"        def do_test(headers_out, expected):"},{"line_number":453,"context_line":"            # write an async"},{"line_number":454,"context_line":"            dfmanager \u003d DiskFileManager(conf, daemon.logger)"},{"line_number":455,"context_line":"            account, container, obj \u003d \u0027a\u0027, \u0027c\u0027, \u0027o\u0027"},{"line_number":456,"context_line":"            op \u003d \u0027PUT\u0027"},{"line_number":457,"context_line":"            data \u003d {\u0027op\u0027: op, \u0027account\u0027: account, \u0027container\u0027: container,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_0bfb08c2","line":454,"range":{"start_line":454,"start_character":12,"end_line":454,"end_character":60},"updated":"2016-11-28 08:12:24.000000000","message":"I know this is no change here for original but I\u0027m realizing the inconsistent use for DiskFileManager. For now POLICIES is from storage_policy module so that it can include EC Storage Policy and hopefully we should use ECDiskFileManager for that.\n\nHowever, you know, this is safe *right now* because the we are sufficient with DiskFileManager for both repl and EC policy because pickle_async_update at L459 and the related methods are defined at BaseDiskFileManager or common modules so that no problem exists except *it looks odd*.","commit_id":"dfc8e61cf5fc68e00815d6de51eb2b057b411772"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"f1ff26a36740da1572eb0282f9d0a24bc57659f5","unresolved":false,"context_lines":[{"line_number":468,"context_line":"            fake_status_codes \u003d ["},{"line_number":469,"context_line":"                200,  # object update success"},{"line_number":470,"context_line":"                200,  # object update success"},{"line_number":471,"context_line":"                200,  # object update conflict"},{"line_number":472,"context_line":"            ]"},{"line_number":473,"context_line":"            with mocked_http_conn(*fake_status_codes, give_connect\u003dcapture):"},{"line_number":474,"context_line":"                daemon.run_once()"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_0b222852","line":471,"range":{"start_line":471,"start_character":38,"end_line":471,"end_character":46},"updated":"2016-11-28 08:12:24.000000000","message":"it looks success with 200 response, it has existed since older code though. I don\u0027t know why we say it\u0027s conflict but it looks weird.","commit_id":"dfc8e61cf5fc68e00815d6de51eb2b057b411772"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ce8b0ad9399211b6cdc7519162542df9e72c0c70","unresolved":false,"context_lines":[{"line_number":468,"context_line":"            fake_status_codes \u003d ["},{"line_number":469,"context_line":"                200,  # object update success"},{"line_number":470,"context_line":"                200,  # object update success"},{"line_number":471,"context_line":"                200,  # object update conflict"},{"line_number":472,"context_line":"            ]"},{"line_number":473,"context_line":"            with mocked_http_conn(*fake_status_codes, give_connect\u003dcapture):"},{"line_number":474,"context_line":"                daemon.run_once()"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5201f7_9d5cc47e","line":471,"range":{"start_line":471,"start_character":38,"end_line":471,"end_character":46},"in_reply_to":"5a74a57a_0b222852","updated":"2017-01-11 17:28:43.000000000","message":"Agreed, seems rather strange :-/","commit_id":"dfc8e61cf5fc68e00815d6de51eb2b057b411772"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"f1ff26a36740da1572eb0282f9d0a24bc57659f5","unresolved":false,"context_lines":[{"line_number":477,"context_line":"                ip, part, method, path, headers, qs, ssl \u003d request_args"},{"line_number":478,"context_line":"                self.assertEqual(method, \u0027PUT\u0027)"},{"line_number":479,"context_line":"                self.assertDictEqual(expected, headers)"},{"line_number":480,"context_line":"            self.assertEqual("},{"line_number":481,"context_line":"                daemon.logger.get_increment_counts(),"},{"line_number":482,"context_line":"                {\u0027successes\u0027: 1, \u0027unlinks\u0027: 1, \u0027async_pendings\u0027: 1})"},{"line_number":483,"context_line":"            self.assertFalse(os.listdir(async_dir))"},{"line_number":484,"context_line":"            daemon.logger.clear()"},{"line_number":485,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_4b9d0065","line":482,"range":{"start_line":480,"start_character":11,"end_line":482,"end_character":68},"updated":"2016-11-28 08:12:24.000000000","message":"Damnn! To assert the statement correctly, it might be worth to use separate debug_logger for pickling the async_pendings and for updater because increments for \u0027successes\u0027 and \u0027unlinks\u0027 happen in updater but \u0027async_pendings\u0027 in preparing the test environment.\n\nI tried that with https://gist.github.com/bloodeagle40234/244a839c351c97dda797e304301a7956\n\nIf you prefer that, please consider to squash this into here.\nHowever, I know this stats may be far from the patch intention so that it\u0027s ok to pend it to another patch.","commit_id":"dfc8e61cf5fc68e00815d6de51eb2b057b411772"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ce8b0ad9399211b6cdc7519162542df9e72c0c70","unresolved":false,"context_lines":[{"line_number":480,"context_line":"            self.assertEqual("},{"line_number":481,"context_line":"                daemon.logger.get_increment_counts(),"},{"line_number":482,"context_line":"                {\u0027successes\u0027: 1, \u0027unlinks\u0027: 1, \u0027async_pendings\u0027: 1})"},{"line_number":483,"context_line":"            self.assertFalse(os.listdir(async_dir))"},{"line_number":484,"context_line":"            daemon.logger.clear()"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"        ts \u003d next(ts_iter)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5201f7_3dbd9868","line":483,"updated":"2017-01-11 17:28:43.000000000","message":"Worth having a\n\n self.assertTrue(os.listdir(async_dir))\n\nimmediately after the pickle_async_update call?","commit_id":"dfc8e61cf5fc68e00815d6de51eb2b057b411772"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ce8b0ad9399211b6cdc7519162542df9e72c0c70","unresolved":false,"context_lines":[{"line_number":492,"context_line":"            \u0027x-etag\u0027: \u0027d41d8cd98f00b204e9800998ecf8427e\u0027,"},{"line_number":493,"context_line":"            \u0027x-timestamp\u0027: ts.normal,"},{"line_number":494,"context_line":"            \u0027X-Backend-Storage-Policy-Index\u0027: int(policies[0]),"},{"line_number":495,"context_line":"            \u0027User-Agent\u0027: \u0027object-server %s\u0027 % os.getpid()"},{"line_number":496,"context_line":"        }"},{"line_number":497,"context_line":"        expected \u003d {"},{"line_number":498,"context_line":"            \u0027X-Size\u0027: \u00270\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5201f7_80fb7b7a","line":495,"range":{"start_line":495,"start_character":47,"end_line":495,"end_character":58},"updated":"2017-01-11 17:28:43.000000000","message":"nit: Might have been more representative to use some arbitrary int instead.","commit_id":"dfc8e61cf5fc68e00815d6de51eb2b057b411772"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ce8b0ad9399211b6cdc7519162542df9e72c0c70","unresolved":false,"context_lines":[{"line_number":508,"context_line":"        headers_out[\u0027X-Backend-Storage-Policy-Index\u0027] \u003d None"},{"line_number":509,"context_line":"        do_test(headers_out, expected)"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":"        # updater should not overwrite a mismatched policy header"},{"line_number":512,"context_line":"        headers_out[\u0027X-Backend-Storage-Policy-Index\u0027] \u003d int(policies[1])"},{"line_number":513,"context_line":"        expected[\u0027X-Backend-Storage-Policy-Index\u0027] \u003d str(int(policies[1]))"},{"line_number":514,"context_line":"        do_test(headers_out, expected)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5201f7_00186b1d","line":511,"updated":"2017-01-11 17:28:43.000000000","message":"...can that even happen? Would we ever find the object again?","commit_id":"dfc8e61cf5fc68e00815d6de51eb2b057b411772"}]}
