)]}'
{"swift/container/server.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"be260626960c50078fe0c7fcc94a8fd812a73f56","unresolved":false,"context_lines":[{"line_number":334,"context_line":"                # redirect if a shard range exists for the object name"},{"line_number":335,"context_line":"                redirect \u003d self._find_shard_location(req, broker, obj)"},{"line_number":336,"context_line":"                if redirect:"},{"line_number":337,"context_line":"                    return redirect"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"                broker.delete_object(obj, req.headers.get(\u0027x-timestamp\u0027),"},{"line_number":340,"context_line":"                                     obj_policy_index)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f515b1d_3bd52f44","line":337,"updated":"2017-10-06 10:13:58.000000000","message":"+1","commit_id":"972dec53fa4c843cbbe54426820bbf6bb46c7dda"}],"swift/container/sharder.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"be260626960c50078fe0c7fcc94a8fd812a73f56","unresolved":false,"context_lines":[{"line_number":1139,"context_line":"        while True:"},{"line_number":1140,"context_line":"            objects \u003d broker.get_objects(CONTAINER_LISTING_LIMIT, **qry)"},{"line_number":1141,"context_line":"            broker_to_update.merge_items(objects)"},{"line_number":1142,"context_line":"            if len(objects) \u003c CONTAINER_LISTING_LIMIT:"},{"line_number":1143,"context_line":"                break"},{"line_number":1144,"context_line":"            qry[\u0027marker\u0027] \u003d objects[-1][\u0027name\u0027]"},{"line_number":1145,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7f515b1d_3b3acf97","line":1142,"updated":"2017-10-06 10:13:58.000000000","message":"+1","commit_id":"972dec53fa4c843cbbe54426820bbf6bb46c7dda"}],"swift/obj/server.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"be260626960c50078fe0c7fcc94a8fd812a73f56","unresolved":false,"context_lines":[{"line_number":262,"context_line":"                                     logging information."},{"line_number":263,"context_line":"        :param container_path: optional path in the form `\u003caccount/container\u003e`"},{"line_number":264,"context_line":"            to which the update should be sent. If given this path will be used"},{"line_number":265,"context_line":"            instead of constructing a path from the the ``account`` and"},{"line_number":266,"context_line":"            ``container`` params."},{"line_number":267,"context_line":"        \"\"\""},{"line_number":268,"context_line":"        if logger_thread_locals:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f515b1d_5b058bc1","side":"PARENT","line":265,"range":{"start_line":265,"start_character":48,"end_line":265,"end_character":55},"updated":"2017-10-06 10:13:58.000000000","message":"it\u0027s weird how it seems that a double \u0027the\u0027 typo occurs so often.","commit_id":"487131e34a97608f73186a30b5b81d2dcddb77d0"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"be260626960c50078fe0c7fcc94a8fd812a73f56","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        if len(conthosts) !\u003d len(contdevices):"},{"line_number":333,"context_line":"            # This shouldn\u0027t happen unless there\u0027s a bug in the proxy,"},{"line_number":334,"context_line":"            # but if there is, we want to know about it."},{"line_number":335,"context_line":"            self.logger.error("},{"line_number":336,"context_line":"                \u0027Container update failed: different \u0027"},{"line_number":337,"context_line":"                \u0027numbers of hosts and devices in request: \u0027"},{"line_number":338,"context_line":"                \u0027\"%(hosts)s\" vs \"%(devices)s\"\u0027 % {"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f515b1d_bb1c7f13","line":335,"updated":"2017-10-06 10:13:58.000000000","message":"yep, but this is a change to master really. FWIW I think this check should be made made much earlier and an error response sent before we write data. Same with the check we add for contpath.\n\nmaybe a few of thes tidy up changes that we can peel out before final review","commit_id":"972dec53fa4c843cbbe54426820bbf6bb46c7dda"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3e4de5ec5234eed88095281fdd5882783d622362","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        if len(conthosts) !\u003d len(contdevices):"},{"line_number":333,"context_line":"            # This shouldn\u0027t happen unless there\u0027s a bug in the proxy,"},{"line_number":334,"context_line":"            # but if there is, we want to know about it."},{"line_number":335,"context_line":"            self.logger.error("},{"line_number":336,"context_line":"                \u0027Container update failed: different \u0027"},{"line_number":337,"context_line":"                \u0027numbers of hosts and devices in request: \u0027"},{"line_number":338,"context_line":"                \u0027\"%(hosts)s\" vs \"%(devices)s\"\u0027 % {"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f515b1d_c0adf89b","line":335,"in_reply_to":"7f515b1d_bb1c7f13","updated":"2017-10-06 17:35:45.000000000","message":"Done","commit_id":"972dec53fa4c843cbbe54426820bbf6bb46c7dda"}],"test/unit/container/test_backend.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"be260626960c50078fe0c7fcc94a8fd812a73f56","unresolved":false,"context_lines":[{"line_number":717,"context_line":"        # Test reading old update record from pending file"},{"line_number":718,"context_line":"        db_path \u003d os.path.join(tempdir, \u0027container.db\u0027)"},{"line_number":719,"context_line":"        broker \u003d ContainerBroker(db_path, account\u003d\u0027a\u0027, container\u003d\u0027c\u0027)"},{"line_number":720,"context_line":"        broker.initialize(\u00271\u0027, 0)"},{"line_number":721,"context_line":""},{"line_number":722,"context_line":"        record \u003d {\u0027name\u0027: \u0027obj\u0027,"},{"line_number":723,"context_line":"                  \u0027created_at\u0027: \u00271234567890.12345\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f515b1d_1bd153ce","line":720,"range":{"start_line":720,"start_character":26,"end_line":720,"end_character":29},"updated":"2017-10-06 10:13:58.000000000","message":"why did you choose \u00271\u0027 for these two cases (here and line 766) rather than e.g. Timestamp.now().internal (see line 895 for example) ? seems anomalous so makes me wonder if there is some significance to pinning th value here rather than taking whatever time happens to be.","commit_id":"972dec53fa4c843cbbe54426820bbf6bb46c7dda"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3e4de5ec5234eed88095281fdd5882783d622362","unresolved":false,"context_lines":[{"line_number":717,"context_line":"        # Test reading old update record from pending file"},{"line_number":718,"context_line":"        db_path \u003d os.path.join(tempdir, \u0027container.db\u0027)"},{"line_number":719,"context_line":"        broker \u003d ContainerBroker(db_path, account\u003d\u0027a\u0027, container\u003d\u0027c\u0027)"},{"line_number":720,"context_line":"        broker.initialize(\u00271\u0027, 0)"},{"line_number":721,"context_line":""},{"line_number":722,"context_line":"        record \u003d {\u0027name\u0027: \u0027obj\u0027,"},{"line_number":723,"context_line":"                  \u0027created_at\u0027: \u00271234567890.12345\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f515b1d_20a16caa","line":720,"range":{"start_line":720,"start_character":26,"end_line":720,"end_character":29},"in_reply_to":"7f515b1d_1bd153ce","updated":"2017-10-06 17:35:45.000000000","message":"Seems to be the \"standard\" way we do it. See test_creation or test_empty toward the top of the file, for example. Or just grep for initialize -- there are a few exceptions, but it\u0027s generally 1.","commit_id":"972dec53fa4c843cbbe54426820bbf6bb46c7dda"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"be260626960c50078fe0c7fcc94a8fd812a73f56","unresolved":false,"context_lines":[{"line_number":2667,"context_line":"        self._check_find_shard_ranges(\u0027lower\u0027, \u0027upper\u0027)"},{"line_number":2668,"context_line":""},{"line_number":2669,"context_line":"    @with_tempdir"},{"line_number":2670,"context_line":"    def test_set_sharding_states(self, tempdir):"},{"line_number":2671,"context_line":"        ts_iter \u003d make_timestamp_iter()"},{"line_number":2672,"context_line":"        db_path \u003d os.path.join(tempdir, \u0027container.db\u0027)"},{"line_number":2673,"context_line":"        broker \u003d ContainerBroker("}],"source_content_type":"text/x-python","patch_set":2,"id":"7f515b1d_a11c4c6a","line":2670,"range":{"start_line":2670,"start_character":5,"end_line":2670,"end_character":48},"updated":"2017-10-06 10:13:58.000000000","message":"I addressed comments in this method and proposed some more assertions in https://review.openstack.org/510041","commit_id":"972dec53fa4c843cbbe54426820bbf6bb46c7dda"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"be260626960c50078fe0c7fcc94a8fd812a73f56","unresolved":false,"context_lines":[{"line_number":2711,"context_line":""},{"line_number":2712,"context_line":"        # Sanity checks"},{"line_number":2713,"context_line":"        self.assertEqual(broker.get_max_row(), 5)"},{"line_number":2714,"context_line":"        self.assertEqual(broker.metadata, meta)"},{"line_number":2715,"context_line":"        self.assertEqual(broker.get_syncs(True)[0], incoming_sync)"},{"line_number":2716,"context_line":"        self.assertEqual(broker.get_syncs(False)[0], outgoing_sync)"},{"line_number":2717,"context_line":"        self.assertEqual(broker.get_shard_ranges(), shard_ranges)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f515b1d_3b1d2f73","line":2714,"range":{"start_line":2714,"start_character":13,"end_line":2714,"end_character":24},"updated":"2017-10-06 10:13:58.000000000","message":"+1","commit_id":"972dec53fa4c843cbbe54426820bbf6bb46c7dda"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"be260626960c50078fe0c7fcc94a8fd812a73f56","unresolved":false,"context_lines":[{"line_number":2712,"context_line":"        # Sanity checks"},{"line_number":2713,"context_line":"        self.assertEqual(broker.get_max_row(), 5)"},{"line_number":2714,"context_line":"        self.assertEqual(broker.metadata, meta)"},{"line_number":2715,"context_line":"        self.assertEqual(broker.get_syncs(True)[0], incoming_sync)"},{"line_number":2716,"context_line":"        self.assertEqual(broker.get_syncs(False)[0], outgoing_sync)"},{"line_number":2717,"context_line":"        self.assertEqual(broker.get_shard_ranges(), shard_ranges)"},{"line_number":2718,"context_line":"        self.assertEqual(len(broker.get_brokers()), 1)"},{"line_number":2719,"context_line":"        self.assertEqual(broker.get_db_state(), DB_STATE_UNSHARDED)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f515b1d_9b07831d","line":2716,"range":{"start_line":2715,"start_character":13,"end_line":2716,"end_character":24},"updated":"2017-10-06 10:13:58.000000000","message":"for consistency, the later uses of assertDictEqual should also change","commit_id":"972dec53fa4c843cbbe54426820bbf6bb46c7dda"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"be260626960c50078fe0c7fcc94a8fd812a73f56","unresolved":false,"context_lines":[{"line_number":2721,"context_line":"        self.assertFalse(os.path.exists(os.path.join(tempdir,"},{"line_number":2722,"context_line":"                                                     \u0027container_shard.db\u0027)))"},{"line_number":2723,"context_line":"        self.assertEqual(5, len(broker.list_objects_iter("},{"line_number":2724,"context_line":"            100, None, None, None, None, include_deleted\u003dTrue)))"},{"line_number":2725,"context_line":""},{"line_number":2726,"context_line":"        # first test that moving from UNSHARDED to SHARDED doesn\u0027t work"},{"line_number":2727,"context_line":"        self.assertFalse(broker.set_sharded_state())"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f515b1d_062576ab","line":2724,"updated":"2017-10-06 10:13:58.000000000","message":"+1","commit_id":"972dec53fa4c843cbbe54426820bbf6bb46c7dda"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"be260626960c50078fe0c7fcc94a8fd812a73f56","unresolved":false,"context_lines":[{"line_number":2739,"context_line":"        self.assertTrue(os.path.exists(os.path.join(tempdir,"},{"line_number":2740,"context_line":"                                                    \u0027container_shard.db\u0027)))"},{"line_number":2741,"context_line":""},{"line_number":2742,"context_line":"        # to confirm were definitely looking at the shard db"},{"line_number":2743,"context_line":"        broker2 \u003d ContainerBroker(broker._shard_db_file)"},{"line_number":2744,"context_line":"        self.assertEqual(broker2.get_max_row(), 5)"},{"line_number":2745,"context_line":"        self.assertEqual([], broker2.list_objects_iter("}],"source_content_type":"text/x-python","patch_set":2,"id":"7f515b1d_2609922b","line":2742,"range":{"start_line":2742,"start_character":21,"end_line":2742,"end_character":25},"updated":"2017-10-06 10:13:58.000000000","message":"nit: we\u0027re","commit_id":"972dec53fa4c843cbbe54426820bbf6bb46c7dda"}]}
