)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":19262,"name":"Liron Kuchlani","email":"lkuchlan@redhat.com","username":"lkuchlan"},"change_message_id":"49f4b75aad072092b40318f55fd67bc333fa6b6f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"a489d3e4_239480fe","updated":"2022-06-23 08:05:53.000000000","message":"Shouldn\u0027t we apply the same changes here as well ?\n\nhttps://github.com/openstack/manila-tempest-plugin/blob/master/manila_tempest_tests/tests/api/test_scheduler_hints.py#L73\n\nhttps://github.com/openstack/manila-tempest-plugin/blob/master/manila_tempest_tests/tests/api/test_scheduler_hints.py#L76\n\nhttps://github.com/openstack/manila-tempest-plugin/blob/master/manila_tempest_tests/tests/scenario/manager_share.py#L424","commit_id":"ff5e780d9b6483ddf8578db46919875bf79f1d70"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"732275933cf07a55de7dfb699bd95d167e343130","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"6ed3d4ca_f659ab65","updated":"2022-05-25 21:18:19.000000000","message":"recheck\n\nsporadic requirements resolution failure","commit_id":"ff5e780d9b6483ddf8578db46919875bf79f1d70"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a9b3cc62b4fb36619267fbcdd2d9af20c75cf379","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"20443b67_cc3010af","updated":"2022-06-22 18:31:25.000000000","message":"recheck\n\nstable jobs are now fixed","commit_id":"ff5e780d9b6483ddf8578db46919875bf79f1d70"},{"author":{"_account_id":32594,"name":"Ashley Rodriguez","email":"ashrod98@redhat.com","username":"ashrod98"},"change_message_id":"dffa68bb5bd1aa543c55603f5bd43e91810ea5cb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"9f0f5c55_f0d10f40","updated":"2022-05-12 19:54:11.000000000","message":"recheck old logs","commit_id":"ff5e780d9b6483ddf8578db46919875bf79f1d70"},{"author":{"_account_id":32594,"name":"Ashley Rodriguez","email":"ashrod98@redhat.com","username":"ashrod98"},"change_message_id":"a9b8bc73dd7cda2e33d8892258731af163a1abee","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"4efe56cc_a87824b4","updated":"2022-05-12 19:53:25.000000000","message":"thanks for adding a top level key check. this looks good to me goutham. lets recheck, the logs are old","commit_id":"ff5e780d9b6483ddf8578db46919875bf79f1d70"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8d6081a366a4b7b7d942f4fcaf413386d9483f64","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"6b695e81_07435f57","in_reply_to":"a489d3e4_239480fe","updated":"2022-06-23 11:27:41.000000000","message":"Thanks, i\u0027ll change the first two occurrences.. \"client\" is already set to \"shares_v2_client\" for the scenario test:\n\nhttps://github.com/openstack/manila-tempest-plugin/blob/b31d6efb21cfec92fed899a1eec1cb5de30c737b/manila_tempest_tests/tests/scenario/manager_share.py#L405\n\n(invoked here:\nhttps://github.com/openstack/manila-tempest-plugin/blob/b31d6efb21cfec92fed899a1eec1cb5de30c737b/manila_tempest_tests/tests/scenario/manager_share.py#L795-L799)","commit_id":"ff5e780d9b6483ddf8578db46919875bf79f1d70"},{"author":{"_account_id":19262,"name":"Liron Kuchlani","email":"lkuchlan@redhat.com","username":"lkuchlan"},"change_message_id":"4aa681243106adbbdb8402d18cba29cce35a534e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"932dbaa7_b5638764","updated":"2022-06-26 04:43:14.000000000","message":"Thanks Goutham!","commit_id":"8bb17fc562bef136ccf2683aaf32e3a1ddb6017c"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"92b0e1467c99250349d51d0d9aeff7acabf4c8fc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"06ff40fc_095f858b","updated":"2022-06-24 13:04:27.000000000","message":"recheck\n\nsporadic failure in the LVM job","commit_id":"8bb17fc562bef136ccf2683aaf32e3a1ddb6017c"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8c9f3bb15d6de7e670e26fddc193f688db15ae97","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"bc303d70_e7e95c4c","updated":"2022-06-23 18:50:04.000000000","message":"recheck\n\nstrange, unrelated share teardown error","commit_id":"8bb17fc562bef136ccf2683aaf32e3a1ddb6017c"}],"manila_tempest_tests/utils.py":[{"author":{"_account_id":19262,"name":"Liron Kuchlani","email":"lkuchlan@redhat.com","username":"lkuchlan"},"change_message_id":"49f4b75aad072092b40318f55fd67bc333fa6b6f","unresolved":true,"context_lines":[{"line_number":228,"context_line":"    return headers, extra_headers"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"def _parse_resp(body, verify_top_key\u003dNone):"},{"line_number":232,"context_line":"    try:"},{"line_number":233,"context_line":"        body \u003d json.loads(body)"},{"line_number":234,"context_line":"    except ValueError:"},{"line_number":235,"context_line":"        return body"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    # We assume, that if the first value of the deserialized body\u0027s"},{"line_number":238,"context_line":"    # item set is a dict or a list, that we just return the first value"},{"line_number":239,"context_line":"    # of deserialized body."},{"line_number":240,"context_line":"    # Essentially \"cutting out\" the first placeholder element in a body"},{"line_number":241,"context_line":"    # that looks like this:"},{"line_number":242,"context_line":"    #"},{"line_number":243,"context_line":"    #  {"},{"line_number":244,"context_line":"    #    \"users\": ["},{"line_number":245,"context_line":"    #      ..."},{"line_number":246,"context_line":"    #    ]"},{"line_number":247,"context_line":"    #  }"},{"line_number":248,"context_line":"    try:"},{"line_number":249,"context_line":"        # Ensure there are not more than one top-level keys"},{"line_number":250,"context_line":"        # NOTE(freerunner): Ensure, that JSON is not nullable to"},{"line_number":251,"context_line":"        # to prevent StopIteration Exception"},{"line_number":252,"context_line":"        if not hasattr(body, \"keys\") or len(body.keys()) !\u003d 1:"},{"line_number":253,"context_line":"            return body"},{"line_number":254,"context_line":"        # Just return the \"wrapped\" element"},{"line_number":255,"context_line":"        first_key, first_item \u003d tuple(body.items())[0]"},{"line_number":256,"context_line":"        if isinstance(first_item, (dict, list)):"},{"line_number":257,"context_line":"            if verify_top_key is not None:"},{"line_number":258,"context_line":"                assert_msg \u003d ("},{"line_number":259,"context_line":"                    \"The expected top level key is \u0027%(top_key)s\u0027 but we \""},{"line_number":260,"context_line":"                    \"found \u0027%(actual_key)s\u0027.\" % {"},{"line_number":261,"context_line":"                        \u0027top_key\u0027: verify_top_key,"},{"line_number":262,"context_line":"                        \u0027actual_key\u0027: first_key"},{"line_number":263,"context_line":"                    })"},{"line_number":264,"context_line":"                assert verify_top_key \u003d\u003d first_key, assert_msg"},{"line_number":265,"context_line":"            return first_item"},{"line_number":266,"context_line":"    except (ValueError, IndexError):"},{"line_number":267,"context_line":"        pass"},{"line_number":268,"context_line":"    return body"}],"source_content_type":"text/x-python","patch_set":4,"id":"9d03e555_5f73ec41","line":268,"range":{"start_line":231,"start_character":0,"end_line":268,"end_character":15},"updated":"2022-06-23 08:05:53.000000000","message":"Can this change be made in tempest ?\nhttps://github.com/openstack/tempest/blob/master/tempest/lib/common/rest_client.py#L495","commit_id":"ff5e780d9b6483ddf8578db46919875bf79f1d70"},{"author":{"_account_id":19262,"name":"Liron Kuchlani","email":"lkuchlan@redhat.com","username":"lkuchlan"},"change_message_id":"4aa681243106adbbdb8402d18cba29cce35a534e","unresolved":true,"context_lines":[{"line_number":228,"context_line":"    return headers, extra_headers"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"def _parse_resp(body, verify_top_key\u003dNone):"},{"line_number":232,"context_line":"    try:"},{"line_number":233,"context_line":"        body \u003d json.loads(body)"},{"line_number":234,"context_line":"    except ValueError:"},{"line_number":235,"context_line":"        return body"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    # We assume, that if the first value of the deserialized body\u0027s"},{"line_number":238,"context_line":"    # item set is a dict or a list, that we just return the first value"},{"line_number":239,"context_line":"    # of deserialized body."},{"line_number":240,"context_line":"    # Essentially \"cutting out\" the first placeholder element in a body"},{"line_number":241,"context_line":"    # that looks like this:"},{"line_number":242,"context_line":"    #"},{"line_number":243,"context_line":"    #  {"},{"line_number":244,"context_line":"    #    \"users\": ["},{"line_number":245,"context_line":"    #      ..."},{"line_number":246,"context_line":"    #    ]"},{"line_number":247,"context_line":"    #  }"},{"line_number":248,"context_line":"    try:"},{"line_number":249,"context_line":"        # Ensure there are not more than one top-level keys"},{"line_number":250,"context_line":"        # NOTE(freerunner): Ensure, that JSON is not nullable to"},{"line_number":251,"context_line":"        # to prevent StopIteration Exception"},{"line_number":252,"context_line":"        if not hasattr(body, \"keys\") or len(body.keys()) !\u003d 1:"},{"line_number":253,"context_line":"            return body"},{"line_number":254,"context_line":"        # Just return the \"wrapped\" element"},{"line_number":255,"context_line":"        first_key, first_item \u003d tuple(body.items())[0]"},{"line_number":256,"context_line":"        if isinstance(first_item, (dict, list)):"},{"line_number":257,"context_line":"            if verify_top_key is not None:"},{"line_number":258,"context_line":"                assert_msg \u003d ("},{"line_number":259,"context_line":"                    \"The expected top level key is \u0027%(top_key)s\u0027 but we \""},{"line_number":260,"context_line":"                    \"found \u0027%(actual_key)s\u0027.\" % {"},{"line_number":261,"context_line":"                        \u0027top_key\u0027: verify_top_key,"},{"line_number":262,"context_line":"                        \u0027actual_key\u0027: first_key"},{"line_number":263,"context_line":"                    })"},{"line_number":264,"context_line":"                assert verify_top_key \u003d\u003d first_key, assert_msg"},{"line_number":265,"context_line":"            return first_item"},{"line_number":266,"context_line":"    except (ValueError, IndexError):"},{"line_number":267,"context_line":"        pass"},{"line_number":268,"context_line":"    return body"}],"source_content_type":"text/x-python","patch_set":4,"id":"49e2abff_ab62abb0","line":268,"range":{"start_line":231,"start_character":0,"end_line":268,"end_character":15},"in_reply_to":"27e0ff27_365808f7","updated":"2022-06-26 04:43:14.000000000","message":"Make sense","commit_id":"ff5e780d9b6483ddf8578db46919875bf79f1d70"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8d6081a366a4b7b7d942f4fcaf413386d9483f64","unresolved":true,"context_lines":[{"line_number":228,"context_line":"    return headers, extra_headers"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"def _parse_resp(body, verify_top_key\u003dNone):"},{"line_number":232,"context_line":"    try:"},{"line_number":233,"context_line":"        body \u003d json.loads(body)"},{"line_number":234,"context_line":"    except ValueError:"},{"line_number":235,"context_line":"        return body"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    # We assume, that if the first value of the deserialized body\u0027s"},{"line_number":238,"context_line":"    # item set is a dict or a list, that we just return the first value"},{"line_number":239,"context_line":"    # of deserialized body."},{"line_number":240,"context_line":"    # Essentially \"cutting out\" the first placeholder element in a body"},{"line_number":241,"context_line":"    # that looks like this:"},{"line_number":242,"context_line":"    #"},{"line_number":243,"context_line":"    #  {"},{"line_number":244,"context_line":"    #    \"users\": ["},{"line_number":245,"context_line":"    #      ..."},{"line_number":246,"context_line":"    #    ]"},{"line_number":247,"context_line":"    #  }"},{"line_number":248,"context_line":"    try:"},{"line_number":249,"context_line":"        # Ensure there are not more than one top-level keys"},{"line_number":250,"context_line":"        # NOTE(freerunner): Ensure, that JSON is not nullable to"},{"line_number":251,"context_line":"        # to prevent StopIteration Exception"},{"line_number":252,"context_line":"        if not hasattr(body, \"keys\") or len(body.keys()) !\u003d 1:"},{"line_number":253,"context_line":"            return body"},{"line_number":254,"context_line":"        # Just return the \"wrapped\" element"},{"line_number":255,"context_line":"        first_key, first_item \u003d tuple(body.items())[0]"},{"line_number":256,"context_line":"        if isinstance(first_item, (dict, list)):"},{"line_number":257,"context_line":"            if verify_top_key is not None:"},{"line_number":258,"context_line":"                assert_msg \u003d ("},{"line_number":259,"context_line":"                    \"The expected top level key is \u0027%(top_key)s\u0027 but we \""},{"line_number":260,"context_line":"                    \"found \u0027%(actual_key)s\u0027.\" % {"},{"line_number":261,"context_line":"                        \u0027top_key\u0027: verify_top_key,"},{"line_number":262,"context_line":"                        \u0027actual_key\u0027: first_key"},{"line_number":263,"context_line":"                    })"},{"line_number":264,"context_line":"                assert verify_top_key \u003d\u003d first_key, assert_msg"},{"line_number":265,"context_line":"            return first_item"},{"line_number":266,"context_line":"    except (ValueError, IndexError):"},{"line_number":267,"context_line":"        pass"},{"line_number":268,"context_line":"    return body"}],"source_content_type":"text/x-python","patch_set":4,"id":"c17f0efe_ef96ab52","line":268,"range":{"start_line":231,"start_character":0,"end_line":268,"end_character":15},"in_reply_to":"9d03e555_5f73ec41","updated":"2022-06-23 11:27:41.000000000","message":"We could; its a minor improvement, I could push a patch there and see what the QA team feels about it. However, I don\u0027t want us to wait on their decision to get this test in... we caught a regression with this.","commit_id":"ff5e780d9b6483ddf8578db46919875bf79f1d70"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"63149008174a0585ab791ac524d63edf5d28d14c","unresolved":true,"context_lines":[{"line_number":228,"context_line":"    return headers, extra_headers"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"def _parse_resp(body, verify_top_key\u003dNone):"},{"line_number":232,"context_line":"    try:"},{"line_number":233,"context_line":"        body \u003d json.loads(body)"},{"line_number":234,"context_line":"    except ValueError:"},{"line_number":235,"context_line":"        return body"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    # We assume, that if the first value of the deserialized body\u0027s"},{"line_number":238,"context_line":"    # item set is a dict or a list, that we just return the first value"},{"line_number":239,"context_line":"    # of deserialized body."},{"line_number":240,"context_line":"    # Essentially \"cutting out\" the first placeholder element in a body"},{"line_number":241,"context_line":"    # that looks like this:"},{"line_number":242,"context_line":"    #"},{"line_number":243,"context_line":"    #  {"},{"line_number":244,"context_line":"    #    \"users\": ["},{"line_number":245,"context_line":"    #      ..."},{"line_number":246,"context_line":"    #    ]"},{"line_number":247,"context_line":"    #  }"},{"line_number":248,"context_line":"    try:"},{"line_number":249,"context_line":"        # Ensure there are not more than one top-level keys"},{"line_number":250,"context_line":"        # NOTE(freerunner): Ensure, that JSON is not nullable to"},{"line_number":251,"context_line":"        # to prevent StopIteration Exception"},{"line_number":252,"context_line":"        if not hasattr(body, \"keys\") or len(body.keys()) !\u003d 1:"},{"line_number":253,"context_line":"            return body"},{"line_number":254,"context_line":"        # Just return the \"wrapped\" element"},{"line_number":255,"context_line":"        first_key, first_item \u003d tuple(body.items())[0]"},{"line_number":256,"context_line":"        if isinstance(first_item, (dict, list)):"},{"line_number":257,"context_line":"            if verify_top_key is not None:"},{"line_number":258,"context_line":"                assert_msg \u003d ("},{"line_number":259,"context_line":"                    \"The expected top level key is \u0027%(top_key)s\u0027 but we \""},{"line_number":260,"context_line":"                    \"found \u0027%(actual_key)s\u0027.\" % {"},{"line_number":261,"context_line":"                        \u0027top_key\u0027: verify_top_key,"},{"line_number":262,"context_line":"                        \u0027actual_key\u0027: first_key"},{"line_number":263,"context_line":"                    })"},{"line_number":264,"context_line":"                assert verify_top_key \u003d\u003d first_key, assert_msg"},{"line_number":265,"context_line":"            return first_item"},{"line_number":266,"context_line":"    except (ValueError, IndexError):"},{"line_number":267,"context_line":"        pass"},{"line_number":268,"context_line":"    return body"}],"source_content_type":"text/x-python","patch_set":4,"id":"27e0ff27_365808f7","line":268,"range":{"start_line":231,"start_character":0,"end_line":268,"end_character":15},"in_reply_to":"c17f0efe_ef96ab52","updated":"2022-06-23 11:40:12.000000000","message":"https://review.opendev.org/c/openstack/tempest/+/847330\n\nI\u0027ll cleanup our version if this gets merged in tempest","commit_id":"ff5e780d9b6483ddf8578db46919875bf79f1d70"}]}
