)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":36227,"name":"Katarina Strenkova","email":"kstrenko@redhat.com","username":"kstrenko"},"change_message_id":"e27c6f43b88067be3a746b6ed1903288c7ff96f0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"51ce24bd_5101e216","updated":"2026-09-02 14:04:37.000000000","message":"Nice patch. I added small suggestions to the code, I hope it makes sense to you.","commit_id":"8893385bbb3e76c4930d177aa10482e1422aaac7"},{"author":{"_account_id":34510,"name":"Maxim Sava","email":"msava@redhat.com","username":"msava@redhat.com"},"change_message_id":"12cd7eb531d5b4bcec103a453c8435f22ffbf69a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"85995d63_a3e0f408","updated":"2026-07-15 14:45:35.000000000","message":"S3 backend configurations is enabled in glance-s3-multistore job in https://review.opendev.org/c/openstack/glance/+/997191","commit_id":"8893385bbb3e76c4930d177aa10482e1422aaac7"},{"author":{"_account_id":34510,"name":"Maxim Sava","email":"msava@redhat.com","username":"msava@redhat.com"},"change_message_id":"f30ca17f9586e83e9a3b5ee8ceeb19364a8eb3cc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"082166cb_75d58b8e","updated":"2026-08-26 07:56:55.000000000","message":"Test run in `glance-s3-multistore` job","commit_id":"8893385bbb3e76c4930d177aa10482e1422aaac7"}],"config_tempest/services/image.py":[{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"660f3687143a62b25115867c0e55b3fa767e9024","unresolved":true,"context_lines":[{"line_number":97,"context_line":"                       \u0027to the stores information\u0027)"},{"line_number":98,"context_line":"            return []"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def _is_multistore_enabled(self, stores\u003dNone):"},{"line_number":101,"context_line":"        if stores is None:"},{"line_number":102,"context_line":"            stores \u003d self._get_stores()"},{"line_number":103,"context_line":"        return len(stores) \u003e 0"}],"source_content_type":"text/x-python","patch_set":2,"id":"2d18578b_890a1f44","line":100,"updated":"2026-09-02 12:44:01.000000000","message":"as we use this function just once, and stores can\u0027t really be None (_get_store always returns an array), why not remove this completely and change line 60 with a simple if len(stores) \u003e 0 ?","commit_id":"8893385bbb3e76c4930d177aa10482e1422aaac7"},{"author":{"_account_id":34510,"name":"Maxim Sava","email":"msava@redhat.com","username":"msava@redhat.com"},"change_message_id":"1ec17417318580868481d6a9c62559d442ee1160","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                       \u0027to the stores information\u0027)"},{"line_number":98,"context_line":"            return []"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def _is_multistore_enabled(self, stores\u003dNone):"},{"line_number":101,"context_line":"        if stores is None:"},{"line_number":102,"context_line":"            stores \u003d self._get_stores()"},{"line_number":103,"context_line":"        return len(stores) \u003e 0"}],"source_content_type":"text/x-python","patch_set":2,"id":"d4b01e86_f5aadc1b","line":100,"in_reply_to":"2d18578b_890a1f44","updated":"2026-10-05 05:42:19.000000000","message":"Done","commit_id":"8893385bbb3e76c4930d177aa10482e1422aaac7"},{"author":{"_account_id":36227,"name":"Katarina Strenkova","email":"kstrenko@redhat.com","username":"kstrenko"},"change_message_id":"e27c6f43b88067be3a746b6ed1903288c7ff96f0","unresolved":true,"context_lines":[{"line_number":102,"context_line":"            stores \u003d self._get_stores()"},{"line_number":103,"context_line":"        return len(stores) \u003e 0"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def _has_s3_store(self, stores\u003dNone):"},{"line_number":106,"context_line":"        if stores is None:"},{"line_number":107,"context_line":"            stores \u003d self._get_stores()"},{"line_number":108,"context_line":"        for store in stores:"}],"source_content_type":"text/x-python","patch_set":2,"id":"db21cab4_f2050893","line":105,"updated":"2026-09-02 14:04:37.000000000","message":"Something on a similar note to what Luigi said, but isn\u0027t the `stores\u003dNone` never used when this function is called? Maybe it could be `_has_s3_store(self, stores)` explicitly and then the `if stores is None` is not necessary.","commit_id":"8893385bbb3e76c4930d177aa10482e1422aaac7"},{"author":{"_account_id":34510,"name":"Maxim Sava","email":"msava@redhat.com","username":"msava@redhat.com"},"change_message_id":"1ec17417318580868481d6a9c62559d442ee1160","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            stores \u003d self._get_stores()"},{"line_number":103,"context_line":"        return len(stores) \u003e 0"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def _has_s3_store(self, stores\u003dNone):"},{"line_number":106,"context_line":"        if stores is None:"},{"line_number":107,"context_line":"            stores \u003d self._get_stores()"},{"line_number":108,"context_line":"        for store in stores:"}],"source_content_type":"text/x-python","patch_set":2,"id":"e0df5014_a8f36ef6","line":105,"in_reply_to":"db21cab4_f2050893","updated":"2026-10-05 05:42:19.000000000","message":"Done","commit_id":"8893385bbb3e76c4930d177aa10482e1422aaac7"},{"author":{"_account_id":36227,"name":"Katarina Strenkova","email":"kstrenko@redhat.com","username":"kstrenko"},"change_message_id":"e27c6f43b88067be3a746b6ed1903288c7ff96f0","unresolved":true,"context_lines":[{"line_number":106,"context_line":"        if stores is None:"},{"line_number":107,"context_line":"            stores \u003d self._get_stores()"},{"line_number":108,"context_line":"        for store in stores:"},{"line_number":109,"context_line":"            if \u0027s3\u0027 in store.get(\u0027id\u0027, \u0027\u0027).lower():"},{"line_number":110,"context_line":"                return True"},{"line_number":111,"context_line":"        return False"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"bc0476dd_ef794880","line":109,"updated":"2026-09-02 14:04:37.000000000","message":"Just double-checking, but will this not return false positives if we check for substring `s3` only?","commit_id":"8893385bbb3e76c4930d177aa10482e1422aaac7"},{"author":{"_account_id":34510,"name":"Maxim Sava","email":"msava@redhat.com","username":"msava@redhat.com"},"change_message_id":"1ec17417318580868481d6a9c62559d442ee1160","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        if stores is None:"},{"line_number":107,"context_line":"            stores \u003d self._get_stores()"},{"line_number":108,"context_line":"        for store in stores:"},{"line_number":109,"context_line":"            if \u0027s3\u0027 in store.get(\u0027id\u0027, \u0027\u0027).lower():"},{"line_number":110,"context_line":"                return True"},{"line_number":111,"context_line":"        return False"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"78815bf2_c2848aa4","line":109,"in_reply_to":"bc0476dd_ef794880","updated":"2026-10-05 05:42:19.000000000","message":"Done","commit_id":"8893385bbb3e76c4930d177aa10482e1422aaac7"}],"config_tempest/tests/services/test_image.py":[{"author":{"_account_id":36227,"name":"Katarina Strenkova","email":"kstrenko@redhat.com","username":"kstrenko"},"change_message_id":"e27c6f43b88067be3a746b6ed1903288c7ff96f0","unresolved":true,"context_lines":[{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    @mock.patch(\u0027config_tempest.services.image.ImageService._get_stores\u0027)"},{"line_number":229,"context_line":"    def test_has_s3_store_true(self, mock_get_stores):"},{"line_number":230,"context_line":"        mock_get_stores.return_value \u003d [{\u0027id\u0027: \u0027file\u0027}, {\u0027id\u0027: \u0027s3\u0027}]"},{"line_number":231,"context_line":"        self.assertTrue(self.Service._has_s3_store())"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    @mock.patch(\u0027config_tempest.services.image.ImageService._get_stores\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"04068b59_fb7481cf","line":230,"updated":"2026-09-02 14:04:37.000000000","message":"This might not need a mock if my suggestion is implemented. Setting stores \u003d [...] and passing it to `_has_s3_store(stores)` should be enough. Same for the other `has_s3_store` tests.","commit_id":"8893385bbb3e76c4930d177aa10482e1422aaac7"},{"author":{"_account_id":34510,"name":"Maxim Sava","email":"msava@redhat.com","username":"msava@redhat.com"},"change_message_id":"1ec17417318580868481d6a9c62559d442ee1160","unresolved":false,"context_lines":[{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    @mock.patch(\u0027config_tempest.services.image.ImageService._get_stores\u0027)"},{"line_number":229,"context_line":"    def test_has_s3_store_true(self, mock_get_stores):"},{"line_number":230,"context_line":"        mock_get_stores.return_value \u003d [{\u0027id\u0027: \u0027file\u0027}, {\u0027id\u0027: \u0027s3\u0027}]"},{"line_number":231,"context_line":"        self.assertTrue(self.Service._has_s3_store())"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    @mock.patch(\u0027config_tempest.services.image.ImageService._get_stores\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff72467c_f0f9ec69","line":230,"in_reply_to":"04068b59_fb7481cf","updated":"2026-10-05 05:42:19.000000000","message":"Done","commit_id":"8893385bbb3e76c4930d177aa10482e1422aaac7"}]}
