)]}'
{"swift/common/db.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2953061e4756658955d1b7280173a0e994dd10eb","unresolved":false,"context_lines":[{"line_number":385,"context_line":"                try:"},{"line_number":386,"context_line":"                    self.conn \u003d get_db_connection(self.db_file, self.timeout)"},{"line_number":387,"context_line":"                except (sqlite3.DatabaseError, DatabaseConnectionError):"},{"line_number":388,"context_line":"                    self.possibly_quarantine(*sys.exc_info())"},{"line_number":389,"context_line":"            else:"},{"line_number":390,"context_line":"                raise DatabaseConnectionError(self.db_file, \"DB doesn\u0027t exist\")"},{"line_number":391,"context_line":"        conn \u003d self.conn"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_65ede4b5","line":388,"updated":"2017-10-25 18:30:31.000000000","message":"Ah, got it. I was going to ask.\n\nAre we aiming to get rid of _create_connection eventually?","commit_id":"d88213115347d639c5290208cb130d06eef54c01"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fb44eb91ba61082050cc9db1744ca4f16bbf917f","unresolved":false,"context_lines":[{"line_number":381,"context_line":"    def get(self):"},{"line_number":382,"context_line":"        \"\"\"Use with the \"with\" statement; returns a database connection.\"\"\""},{"line_number":383,"context_line":"        if not self.conn:"},{"line_number":384,"context_line":"            if self.db_file !\u003d \u0027:memory:\u0027 and os.path.exists(self.db_file):"},{"line_number":385,"context_line":"                try:"},{"line_number":386,"context_line":"                    self.conn \u003d get_db_connection(self.db_file, self.timeout)"},{"line_number":387,"context_line":"                except (sqlite3.DatabaseError, DatabaseConnectionError):"},{"line_number":388,"context_line":"                    self.possibly_quarantine(*sys.exc_info())"},{"line_number":389,"context_line":"            else:"},{"line_number":390,"context_line":"                raise DatabaseConnectionError(self.db_file, \"DB doesn\u0027t exist\")"},{"line_number":391,"context_line":"        conn \u003d self.conn"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_a5487c2c","line":388,"range":{"start_line":384,"start_character":12,"end_line":388,"end_character":61},"updated":"2017-10-25 18:14:34.000000000","message":"this takes us back to master","commit_id":"d88213115347d639c5290208cb130d06eef54c01"}],"swift/container/backend.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fb44eb91ba61082050cc9db1744ca4f16bbf917f","unresolved":false,"context_lines":[{"line_number":307,"context_line":"        elif db_state in (DB_STATE_SHARDING, DB_STATE_SHARDED):"},{"line_number":308,"context_line":"            return self._shard_db_file"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    def _db_exists(self):"},{"line_number":311,"context_line":"        return self.get_db_state() !\u003d DB_STATE_NOTFOUND"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_e5de743c","side":"PARENT","line":310,"range":{"start_line":310,"start_character":8,"end_line":310,"end_character":19},"updated":"2017-10-25 18:14:34.000000000","message":"this seems to equate to os.path.exists(self.db_file) so I don\u0027t think it is necessary","commit_id":"0405471166eb11f48ff96a1d9c87cb9fc2bfa7e1"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2953061e4756658955d1b7280173a0e994dd10eb","unresolved":false,"context_lines":[{"line_number":1592,"context_line":"            brokers.insert(0, ContainerBroker("},{"line_number":1593,"context_line":"                self._db_file, self.timeout, self.logger, self.account,"},{"line_number":1594,"context_line":"                self.container, self.pending_timeout, self.stale_reads_ok,"},{"line_number":1595,"context_line":"                force_db_file\u003dTrue))"},{"line_number":1596,"context_line":"        return brokers"},{"line_number":1597,"context_line":""},{"line_number":1598,"context_line":"    def get_items_since(self, start, count):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_85aa2016","line":1595,"range":{"start_line":1595,"start_character":16,"end_line":1595,"end_character":29},"updated":"2017-10-25 18:30:31.000000000","message":"This is the only place that uses this flag, yeah?","commit_id":"d88213115347d639c5290208cb130d06eef54c01"}],"test/probe/test_sharder.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ebe0ce1a3cae448f00f0f0cba253ba471aa6426b","unresolved":false,"context_lines":[{"line_number":322,"context_line":"        broker \u003d ContainerBroker(node_index_zero_db)"},{"line_number":323,"context_line":"        # TODO: assert the shard db is on replica 0"},{"line_number":324,"context_line":"        self.assertIs(True, broker.is_root_container())"},{"line_number":325,"context_line":"        self.assertEqual(\u0027sharding\u0027, DB_STATE[broker.get_db_state()])"},{"line_number":326,"context_line":"        expected_shard_ranges \u003d [dict(sr) for sr in broker.get_shard_ranges()]"},{"line_number":327,"context_line":"        self.assertLengthEqual(expected_shard_ranges, 3)"},{"line_number":328,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_d14d763e","line":325,"updated":"2017-10-25 20:20:18.000000000","message":"Better :-)","commit_id":"e7e5b87f8b2242638b8895fe9ec0267f208373e2"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ebe0ce1a3cae448f00f0f0cba253ba471aa6426b","unresolved":false,"context_lines":[{"line_number":341,"context_line":"            else:"},{"line_number":342,"context_line":"                self.assertEqual(\u0027unsharded\u0027, DB_STATE[broker.get_db_state()])"},{"line_number":343,"context_line":"                # The rows that only replica 0 knew about got shipped to the"},{"line_number":344,"context_line":"                # other replicas as part of sharding"},{"line_number":345,"context_line":"                self.assertEqual(len(obj_names) * 4 // 5,"},{"line_number":346,"context_line":"                                 broker.get_info()[\u0027object_count\u0027])"},{"line_number":347,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_d1fb36be","line":344,"updated":"2017-10-25 20:20:18.000000000","message":"I\u0027m not sure this is good. I think it didn\u0027t happen before because of the rsyncing issue you identified.","commit_id":"e7e5b87f8b2242638b8895fe9ec0267f208373e2"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d8060e77eb1ae94ef8c417c8127dbf9951f74359","unresolved":false,"context_lines":[{"line_number":341,"context_line":"            else:"},{"line_number":342,"context_line":"                self.assertEqual(\u0027unsharded\u0027, DB_STATE[broker.get_db_state()])"},{"line_number":343,"context_line":"                # The rows that only replica 0 knew about got shipped to the"},{"line_number":344,"context_line":"                # other replicas as part of sharding"},{"line_number":345,"context_line":"                self.assertEqual(len(obj_names) * 4 // 5,"},{"line_number":346,"context_line":"                                 broker.get_info()[\u0027object_count\u0027])"},{"line_number":347,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_e3c8a9a6","line":344,"in_reply_to":"3f4b6375_d1fb36be","updated":"2017-10-25 21:06:01.000000000","message":"That\u0027s quite possible. _test_sharded_listing didn\u0027t appear to be using rsync (?because all updates were consistent so only usync needed?) - here rsync could be in use, and only the xxx_shard.db would have been rsync\u0027d before this patch.\n\nSo why do you think this is not good? I assume you mean not good that as a side effect of sharding they object tables get sync\u0027d?","commit_id":"e7e5b87f8b2242638b8895fe9ec0267f208373e2"}],"test/unit/container/test_backend.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fb44eb91ba61082050cc9db1744ca4f16bbf917f","unresolved":false,"context_lines":[{"line_number":2818,"context_line":"            self.assertEqual(broker.get_shard_ranges(), shard_ranges)"},{"line_number":2819,"context_line":""},{"line_number":2820,"context_line":"        def check_broker_info(actual_info):"},{"line_number":2821,"context_line":"            # TODO: created_at and hash should not be exceptions"},{"line_number":2822,"context_line":"            for key in (\u0027created_at\u0027, \u0027hash\u0027, \u0027db_state\u0027, \u0027id\u0027):"},{"line_number":2823,"context_line":"                actual_info.pop(key, None)"},{"line_number":2824,"context_line":"                original_info.pop(key, None)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_8558e055","side":"PARENT","line":2821,"range":{"start_line":2821,"start_character":31,"end_line":2821,"end_character":39},"updated":"2017-10-25 18:14:34.000000000","message":"think we concuded it made sense for the hash to be reset","commit_id":"0405471166eb11f48ff96a1d9c87cb9fc2bfa7e1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fb44eb91ba61082050cc9db1744ca4f16bbf917f","unresolved":false,"context_lines":[{"line_number":2861,"context_line":""},{"line_number":2862,"context_line":"        # to confirm we\u0027re definitely looking at the shard db"},{"line_number":2863,"context_line":"        broker2 \u003d ContainerBroker(new_db_path)"},{"line_number":2864,"context_line":"        # this one thinks it is already in DB_STATE_SHARDED because we opened"},{"line_number":2865,"context_line":"        # it with the _shard.db file"},{"line_number":2866,"context_line":"        self.assertEqual(broker2.get_db_state(), DB_STATE_SHARDED)"},{"line_number":2867,"context_line":"        check_broker_properties(broker2)"},{"line_number":2868,"context_line":"        check_broker_info(broker2.get_info())"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_c562580a","side":"PARENT","line":2865,"range":{"start_line":2864,"start_character":8,"end_line":2865,"end_character":36},"updated":"2017-10-25 18:14:34.000000000","message":"right! that\u0027s a bug!","commit_id":"0405471166eb11f48ff96a1d9c87cb9fc2bfa7e1"}],"test/unit/container/test_sharder.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fb44eb91ba61082050cc9db1744ca4f16bbf917f","unresolved":false,"context_lines":[{"line_number":502,"context_line":""},{"line_number":503,"context_line":"    def test_cleave(self):"},{"line_number":504,"context_line":"        logger \u003d debug_logger()"},{"line_number":505,"context_line":"        db_file \u003d os.path.join(self.tempdir, \u0027test_db\u0027)"},{"line_number":506,"context_line":"        broker \u003d ContainerBroker("},{"line_number":507,"context_line":"            db_file, account\u003d\u0027a\u0027, container\u003d\u0027c\u0027, logger\u003dlogger)"},{"line_number":508,"context_line":"        broker.initialize()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_0513d067","side":"PARENT","line":505,"range":{"start_line":505,"start_character":46,"end_line":505,"end_character":53},"updated":"2017-10-25 18:14:34.000000000","message":"we are relying on these files ending \u0027.db\u0027","commit_id":"0405471166eb11f48ff96a1d9c87cb9fc2bfa7e1"}]}
