)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":39044,"name":"Alicja Filipek","display_name":"alaf01","email":"alicja.filipek@cleura.com","username":"alaf01"},"change_message_id":"a0f35ef11cceb74c6b6da081d0f573b0da6a3169","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"86bb0519_080114dd","updated":"2026-07-24 11:28:56.000000000","message":"Nice change, adding the status field and updating backups might be beneficial.","commit_id":"e897a5fe5b143bb573980da9fb820a68525295f2"}],"api-ref/source/v2/parameters-manual.yaml":[{"author":{"_account_id":39044,"name":"Alicja Filipek","display_name":"alaf01","email":"alicja.filipek@cleura.com","username":"alaf01"},"change_message_id":"a0f35ef11cceb74c6b6da081d0f573b0da6a3169","unresolved":true,"context_lines":[{"line_number":240,"context_line":"  in: body"},{"line_number":241,"context_line":"  required: false"},{"line_number":242,"context_line":"  description: |"},{"line_number":243,"context_line":"    The status of the resource (one of: ``creating``, ``available``, ``error``, ``deleting``, ``deleted``)."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"version_doc:"},{"line_number":246,"context_line":"  type: int"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"4499f949_c68dd6ea","line":243,"updated":"2026-07-24 11:28:56.000000000","message":"we can specify that the resource is defined in json_schemas.py as SUPPORTED_BACKUP_STATUSES so we dont need to maintain this description","commit_id":"e897a5fe5b143bb573980da9fb820a68525295f2"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"9e0dc6e2b7555dbd1647e9177e908c27df86f831","unresolved":true,"context_lines":[{"line_number":240,"context_line":"  in: body"},{"line_number":241,"context_line":"  required: false"},{"line_number":242,"context_line":"  description: |"},{"line_number":243,"context_line":"    The status of the resource (one of: ``creating``, ``available``, ``error``, ``deleting``, ``deleted``)."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"version_doc:"},{"line_number":246,"context_line":"  type: int"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"9af5a2a3_696ec477","line":243,"in_reply_to":"4499f949_c68dd6ea","updated":"2026-07-24 16:55:03.000000000","message":"This one supposed to be rendered into api-ref [1], so we can\u0027t tell users to go and look for schema I guess.\n\nAnd there is no jinja import in there, so we can\u0027t really do that nicely out of the box right now. And I am not sure it\u0027s a good idea to implement jinja in this file right now either...\n\n[1] https://opendev.org/openstack/freezer-api/src/branch/master/api-ref/source/generate_parameters.py#L141-L150","commit_id":"e897a5fe5b143bb573980da9fb820a68525295f2"},{"author":{"_account_id":39044,"name":"Alicja Filipek","display_name":"alaf01","email":"alicja.filipek@cleura.com","username":"alaf01"},"change_message_id":"8aa65807c235b0e82d4536234a1c70b3510fcba7","unresolved":false,"context_lines":[{"line_number":240,"context_line":"  in: body"},{"line_number":241,"context_line":"  required: false"},{"line_number":242,"context_line":"  description: |"},{"line_number":243,"context_line":"    The status of the resource (one of: ``creating``, ``available``, ``error``, ``deleting``, ``deleted``)."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"version_doc:"},{"line_number":246,"context_line":"  type: int"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"273b8210_9ed28fb0","line":243,"in_reply_to":"9af5a2a3_696ec477","updated":"2026-07-27 08:29:32.000000000","message":"We do not need to implement jinja for this single case, just we need to bear in mind that this description might differ if we not keep maintaining it, and if the situation repeats it might be good to implement jinja.","commit_id":"e897a5fe5b143bb573980da9fb820a68525295f2"}],"freezer_api/api/v2/backups.py":[{"author":{"_account_id":39044,"name":"Alicja Filipek","display_name":"alaf01","email":"alicja.filipek@cleura.com","username":"alaf01"},"change_message_id":"a0f35ef11cceb74c6b6da081d0f573b0da6a3169","unresolved":true,"context_lines":[{"line_number":89,"context_line":"        doc \u003d self.json_body(req)"},{"line_number":90,"context_line":"        if not doc:"},{"line_number":91,"context_line":"            raise freezer_api_exc.BadDataFormat("},{"line_number":92,"context_line":"                message\u003d\u0027Missing request body\u0027)"},{"line_number":93,"context_line":"        self.db.update_backup(project_id\u003dproject_id,"},{"line_number":94,"context_line":"                              user_id\u003duser_id,"},{"line_number":95,"context_line":"                              backup_id\u003dbackup_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7e914853_824857c4","line":92,"updated":"2026-07-24 11:28:56.000000000","message":"we are checking here only if the doc exist, we can validate against schema json_schemas.py:backup_patch_schema as well","commit_id":"e897a5fe5b143bb573980da9fb820a68525295f2"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"9e0dc6e2b7555dbd1647e9177e908c27df86f831","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        doc \u003d self.json_body(req)"},{"line_number":90,"context_line":"        if not doc:"},{"line_number":91,"context_line":"            raise freezer_api_exc.BadDataFormat("},{"line_number":92,"context_line":"                message\u003d\u0027Missing request body\u0027)"},{"line_number":93,"context_line":"        self.db.update_backup(project_id\u003dproject_id,"},{"line_number":94,"context_line":"                              user_id\u003duser_id,"},{"line_number":95,"context_line":"                              backup_id\u003dbackup_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"62c4e593_d3838611","line":92,"in_reply_to":"7e914853_824857c4","updated":"2026-07-24 16:55:03.000000000","message":"great point.\nthough I\u0027ve added verification to elasticv2_utils, as all similar checks for other resources are made there.","commit_id":"e897a5fe5b143bb573980da9fb820a68525295f2"}],"freezer_api/common/elasticv2_utils.py":[{"author":{"_account_id":39044,"name":"Alicja Filipek","display_name":"alaf01","email":"alicja.filipek@cleura.com","username":"alaf01"},"change_message_id":"a0f35ef11cceb74c6b6da081d0f573b0da6a3169","unresolved":true,"context_lines":[{"line_number":50,"context_line":"        return True"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def serialize(self):"},{"line_number":53,"context_line":"        status \u003d self.data.get(\u0027status\u0027, \u0027available\u0027)"},{"line_number":54,"context_line":"        if status not in json_schemas.SUPPORTED_BACKUP_STATUSES:"},{"line_number":55,"context_line":"            raise freezer_api_exc.BadDataFormat("},{"line_number":56,"context_line":"                \"\u0027%s\u0027 is not a valid backup status\" % status)"}],"source_content_type":"text/x-python","patch_set":4,"id":"11a16de8_f2b67e21","line":53,"updated":"2026-07-24 11:28:56.000000000","message":"if the status stays in metadata as well we might have 2 sources of truth that can be misleading","commit_id":"e897a5fe5b143bb573980da9fb820a68525295f2"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"9e0dc6e2b7555dbd1647e9177e908c27df86f831","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        return True"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def serialize(self):"},{"line_number":53,"context_line":"        status \u003d self.data.get(\u0027status\u0027, \u0027available\u0027)"},{"line_number":54,"context_line":"        if status not in json_schemas.SUPPORTED_BACKUP_STATUSES:"},{"line_number":55,"context_line":"            raise freezer_api_exc.BadDataFormat("},{"line_number":56,"context_line":"                \"\u0027%s\u0027 is not a valid backup status\" % status)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7d4dcde6_804b7974","line":53,"in_reply_to":"11a16de8_f2b67e21","updated":"2026-07-24 16:55:03.000000000","message":"good point, but solution to it is kinda nasty...","commit_id":"e897a5fe5b143bb573980da9fb820a68525295f2"},{"author":{"_account_id":39044,"name":"Alicja Filipek","display_name":"alaf01","email":"alicja.filipek@cleura.com","username":"alaf01"},"change_message_id":"a0f35ef11cceb74c6b6da081d0f573b0da6a3169","unresolved":true,"context_lines":[{"line_number":65,"context_line":"        doc.pop(\u0027user_id\u0027, None)"},{"line_number":66,"context_line":"        doc.pop(\u0027backup_id\u0027, None)"},{"line_number":67,"context_line":"        doc.pop(\u0027project_id\u0027, None)"},{"line_number":68,"context_line":"        status \u003d doc.get(\u0027status\u0027)"},{"line_number":69,"context_line":"        if status and status not in json_schemas.SUPPORTED_BACKUP_STATUSES:"},{"line_number":70,"context_line":"            raise freezer_api_exc.BadDataFormat("},{"line_number":71,"context_line":"                \"\u0027%s\u0027 is not a valid backup status\" % status)"}],"source_content_type":"text/x-python","patch_set":4,"id":"64c5310d_12867725","line":68,"updated":"2026-07-24 11:28:56.000000000","message":"we can also pop the status, to have single source of truth","commit_id":"e897a5fe5b143bb573980da9fb820a68525295f2"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"9e0dc6e2b7555dbd1647e9177e908c27df86f831","unresolved":true,"context_lines":[{"line_number":65,"context_line":"        doc.pop(\u0027user_id\u0027, None)"},{"line_number":66,"context_line":"        doc.pop(\u0027backup_id\u0027, None)"},{"line_number":67,"context_line":"        doc.pop(\u0027project_id\u0027, None)"},{"line_number":68,"context_line":"        status \u003d doc.get(\u0027status\u0027)"},{"line_number":69,"context_line":"        if status and status not in json_schemas.SUPPORTED_BACKUP_STATUSES:"},{"line_number":70,"context_line":"            raise freezer_api_exc.BadDataFormat("},{"line_number":71,"context_line":"                \"\u0027%s\u0027 is not a valid backup status\" % status)"}],"source_content_type":"text/x-python","patch_set":4,"id":"adfb479c_4b1f2105","line":68,"in_reply_to":"64c5310d_12867725","updated":"2026-07-24 16:55:03.000000000","message":"Um, not sure why we would pop status? As this is source of truth? We pop others as these properties are immutable, so we wanna make sure they\u0027re not updated/replaced.\n\nStatus is mutable, so should remain there?","commit_id":"e897a5fe5b143bb573980da9fb820a68525295f2"},{"author":{"_account_id":39044,"name":"Alicja Filipek","display_name":"alaf01","email":"alicja.filipek@cleura.com","username":"alaf01"},"change_message_id":"8aa65807c235b0e82d4536234a1c70b3510fcba7","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        doc.pop(\u0027user_id\u0027, None)"},{"line_number":66,"context_line":"        doc.pop(\u0027backup_id\u0027, None)"},{"line_number":67,"context_line":"        doc.pop(\u0027project_id\u0027, None)"},{"line_number":68,"context_line":"        status \u003d doc.get(\u0027status\u0027)"},{"line_number":69,"context_line":"        if status and status not in json_schemas.SUPPORTED_BACKUP_STATUSES:"},{"line_number":70,"context_line":"            raise freezer_api_exc.BadDataFormat("},{"line_number":71,"context_line":"                \"\u0027%s\u0027 is not a valid backup status\" % status)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ec527bc8_451b0343","line":68,"in_reply_to":"adfb479c_4b1f2105","updated":"2026-07-27 08:29:32.000000000","message":"that was kind of connected to my previous comment, we can just pop status not to store it in the metadata, because we store it directly in \u0027status\u0027, but now I see that we just return doc here and not saving objects we pop, so I was wrong here","commit_id":"e897a5fe5b143bb573980da9fb820a68525295f2"}],"freezer_api/storage/elasticv2.py":[{"author":{"_account_id":39044,"name":"Alicja Filipek","display_name":"alaf01","email":"alicja.filipek@cleura.com","username":"alaf01"},"change_message_id":"a0f35ef11cceb74c6b6da081d0f573b0da6a3169","unresolved":true,"context_lines":[{"line_number":420,"context_line":"                                          user_id\u003duser_id)"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"    def update_backup(self, project_id, user_id, backup_id, patch_doc):"},{"line_number":423,"context_line":"        backup \u003d self.get_backup(project_id, backup_id)"},{"line_number":424,"context_line":"        if not backup:"},{"line_number":425,"context_line":"            raise freezer_api_exc.DocumentNotFound("},{"line_number":426,"context_line":"                message\u003df\u0027Backup not registered with ID {backup_id}\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"b30af43e_6886be23","line":423,"updated":"2026-07-24 11:28:56.000000000","message":"in elasticv2.py `def get_backup(self, backup_id, project_id\u003dNone):`, so the arguments are in reversed order. We can use kwargs to avoid mismatch.","commit_id":"e897a5fe5b143bb573980da9fb820a68525295f2"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"9e0dc6e2b7555dbd1647e9177e908c27df86f831","unresolved":false,"context_lines":[{"line_number":420,"context_line":"                                          user_id\u003duser_id)"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"    def update_backup(self, project_id, user_id, backup_id, patch_doc):"},{"line_number":423,"context_line":"        backup \u003d self.get_backup(project_id, backup_id)"},{"line_number":424,"context_line":"        if not backup:"},{"line_number":425,"context_line":"            raise freezer_api_exc.DocumentNotFound("},{"line_number":426,"context_line":"                message\u003df\u0027Backup not registered with ID {backup_id}\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"240791ef_315d168b","line":423,"in_reply_to":"b30af43e_6886be23","updated":"2026-07-24 16:55:03.000000000","message":"OK, yeah, I frankly didn\u0027t double-check elastic path at all...\nI was on the edge on dropping it right away, but then didn\u0027t want to switch to that right away.","commit_id":"e897a5fe5b143bb573980da9fb820a68525295f2"},{"author":{"_account_id":39044,"name":"Alicja Filipek","display_name":"alaf01","email":"alicja.filipek@cleura.com","username":"alaf01"},"change_message_id":"a0f35ef11cceb74c6b6da081d0f573b0da6a3169","unresolved":true,"context_lines":[{"line_number":438,"context_line":"        if \u0027job_id\u0027 in existing_metadata:"},{"line_number":439,"context_line":"            doc_body[\u0027job_id\u0027] \u003d existing_metadata[\u0027job_id\u0027]"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        self.backup_manager.update(project_id, backup_id, doc_body,"},{"line_number":442,"context_line":"                                   user_id\u003duser_id)"},{"line_number":443,"context_line":"        LOG.info(\u0027Backup updated, backup_id: {0}\u0027.format(backup_id))"},{"line_number":444,"context_line":"        return backup_id"}],"source_content_type":"text/x-python","patch_set":4,"id":"8cbc60f3_1afd1eb5","line":441,"updated":"2026-07-24 11:28:56.000000000","message":"if the backup manager is TypeManagerV2, the update method `def update(self, doc_id, update_doc)` accepts only 2 parameters, so it will fail. I would also add a test for TypeManagerV2 to catch this issue.","commit_id":"e897a5fe5b143bb573980da9fb820a68525295f2"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"9e0dc6e2b7555dbd1647e9177e908c27df86f831","unresolved":false,"context_lines":[{"line_number":438,"context_line":"        if \u0027job_id\u0027 in existing_metadata:"},{"line_number":439,"context_line":"            doc_body[\u0027job_id\u0027] \u003d existing_metadata[\u0027job_id\u0027]"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        self.backup_manager.update(project_id, backup_id, doc_body,"},{"line_number":442,"context_line":"                                   user_id\u003duser_id)"},{"line_number":443,"context_line":"        LOG.info(\u0027Backup updated, backup_id: {0}\u0027.format(backup_id))"},{"line_number":444,"context_line":"        return backup_id"}],"source_content_type":"text/x-python","patch_set":4,"id":"165271af_962f9519","line":441,"in_reply_to":"8cbc60f3_1afd1eb5","updated":"2026-07-24 16:55:03.000000000","message":"another good one, fixed.","commit_id":"e897a5fe5b143bb573980da9fb820a68525295f2"}]}
