)]}'
{"freezer/job.py":[{"author":{"_account_id":39044,"name":"Alicja Filipek","display_name":"alaf01","email":"alicja.filipek@cleura.com","username":"alaf01"},"change_message_id":"f54e04572820afa1172fadd3839e89f3bef06971","unresolved":true,"context_lines":[{"line_number":290,"context_line":"                  ]"},{"line_number":291,"context_line":"        for field_name in fields:"},{"line_number":292,"context_line":"            metadata[field_name] \u003d self.conf.__dict__.get(field_name, \u0027\u0027) or \u0027\u0027"},{"line_number":293,"context_line":"        if getattr(self.conf, \u0027backup_id\u0027, None):"},{"line_number":294,"context_line":"            metadata[\u0027backup_id\u0027] \u003d self.conf.backup_id"},{"line_number":295,"context_line":"        if getattr(self.conf, \u0027cinder_backup_id\u0027, None):"},{"line_number":296,"context_line":"            metadata[\u0027cinder_backup_id\u0027] \u003d self.conf.cinder_backup_id"}],"source_content_type":"text/x-python","patch_set":1,"id":"c051d151_82ef6d88","line":293,"updated":"2026-07-28 12:39:01.000000000","message":"Why not to add them to fields? Do we care if they are in metadata?","commit_id":"55656048b977fdb2d4b40e597f964d7b24f85e31"},{"author":{"_account_id":39044,"name":"Alicja Filipek","display_name":"alaf01","email":"alicja.filipek@cleura.com","username":"alaf01"},"change_message_id":"27ec86224b7b2d645fe11c83b11da967b3659484","unresolved":false,"context_lines":[{"line_number":290,"context_line":"                  ]"},{"line_number":291,"context_line":"        for field_name in fields:"},{"line_number":292,"context_line":"            metadata[field_name] \u003d self.conf.__dict__.get(field_name, \u0027\u0027) or \u0027\u0027"},{"line_number":293,"context_line":"        if getattr(self.conf, \u0027backup_id\u0027, None):"},{"line_number":294,"context_line":"            metadata[\u0027backup_id\u0027] \u003d self.conf.backup_id"},{"line_number":295,"context_line":"        if getattr(self.conf, \u0027cinder_backup_id\u0027, None):"},{"line_number":296,"context_line":"            metadata[\u0027cinder_backup_id\u0027] \u003d self.conf.cinder_backup_id"}],"source_content_type":"text/x-python","patch_set":1,"id":"051ea534_4c14652c","line":293,"in_reply_to":"3eff2e98_cc94d3a4","updated":"2026-08-18 11:06:19.000000000","message":"if we do not care and can add it directly to fields the code is a little bit more clear, but it is not complicated so it is fine like it is. I agree that having UUID in metadata is weird.","commit_id":"55656048b977fdb2d4b40e597f964d7b24f85e31"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"21150c33e24c7a17af866df50d44ac2e274e7e24","unresolved":true,"context_lines":[{"line_number":290,"context_line":"                  ]"},{"line_number":291,"context_line":"        for field_name in fields:"},{"line_number":292,"context_line":"            metadata[field_name] \u003d self.conf.__dict__.get(field_name, \u0027\u0027) or \u0027\u0027"},{"line_number":293,"context_line":"        if getattr(self.conf, \u0027backup_id\u0027, None):"},{"line_number":294,"context_line":"            metadata[\u0027backup_id\u0027] \u003d self.conf.backup_id"},{"line_number":295,"context_line":"        if getattr(self.conf, \u0027cinder_backup_id\u0027, None):"},{"line_number":296,"context_line":"            metadata[\u0027cinder_backup_id\u0027] \u003d self.conf.cinder_backup_id"}],"source_content_type":"text/x-python","patch_set":1,"id":"3eff2e98_cc94d3a4","line":293,"in_reply_to":"c051d151_82ef6d88","updated":"2026-07-29 08:47:53.000000000","message":"backup_id is UUID of the object which we need to create. It\u0027s weird to have UUID of self in metadata, isn\u0027t it? But even more weird not to have it, as during create it will be none and populate only on update.","commit_id":"55656048b977fdb2d4b40e597f964d7b24f85e31"},{"author":{"_account_id":39044,"name":"Alicja Filipek","display_name":"alaf01","email":"alicja.filipek@cleura.com","username":"alaf01"},"change_message_id":"f54e04572820afa1172fadd3839e89f3bef06971","unresolved":true,"context_lines":[{"line_number":456,"context_line":"                                        self.container,"},{"line_number":457,"context_line":"                                        self.storage,"},{"line_number":458,"context_line":"                                        self.conf.temp_resource_prefix)"},{"line_number":459,"context_line":"            metadata \u003d {"},{"line_number":460,"context_line":"                \u0027created_by\u0027: \u0027freezer\u0027,"},{"line_number":461,"context_line":"            }"},{"line_number":462,"context_line":"            if getattr(self.conf, \u0027backup_id\u0027, None):"}],"source_content_type":"text/x-python","patch_set":1,"id":"a738c598_d6da78eb","line":459,"updated":"2026-07-28 12:39:01.000000000","message":"it is not related to this particular change, but the \u0027backup\u0027 method grow heavly and I would recommend to refactor it, add helper functions for each of the backup media, but not in scope of this ticket.","commit_id":"55656048b977fdb2d4b40e597f964d7b24f85e31"},{"author":{"_account_id":39044,"name":"Alicja Filipek","display_name":"alaf01","email":"alicja.filipek@cleura.com","username":"alaf01"},"change_message_id":"60bfaf25f2f7b9fcab80a378a38df827dbd54896","unresolved":false,"context_lines":[{"line_number":456,"context_line":"                                        self.container,"},{"line_number":457,"context_line":"                                        self.storage,"},{"line_number":458,"context_line":"                                        self.conf.temp_resource_prefix)"},{"line_number":459,"context_line":"            metadata \u003d {"},{"line_number":460,"context_line":"                \u0027created_by\u0027: \u0027freezer\u0027,"},{"line_number":461,"context_line":"            }"},{"line_number":462,"context_line":"            if getattr(self.conf, \u0027backup_id\u0027, None):"}],"source_content_type":"text/x-python","patch_set":1,"id":"c18ea462_6fc213aa","line":459,"in_reply_to":"4924c45e_54503467","updated":"2026-08-18 11:06:49.000000000","message":"Marked as resolved.","commit_id":"55656048b977fdb2d4b40e597f964d7b24f85e31"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"db1808ffd88d2b581610119f6e779a0a48b75ea3","unresolved":true,"context_lines":[{"line_number":456,"context_line":"                                        self.container,"},{"line_number":457,"context_line":"                                        self.storage,"},{"line_number":458,"context_line":"                                        self.conf.temp_resource_prefix)"},{"line_number":459,"context_line":"            metadata \u003d {"},{"line_number":460,"context_line":"                \u0027created_by\u0027: \u0027freezer\u0027,"},{"line_number":461,"context_line":"            }"},{"line_number":462,"context_line":"            if getattr(self.conf, \u0027backup_id\u0027, None):"}],"source_content_type":"text/x-python","patch_set":1,"id":"4924c45e_54503467","line":459,"in_reply_to":"a738c598_d6da78eb","updated":"2026-07-29 08:58:45.000000000","message":"+1","commit_id":"55656048b977fdb2d4b40e597f964d7b24f85e31"},{"author":{"_account_id":39044,"name":"Alicja Filipek","display_name":"alaf01","email":"alicja.filipek@cleura.com","username":"alaf01"},"change_message_id":"f54e04572820afa1172fadd3839e89f3bef06971","unresolved":true,"context_lines":[{"line_number":471,"context_line":"                    self.conf.cindernative_vol_id),"},{"line_number":472,"context_line":"                metadata\u003dmetadata)"},{"line_number":473,"context_line":"            self.conf.cinder_backup_id \u003d getattr(cinder_backup, \u0027id\u0027, None)"},{"line_number":474,"context_line":"            self.conf.status \u003d \u0027available\u0027"},{"line_number":475,"context_line":"            return 0"},{"line_number":476,"context_line":"        elif backup_media \u003d\u003d \u0027cinder\u0027:"},{"line_number":477,"context_line":"            backup_os \u003d backup.BackupOs(self.conf.client_manager,"}],"source_content_type":"text/x-python","patch_set":1,"id":"2b9ce67b_8334b13a","line":474,"updated":"2026-07-28 12:39:01.000000000","message":"we set the status here as \u0027available\u0027, even though we are not sure that the backup_os.backup_cinder completes successfully","commit_id":"55656048b977fdb2d4b40e597f964d7b24f85e31"},{"author":{"_account_id":39044,"name":"Alicja Filipek","display_name":"alaf01","email":"alicja.filipek@cleura.com","username":"alaf01"},"change_message_id":"27ec86224b7b2d645fe11c83b11da967b3659484","unresolved":false,"context_lines":[{"line_number":471,"context_line":"                    self.conf.cindernative_vol_id),"},{"line_number":472,"context_line":"                metadata\u003dmetadata)"},{"line_number":473,"context_line":"            self.conf.cinder_backup_id \u003d getattr(cinder_backup, \u0027id\u0027, None)"},{"line_number":474,"context_line":"            self.conf.status \u003d \u0027available\u0027"},{"line_number":475,"context_line":"            return 0"},{"line_number":476,"context_line":"        elif backup_media \u003d\u003d \u0027cinder\u0027:"},{"line_number":477,"context_line":"            backup_os \u003d backup.BackupOs(self.conf.client_manager,"}],"source_content_type":"text/x-python","patch_set":1,"id":"0852bb55_8553b8cb","line":474,"in_reply_to":"1d469f5e_dc8ff43c","updated":"2026-08-18 11:06:19.000000000","message":"yes, follow up would be nice","commit_id":"55656048b977fdb2d4b40e597f964d7b24f85e31"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"db1808ffd88d2b581610119f6e779a0a48b75ea3","unresolved":true,"context_lines":[{"line_number":471,"context_line":"                    self.conf.cindernative_vol_id),"},{"line_number":472,"context_line":"                metadata\u003dmetadata)"},{"line_number":473,"context_line":"            self.conf.cinder_backup_id \u003d getattr(cinder_backup, \u0027id\u0027, None)"},{"line_number":474,"context_line":"            self.conf.status \u003d \u0027available\u0027"},{"line_number":475,"context_line":"            return 0"},{"line_number":476,"context_line":"        elif backup_media \u003d\u003d \u0027cinder\u0027:"},{"line_number":477,"context_line":"            backup_os \u003d backup.BackupOs(self.conf.client_manager,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1d469f5e_dc8ff43c","line":474,"in_reply_to":"2b9ce67b_8334b13a","updated":"2026-07-29 08:58:45.000000000","message":"Yep, there\u0027s no good solution here, and I think I have mentioned that somewhere...\n\nWhile we can add wait\u003dtrue and wait for the results, I don\u0027t think we want to, as it might block the process for hours (or days) for backup to complete.\n\nAnd pushing status \"creating\" is similarly misleading, given we don\u0027t have any periodic worker to ensure state of backups.\n\nAdding such periodic job is totally worth it, but I am not sure if this should be part of this patch.","commit_id":"55656048b977fdb2d4b40e597f964d7b24f85e31"},{"author":{"_account_id":39044,"name":"Alicja Filipek","display_name":"alaf01","email":"alicja.filipek@cleura.com","username":"alaf01"},"change_message_id":"f54e04572820afa1172fadd3839e89f3bef06971","unresolved":true,"context_lines":[{"line_number":472,"context_line":"                metadata\u003dmetadata)"},{"line_number":473,"context_line":"            self.conf.cinder_backup_id \u003d getattr(cinder_backup, \u0027id\u0027, None)"},{"line_number":474,"context_line":"            self.conf.status \u003d \u0027available\u0027"},{"line_number":475,"context_line":"            return 0"},{"line_number":476,"context_line":"        elif backup_media \u003d\u003d \u0027cinder\u0027:"},{"line_number":477,"context_line":"            backup_os \u003d backup.BackupOs(self.conf.client_manager,"},{"line_number":478,"context_line":"                                        self.container,"}],"source_content_type":"text/x-python","patch_set":1,"id":"4ce4d204_71e1b410","line":475,"updated":"2026-07-28 12:39:01.000000000","message":"why do we return 0 in here? I would comment on that and update the docstr to state that the function can return 0.","commit_id":"55656048b977fdb2d4b40e597f964d7b24f85e31"},{"author":{"_account_id":39044,"name":"Alicja Filipek","display_name":"alaf01","email":"alicja.filipek@cleura.com","username":"alaf01"},"change_message_id":"60bfaf25f2f7b9fcab80a378a38df827dbd54896","unresolved":false,"context_lines":[{"line_number":472,"context_line":"                metadata\u003dmetadata)"},{"line_number":473,"context_line":"            self.conf.cinder_backup_id \u003d getattr(cinder_backup, \u0027id\u0027, None)"},{"line_number":474,"context_line":"            self.conf.status \u003d \u0027available\u0027"},{"line_number":475,"context_line":"            return 0"},{"line_number":476,"context_line":"        elif backup_media \u003d\u003d \u0027cinder\u0027:"},{"line_number":477,"context_line":"            backup_os \u003d backup.BackupOs(self.conf.client_manager,"},{"line_number":478,"context_line":"                                        self.container,"}],"source_content_type":"text/x-python","patch_set":1,"id":"de468b54_f4143e20","line":475,"in_reply_to":"1ac49f2c_5eb4e15b","updated":"2026-08-18 11:06:49.000000000","message":"Marked as resolved.","commit_id":"55656048b977fdb2d4b40e597f964d7b24f85e31"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"fcad45380aaa4441a4b2fc53164861db5a098605","unresolved":true,"context_lines":[{"line_number":472,"context_line":"                metadata\u003dmetadata)"},{"line_number":473,"context_line":"            self.conf.cinder_backup_id \u003d getattr(cinder_backup, \u0027id\u0027, None)"},{"line_number":474,"context_line":"            self.conf.status \u003d \u0027available\u0027"},{"line_number":475,"context_line":"            return 0"},{"line_number":476,"context_line":"        elif backup_media \u003d\u003d \u0027cinder\u0027:"},{"line_number":477,"context_line":"            backup_os \u003d backup.BackupOs(self.conf.client_manager,"},{"line_number":478,"context_line":"                                        self.container,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac49f2c_5eb4e15b","line":475,"in_reply_to":"4ce4d204_71e1b410","updated":"2026-08-17 13:25:35.000000000","message":"It\u0027s a level of backup (full/incremental) - we don\u0027t know that before it\u0027s completed, so we\u0027d need some kind of polling alike to the status.","commit_id":"55656048b977fdb2d4b40e597f964d7b24f85e31"}],"freezer/openstack/admin.py":[{"author":{"_account_id":39044,"name":"Alicja Filipek","display_name":"alaf01","email":"alicja.filipek@cleura.com","username":"alaf01"},"change_message_id":"f54e04572820afa1172fadd3839e89f3bef06971","unresolved":true,"context_lines":[{"line_number":45,"context_line":"    @staticmethod"},{"line_number":46,"context_line":"    def is_freezer_backup(backup):"},{"line_number":47,"context_line":"        meta \u003d getattr(backup, \u0027metadata\u0027, {}) or {}"},{"line_number":48,"context_line":"        return (meta.get(\u0027created_by\u0027) \u003d\u003d \u0027freezer\u0027 or"},{"line_number":49,"context_line":"                \u0027freezer_backup_id\u0027 in meta)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def _delete_single_backup(self, backup_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"238b24b2_56221f35","line":48,"updated":"2026-07-28 12:39:01.000000000","message":"it looks like we have here two sources of truth. What if we have freezer backup id but not created by freezer? If freezer backups have always \u0027created_by\u0027 freezer set then I suggest rely only on this.","commit_id":"55656048b977fdb2d4b40e597f964d7b24f85e31"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"db1808ffd88d2b581610119f6e779a0a48b75ea3","unresolved":true,"context_lines":[{"line_number":45,"context_line":"    @staticmethod"},{"line_number":46,"context_line":"    def is_freezer_backup(backup):"},{"line_number":47,"context_line":"        meta \u003d getattr(backup, \u0027metadata\u0027, {}) or {}"},{"line_number":48,"context_line":"        return (meta.get(\u0027created_by\u0027) \u003d\u003d \u0027freezer\u0027 or"},{"line_number":49,"context_line":"                \u0027freezer_backup_id\u0027 in meta)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def _delete_single_backup(self, backup_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5db21be5_72337adf","line":48,"in_reply_to":"238b24b2_56221f35","updated":"2026-07-29 08:58:45.000000000","message":"Eh, it\u0027s a good question actually.\n\nAs indeed, we don\u0027t always have freezer_backup_id, for instance when scheduler is running without api at all.\nWill indeed remove OR from here","commit_id":"55656048b977fdb2d4b40e597f964d7b24f85e31"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"fcad45380aaa4441a4b2fc53164861db5a098605","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    @staticmethod"},{"line_number":46,"context_line":"    def is_freezer_backup(backup):"},{"line_number":47,"context_line":"        meta \u003d getattr(backup, \u0027metadata\u0027, {}) or {}"},{"line_number":48,"context_line":"        return (meta.get(\u0027created_by\u0027) \u003d\u003d \u0027freezer\u0027 or"},{"line_number":49,"context_line":"                \u0027freezer_backup_id\u0027 in meta)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def _delete_single_backup(self, backup_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"559a8f20_8cf63e87","line":48,"in_reply_to":"5db21be5_72337adf","updated":"2026-08-17 13:25:35.000000000","message":"Done","commit_id":"55656048b977fdb2d4b40e597f964d7b24f85e31"}],"freezer/scheduler/freezer_scheduler.py":[{"author":{"_account_id":39044,"name":"Alicja Filipek","display_name":"alaf01","email":"alicja.filipek@cleura.com","username":"alaf01"},"change_message_id":"f54e04572820afa1172fadd3839e89f3bef06971","unresolved":true,"context_lines":[{"line_number":184,"context_line":"        :param user_credentials: dict containing user credentials/trust_id"},{"line_number":185,"context_line":"        \"\"\""},{"line_number":186,"context_line":"        client \u003d self._get_client_for_user_credentials(user_credentials)"},{"line_number":187,"context_line":"        if not client:"},{"line_number":188,"context_line":"            return"},{"line_number":189,"context_line":"        try:"},{"line_number":190,"context_line":"            client.backups.delete(backup_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"0bc709ec_64fe2596","line":187,"updated":"2026-07-28 12:39:01.000000000","message":"The deleton of the backup metadata was already performed anyways. I would log warning here.","commit_id":"55656048b977fdb2d4b40e597f964d7b24f85e31"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"fcad45380aaa4441a4b2fc53164861db5a098605","unresolved":true,"context_lines":[{"line_number":184,"context_line":"        :param user_credentials: dict containing user credentials/trust_id"},{"line_number":185,"context_line":"        \"\"\""},{"line_number":186,"context_line":"        client \u003d self._get_client_for_user_credentials(user_credentials)"},{"line_number":187,"context_line":"        if not client:"},{"line_number":188,"context_line":"            return"},{"line_number":189,"context_line":"        try:"},{"line_number":190,"context_line":"            client.backups.delete(backup_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"2ee4043b_4cc237e4","line":187,"in_reply_to":"0bc709ec_64fe2596","updated":"2026-08-17 13:25:35.000000000","message":"I was thinking about the case when we\u0027re running without API. As this is also totally valid usecase. I will address in follow-up.","commit_id":"55656048b977fdb2d4b40e597f964d7b24f85e31"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"fcad45380aaa4441a4b2fc53164861db5a098605","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        :param user_credentials: dict containing user credentials/trust_id"},{"line_number":185,"context_line":"        \"\"\""},{"line_number":186,"context_line":"        client \u003d self._get_client_for_user_credentials(user_credentials)"},{"line_number":187,"context_line":"        if not client:"},{"line_number":188,"context_line":"            return"},{"line_number":189,"context_line":"        try:"},{"line_number":190,"context_line":"            client.backups.delete(backup_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"a095dfd0_437496c5","line":187,"in_reply_to":"0bc709ec_64fe2596","updated":"2026-08-17 13:25:35.000000000","message":"there is a usecase with standalone scheduler, where client is None.\n\nI have proposed https://review.opendev.org/c/openstack/freezer/+/1001148 to cover that.","commit_id":"55656048b977fdb2d4b40e597f964d7b24f85e31"},{"author":{"_account_id":39044,"name":"Alicja Filipek","display_name":"alaf01","email":"alicja.filipek@cleura.com","username":"alaf01"},"change_message_id":"27ec86224b7b2d645fe11c83b11da967b3659484","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        :param user_credentials: dict containing user credentials/trust_id"},{"line_number":185,"context_line":"        \"\"\""},{"line_number":186,"context_line":"        client \u003d self._get_client_for_user_credentials(user_credentials)"},{"line_number":187,"context_line":"        if not client:"},{"line_number":188,"context_line":"            return"},{"line_number":189,"context_line":"        try:"},{"line_number":190,"context_line":"            client.backups.delete(backup_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"454d49f4_ea1fd5f9","line":187,"in_reply_to":"a095dfd0_437496c5","updated":"2026-08-18 11:06:19.000000000","message":"ok, I just checked it out and reviewed +1","commit_id":"55656048b977fdb2d4b40e597f964d7b24f85e31"}]}
