)]}'
{"swift/common/utils.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"244abfabcbd7d7708427e3ca8b45e76c94f3efa7","unresolved":false,"context_lines":[{"line_number":4195,"context_line":""},{"line_number":4196,"context_line":"    @obj_count.setter"},{"line_number":4197,"context_line":"    def obj_count(self, count):"},{"line_number":4198,"context_line":"        self.meta_timestamp \u003d Timestamp(time.time()).internal"},{"line_number":4199,"context_line":"        self._count \u003d count"},{"line_number":4200,"context_line":""},{"line_number":4201,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_99c26252","side":"PARENT","line":4198,"updated":"2017-05-25 12:07:25.000000000","message":"ok so now the metatimestamp is explicitly set in the (one) place where obj_count and bytes_used are set\n\nhttps://github.com/openstack/swift/blob/d1626944717ead27f584104da77c6c73b2a72f2e/swift/container/sharder.py#L1583-L1585","commit_id":"8d79bbae3764eebd4676e13db1530fadf4867fc2"}],"swift/container/backend.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"7cdf9bb8246f9b31a30d1d339458ba2ffa1a91bf","unresolved":false,"context_lines":[{"line_number":1462,"context_line":""},{"line_number":1463,"context_line":"    def _get_next_pivot_point(self, shard_container_size, last_upper, conn):"},{"line_number":1464,"context_line":"        try:"},{"line_number":1465,"context_line":"            offset \u003d int(shard_container_size) // 2"},{"line_number":1466,"context_line":""},{"line_number":1467,"context_line":"            sql \u003d \u0027SELECT name FROM object WHERE deleted\u003d0 \u0027"},{"line_number":1468,"context_line":"            args \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffe62b97_ad40a6a6","line":1465,"updated":"2017-03-28 03:21:51.000000000","message":"I moved the shard_container_size from constraints to the sharder and is now passed in here.. question is, should we be passing in the shard_container_size and then //2, or should be just pass in an offset.\nBecause now it does look a bit strange.\n\n  _get_next_pivot_point(self, offset, last_upper, conn):\n      ...","commit_id":"364d2225c936d4751f58592ca7182ccd0f54e88a"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"6c4a55d9531a453e97567f93d8c40ff8ad4a9218","unresolved":false,"context_lines":[{"line_number":1467,"context_line":"            sql \u003d \u0027SELECT name FROM object WHERE deleted\u003d0 \u0027"},{"line_number":1468,"context_line":"            args \u003d []"},{"line_number":1469,"context_line":"            if last_upper:"},{"line_number":1470,"context_line":"                sql +\u003d \"AND name \u003e ? \""},{"line_number":1471,"context_line":"                args.append(last_upper)"},{"line_number":1472,"context_line":"            sql +\u003d \"ORDER BY name LIMIT 1 OFFSET %d\" % offset"},{"line_number":1473,"context_line":"            data \u003d conn.execute(sql, args)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffe62b97_d96a94eb","line":1470,"updated":"2017-03-28 00:53:16.000000000","message":"Definitely gotta do something like that -- I think I got it right?","commit_id":"364d2225c936d4751f58592ca7182ccd0f54e88a"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"6c4a55d9531a453e97567f93d8c40ff8ad4a9218","unresolved":false,"context_lines":[{"line_number":1664,"context_line":"            # readonly database we can figure out where to read from."},{"line_number":1665,"context_line":"            self._create_connection(self._db_file)"},{"line_number":1666,"context_line":"            old_max_row \u003d self.get_max_row()"},{"line_number":1667,"context_line":"            if old_max_row \u003c start:"},{"line_number":1668,"context_line":"                self._create_connection(self._pivot_db_file)"},{"line_number":1669,"context_line":"                return \\"},{"line_number":1670,"context_line":"                    super(ContainerBroker, self).get_items_since(start, count)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffe62b97_39a62055","line":1667,"updated":"2017-03-28 00:53:16.000000000","message":"I\u0027m like 99% sure this is necessary, but haven\u0027t yet written the test -- sorry :-(","commit_id":"364d2225c936d4751f58592ca7182ccd0f54e88a"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"7cdf9bb8246f9b31a30d1d339458ba2ffa1a91bf","unresolved":false,"context_lines":[{"line_number":1664,"context_line":"            # readonly database we can figure out where to read from."},{"line_number":1665,"context_line":"            self._create_connection(self._db_file)"},{"line_number":1666,"context_line":"            old_max_row \u003d self.get_max_row()"},{"line_number":1667,"context_line":"            if old_max_row \u003c start:"},{"line_number":1668,"context_line":"                self._create_connection(self._pivot_db_file)"},{"line_number":1669,"context_line":"                return \\"},{"line_number":1670,"context_line":"                    super(ContainerBroker, self).get_items_since(start, count)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffe62b97_0d38b2ec","line":1667,"in_reply_to":"ffe62b97_39a62055","updated":"2017-03-28 03:21:51.000000000","message":"Yeah, I think so too.. opps","commit_id":"364d2225c936d4751f58592ca7182ccd0f54e88a"}],"swift/container/sharder.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"244abfabcbd7d7708427e3ca8b45e76c94f3efa7","unresolved":false,"context_lines":[{"line_number":468,"context_line":"        timestamp \u003d ContainerSharder.get_metadata_item("},{"line_number":469,"context_line":"            broker, \u0027X-Container-Sysmeta-Shard-Timestamp\u0027)"},{"line_number":470,"context_line":"        meta_timestamp \u003d ContainerSharder.get_metadata_item("},{"line_number":471,"context_line":"            broker, \u0027X-Container-Sysmeta-Shard-Meta-Timestamp\u0027)"},{"line_number":472,"context_line":"        lower \u003d ContainerSharder.get_metadata_item("},{"line_number":473,"context_line":"            broker, \u0027X-Container-Sysmeta-Shard-Lower\u0027)"},{"line_number":474,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_b9c3e637","side":"PARENT","line":471,"updated":"2017-05-25 12:07:25.000000000","message":"without digging deeper into the whole sharding patch, I\u0027m not sure why this is no longer needed and we now use time.time()?","commit_id":"8d79bbae3764eebd4676e13db1530fadf4867fc2"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"87b939ebcd825fcbd298eb40a7cb750f6e3bd25c","unresolved":false,"context_lines":[{"line_number":481,"context_line":"            upper \u003d None"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"        pivot \u003d PivotRange(broker.container, timestamp, lower, upper, 0,"},{"line_number":484,"context_line":"                           0, Timestamp(time.time()))"},{"line_number":485,"context_line":"        tmp_info \u003d broker.get_info()"},{"line_number":486,"context_line":"        pivot.object_count \u003d tmp_info.get(\u0027object_count\u0027, 0)"},{"line_number":487,"context_line":"        pivot.bytes_used \u003d tmp_info.get(\u0027bytes_used\u0027, 0)"}],"source_content_type":"text/x-python","patch_set":13,"id":"df140735_a0a9c924","line":484,"updated":"2017-06-02 09:51:03.000000000","message":"discussed this change in irc with Matt and agreed this looks correct - the new PivotRange object is about to have it\u0027s metadata (obj count abd bytes used) updated so the meta timestamp should be \u0027now\u0027.","commit_id":"d1626944717ead27f584104da77c6c73b2a72f2e"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"244abfabcbd7d7708427e3ca8b45e76c94f3efa7","unresolved":false,"context_lines":[{"line_number":1582,"context_line":"                info \u003d new_broker.get_info()"},{"line_number":1583,"context_line":"                pivot.object_count \u003d info[\u0027object_count\u0027]"},{"line_number":1584,"context_line":"                pivot.bytes_used \u003d info[\u0027bytes_used\u0027]"},{"line_number":1585,"context_line":"                pivot.meta_timestamp \u003d Timestamp(time.time())"},{"line_number":1586,"context_line":"                if not hasattr(pivot, \u0027dont_save\u0027):"},{"line_number":1587,"context_line":"                    pivots_done.append(pivot)"},{"line_number":1588,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_59e28ad6","line":1585,"updated":"2017-05-25 12:07:25.000000000","message":"makes sense wrt PivotRange changes","commit_id":"d1626944717ead27f584104da77c6c73b2a72f2e"}],"test/unit/common/test_utils.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"244abfabcbd7d7708427e3ca8b45e76c94f3efa7","unresolved":false,"context_lines":[{"line_number":3649,"context_line":"            if tempdir:"},{"line_number":3650,"context_line":"                shutil.rmtree(tempdir)"},{"line_number":3651,"context_line":""},{"line_number":3652,"context_line":"    def test_pivot_range_initialisation(self):"},{"line_number":3653,"context_line":"        def test_initialisation(params, expected\u003dNone, error\u003dFalse):"},{"line_number":3654,"context_line":"            if error:"},{"line_number":3655,"context_line":"                with self.assertRaises(ValueError):"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_99d38201","line":3652,"updated":"2017-05-25 12:07:25.000000000","message":"I did not review this thoroughly","commit_id":"d1626944717ead27f584104da77c6c73b2a72f2e"}],"test/unit/container/test_backend.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"dece1986e2ca64d62b55610dca646e069d0453fb","unresolved":false,"context_lines":[{"line_number":710,"context_line":"        broker \u003d ContainerBroker(db_path, account\u003dacct, container\u003dcont)"},{"line_number":711,"context_line":"        # In the UNSHARDED state, add some initial rows"},{"line_number":712,"context_line":"        broker.initialize(ts.internal, 0)"},{"line_number":713,"context_line":"        broker.delete_object(\u0027o1\u0027, ts)"},{"line_number":714,"context_line":"        broker.delete_object(\u0027o2\u0027, ts)"},{"line_number":715,"context_line":"        broker.delete_object(\u0027o3\u0027, ts)"},{"line_number":716,"context_line":"        broker._commit_puts()"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_1c72f87b","line":713,"range":{"start_line":713,"start_character":35,"end_line":713,"end_character":37},"updated":"2017-03-28 21:36:50.000000000","message":"bah, these need to be ts.internal","commit_id":"ba25953897b9a3436f57166b6ebd3cad76ca50c7"}]}
