)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"6d0e772a771a13e7bd19f5ea4d87c7f1f9db59fc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"4d2df8f6_729ce8e5","updated":"2026-01-29 05:37:38.000000000","message":"Hi Francesco, Thank you for review, I have made changes as per your suggestion!!","commit_id":"4452640cb965331897f44d3efd385f3e36175204"},{"author":{"_account_id":25402,"name":"Francesco Pantano","email":"fpantano@redhat.com","username":"fmount"},"change_message_id":"87123663380cbee325f6ad1378e38c67fe95b9c3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"e3403b25_121f929f","updated":"2026-01-28 22:06:37.000000000","message":"The direction looks good to me. Thanks for starting this. I made a first pass and you can check if some suggestions make sense!","commit_id":"4452640cb965331897f44d3efd385f3e36175204"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"192e321b49965c8a0bf9b4a9c486f89058c76a33","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"4e842ab5_5803a925","updated":"2026-02-03 16:12:07.000000000","message":"Hi Cyril, replied inline for your comments. Thank you for review.","commit_id":"b9a619dcdc9ad6676bf99e5d021affb70486959b"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"3bba1728e5e2f06989e1e70ac036c7ea727ca2da","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"f7f79ee9_886cb6dc","updated":"2026-01-29 13:08:30.000000000","message":"LGTM, Thank you !","commit_id":"b9a619dcdc9ad6676bf99e5d021affb70486959b"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"e374f5101c3663f0e2acece789d3a7d1cd9070b4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"f79c4a0c_2df2ac9f","updated":"2026-02-03 15:37:51.000000000","message":"This is a huge patch. I think some changes are not directly related to ZDPR. This will make backporting harder in the future. Is there a good reason not to split this into a \"generic refactoring\" patch and \"ZDPR\" patch? Am I misunderstanding the patch?","commit_id":"b9a619dcdc9ad6676bf99e5d021affb70486959b"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"3cffbc0a3a3f59dac4dec28224b1dd25fe297c98","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"dcfe8fa7_d2e3890a","updated":"2026-02-03 17:58:35.000000000","message":"Working on breaking the patch","commit_id":"8e47449bce09fa5717950bc3b9acbd022ec3ba9a"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"3e9da3618acfb64f0806e12ade274ac399a16f74","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"0059b31d_8915f54e","updated":"2026-02-04 13:59:09.000000000","message":"OK, looks good, let\u0027s go!","commit_id":"93b9887f425cf9e31262cb60faebaffa5af85199"}],"glance_store/_drivers/swift/store.py":[{"author":{"_account_id":25402,"name":"Francesco Pantano","email":"fpantano@redhat.com","username":"fmount"},"change_message_id":"87123663380cbee325f6ad1378e38c67fe95b9c3","unresolved":true,"context_lines":[{"line_number":596,"context_line":"            ref_params \u003d sutils.SwiftParams("},{"line_number":597,"context_line":"                self.conf, backend\u003dself.backend_group).params"},{"line_number":598,"context_line":"            self.user \u003d None"},{"line_number":599,"context_line":"            self.key \u003d None"},{"line_number":600,"context_line":"            self.application_credential_id \u003d None"},{"line_number":601,"context_line":"            self.application_credential_secret \u003d None"},{"line_number":602,"context_line":"            if (ref_params[netloc].get(\u0027application_credential_id\u0027) and"}],"source_content_type":"text/x-python","patch_set":1,"id":"38491213_d72fe2c5","line":599,"updated":"2026-01-28 22:06:37.000000000","message":"it is clear to me the if/else approach, and it makes sense.\nI\u0027m wondering if having an helper makes things more easy to read:\n\n```\n def _load_credentials(self, ref_params, netloc):\n      \"\"\"Load and validate credentials from reference parameters.\"\"\"\n      params \u003d ref_params[netloc]\n\n      # Try application credentials first\n      app_cred_id \u003d params.get(\u0027application_credential_id\u0027, None)\n      app_cred_secret \u003d params.get(\u0027application_credential_secret\u0027, None)\n\n      if app_cred_id and app_cred_secret:\n          self.application_credential_id \u003d app_cred_id\n          self.application_credential_secret \u003d app_cred_secret\n          self.project_name \u003d params.get(\u0027project_name\u0027)\n          self.project_id \u003d params.get(\u0027project_id\u0027)\n          self.user \u003d None\n          self.key \u003d None\n          return\n\n      # Fall back to user/key credentials\n      self.user \u003d params.get(\u0027user\u0027)\n      self.key \u003d params.get(\u0027key\u0027)\n      self.application_credential_id \u003d None\n      self.application_credential_secret \u003d None\n\n      if not self.user or not self.key:\n          reason \u003d _(\"Badly formed Swift URI. Credentials not found for account reference\")\n          LOG.info(reason)\n          raise exceptions.BadStoreUri(message\u003dreason)\n```\nso we separate the `credential` extraction with a dedicated helper from the URI validation. But not a blocking thing, feel free to ignore if you think it\u0027s just extra work without gaining much.","commit_id":"4452640cb965331897f44d3efd385f3e36175204"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"6d0e772a771a13e7bd19f5ea4d87c7f1f9db59fc","unresolved":false,"context_lines":[{"line_number":596,"context_line":"            ref_params \u003d sutils.SwiftParams("},{"line_number":597,"context_line":"                self.conf, backend\u003dself.backend_group).params"},{"line_number":598,"context_line":"            self.user \u003d None"},{"line_number":599,"context_line":"            self.key \u003d None"},{"line_number":600,"context_line":"            self.application_credential_id \u003d None"},{"line_number":601,"context_line":"            self.application_credential_secret \u003d None"},{"line_number":602,"context_line":"            if (ref_params[netloc].get(\u0027application_credential_id\u0027) and"}],"source_content_type":"text/x-python","patch_set":1,"id":"ceef7f2c_f80de532","line":599,"in_reply_to":"38491213_d72fe2c5","updated":"2026-01-29 05:37:38.000000000","message":"Done","commit_id":"4452640cb965331897f44d3efd385f3e36175204"},{"author":{"_account_id":25402,"name":"Francesco Pantano","email":"fpantano@redhat.com","username":"fmount"},"change_message_id":"87123663380cbee325f6ad1378e38c67fe95b9c3","unresolved":true,"context_lines":[{"line_number":743,"context_line":"            else:"},{"line_number":744,"context_line":"                auth_scheme \u003d \u0027http://\u0027"},{"line_number":745,"context_line":""},{"line_number":746,"context_line":"            if not self.auth_or_store_url:"},{"line_number":747,"context_line":"                return None"},{"line_number":748,"context_line":"            return \u0027\u0027.join([auth_scheme, self.auth_or_store_url])"},{"line_number":749,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"505d0afe_afc5eca6","line":746,"updated":"2026-01-28 22:06:37.000000000","message":"I would have put L746 at the very beginning so we can exit immediately if `auth_or_store_url` is `None`, but really a nit as we have `self.auth_or_store_url` in the `and` condition.","commit_id":"4452640cb965331897f44d3efd385f3e36175204"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"6d0e772a771a13e7bd19f5ea4d87c7f1f9db59fc","unresolved":false,"context_lines":[{"line_number":743,"context_line":"            else:"},{"line_number":744,"context_line":"                auth_scheme \u003d \u0027http://\u0027"},{"line_number":745,"context_line":""},{"line_number":746,"context_line":"            if not self.auth_or_store_url:"},{"line_number":747,"context_line":"                return None"},{"line_number":748,"context_line":"            return \u0027\u0027.join([auth_scheme, self.auth_or_store_url])"},{"line_number":749,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"68c00363_786efa0b","line":746,"in_reply_to":"505d0afe_afc5eca6","updated":"2026-01-29 05:37:38.000000000","message":"Done","commit_id":"4452640cb965331897f44d3efd385f3e36175204"},{"author":{"_account_id":25402,"name":"Francesco Pantano","email":"fpantano@redhat.com","username":"fmount"},"change_message_id":"87123663380cbee325f6ad1378e38c67fe95b9c3","unresolved":true,"context_lines":[{"line_number":1473,"context_line":"        if not auth_url.endswith(\u0027/\u0027):"},{"line_number":1474,"context_line":"            auth_url +\u003d \u0027/\u0027"},{"line_number":1475,"context_line":""},{"line_number":1476,"context_line":"        if getattr(location, \u0027application_credential_id\u0027, None):"},{"line_number":1477,"context_line":"            os_options \u003d {"},{"line_number":1478,"context_line":"                \u0027endpoint_type\u0027: self.endpoint_type,"},{"line_number":1479,"context_line":"                \u0027service_type\u0027: self.service_type,"}],"source_content_type":"text/x-python","patch_set":1,"id":"a3eda729_25b00ae9","line":1476,"updated":"2026-01-28 22:06:37.000000000","message":"can we always assume that if `location` has `application_credential_id` an associated `applicatoin_credential_secret` is always defined? I was thinking about something like the following to give you an idea of what I had in mind, but maybe this is redundant:\n\n```\n app_cred_id \u003d getattr(location, \u0027application_credential_id\u0027, None)\n app_cred_secret \u003d getattr(location, \u0027application_credential_secret\u0027, None)\n\n  if app_cred_id and not app_cred_secret:\n      raise exceptions.BadStoreUri(\n          message\u003d\"application_credential_secret required when \"\n                  \"application_credential_id is provided\")\n  elif app_cred_secret and not app_cred_id:\n      raise exceptions.BadStoreUri(\n          message\u003d\"application_credential_id required when \"\n                  \"application_credential_secret is provided\")\n```","commit_id":"4452640cb965331897f44d3efd385f3e36175204"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"6d0e772a771a13e7bd19f5ea4d87c7f1f9db59fc","unresolved":false,"context_lines":[{"line_number":1473,"context_line":"        if not auth_url.endswith(\u0027/\u0027):"},{"line_number":1474,"context_line":"            auth_url +\u003d \u0027/\u0027"},{"line_number":1475,"context_line":""},{"line_number":1476,"context_line":"        if getattr(location, \u0027application_credential_id\u0027, None):"},{"line_number":1477,"context_line":"            os_options \u003d {"},{"line_number":1478,"context_line":"                \u0027endpoint_type\u0027: self.endpoint_type,"},{"line_number":1479,"context_line":"                \u0027service_type\u0027: self.service_type,"}],"source_content_type":"text/x-python","patch_set":1,"id":"c6892c8f_8e8793fb","line":1476,"in_reply_to":"a3eda729_25b00ae9","updated":"2026-01-29 05:37:38.000000000","message":"Makes sense!!","commit_id":"4452640cb965331897f44d3efd385f3e36175204"},{"author":{"_account_id":25402,"name":"Francesco Pantano","email":"fpantano@redhat.com","username":"fmount"},"change_message_id":"87123663380cbee325f6ad1378e38c67fe95b9c3","unresolved":true,"context_lines":[{"line_number":1681,"context_line":"            else:"},{"line_number":1682,"context_line":"                self.container \u003d ("},{"line_number":1683,"context_line":"                    self.conf.glance_store.swift_store_container)"},{"line_number":1684,"context_line":"        if not self.container:"},{"line_number":1685,"context_line":"            reason \u003d _(\"swift_store_container must be set in the \""},{"line_number":1686,"context_line":"                       \"configuration.\")"},{"line_number":1687,"context_line":"            raise exceptions.BadStoreConfiguration(store_name\u003d\"swift\","}],"source_content_type":"text/x-python","patch_set":1,"id":"69401db2_fecb4782","line":1684,"updated":"2026-01-28 22:06:37.000000000","message":"wondering if modifying `self.container` that is first evaluated in L1676 and then re-evaluated in L1684 might not be considered a best practice.\nshould we add a small helper that computes `self.container`?\n\n```\ndef _get_container_config(self):\n      \"\"\"Get container configuration with proper backend fallback.\"\"\"\n      if hasattr(self, \u0027container\u0027) and self.container:\n          return self.container\n\n      if self.backend_group:\n          return getattr(self.conf, self.backend_group).swift_store_container\n      return self.conf.glance_store.swift_store_container\n```\n\nMore of a style suggestion so you can then do:\n```\ncontainer \u003d self._get_container_config()\nif not container:\n    reason \u003d _(\"swift_store_container must be set in the configuration.\")\n    raise exceptions.BadStoreConfiguration(store_name\u003d\"swift\", reason\u003dreason)\nspecs \u003d ....\n....\n```","commit_id":"4452640cb965331897f44d3efd385f3e36175204"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"6d0e772a771a13e7bd19f5ea4d87c7f1f9db59fc","unresolved":false,"context_lines":[{"line_number":1681,"context_line":"            else:"},{"line_number":1682,"context_line":"                self.container \u003d ("},{"line_number":1683,"context_line":"                    self.conf.glance_store.swift_store_container)"},{"line_number":1684,"context_line":"        if not self.container:"},{"line_number":1685,"context_line":"            reason \u003d _(\"swift_store_container must be set in the \""},{"line_number":1686,"context_line":"                       \"configuration.\")"},{"line_number":1687,"context_line":"            raise exceptions.BadStoreConfiguration(store_name\u003d\"swift\","}],"source_content_type":"text/x-python","patch_set":1,"id":"44514372_32b2ad04","line":1684,"in_reply_to":"69401db2_fecb4782","updated":"2026-01-29 05:37:38.000000000","message":"Done","commit_id":"4452640cb965331897f44d3efd385f3e36175204"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"e374f5101c3663f0e2acece789d3a7d1cd9070b4","unresolved":true,"context_lines":[{"line_number":808,"context_line":""},{"line_number":809,"context_line":"    _CAPABILITIES \u003d capabilities.BitMasks.RW_ACCESS"},{"line_number":810,"context_line":"    CHUNKSIZE \u003d 65536"},{"line_number":811,"context_line":"    OPTIONS \u003d _SWIFT_OPTS + sutils.swift_opts + buffered.BUFFERING_OPTS"},{"line_number":812,"context_line":""},{"line_number":813,"context_line":"    def get_schemes(self):"},{"line_number":814,"context_line":"        return (\u0027swift+https\u0027, \u0027swift\u0027, \u0027swift+http\u0027, \u0027swift+config\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"48f73705_d88e0674","line":811,"range":{"start_line":811,"start_character":48,"end_line":811,"end_character":71},"updated":"2026-02-03 15:37:51.000000000","message":"Why is this suddenly needed?","commit_id":"b9a619dcdc9ad6676bf99e5d021affb70486959b"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"192e321b49965c8a0bf9b4a9c486f89058c76a33","unresolved":true,"context_lines":[{"line_number":808,"context_line":""},{"line_number":809,"context_line":"    _CAPABILITIES \u003d capabilities.BitMasks.RW_ACCESS"},{"line_number":810,"context_line":"    CHUNKSIZE \u003d 65536"},{"line_number":811,"context_line":"    OPTIONS \u003d _SWIFT_OPTS + sutils.swift_opts + buffered.BUFFERING_OPTS"},{"line_number":812,"context_line":""},{"line_number":813,"context_line":"    def get_schemes(self):"},{"line_number":814,"context_line":"        return (\u0027swift+https\u0027, \u0027swift\u0027, \u0027swift+http\u0027, \u0027swift+config\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"77ac278a_ba35f9a3","line":811,"range":{"start_line":811,"start_character":48,"end_line":811,"end_character":71},"in_reply_to":"48f73705_d88e0674","updated":"2026-02-03 16:12:07.000000000","message":"Application credential options can be set in either a backend-specific group or the shared [backend_defaults] group. To support this fallback, the code uses BackendGroupConfiguration, which requires all accessed options to be included in OPTIONS so it can register them in both the backend-specific group and backend_defaults.\n\nThe configure() method accesses swift_upload_buffer_dir from BUFFERING_OPTS. If BUFFERING_OPTS is not in BaseStore.OPTIONS, BackendGroupConfiguration won\u0027t register swift_upload_buffer_dir for backend groups, causing an error when accessing it. This option should also support the same fallback behavior as application credentials, so it must be included in BaseStore.OPTIONS for proper registration and access.","commit_id":"b9a619dcdc9ad6676bf99e5d021affb70486959b"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"e374f5101c3663f0e2acece789d3a7d1cd9070b4","unresolved":true,"context_lines":[{"line_number":822,"context_line":""},{"line_number":823,"context_line":"        _obj_size \u003d glance_conf.swift_store_large_object_size"},{"line_number":824,"context_line":"        self.large_object_size \u003d _obj_size * ONE_MB"},{"line_number":825,"context_line":"        _chunk_size \u003d glance_conf.swift_store_large_object_chunk_size"},{"line_number":826,"context_line":"        self.large_object_chunk_size \u003d _chunk_size * ONE_MB"},{"line_number":827,"context_line":"        self.admin_tenants \u003d glance_conf.swift_store_admin_tenants"},{"line_number":828,"context_line":"        self.region \u003d glance_conf.swift_store_region"}],"source_content_type":"text/x-python","patch_set":2,"id":"192f62e6_937d7928","line":825,"range":{"start_line":825,"start_character":22,"end_line":825,"end_character":69},"updated":"2026-02-03 15:37:51.000000000","message":"OK, this might be a better abstraction, but is this related to ZDPR?","commit_id":"b9a619dcdc9ad6676bf99e5d021affb70486959b"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"192e321b49965c8a0bf9b4a9c486f89058c76a33","unresolved":false,"context_lines":[{"line_number":822,"context_line":""},{"line_number":823,"context_line":"        _obj_size \u003d glance_conf.swift_store_large_object_size"},{"line_number":824,"context_line":"        self.large_object_size \u003d _obj_size * ONE_MB"},{"line_number":825,"context_line":"        _chunk_size \u003d glance_conf.swift_store_large_object_chunk_size"},{"line_number":826,"context_line":"        self.large_object_chunk_size \u003d _chunk_size * ONE_MB"},{"line_number":827,"context_line":"        self.admin_tenants \u003d glance_conf.swift_store_admin_tenants"},{"line_number":828,"context_line":"        self.region \u003d glance_conf.swift_store_region"}],"source_content_type":"text/x-python","patch_set":2,"id":"e6653fba_342463d0","line":825,"range":{"start_line":825,"start_character":22,"end_line":825,"end_character":69},"in_reply_to":"192f62e6_937d7928","updated":"2026-02-03 16:12:07.000000000","message":"reverting it, should not be part of this change.","commit_id":"b9a619dcdc9ad6676bf99e5d021affb70486959b"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"e374f5101c3663f0e2acece789d3a7d1cd9070b4","unresolved":true,"context_lines":[{"line_number":848,"context_line":"            # its return value. If validation succeeds, we always want to"},{"line_number":849,"context_line":"            # use BufferedReader."},{"line_number":850,"context_line":"            buffered.validate_buffering(buffer_dir)"},{"line_number":851,"context_line":"            self.reader_class \u003d buffered.BufferedReader"},{"line_number":852,"context_line":"        else:"},{"line_number":853,"context_line":"            self.reader_class \u003d ChunkReader"},{"line_number":854,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"09adadea_e9d1e53d","line":851,"range":{"start_line":851,"start_character":29,"end_line":851,"end_character":30},"updated":"2026-02-03 15:37:51.000000000","message":"Is this related to ZDPR?","commit_id":"b9a619dcdc9ad6676bf99e5d021affb70486959b"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"192e321b49965c8a0bf9b4a9c486f89058c76a33","unresolved":false,"context_lines":[{"line_number":848,"context_line":"            # its return value. If validation succeeds, we always want to"},{"line_number":849,"context_line":"            # use BufferedReader."},{"line_number":850,"context_line":"            buffered.validate_buffering(buffer_dir)"},{"line_number":851,"context_line":"            self.reader_class \u003d buffered.BufferedReader"},{"line_number":852,"context_line":"        else:"},{"line_number":853,"context_line":"            self.reader_class \u003d ChunkReader"},{"line_number":854,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"2f220ded_155cee3e","line":851,"range":{"start_line":851,"start_character":29,"end_line":851,"end_character":30},"in_reply_to":"09adadea_e9d1e53d","updated":"2026-02-03 16:12:07.000000000","message":"Definitely not related to ZDPR and part of improvement, reverting it abck.","commit_id":"b9a619dcdc9ad6676bf99e5d021affb70486959b"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"e374f5101c3663f0e2acece789d3a7d1cd9070b4","unresolved":true,"context_lines":[{"line_number":918,"context_line":"        result \u003d getattr(self.store_conf, param, None)"},{"line_number":919,"context_line":"        if result is None:"},{"line_number":920,"context_line":"            reason \u003d (_(\"Could not find %(param)s in configuration options.\")"},{"line_number":921,"context_line":"                      % {\u0027param\u0027: param})"},{"line_number":922,"context_line":"            LOG.error(reason)"},{"line_number":923,"context_line":"            raise exceptions.BadStoreConfiguration(store_name\u003d\"swift\","},{"line_number":924,"context_line":"                                                   reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":2,"id":"adf3c403_ea264c11","line":921,"range":{"start_line":921,"start_character":0,"end_line":921,"end_character":41},"updated":"2026-02-03 15:37:51.000000000","message":"So this fixes a genuine error, but how is it part of ZDPR?","commit_id":"b9a619dcdc9ad6676bf99e5d021affb70486959b"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"192e321b49965c8a0bf9b4a9c486f89058c76a33","unresolved":false,"context_lines":[{"line_number":918,"context_line":"        result \u003d getattr(self.store_conf, param, None)"},{"line_number":919,"context_line":"        if result is None:"},{"line_number":920,"context_line":"            reason \u003d (_(\"Could not find %(param)s in configuration options.\")"},{"line_number":921,"context_line":"                      % {\u0027param\u0027: param})"},{"line_number":922,"context_line":"            LOG.error(reason)"},{"line_number":923,"context_line":"            raise exceptions.BadStoreConfiguration(store_name\u003d\"swift\","},{"line_number":924,"context_line":"                                                   reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1c4dacd9_a3cf2fcf","line":921,"range":{"start_line":921,"start_character":0,"end_line":921,"end_character":41},"in_reply_to":"adf3c403_ea264c11","updated":"2026-02-03 16:12:07.000000000","message":"If either of the application credetional is missing then it logs and raises the error","commit_id":"b9a619dcdc9ad6676bf99e5d021affb70486959b"}]}
