)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"4cc472a1230281fb3741f98a2b4d848111438a24","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"1f54fb24_bc5fc5d1","updated":"2025-04-01 14:54:58.000000000","message":"recheck\nKnown issues with the dummy driver jobs","commit_id":"ae8d5bc1eeb2aebabf1073c065d97c97eca4304e"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"9753d61de46df1fca004d309330a088b0c64ad33","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"b6754cd5_b8efbe31","updated":"2025-12-18 08:01:05.000000000","message":"Thanks @ces.eduardo98@gmail.com for working on this, I have one nit comment but changes looks good for me.","commit_id":"4de1de0f05236dddf54afe4fea509d97b09ac75c"},{"author":{"_account_id":36761,"name":"za","display_name":"zgoggin","email":"zachary.goggin@ecmwf.int","username":"za","status":"Manila share backup enthusiast at ECMWF :)"},"change_message_id":"2c94b97c2016bab83a541c23d9a3b8dec7092466","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"aaf1a631_650dba98","updated":"2025-09-18 15:55:41.000000000","message":"Thanks for the change Carloss! \nThis looks good to me, some small, minor comments.","commit_id":"4de1de0f05236dddf54afe4fea509d97b09ac75c"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"f2a63147d616f861e7dc0a559e88c7bfbb95fa6e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"1a6fd8e9_4ff2f4f7","updated":"2025-09-12 20:19:58.000000000","message":"This looks good now; the default value of \"enabled_share_protocols\" is NFS_CIFS, which disallows backends that support some other protocol. This new option is along the same lines... It should be an easy update to the config when using different backup drivers.","commit_id":"4de1de0f05236dddf54afe4fea509d97b09ac75c"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"f067c1cd377e2b164247e555823fe521c2f260ee","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"e933e022_bcb1a92d","updated":"2026-01-20 20:44:31.000000000","message":"recheck\n\nunrelated failure","commit_id":"4de1de0f05236dddf54afe4fea509d97b09ac75c"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"626a195ec98a819e07281a578121c69ce3a7bb78","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"b55a6959_2ae33cae","updated":"2026-01-08 19:26:01.000000000","message":"recheck\n\nzuul had some issues","commit_id":"4de1de0f05236dddf54afe4fea509d97b09ac75c"}],"manila/share/api.py":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"d2d458034f193c08677044af83195ee510e57dfd","unresolved":true,"context_lines":[{"line_number":4151,"context_line":""},{"line_number":4152,"context_line":"        backup_ref \u003d {}"},{"line_number":4153,"context_line":"        try:"},{"line_number":4154,"context_line":"            # No backup options were provided, which means that it will use the"},{"line_number":4155,"context_line":"            # generic backup approach."},{"line_number":4156,"context_line":"            if not backup_options:"},{"line_number":4157,"context_line":"                topic \u003d CONF.data_topic"},{"line_number":4158,"context_line":""},{"line_number":4159,"context_line":"                if share[\u0027share_proto\u0027].lower() !\u003d \u0027nfs\u0027:"},{"line_number":4160,"context_line":"                    raise exception.InvalidShare("},{"line_number":4161,"context_line":"                        \"Cannot backup share %s. The generic approach for \""},{"line_number":4162,"context_line":"                        \"share backups only supports NFS shares.\")"},{"line_number":4163,"context_line":""},{"line_number":4164,"context_line":"            backup_ref \u003d self.db.share_backup_create("},{"line_number":4165,"context_line":"                context, share[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"cfe90045_70373292","line":4162,"range":{"start_line":4154,"start_character":12,"end_line":4162,"end_character":66},"updated":"2025-03-26 21:33:06.000000000","message":"why here?\nwell, we are doing the whole quota process above, as one of the very first things in this method, so I am basically trying to ensure that we rollback the quotas with little effort in the current code implementation. If we are past this stage, we will have a hard time deleting the quotas, as the backup will be in error state. The share manager won\u0027t be able to release the quotas, as it will fail at the driver step and will never get to the quota release part.","commit_id":"b98a4637b624f14f6650f0ba0645f8bf4be634d2"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"e165916170747591913242469feccfa320885472","unresolved":false,"context_lines":[{"line_number":4151,"context_line":""},{"line_number":4152,"context_line":"        backup_ref \u003d {}"},{"line_number":4153,"context_line":"        try:"},{"line_number":4154,"context_line":"            # No backup options were provided, which means that it will use the"},{"line_number":4155,"context_line":"            # generic backup approach."},{"line_number":4156,"context_line":"            if not backup_options:"},{"line_number":4157,"context_line":"                topic \u003d CONF.data_topic"},{"line_number":4158,"context_line":""},{"line_number":4159,"context_line":"                if share[\u0027share_proto\u0027].lower() !\u003d \u0027nfs\u0027:"},{"line_number":4160,"context_line":"                    raise exception.InvalidShare("},{"line_number":4161,"context_line":"                        \"Cannot backup share %s. The generic approach for \""},{"line_number":4162,"context_line":"                        \"share backups only supports NFS shares.\")"},{"line_number":4163,"context_line":""},{"line_number":4164,"context_line":"            backup_ref \u003d self.db.share_backup_create("},{"line_number":4165,"context_line":"                context, share[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"a9f57ec6_b7280216","line":4162,"range":{"start_line":4154,"start_character":12,"end_line":4162,"end_character":66},"in_reply_to":"cfe90045_70373292","updated":"2025-10-16 15:34:21.000000000","message":"Done","commit_id":"b98a4637b624f14f6650f0ba0645f8bf4be634d2"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"1947cc851ccfe8d1cf445d28634136938b8259d5","unresolved":true,"context_lines":[{"line_number":4159,"context_line":"                backup_protocols \u003d ("},{"line_number":4160,"context_line":"                    CONF.data_manager_backup_supported_share_protocols)"},{"line_number":4161,"context_line":""},{"line_number":4162,"context_line":"                if (share[\u0027share_proto\u0027].upper()"},{"line_number":4163,"context_line":"                        not in [proto.upper() for proto in backup_protocols]):"},{"line_number":4164,"context_line":"                    error_msg \u003d _("},{"line_number":4165,"context_line":"                        \"Cannot backup share %(share)s. The generic approach \""},{"line_number":4166,"context_line":"                        \"for share backups only supports the following \""},{"line_number":4167,"context_line":"                        \"protocols: %(protos)s.\") % {"},{"line_number":4168,"context_line":"                        \"share\": share_id,"},{"line_number":4169,"context_line":"                        \"protos\": backup_protocols"},{"line_number":4170,"context_line":"                    }"},{"line_number":4171,"context_line":"                    raise exception.InvalidShare(error_msg)"},{"line_number":4172,"context_line":""},{"line_number":4173,"context_line":"            backup_ref \u003d self.db.share_backup_create("},{"line_number":4174,"context_line":"                context, share[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"2d73c79e_17f5c251","line":4171,"range":{"start_line":4162,"start_character":0,"end_line":4171,"end_character":59},"updated":"2025-09-10 21:37:09.000000000","message":"This will prevent this working with out of tree backup drivers, such as CBACK without them explicitly setting that option.\n\nI think we should call this out in release notes.","commit_id":"ae8d5bc1eeb2aebabf1073c065d97c97eca4304e"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"222bb0eaaa86dc7990dfb9436fc4e7c8e97825ab","unresolved":true,"context_lines":[{"line_number":4159,"context_line":"                backup_protocols \u003d ("},{"line_number":4160,"context_line":"                    CONF.data_manager_backup_supported_share_protocols)"},{"line_number":4161,"context_line":""},{"line_number":4162,"context_line":"                if (share[\u0027share_proto\u0027].upper()"},{"line_number":4163,"context_line":"                        not in [proto.upper() for proto in backup_protocols]):"},{"line_number":4164,"context_line":"                    error_msg \u003d _("},{"line_number":4165,"context_line":"                        \"Cannot backup share %(share)s. The generic approach \""},{"line_number":4166,"context_line":"                        \"for share backups only supports the following \""},{"line_number":4167,"context_line":"                        \"protocols: %(protos)s.\") % {"},{"line_number":4168,"context_line":"                        \"share\": share_id,"},{"line_number":4169,"context_line":"                        \"protos\": backup_protocols"},{"line_number":4170,"context_line":"                    }"},{"line_number":4171,"context_line":"                    raise exception.InvalidShare(error_msg)"},{"line_number":4172,"context_line":""},{"line_number":4173,"context_line":"            backup_ref \u003d self.db.share_backup_create("},{"line_number":4174,"context_line":"                context, share[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"3cce715e_7572bdd9","line":4171,"range":{"start_line":4162,"start_character":0,"end_line":4171,"end_character":59},"in_reply_to":"2d73c79e_17f5c251","updated":"2025-09-12 20:18:07.000000000","message":"Done - release note is more generic now :)","commit_id":"ae8d5bc1eeb2aebabf1073c065d97c97eca4304e"},{"author":{"_account_id":36761,"name":"za","display_name":"zgoggin","email":"zachary.goggin@ecmwf.int","username":"za","status":"Manila share backup enthusiast at ECMWF :)"},"change_message_id":"2c94b97c2016bab83a541c23d9a3b8dec7092466","unresolved":true,"context_lines":[{"line_number":4159,"context_line":"                backup_protocols \u003d ("},{"line_number":4160,"context_line":"                    CONF.data_manager_backup_supported_share_protocols)"},{"line_number":4161,"context_line":""},{"line_number":4162,"context_line":"                if (share[\u0027share_proto\u0027].upper()"},{"line_number":4163,"context_line":"                        not in [proto.upper() for proto in backup_protocols]):"},{"line_number":4164,"context_line":"                    error_msg \u003d _("},{"line_number":4165,"context_line":"                        \"Cannot backup share %(share)s. The generic approach \""},{"line_number":4166,"context_line":"                        \"for share backups only supports the following \""},{"line_number":4167,"context_line":"                        \"protocols: %(protos)s.\") % {"},{"line_number":4168,"context_line":"                        \"share\": share_id,"},{"line_number":4169,"context_line":"                        \"protos\": backup_protocols"},{"line_number":4170,"context_line":"                    }"},{"line_number":4171,"context_line":"                    raise exception.InvalidShare(error_msg)"},{"line_number":4172,"context_line":""},{"line_number":4173,"context_line":"            backup_ref \u003d self.db.share_backup_create("},{"line_number":4174,"context_line":"                context, share[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"b823a397_15c31f14","line":4171,"range":{"start_line":4162,"start_character":0,"end_line":4171,"end_character":59},"in_reply_to":"3cce715e_7572bdd9","updated":"2025-09-18 15:55:41.000000000","message":"for cback, this shouldn\u0027t be a problem, we simply have to add `CEPHFS` to this `data_manager_backup_supported_share_protocols`on our deployment. so looks fine for me. \n\nThanks for calling it out so we are aware!","commit_id":"ae8d5bc1eeb2aebabf1073c065d97c97eca4304e"},{"author":{"_account_id":36761,"name":"za","display_name":"zgoggin","email":"zachary.goggin@ecmwf.int","username":"za","status":"Manila share backup enthusiast at ECMWF :)"},"change_message_id":"2c94b97c2016bab83a541c23d9a3b8dec7092466","unresolved":true,"context_lines":[{"line_number":4121,"context_line":"                    raise exception.BackupLimitExceeded("},{"line_number":4122,"context_line":"                        allowed\u003dquotas[over])"},{"line_number":4123,"context_line":""},{"line_number":4124,"context_line":"        backup_options \u003d backup.get(\u0027backup_options\u0027, None)"},{"line_number":4125,"context_line":"        topic \u003d CONF.share_topic"},{"line_number":4126,"context_line":""},{"line_number":4127,"context_line":"        # Validate right backup type is provided"}],"source_content_type":"text/x-python","patch_set":4,"id":"4ab620b7_dcd49a34","line":4124,"updated":"2025-09-18 15:55:41.000000000","message":"Is there a risk of a unexpected failure here if a user erroneously\nconfigures `data_manager_backup_supported_share_protocols` as an empty list?\n(e.g. we wipe the default value)","commit_id":"4de1de0f05236dddf54afe4fea509d97b09ac75c"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"e165916170747591913242469feccfa320885472","unresolved":true,"context_lines":[{"line_number":4121,"context_line":"                    raise exception.BackupLimitExceeded("},{"line_number":4122,"context_line":"                        allowed\u003dquotas[over])"},{"line_number":4123,"context_line":""},{"line_number":4124,"context_line":"        backup_options \u003d backup.get(\u0027backup_options\u0027, None)"},{"line_number":4125,"context_line":"        topic \u003d CONF.share_topic"},{"line_number":4126,"context_line":""},{"line_number":4127,"context_line":"        # Validate right backup type is provided"}],"source_content_type":"text/x-python","patch_set":4,"id":"91794154_3918ab91","line":4124,"in_reply_to":"4ab620b7_dcd49a34","updated":"2025-10-16 15:34:21.000000000","message":"Good question@ There shouldn\u0027t be a risk, as it is an empty list and we are attempting to perform a get operation rather than trying to access objects directly.","commit_id":"4de1de0f05236dddf54afe4fea509d97b09ac75c"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"9753d61de46df1fca004d309330a088b0c64ad33","unresolved":true,"context_lines":[{"line_number":4156,"context_line":"            if not backup_options:"},{"line_number":4157,"context_line":"                topic \u003d CONF.data_topic"},{"line_number":4158,"context_line":""},{"line_number":4159,"context_line":"                backup_protocols \u003d ("},{"line_number":4160,"context_line":"                    CONF.data_manager_backup_supported_share_protocols)"},{"line_number":4161,"context_line":""},{"line_number":4162,"context_line":"                if (share[\u0027share_proto\u0027].upper()"},{"line_number":4163,"context_line":"                        not in [proto.upper() for proto in backup_protocols]):"},{"line_number":4164,"context_line":"                    error_msg \u003d _("},{"line_number":4165,"context_line":"                        \"Cannot backup share %(share)s. The generic approach \""},{"line_number":4166,"context_line":"                        \"for share backups only supports the following \""}],"source_content_type":"text/x-python","patch_set":4,"id":"4a8ee988_95170877","line":4163,"range":{"start_line":4159,"start_character":16,"end_line":4163,"end_character":78},"updated":"2025-12-18 08:01:05.000000000","message":"nit - We can make it more readable as below \nbackup_protocols \u003d CONF.data_manager_backup_supported_share_protocols\nbackup_protocols_upper \u003d {proto.upper() for proto in backup_protocols}\nshare_proto_upper \u003d share[\u0027share_proto\u0027].upper()\nif share_proto_upper not in backup_protocols_upper:\n    \u003cremaining code for raising the exception\u003e","commit_id":"4de1de0f05236dddf54afe4fea509d97b09ac75c"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"bd520cd4c5d0695304024e9a352002cb511b2cdd","unresolved":true,"context_lines":[{"line_number":4156,"context_line":"            if not backup_options:"},{"line_number":4157,"context_line":"                topic \u003d CONF.data_topic"},{"line_number":4158,"context_line":""},{"line_number":4159,"context_line":"                backup_protocols \u003d ("},{"line_number":4160,"context_line":"                    CONF.data_manager_backup_supported_share_protocols)"},{"line_number":4161,"context_line":""},{"line_number":4162,"context_line":"                if (share[\u0027share_proto\u0027].upper()"},{"line_number":4163,"context_line":"                        not in [proto.upper() for proto in backup_protocols]):"},{"line_number":4164,"context_line":"                    error_msg \u003d _("},{"line_number":4165,"context_line":"                        \"Cannot backup share %(share)s. The generic approach \""},{"line_number":4166,"context_line":"                        \"for share backups only supports the following \""}],"source_content_type":"text/x-python","patch_set":4,"id":"dc053c8e_d56fc1b1","line":4163,"range":{"start_line":4159,"start_character":16,"end_line":4163,"end_character":78},"in_reply_to":"4a8ee988_95170877","updated":"2025-12-19 18:16:52.000000000","message":"ack, if people are okay I can add this in a follow-up change :)","commit_id":"4de1de0f05236dddf54afe4fea509d97b09ac75c"}],"manila/tests/share/test_api.py":[{"author":{"_account_id":36761,"name":"za","display_name":"zgoggin","email":"zachary.goggin@ecmwf.int","username":"za","status":"Manila share backup enthusiast at ECMWF :)"},"change_message_id":"2c94b97c2016bab83a541c23d9a3b8dec7092466","unresolved":true,"context_lines":[{"line_number":7619,"context_line":"            data_rpc.DataAPI.create_backup.assert_called_once_with("},{"line_number":7620,"context_line":"                self.context, backup_ref)"},{"line_number":7621,"context_line":""},{"line_number":7622,"context_line":"    @ddt.data(\u0027CEPHFS\u0027, \u0027CIFS\u0027)"},{"line_number":7623,"context_line":"    def test_create_generic_share_backup_invalid_protocol(self, share_proto):"},{"line_number":7624,"context_line":"        CONF.set_default("},{"line_number":7625,"context_line":"            \"data_manager_backup_supported_share_protocols\", [\"MANGO\"])"}],"source_content_type":"text/x-python","patch_set":4,"id":"a21ed7a6_76af4b32","line":7622,"updated":"2025-09-18 15:55:41.000000000","message":"Q: Are `CIFS` and `NFS` inclusive of eachother?\n   do we get anything extra by testing both?","commit_id":"4de1de0f05236dddf54afe4fea509d97b09ac75c"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"9e9524722ff6bb60418b9761d35574d670d8350c","unresolved":true,"context_lines":[{"line_number":7619,"context_line":"            data_rpc.DataAPI.create_backup.assert_called_once_with("},{"line_number":7620,"context_line":"                self.context, backup_ref)"},{"line_number":7621,"context_line":""},{"line_number":7622,"context_line":"    @ddt.data(\u0027CEPHFS\u0027, \u0027CIFS\u0027)"},{"line_number":7623,"context_line":"    def test_create_generic_share_backup_invalid_protocol(self, share_proto):"},{"line_number":7624,"context_line":"        CONF.set_default("},{"line_number":7625,"context_line":"            \"data_manager_backup_supported_share_protocols\", [\"MANGO\"])"}],"source_content_type":"text/x-python","patch_set":4,"id":"cd786ff9_7aebd582","line":7622,"in_reply_to":"a21ed7a6_76af4b32","updated":"2025-12-19 18:16:27.000000000","message":"Hey, good question. More of a scenario to add unit test coverage to more unsupported protocols, so the thing we get is pretty much extra coverage.","commit_id":"4de1de0f05236dddf54afe4fea509d97b09ac75c"}]}
