)]}'
{"swift/container/backend.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2b83e8a62de921fe89ba9a10ceb470ca204ab97b","unresolved":false,"context_lines":[{"line_number":1182,"context_line":"                    break"},{"line_number":1183,"context_line":"            return results"},{"line_number":1184,"context_line":""},{"line_number":1185,"context_line":"    def get_objects(self, limit\u003dNone, marker\u003d\u0027\u0027, end_marker\u003d\u0027\u0027, prefix\u003dNone,"},{"line_number":1186,"context_line":"                    delimiter\u003dNone, path\u003dNone, storage_policy_index\u003d0,"},{"line_number":1187,"context_line":"                    reverse\u003dFalse, include_deleted\u003dFalse, since_row\u003dNone):"},{"line_number":1188,"context_line":"        \"\"\""},{"line_number":1189,"context_line":"        Return a list of objects."}],"source_content_type":"text/x-python","patch_set":1,"id":"9f6a8fd7_084caf74","side":"PARENT","line":1186,"range":{"start_line":1185,"start_character":64,"end_line":1186,"end_character":45},"updated":"2018-04-27 19:57:29.000000000","message":"Eh? Why\u0027d we lose these?\n\nI guess because get_objects is only used by the sharder? I wonder if it might be better to move this over there...\n\nI guess we can also ditch some of the other args; at the one and only call site, limit is always CONTAINER_LISTING_LIMIT, include_deleted is always True, all_policies is always True, and storage_policy_index is never provided.","commit_id":"2bc60b649bb2bc2883e6a361be1200094cae1678"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d39916b9da74c274a98ed4dc60bbbe62316ef8a5","unresolved":false,"context_lines":[{"line_number":1182,"context_line":"                    break"},{"line_number":1183,"context_line":"            return results"},{"line_number":1184,"context_line":""},{"line_number":1185,"context_line":"    def get_objects(self, limit\u003dNone, marker\u003d\u0027\u0027, end_marker\u003d\u0027\u0027, prefix\u003dNone,"},{"line_number":1186,"context_line":"                    delimiter\u003dNone, path\u003dNone, storage_policy_index\u003d0,"},{"line_number":1187,"context_line":"                    reverse\u003dFalse, include_deleted\u003dFalse, since_row\u003dNone):"},{"line_number":1188,"context_line":"        \"\"\""},{"line_number":1189,"context_line":"        Return a list of objects."}],"source_content_type":"text/x-python","patch_set":1,"id":"9f6a8fd7_6e1a0418","side":"PARENT","line":1186,"range":{"start_line":1185,"start_character":64,"end_line":1186,"end_character":45},"in_reply_to":"9f6a8fd7_084caf74","updated":"2018-04-30 11:46:57.000000000","message":"not used AND untested so I either removed them or wrote tests. Agree that perhaps the method could move to sharder and in fact quite_likely disappear into yield_objects - but we use it a lot in tests, so I\u0027ll leave it here but clean up the interface.","commit_id":"2bc60b649bb2bc2883e6a361be1200094cae1678"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2b83e8a62de921fe89ba9a10ceb470ca204ab97b","unresolved":false,"context_lines":[{"line_number":735,"context_line":"        self.put_record(record)"},{"line_number":736,"context_line":""},{"line_number":737,"context_line":"    def remove_objects(self, lower, upper, storage_policy_index\u003d0,"},{"line_number":738,"context_line":"                       max_row\u003dNone, all_policies\u003dFalse):"},{"line_number":739,"context_line":"        \"\"\""},{"line_number":740,"context_line":"        Removes items in the given namespace range from the object table."},{"line_number":741,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f6a8fd7_8d6bf11d","line":738,"updated":"2018-04-27 19:57:29.000000000","message":"I wonder if we ought to use storage_policy_index\u003dNone as a sentinel instead of introducing a new arg... it just feels weird that you can say\n\n remove_objects(..., storage_policy_index\u003d3, all_policies\u003dTrue)\n\nand we\u0027ll completely ignore one of your args.","commit_id":"99b11eb525f8a1aa5ba2dc21dc6cb2d1e2d129a7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d39916b9da74c274a98ed4dc60bbbe62316ef8a5","unresolved":false,"context_lines":[{"line_number":735,"context_line":"        self.put_record(record)"},{"line_number":736,"context_line":""},{"line_number":737,"context_line":"    def remove_objects(self, lower, upper, storage_policy_index\u003d0,"},{"line_number":738,"context_line":"                       max_row\u003dNone, all_policies\u003dFalse):"},{"line_number":739,"context_line":"        \"\"\""},{"line_number":740,"context_line":"        Removes items in the given namespace range from the object table."},{"line_number":741,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f6a8fd7_6e20c4f8","line":738,"in_reply_to":"9f6a8fd7_8d6bf11d","updated":"2018-04-30 11:46:57.000000000","message":"actually this is only ever called with all_policies\u003dTrue, so I\u0027m going to remove both args.","commit_id":"99b11eb525f8a1aa5ba2dc21dc6cb2d1e2d129a7"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2b83e8a62de921fe89ba9a10ceb470ca204ab97b","unresolved":false,"context_lines":[{"line_number":1084,"context_line":"                query_keys \u003d [\u0027name\u0027, \u0027created_at\u0027, \u0027size\u0027, \u0027content_type\u0027,"},{"line_number":1085,"context_line":"                              \u0027etag\u0027]"},{"line_number":1086,"context_line":"                if self.get_db_version(conn) \u003c 1:"},{"line_number":1087,"context_line":"                    query_keys.append(\u0027+deleted \u0027)"},{"line_number":1088,"context_line":"                else:"},{"line_number":1089,"context_line":"                    query_keys.append(\u0027deleted\u0027)"},{"line_number":1090,"context_line":"                query_args \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f6a8fd7_2d666553","line":1087,"range":{"start_line":1087,"start_character":47,"end_line":1087,"end_character":48},"updated":"2018-04-27 19:57:29.000000000","message":"nit: don\u0027t need the trailing space now.","commit_id":"99b11eb525f8a1aa5ba2dc21dc6cb2d1e2d129a7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d39916b9da74c274a98ed4dc60bbbe62316ef8a5","unresolved":false,"context_lines":[{"line_number":1084,"context_line":"                query_keys \u003d [\u0027name\u0027, \u0027created_at\u0027, \u0027size\u0027, \u0027content_type\u0027,"},{"line_number":1085,"context_line":"                              \u0027etag\u0027]"},{"line_number":1086,"context_line":"                if self.get_db_version(conn) \u003c 1:"},{"line_number":1087,"context_line":"                    query_keys.append(\u0027+deleted \u0027)"},{"line_number":1088,"context_line":"                else:"},{"line_number":1089,"context_line":"                    query_keys.append(\u0027deleted\u0027)"},{"line_number":1090,"context_line":"                query_args \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f6a8fd7_e49dd50a","line":1087,"range":{"start_line":1087,"start_character":47,"end_line":1087,"end_character":48},"in_reply_to":"9f6a8fd7_2d666553","updated":"2018-04-30 11:46:57.000000000","message":"Done","commit_id":"99b11eb525f8a1aa5ba2dc21dc6cb2d1e2d129a7"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2b83e8a62de921fe89ba9a10ceb470ca204ab97b","unresolved":false,"context_lines":[{"line_number":1120,"context_line":"                    query \u003d \u0027SELECT \u0027 + \u0027, \u0027.join(keys) + \u0027 FROM object \u0027"},{"line_number":1121,"context_line":"                    if conditions:"},{"line_number":1122,"context_line":"                        query +\u003d \u0027WHERE \u0027 + \u0027 AND \u0027.join(conditions)"},{"line_number":1123,"context_line":"                    tail_query \u003d \u0027\u0027\u0027"},{"line_number":1124,"context_line":"                        ORDER BY name %s LIMIT ?"},{"line_number":1125,"context_line":"                    \u0027\u0027\u0027 % (\u0027DESC\u0027 if reverse else \u0027\u0027)"},{"line_number":1126,"context_line":"                    return query + tail_query, args + [limit - len(results)]"},{"line_number":1127,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f6a8fd7_cd448977","line":1124,"range":{"start_line":1123,"start_character":36,"end_line":1124,"end_character":24},"updated":"2018-04-27 19:57:29.000000000","message":"Off-topic: Tricky, tricky -- that newline is significant!","commit_id":"99b11eb525f8a1aa5ba2dc21dc6cb2d1e2d129a7"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2b83e8a62de921fe89ba9a10ceb470ca204ab97b","unresolved":false,"context_lines":[{"line_number":1232,"context_line":"        \"\"\""},{"line_number":1233,"context_line":"        Decode the created_at timestamp into separate data, content-type and"},{"line_number":1234,"context_line":"        meta timestamps and replace the created_at timestamp with the"},{"line_number":1235,"context_line":"        metadata timestamp i.e. the last-modified time."},{"line_number":1236,"context_line":"        \"\"\""},{"line_number":1237,"context_line":"        t_data, t_ctype, t_meta \u003d decode_timestamps(record[1])"},{"line_number":1238,"context_line":"        return (record[0], t_meta.internal) + record[2:6]"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f6a8fd7_08758f98","line":1235,"updated":"2018-04-27 19:57:29.000000000","message":"Might be worth calling out that we\u0027re also dropping the storage policy on the floor.","commit_id":"99b11eb525f8a1aa5ba2dc21dc6cb2d1e2d129a7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d39916b9da74c274a98ed4dc60bbbe62316ef8a5","unresolved":false,"context_lines":[{"line_number":1232,"context_line":"        \"\"\""},{"line_number":1233,"context_line":"        Decode the created_at timestamp into separate data, content-type and"},{"line_number":1234,"context_line":"        meta timestamps and replace the created_at timestamp with the"},{"line_number":1235,"context_line":"        metadata timestamp i.e. the last-modified time."},{"line_number":1236,"context_line":"        \"\"\""},{"line_number":1237,"context_line":"        t_data, t_ctype, t_meta \u003d decode_timestamps(record[1])"},{"line_number":1238,"context_line":"        return (record[0], t_meta.internal) + record[2:6]"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f6a8fd7_aed9fcf4","line":1235,"in_reply_to":"9f6a8fd7_08758f98","updated":"2018-04-30 11:46:57.000000000","message":"Done","commit_id":"99b11eb525f8a1aa5ba2dc21dc6cb2d1e2d129a7"}],"swift/container/sharder.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2b83e8a62de921fe89ba9a10ceb470ca204ab97b","unresolved":false,"context_lines":[{"line_number":739,"context_line":""},{"line_number":740,"context_line":"            if dest_shard_range not in dest_brokers:"},{"line_number":741,"context_line":"                part, dest_broker, node_id \u003d self._get_shard_broker("},{"line_number":742,"context_line":"                    dest_shard_range, src_broker.root_path, policy_index)"},{"line_number":743,"context_line":"                # save the broker info that was sampled prior to the *first*"},{"line_number":744,"context_line":"                # yielded objects for this destination"},{"line_number":745,"context_line":"                destination \u003d {\u0027part\u0027: part,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f6a8fd7_c8ca37a0","line":742,"range":{"start_line":742,"start_character":60,"end_line":742,"end_character":72},"updated":"2018-04-27 19:57:29.000000000","message":"OK, so we still need policy_index in here to make sure the shard gets the right policy.\n\nWhat do the timestamps on the shard end up looking like? Those seem pretty important in https://github.com/openstack/swift/blob/2.17.0/swift/container/reconciler.py#L37-L80\n\nHow can we ensure that we *never* get some shards with one policy and some shards with another in the steady-state?","commit_id":"99b11eb525f8a1aa5ba2dc21dc6cb2d1e2d129a7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d39916b9da74c274a98ed4dc60bbbe62316ef8a5","unresolved":false,"context_lines":[{"line_number":739,"context_line":""},{"line_number":740,"context_line":"            if dest_shard_range not in dest_brokers:"},{"line_number":741,"context_line":"                part, dest_broker, node_id \u003d self._get_shard_broker("},{"line_number":742,"context_line":"                    dest_shard_range, src_broker.root_path, policy_index)"},{"line_number":743,"context_line":"                # save the broker info that was sampled prior to the *first*"},{"line_number":744,"context_line":"                # yielded objects for this destination"},{"line_number":745,"context_line":"                destination \u003d {\u0027part\u0027: part,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f6a8fd7_eeb4d4f4","line":742,"range":{"start_line":742,"start_character":60,"end_line":742,"end_character":72},"in_reply_to":"9f6a8fd7_c8ca37a0","updated":"2018-04-30 11:46:57.000000000","message":"hmm, inconsistent shard policy wrt to root IS scarey.. it is not undreasonable to assume containers old enough to shard will be reconciled, but I wonder if we should force shard policy to be equal to root during audit?","commit_id":"99b11eb525f8a1aa5ba2dc21dc6cb2d1e2d129a7"}]}
