)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":32704,"name":"Alfredo Garcia","display_name":"Alfredo Garcia","email":"alfrgarc@redhat.com","username":"alfrgarc","status":"Senior Software Quality Engineer @ Red Hat"},"change_message_id":"1d94c1be344f13ca6329168e1232be7ac84e33ef","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"a5346b0e_f78ac36a","updated":"2026-02-23 16:43:41.000000000","message":"The base.py is well structured and commented. The reader role changes are consistent with others of this kind. LGTM","commit_id":"5996a1e0bc5ceef4e02f0874e2c0d78df3bff83e"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"c729be445f6c0e12aa0ea1c5addcbed721085a5b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"4738383b_58055b7e","updated":"2026-02-26 02:43:34.000000000","message":"let\u0027s define volume clients in compute base class itself instead of a new one","commit_id":"5996a1e0bc5ceef4e02f0874e2c0d78df3bff83e"},{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"3658293a37ada2065902c870e37d61bd9afcdfbc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"aaee1f69_9e261a00","updated":"2026-02-23 13:58:04.000000000","message":"recheck 504 Gateway Time-out","commit_id":"5996a1e0bc5ceef4e02f0874e2c0d78df3bff83e"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"ca4143276fcd64169df9b7c75b9854d36fe38cb9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"59390d2e_ee078b99","updated":"2026-02-27 02:09:49.000000000","message":"lgtm","commit_id":"f1addff61ba10cac7e2b5b0fc12da8568099864d"}],"tempest/api/compute/volumes/base.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"c729be445f6c0e12aa0ea1c5addcbed721085a5b","unresolved":true,"context_lines":[{"line_number":25,"context_line":"    @classmethod"},{"line_number":26,"context_line":"    def setup_clients(cls):"},{"line_number":27,"context_line":"        super(BaseVolumeTest, cls).setup_clients()"},{"line_number":28,"context_line":"        if CONF.enforce_scope.nova and hasattr(cls, \u0027os_project_reader\u0027):"},{"line_number":29,"context_line":"            cls.reader_volumes_extensions_client \u003d ("},{"line_number":30,"context_line":"                cls.os_project_reader.volumes_extensions_client)"},{"line_number":31,"context_line":"            cls.reader_snapshots_extensions_client \u003d ("},{"line_number":32,"context_line":"                cls.os_project_reader.snapshots_extensions_client)"},{"line_number":33,"context_line":"        else:"},{"line_number":34,"context_line":"            cls.reader_volumes_extensions_client \u003d ("},{"line_number":35,"context_line":"                cls.volumes_extensions_client)"},{"line_number":36,"context_line":"            cls.reader_snapshots_extensions_client \u003d ("},{"line_number":37,"context_line":"                cls.snapshots_extensions_client)"}],"source_content_type":"text/x-python","patch_set":3,"id":"0d90f14c_c69dd17c","line":37,"range":{"start_line":28,"start_character":0,"end_line":37,"end_character":48},"updated":"2026-02-26 02:43:34.000000000","message":"let\u0027s defined it in BaseV2ComputeTest itself, we do have other volume clients there-\n\nhttps://github.com/openstack/tempest/blob/5eceee8fe32e32435daf8ef7e0409c8a317fd9b7/tempest/api/compute/base.py#L116","commit_id":"5996a1e0bc5ceef4e02f0874e2c0d78df3bff83e"},{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"258474f835a27aa669918d8ee6cde8846558674a","unresolved":true,"context_lines":[{"line_number":25,"context_line":"    @classmethod"},{"line_number":26,"context_line":"    def setup_clients(cls):"},{"line_number":27,"context_line":"        super(BaseVolumeTest, cls).setup_clients()"},{"line_number":28,"context_line":"        if CONF.enforce_scope.nova and hasattr(cls, \u0027os_project_reader\u0027):"},{"line_number":29,"context_line":"            cls.reader_volumes_extensions_client \u003d ("},{"line_number":30,"context_line":"                cls.os_project_reader.volumes_extensions_client)"},{"line_number":31,"context_line":"            cls.reader_snapshots_extensions_client \u003d ("},{"line_number":32,"context_line":"                cls.os_project_reader.snapshots_extensions_client)"},{"line_number":33,"context_line":"        else:"},{"line_number":34,"context_line":"            cls.reader_volumes_extensions_client \u003d ("},{"line_number":35,"context_line":"                cls.volumes_extensions_client)"},{"line_number":36,"context_line":"            cls.reader_snapshots_extensions_client \u003d ("},{"line_number":37,"context_line":"                cls.snapshots_extensions_client)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1008161c_58073c34","line":37,"range":{"start_line":28,"start_character":0,"end_line":37,"end_character":48},"in_reply_to":"0d90f14c_c69dd17c","updated":"2026-02-26 14:43:50.000000000","message":"yeah i was torn on this.  I decided to go with creating a new base like other suites have done because no other suite is using these variables.","commit_id":"5996a1e0bc5ceef4e02f0874e2c0d78df3bff83e"},{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"2d229c8d48089872c1df274be8d8db40cd86e61c","unresolved":true,"context_lines":[{"line_number":25,"context_line":"    @classmethod"},{"line_number":26,"context_line":"    def setup_clients(cls):"},{"line_number":27,"context_line":"        super(BaseVolumeTest, cls).setup_clients()"},{"line_number":28,"context_line":"        if CONF.enforce_scope.nova and hasattr(cls, \u0027os_project_reader\u0027):"},{"line_number":29,"context_line":"            cls.reader_volumes_extensions_client \u003d ("},{"line_number":30,"context_line":"                cls.os_project_reader.volumes_extensions_client)"},{"line_number":31,"context_line":"            cls.reader_snapshots_extensions_client \u003d ("},{"line_number":32,"context_line":"                cls.os_project_reader.snapshots_extensions_client)"},{"line_number":33,"context_line":"        else:"},{"line_number":34,"context_line":"            cls.reader_volumes_extensions_client \u003d ("},{"line_number":35,"context_line":"                cls.volumes_extensions_client)"},{"line_number":36,"context_line":"            cls.reader_snapshots_extensions_client \u003d ("},{"line_number":37,"context_line":"                cls.snapshots_extensions_client)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fdcf3538_bf3a9828","line":37,"range":{"start_line":28,"start_character":0,"end_line":37,"end_character":48},"in_reply_to":"1008161c_58073c34","updated":"2026-02-26 14:52:52.000000000","message":"but now I see that there is a volumes_extensions_client defined in the higher base class, so I will move it.","commit_id":"5996a1e0bc5ceef4e02f0874e2c0d78df3bff83e"},{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"914a41b0f503efebe9528ddecc7d09d6377b1f42","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    @classmethod"},{"line_number":26,"context_line":"    def setup_clients(cls):"},{"line_number":27,"context_line":"        super(BaseVolumeTest, cls).setup_clients()"},{"line_number":28,"context_line":"        if CONF.enforce_scope.nova and hasattr(cls, \u0027os_project_reader\u0027):"},{"line_number":29,"context_line":"            cls.reader_volumes_extensions_client \u003d ("},{"line_number":30,"context_line":"                cls.os_project_reader.volumes_extensions_client)"},{"line_number":31,"context_line":"            cls.reader_snapshots_extensions_client \u003d ("},{"line_number":32,"context_line":"                cls.os_project_reader.snapshots_extensions_client)"},{"line_number":33,"context_line":"        else:"},{"line_number":34,"context_line":"            cls.reader_volumes_extensions_client \u003d ("},{"line_number":35,"context_line":"                cls.volumes_extensions_client)"},{"line_number":36,"context_line":"            cls.reader_snapshots_extensions_client \u003d ("},{"line_number":37,"context_line":"                cls.snapshots_extensions_client)"}],"source_content_type":"text/x-python","patch_set":3,"id":"765dd772_082403da","line":37,"range":{"start_line":28,"start_character":0,"end_line":37,"end_character":48},"in_reply_to":"fdcf3538_bf3a9828","updated":"2026-02-26 15:43:50.000000000","message":"Done","commit_id":"5996a1e0bc5ceef4e02f0874e2c0d78df3bff83e"}],"tempest/api/compute/volumes/test_attach_volume.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"c729be445f6c0e12aa0ea1c5addcbed721085a5b","unresolved":true,"context_lines":[{"line_number":43,"context_line":"        super(BaseAttachVolumeTest, cls).setup_credentials()"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @classmethod"},{"line_number":46,"context_line":"    def setup_clients(cls):"},{"line_number":47,"context_line":"        super(BaseAttachVolumeTest, cls).setup_clients()"},{"line_number":48,"context_line":"        if CONF.enforce_scope.nova and hasattr(cls, \u0027os_project_reader\u0027):"},{"line_number":49,"context_line":"            cls.reader_volumes_client \u003d ("},{"line_number":50,"context_line":"                cls.os_project_reader.volumes_client_latest)"},{"line_number":51,"context_line":"        else:"},{"line_number":52,"context_line":"            cls.reader_volumes_client \u003d cls.volumes_client"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def _create_server(self):"},{"line_number":55,"context_line":"        # Start a server and wait for it to become ready"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf79d430_faec4af9","line":52,"range":{"start_line":46,"start_character":0,"end_line":52,"end_character":58},"updated":"2026-02-26 02:43:34.000000000","message":"let\u0027s define it in also base class, as it might be needed in other places","commit_id":"5996a1e0bc5ceef4e02f0874e2c0d78df3bff83e"},{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"914a41b0f503efebe9528ddecc7d09d6377b1f42","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        super(BaseAttachVolumeTest, cls).setup_credentials()"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @classmethod"},{"line_number":46,"context_line":"    def setup_clients(cls):"},{"line_number":47,"context_line":"        super(BaseAttachVolumeTest, cls).setup_clients()"},{"line_number":48,"context_line":"        if CONF.enforce_scope.nova and hasattr(cls, \u0027os_project_reader\u0027):"},{"line_number":49,"context_line":"            cls.reader_volumes_client \u003d ("},{"line_number":50,"context_line":"                cls.os_project_reader.volumes_client_latest)"},{"line_number":51,"context_line":"        else:"},{"line_number":52,"context_line":"            cls.reader_volumes_client \u003d cls.volumes_client"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def _create_server(self):"},{"line_number":55,"context_line":"        # Start a server and wait for it to become ready"}],"source_content_type":"text/x-python","patch_set":3,"id":"393418d4_30534f18","line":52,"range":{"start_line":46,"start_character":0,"end_line":52,"end_character":58},"in_reply_to":"bdaf4da7_bc231d9d","updated":"2026-02-26 15:43:50.000000000","message":"Done","commit_id":"5996a1e0bc5ceef4e02f0874e2c0d78df3bff83e"},{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"258474f835a27aa669918d8ee6cde8846558674a","unresolved":true,"context_lines":[{"line_number":43,"context_line":"        super(BaseAttachVolumeTest, cls).setup_credentials()"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @classmethod"},{"line_number":46,"context_line":"    def setup_clients(cls):"},{"line_number":47,"context_line":"        super(BaseAttachVolumeTest, cls).setup_clients()"},{"line_number":48,"context_line":"        if CONF.enforce_scope.nova and hasattr(cls, \u0027os_project_reader\u0027):"},{"line_number":49,"context_line":"            cls.reader_volumes_client \u003d ("},{"line_number":50,"context_line":"                cls.os_project_reader.volumes_client_latest)"},{"line_number":51,"context_line":"        else:"},{"line_number":52,"context_line":"            cls.reader_volumes_client \u003d cls.volumes_client"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def _create_server(self):"},{"line_number":55,"context_line":"        # Start a server and wait for it to become ready"}],"source_content_type":"text/x-python","patch_set":3,"id":"cf114b44_13f017a9","line":52,"range":{"start_line":46,"start_character":0,"end_line":52,"end_character":58},"in_reply_to":"bf79d430_faec4af9","updated":"2026-02-26 14:43:50.000000000","message":"usually I like to keep things isolated until they need to be used by other inheriting classes.","commit_id":"5996a1e0bc5ceef4e02f0874e2c0d78df3bff83e"},{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"2d229c8d48089872c1df274be8d8db40cd86e61c","unresolved":true,"context_lines":[{"line_number":43,"context_line":"        super(BaseAttachVolumeTest, cls).setup_credentials()"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @classmethod"},{"line_number":46,"context_line":"    def setup_clients(cls):"},{"line_number":47,"context_line":"        super(BaseAttachVolumeTest, cls).setup_clients()"},{"line_number":48,"context_line":"        if CONF.enforce_scope.nova and hasattr(cls, \u0027os_project_reader\u0027):"},{"line_number":49,"context_line":"            cls.reader_volumes_client \u003d ("},{"line_number":50,"context_line":"                cls.os_project_reader.volumes_client_latest)"},{"line_number":51,"context_line":"        else:"},{"line_number":52,"context_line":"            cls.reader_volumes_client \u003d cls.volumes_client"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def _create_server(self):"},{"line_number":55,"context_line":"        # Start a server and wait for it to become ready"}],"source_content_type":"text/x-python","patch_set":3,"id":"bdaf4da7_bc231d9d","line":52,"range":{"start_line":46,"start_character":0,"end_line":52,"end_character":58},"in_reply_to":"cf114b44_13f017a9","updated":"2026-02-26 14:52:52.000000000","message":"but now that I see there are volumes clients in the higher base, i will make the changes as you suggested.","commit_id":"5996a1e0bc5ceef4e02f0874e2c0d78df3bff83e"}]}
