)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0a275a72269e0a12e177361ac581e570a02e3765","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"6f344eed_4553b37e","updated":"2024-06-25 17:49:08.000000000","message":"Definitely an improvement, but I wonder if there might be room to make it even better.","commit_id":"fff2b527353bea0d150ef20dec944ba59bb23904"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"6abb70200bbb4de25cac831a6ff5e641483d4bf0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"712799fd_2b79ec34","updated":"2024-06-25 20:15:28.000000000","message":"LGTM.","commit_id":"fff2b527353bea0d150ef20dec944ba59bb23904"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"42f2039663a1f9b5e2bd9266408abbaab4bdbbdf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"efbe81b4_5de0049f","updated":"2024-06-25 15:09:05.000000000","message":"recheck \n\nunrelated error \n```\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nFailed 1 tests - output below:\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nopenstack.tests.functional.compute.v2.test_volume_attachment.TestServerVolumeAttachment.test_volume_attachment\n--------------------------------------------------------------------------------------------------------------\n\nCaptured traceback:\n~~~~~~~~~~~~~~~~~~~\n    Traceback (most recent call last):\n\n      File \"/home/zuul/src/opendev.org/openstack/openstacksdk/openstack/tests/functional/compute/v2/test_volume_attachment.py\", line 37, in setUp\n    self.user_cloud.compute.wait_for_server(\n\n      File \"/home/zuul/src/opendev.org/openstack/openstacksdk/openstack/compute/v2/_proxy.py\", line 2609, in wait_for_server\n    return resource.wait_for_status(\n\n      File \"/home/zuul/src/opendev.org/openstack/openstacksdk/openstack/resource.py\", line 2458, in wait_for_status\n    raise exceptions.ResourceFailure(\n\n    openstack.exceptions.ResourceFailure: Server:cf4eb24b-7172-4043-baf2-a394d8ed1f35 transitioned to failure state ERROR\n\n\nCaptured logging:\n~~~~~~~~~~~~~~~~~\n    2024-06-25 14:45:12,006 openstack.resource               Still waiting for resource Server:cf4eb24b-7172-4043-baf2-a394d8ed1f35 to reach state ACTIVE, current state is BUILD\n2024-06-25 14:45:12,015 openstack.iterate_timeout        Waiting 2.0 seconds\n```","commit_id":"fff2b527353bea0d150ef20dec944ba59bb23904"}],"test/unit/proxy/controllers/test_container.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0a275a72269e0a12e177361ac581e570a02e3765","unresolved":true,"context_lines":[{"line_number":1543,"context_line":"            [404])"},{"line_number":1544,"context_line":"        warning_lines \u003d self.app.logger.get_lines_for_level(\u0027warning\u0027)"},{"line_number":1545,"context_line":"        exp_msg \u003d \u0027Failed to get container listing from /v1/.shards_a/c_b?\u0027"},{"line_number":1546,"context_line":"        actual_parts \u003d warning_lines[0].partition(\u0027:\u0027)"},{"line_number":1547,"context_line":"        self.assertIn(exp_msg, actual_parts[0])"},{"line_number":1548,"context_line":"        actual_qs \u003d actual_parts[0][len(exp_msg):]"},{"line_number":1549,"context_line":"        actual_params \u003d dict("}],"source_content_type":"text/x-python","patch_set":2,"id":"91fd0253_ff2184ea","line":1546,"updated":"2024-06-25 17:49:08.000000000","message":"```\nlogged_msg, _, logged_status \u003d warning_lines[0].partition(\u0027: \u0027)\n```\n?","commit_id":"fff2b527353bea0d150ef20dec944ba59bb23904"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0a275a72269e0a12e177361ac581e570a02e3765","unresolved":true,"context_lines":[{"line_number":1544,"context_line":"        warning_lines \u003d self.app.logger.get_lines_for_level(\u0027warning\u0027)"},{"line_number":1545,"context_line":"        exp_msg \u003d \u0027Failed to get container listing from /v1/.shards_a/c_b?\u0027"},{"line_number":1546,"context_line":"        actual_parts \u003d warning_lines[0].partition(\u0027:\u0027)"},{"line_number":1547,"context_line":"        self.assertIn(exp_msg, actual_parts[0])"},{"line_number":1548,"context_line":"        actual_qs \u003d actual_parts[0][len(exp_msg):]"},{"line_number":1549,"context_line":"        actual_params \u003d dict("},{"line_number":1550,"context_line":"            urllib.parse.parse_qsl(actual_qs, keep_blank_values\u003dTrue))"}],"source_content_type":"text/x-python","patch_set":2,"id":"c3c81b75_294ffd67","line":1547,"updated":"2024-06-25 17:49:08.000000000","message":"Given our slicing below, probably better as\n```\nself.assertEqual(exp_msg, actual_parts[0][:len(exp_msg)])\n```\nTimes like this, I wish we had a universal base `SwiftTestCase` class where we could add an `assertStartsWith` (and make `assertLengthEqual` accessible to more than probe tests)...","commit_id":"fff2b527353bea0d150ef20dec944ba59bb23904"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0a275a72269e0a12e177361ac581e570a02e3765","unresolved":true,"context_lines":[{"line_number":1554,"context_line":"                          \u0027end_marker\u0027: \u0027b\\x00\u0027,"},{"line_number":1555,"context_line":"                          \u0027states\u0027: \u0027listing\u0027},"},{"line_number":1556,"context_line":"                         actual_params)"},{"line_number":1557,"context_line":"        self.assertIn(\u0027404\u0027, actual_parts[2])"},{"line_number":1558,"context_line":"        self.assertFalse(warning_lines[1:])"},{"line_number":1559,"context_line":"        self.assertEqual(resp.status_int, 503)"},{"line_number":1560,"context_line":"        errors \u003d self.logger.get_lines_for_level(\u0027error\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dec82ca3_8874fe6c","line":1557,"range":{"start_line":1557,"start_character":13,"end_line":1557,"end_character":21},"updated":"2024-06-25 17:49:08.000000000","message":"Just because of the leading space, right? Should we change it above to `.partition(\u0027: \u0027)`?","commit_id":"fff2b527353bea0d150ef20dec944ba59bb23904"}],"test/unit/proxy/controllers/test_obj.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0a275a72269e0a12e177361ac581e570a02e3765","unresolved":true,"context_lines":[{"line_number":7818,"context_line":"        self.assertIsNone(actual)"},{"line_number":7819,"context_line":"        lines \u003d self.app.logger.get_lines_for_level(\u0027error\u0027)"},{"line_number":7820,"context_line":"        self.assertEqual(1, len(lines))"},{"line_number":7821,"context_line":"        self.assertIn(\u0027Problem with listing response from /v1/a/c/o\u0027, lines[0])"},{"line_number":7822,"context_line":""},{"line_number":7823,"context_line":""},{"line_number":7824,"context_line":"class TestGetUpdateShardUTF8(TestGetUpdateShard):"}],"source_content_type":"text/x-python","patch_set":2,"id":"547fcfe4_48ea4607","side":"PARENT","line":7821,"updated":"2024-06-25 17:49:08.000000000","message":"Yeah, that should have stuck out to us more...","commit_id":"d1a7bc6afda6c73627e3221f1be4468151a02e1c"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0a275a72269e0a12e177361ac581e570a02e3765","unresolved":true,"context_lines":[{"line_number":7817,"context_line":"        self.assertIsNone(self.memcache.get(\u0027shard-updating-v2/a/c\u0027))"},{"line_number":7818,"context_line":"        self.assertIsNone(actual)"},{"line_number":7819,"context_line":"        error_lines \u003d self.app.logger.get_lines_for_level(\u0027error\u0027)"},{"line_number":7820,"context_line":"        exp_msg \u003d \u0027Problem with listing response from /v1/a/c?\u0027"},{"line_number":7821,"context_line":"        actual_parts \u003d error_lines[0].partition(\u0027:\u0027)"},{"line_number":7822,"context_line":"        self.assertIn(exp_msg, actual_parts[0])"},{"line_number":7823,"context_line":"        actual_qs \u003d actual_parts[0][len(exp_msg):]"}],"source_content_type":"text/x-python","patch_set":2,"id":"cebe3089_f3d5a60f","line":7820,"range":{"start_line":7820,"start_character":32,"end_line":7820,"end_character":39},"updated":"2024-06-25 17:49:08.000000000","message":"I wonder if we should make sure the error message makes it clear that we were expecting a *shard* listing response... I suppose the `states\u003dupdating` should make it reasonably clear, but it\u0027s still mostly inference on an operator\u0027s part.","commit_id":"fff2b527353bea0d150ef20dec944ba59bb23904"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0a275a72269e0a12e177361ac581e570a02e3765","unresolved":true,"context_lines":[{"line_number":7952,"context_line":"        self.assertIsNone(actual)"},{"line_number":7953,"context_line":"        self.assertFalse(self.app.logger.get_lines_for_level(\u0027error\u0027))"},{"line_number":7954,"context_line":"        warning_lines \u003d self.app.logger.get_lines_for_level(\u0027warning\u0027)"},{"line_number":7955,"context_line":"        exp_msg \u003d \u0027Failed to get container listing from /v1/a/c?\u0027"},{"line_number":7956,"context_line":"        actual_parts \u003d warning_lines[0].partition(\u0027:\u0027)"},{"line_number":7957,"context_line":"        self.assertIn(exp_msg, actual_parts[0])"},{"line_number":7958,"context_line":"        actual_qs \u003d actual_parts[0][len(exp_msg):]"}],"source_content_type":"text/x-python","patch_set":2,"id":"62d711da_ba4b3dbb","line":7955,"range":{"start_line":7955,"start_character":33,"end_line":7955,"end_character":50},"updated":"2024-06-25 17:49:08.000000000","message":"This one seems even worse -- \"container listing\" (at least in my mind) pretty specifically means \"listing of *objects* within a container\" and not shards.","commit_id":"fff2b527353bea0d150ef20dec944ba59bb23904"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"6abb70200bbb4de25cac831a6ff5e641483d4bf0","unresolved":true,"context_lines":[{"line_number":7952,"context_line":"        self.assertIsNone(actual)"},{"line_number":7953,"context_line":"        self.assertFalse(self.app.logger.get_lines_for_level(\u0027error\u0027))"},{"line_number":7954,"context_line":"        warning_lines \u003d self.app.logger.get_lines_for_level(\u0027warning\u0027)"},{"line_number":7955,"context_line":"        exp_msg \u003d \u0027Failed to get container listing from /v1/a/c?\u0027"},{"line_number":7956,"context_line":"        actual_parts \u003d warning_lines[0].partition(\u0027:\u0027)"},{"line_number":7957,"context_line":"        self.assertIn(exp_msg, actual_parts[0])"},{"line_number":7958,"context_line":"        actual_qs \u003d actual_parts[0][len(exp_msg):]"}],"source_content_type":"text/x-python","patch_set":2,"id":"6cf752f4_e72dd122","line":7955,"range":{"start_line":7955,"start_character":33,"end_line":7955,"end_character":50},"in_reply_to":"62d711da_ba4b3dbb","updated":"2024-06-25 20:15:28.000000000","message":"base.py::Conroller::_get_container_listing() can be used to get either listing of objects or listing of shard ranges, we can tell the difference from the path (/v1/a/c v.s. /v1/a/c/o) with the new changes.","commit_id":"fff2b527353bea0d150ef20dec944ba59bb23904"}]}
