)]}'
{"nova/conductor/manager.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d6d723b3746a9bf4d532f4105a92df29ad463827","unresolved":false,"context_lines":[{"line_number":1280,"context_line":"            return tags"},{"line_number":1281,"context_line":""},{"line_number":1282,"context_line":"    def _create_instance_action_for_cell0(self, context, instance, exc):"},{"line_number":1283,"context_line":"        \"\"\"Recreate a failed \"create\" instance action for the instance in cell0"},{"line_number":1284,"context_line":""},{"line_number":1285,"context_line":"        :param context: nova auth RequestContext targeted at cell0"},{"line_number":1286,"context_line":"        :param instance: Instance object being buried in cell0"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_d3f142e0","line":1283,"range":{"start_line":1283,"start_character":11,"end_line":1283,"end_character":19},"updated":"2019-11-13 20:26:37.000000000","message":"Create","commit_id":"3d3b5dd761cc44f5c36caf85a750beb76b65df45"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"6f229aef5e252e755da5719013d357f716e205f7","unresolved":false,"context_lines":[{"line_number":1324,"context_line":"            context, instance.uuid, event_name, want_result\u003dFalse,"},{"line_number":1325,"context_line":"            host\u003dself.host)"},{"line_number":1326,"context_line":"        # And finish the event with the exception. Note that we expect this"},{"line_number":1327,"context_line":"        # method to be called from _bury_in_cell0 which is called from within"},{"line_number":1328,"context_line":"        # an exception handler so sys.exc_info should return values but if not"},{"line_number":1329,"context_line":"        # it\u0027s not the end of the world - this is best effort."},{"line_number":1330,"context_line":"        objects.InstanceActionEvent.event_finish_with_failure("},{"line_number":1331,"context_line":"            context, instance.uuid, event_name, exc_val\u003dexc,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_93d5b81c","line":1328,"range":{"start_line":1327,"start_character":50,"end_line":1328,"end_character":30},"updated":"2020-01-06 18:23:15.000000000","message":"This is why you can\u0027t (reasonably) use an EventReporter context manager like normal, right? That might be worth calling out explicitly in the docstring.","commit_id":"f2608c91175411ec7c2604035adb39306d7e607e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bdbf82c0e74db59bf3295498be99c576c59e873b","unresolved":false,"context_lines":[{"line_number":1324,"context_line":"            context, instance.uuid, event_name, want_result\u003dFalse,"},{"line_number":1325,"context_line":"            host\u003dself.host)"},{"line_number":1326,"context_line":"        # And finish the event with the exception. Note that we expect this"},{"line_number":1327,"context_line":"        # method to be called from _bury_in_cell0 which is called from within"},{"line_number":1328,"context_line":"        # an exception handler so sys.exc_info should return values but if not"},{"line_number":1329,"context_line":"        # it\u0027s not the end of the world - this is best effort."},{"line_number":1330,"context_line":"        objects.InstanceActionEvent.event_finish_with_failure("},{"line_number":1331,"context_line":"            context, instance.uuid, event_name, exc_val\u003dexc,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_9959598e","line":1328,"range":{"start_line":1327,"start_character":50,"end_line":1328,"end_character":30},"in_reply_to":"3fa7e38b_93d5b81c","updated":"2020-01-06 21:05:48.000000000","message":"It would have been weird because the action has to exist for the event and we create the action in here, so to use the context manager form in the calling method we\u0027d also have to create the action there so it\u0027s easier to just do it all here.","commit_id":"f2608c91175411ec7c2604035adb39306d7e607e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"6f229aef5e252e755da5719013d357f716e205f7","unresolved":false,"context_lines":[{"line_number":1401,"context_line":"                    inst_mapping.save()"},{"line_number":1402,"context_line":""},{"line_number":1403,"context_line":"                # Record an instance action with a failed event."},{"line_number":1404,"context_line":"                self._create_instance_action_for_cell0("},{"line_number":1405,"context_line":"                    cctxt, instance, exc)"},{"line_number":1406,"context_line":""},{"line_number":1407,"context_line":"                # NOTE(mnaser): In order to properly clean-up volumes after"},{"line_number":1408,"context_line":"                #               being buried in cell0, we need to store BDMs."}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_33e64415","line":1405,"range":{"start_line":1404,"start_character":16,"end_line":1405,"end_character":41},"updated":"2020-01-06 18:23:15.000000000","message":"nit: this fits on one line","commit_id":"f2608c91175411ec7c2604035adb39306d7e607e"}],"nova/tests/functional/regressions/test_bug_1852458.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"998e7e911d56f6730b16a81ee7341053d2cb17d8","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        in cell0."},{"line_number":51,"context_line":"        \"\"\""},{"line_number":52,"context_line":"        server \u003d self._build_minimal_create_server_request("},{"line_number":53,"context_line":"            self.api, \u0027test_bury_in_cell0_instance_create_action\u0027,"},{"line_number":54,"context_line":"            image_uuid\u003dfake_image.get_valid_image_id(),"},{"line_number":55,"context_line":"            networks\u003d\u0027none\u0027)"},{"line_number":56,"context_line":"        # Use microversion 2.37 to create a server without any networking."}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_80a207fa","line":53,"range":{"start_line":53,"start_character":12,"end_line":53,"end_character":20},"updated":"2019-12-12 17:54:59.000000000","message":"remove this","commit_id":"8ec929671448e714fd74152245bfb882347521c6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0e34b095d550906b3b88508b4097a2adf6988860","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        in cell0."},{"line_number":51,"context_line":"        \"\"\""},{"line_number":52,"context_line":"        server \u003d self._build_minimal_create_server_request("},{"line_number":53,"context_line":"            self.api, \u0027test_bury_in_cell0_instance_create_action\u0027,"},{"line_number":54,"context_line":"            image_uuid\u003dfake_image.get_valid_image_id(),"},{"line_number":55,"context_line":"            networks\u003d\u0027none\u0027)"},{"line_number":56,"context_line":"        # Use microversion 2.37 to create a server without any networking."}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_bbbc146c","line":53,"range":{"start_line":53,"start_character":12,"end_line":53,"end_character":20},"in_reply_to":"3fa7e38b_80a207fa","updated":"2019-12-12 19:30:51.000000000","message":"Done","commit_id":"8ec929671448e714fd74152245bfb882347521c6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"998e7e911d56f6730b16a81ee7341053d2cb17d8","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        with utils.temporary_mutation(self.api, microversion\u003d\u00272.37\u0027):"},{"line_number":58,"context_line":"            server \u003d self.api.post_server({\u0027server\u0027: server})"},{"line_number":59,"context_line":"        # The server should go to ERROR status and have a NoValidHost fault."},{"line_number":60,"context_line":"        server \u003d self._wait_for_state_change(self.api, server, \u0027ERROR\u0027)"},{"line_number":61,"context_line":"        self.assertIn(\u0027fault\u0027, server)"},{"line_number":62,"context_line":"        self.assertIn(\u0027No valid host\u0027, server[\u0027fault\u0027][\u0027message\u0027])"},{"line_number":63,"context_line":"        self.assertEqual(\u0027\u0027, server[\u0027hostId\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_40a88fd7","line":60,"range":{"start_line":60,"start_character":45,"end_line":60,"end_character":53},"updated":"2019-12-12 17:54:59.000000000","message":"and this","commit_id":"8ec929671448e714fd74152245bfb882347521c6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0e34b095d550906b3b88508b4097a2adf6988860","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        with utils.temporary_mutation(self.api, microversion\u003d\u00272.37\u0027):"},{"line_number":58,"context_line":"            server \u003d self.api.post_server({\u0027server\u0027: server})"},{"line_number":59,"context_line":"        # The server should go to ERROR status and have a NoValidHost fault."},{"line_number":60,"context_line":"        server \u003d self._wait_for_state_change(self.api, server, \u0027ERROR\u0027)"},{"line_number":61,"context_line":"        self.assertIn(\u0027fault\u0027, server)"},{"line_number":62,"context_line":"        self.assertIn(\u0027No valid host\u0027, server[\u0027fault\u0027][\u0027message\u0027])"},{"line_number":63,"context_line":"        self.assertEqual(\u0027\u0027, server[\u0027hostId\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_dbbf905d","line":60,"range":{"start_line":60,"start_character":45,"end_line":60,"end_character":53},"in_reply_to":"3fa7e38b_40a88fd7","updated":"2019-12-12 19:30:51.000000000","message":"Done","commit_id":"8ec929671448e714fd74152245bfb882347521c6"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"f7945f947c842c4babd01096c8f83fd81f038c76","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        self.useFixture(func_fixtures.PlacementFixture())"},{"line_number":35,"context_line":"        self.useFixture(nova_fixtures.NeutronFixture(self))"},{"line_number":36,"context_line":"        policy \u003d self.useFixture(policy_fixture.RealPolicyFixture())"},{"line_number":37,"context_line":"        # Allow non-admins to see instance action events."},{"line_number":38,"context_line":"        policy.set_rules({"},{"line_number":39,"context_line":"            \u0027os_compute_api:os-instance-actions:events\u0027: \u0027rule:admin_or_owner\u0027"},{"line_number":40,"context_line":"        }, overwrite\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_be1c94c2","line":37,"range":{"start_line":37,"start_character":16,"end_line":37,"end_character":26},"updated":"2019-12-20 07:55:22.000000000","message":"non-admin cannot get the tranceback info while the server in ERROR status.","commit_id":"f2608c91175411ec7c2604035adb39306d7e607e"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"a4720aad49ff7f2c784c7dd1774f9c89bc538851","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        self.useFixture(func_fixtures.PlacementFixture())"},{"line_number":35,"context_line":"        self.useFixture(nova_fixtures.NeutronFixture(self))"},{"line_number":36,"context_line":"        policy \u003d self.useFixture(policy_fixture.RealPolicyFixture())"},{"line_number":37,"context_line":"        # Allow non-admins to see instance action events."},{"line_number":38,"context_line":"        policy.set_rules({"},{"line_number":39,"context_line":"            \u0027os_compute_api:os-instance-actions:events\u0027: \u0027rule:admin_or_owner\u0027"},{"line_number":40,"context_line":"        }, overwrite\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_e6ccb335","line":37,"range":{"start_line":37,"start_character":16,"end_line":37,"end_character":26},"in_reply_to":"3fa7e38b_962c1894","updated":"2019-12-23 01:22:26.000000000","message":"I know.","commit_id":"f2608c91175411ec7c2604035adb39306d7e607e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"58787d6610906b71526a50766c1af2e9ce7f1314","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        self.useFixture(func_fixtures.PlacementFixture())"},{"line_number":35,"context_line":"        self.useFixture(nova_fixtures.NeutronFixture(self))"},{"line_number":36,"context_line":"        policy \u003d self.useFixture(policy_fixture.RealPolicyFixture())"},{"line_number":37,"context_line":"        # Allow non-admins to see instance action events."},{"line_number":38,"context_line":"        policy.set_rules({"},{"line_number":39,"context_line":"            \u0027os_compute_api:os-instance-actions:events\u0027: \u0027rule:admin_or_owner\u0027"},{"line_number":40,"context_line":"        }, overwrite\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_962c1894","line":37,"range":{"start_line":37,"start_character":16,"end_line":37,"end_character":26},"in_reply_to":"3fa7e38b_be1c94c2","updated":"2019-12-20 15:29:54.000000000","message":"I think you\u0027re confusing faults with instance actions. Instance actions have nothing to do with the status of the server unlike faults which are only shown when the server status is ERROR or DELETED. In either case non-admins are not allowed to see traceback details - for faults that\u0027s hard-coded, but for instance actions it\u0027s configure in policy and the default is to only show the traceback to admins.","commit_id":"f2608c91175411ec7c2604035adb39306d7e607e"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"f7945f947c842c4babd01096c8f83fd81f038c76","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        policy \u003d self.useFixture(policy_fixture.RealPolicyFixture())"},{"line_number":37,"context_line":"        # Allow non-admins to see instance action events."},{"line_number":38,"context_line":"        policy.set_rules({"},{"line_number":39,"context_line":"            \u0027os_compute_api:os-instance-actions:events\u0027: \u0027rule:admin_or_owner\u0027"},{"line_number":40,"context_line":"        }, overwrite\u003dFalse)"},{"line_number":41,"context_line":"        # Setup controller services."},{"line_number":42,"context_line":"        self.start_service(\u0027conductor\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_beeed4b2","line":39,"range":{"start_line":39,"start_character":12,"end_line":39,"end_character":78},"updated":"2019-12-20 07:55:22.000000000","message":"If we want to get the instance action, we need to pass the [1] (\u0027os_compute_api:os-instance-actions\u0027) policy, that rule is \u0027rule:admin_or_owner\u0027.\nBut if we want to get the traceback we need to pass the [2] (\u0027os_compute_api:os-instance-actions:events\u0027) policy after pass [1], that is \u0027rule:admin_api\u0027.\n\nNormally, should this be set to \u0027rule:admin_api\u0027? Of course, no matter which role is OK.\n\nPerhaps, My doubt is that the suffix *event*.\n\n[1]https://github.com/openstack/nova/blob/stable/train/nova/api/openstack/compute/instance_actions.py#L141\n[2]https://github.com/openstack/nova/blob/stable/train/nova/policies/instance_actions.py#L45","commit_id":"f2608c91175411ec7c2604035adb39306d7e607e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"58787d6610906b71526a50766c1af2e9ce7f1314","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        policy \u003d self.useFixture(policy_fixture.RealPolicyFixture())"},{"line_number":37,"context_line":"        # Allow non-admins to see instance action events."},{"line_number":38,"context_line":"        policy.set_rules({"},{"line_number":39,"context_line":"            \u0027os_compute_api:os-instance-actions:events\u0027: \u0027rule:admin_or_owner\u0027"},{"line_number":40,"context_line":"        }, overwrite\u003dFalse)"},{"line_number":41,"context_line":"        # Setup controller services."},{"line_number":42,"context_line":"        self.start_service(\u0027conductor\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_b63cb4c0","line":39,"range":{"start_line":39,"start_character":12,"end_line":39,"end_character":78},"in_reply_to":"3fa7e38b_beeed4b2","updated":"2019-12-20 15:29:54.000000000","message":"Read the help on the policy rule here:\n\nhttps://github.com/openstack/nova/blob/stable/train/nova/policies/instance_actions.py#L31\n\nThis test is using microversion 2.1, not 2.51 so before 2.51 non-admins would only see events if they passed that policy check (with the events suffix).\n\nI tried to write this test from a v2.1 non-admin perspective to simulate what a real end user could see.","commit_id":"f2608c91175411ec7c2604035adb39306d7e607e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"6f229aef5e252e755da5719013d357f716e205f7","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        server \u003d self._build_minimal_create_server_request("},{"line_number":53,"context_line":"            \u0027test_bury_in_cell0_instance_create_action\u0027,"},{"line_number":54,"context_line":"            image_uuid\u003dfake_image.get_valid_image_id(),"},{"line_number":55,"context_line":"            networks\u003d\u0027none\u0027)"},{"line_number":56,"context_line":"        # Use microversion 2.37 to create a server without any networking."},{"line_number":57,"context_line":"        with utils.temporary_mutation(self.api, microversion\u003d\u00272.37\u0027):"},{"line_number":58,"context_line":"            server \u003d self.api.post_server({\u0027server\u0027: server})"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_93ae189f","line":55,"range":{"start_line":55,"start_character":12,"end_line":55,"end_character":27},"updated":"2020-01-06 18:23:15.000000000","message":"does this mean we didn\u0027t need NeutronFixture?\n\n[Later] Apparently not. I tried it and the test hangs.","commit_id":"f2608c91175411ec7c2604035adb39306d7e607e"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"f7945f947c842c4babd01096c8f83fd81f038c76","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        self.assertEqual(instance_actions.CREATE, action[\u0027action\u0027])"},{"line_number":69,"context_line":"        self.assertEqual(\u0027Error\u0027, action[\u0027message\u0027])"},{"line_number":70,"context_line":"        # Get the events. There should be one with an Error result."},{"line_number":71,"context_line":"        action \u003d self.api.api_get("},{"line_number":72,"context_line":"            \u0027/servers/%s/os-instance-actions/%s\u0027 %"},{"line_number":73,"context_line":"            (server[\u0027id\u0027], action[\u0027request_id\u0027])).body[\u0027instanceAction\u0027]"},{"line_number":74,"context_line":"        events \u003d action[\u0027events\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_5e9d6007","line":71,"updated":"2019-12-20 07:55:22.000000000","message":"We already have the [1] \u0027get_instance_actions\u0027 function in the functional api client to get the instance\u0027s action list, (TODO) maybe there is need to add a function test to get an instance\u0027s action by request_id (It looks more practical).\n\n[1]https://github.com/openstack/nova/blob/stable/train/nova/tests/functional/api/client.py#L428","commit_id":"f2608c91175411ec7c2604035adb39306d7e607e"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"a4720aad49ff7f2c784c7dd1774f9c89bc538851","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        self.assertEqual(instance_actions.CREATE, action[\u0027action\u0027])"},{"line_number":69,"context_line":"        self.assertEqual(\u0027Error\u0027, action[\u0027message\u0027])"},{"line_number":70,"context_line":"        # Get the events. There should be one with an Error result."},{"line_number":71,"context_line":"        action \u003d self.api.api_get("},{"line_number":72,"context_line":"            \u0027/servers/%s/os-instance-actions/%s\u0027 %"},{"line_number":73,"context_line":"            (server[\u0027id\u0027], action[\u0027request_id\u0027])).body[\u0027instanceAction\u0027]"},{"line_number":74,"context_line":"        events \u003d action[\u0027events\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_86f4df56","line":71,"in_reply_to":"3fa7e38b_367204b2","updated":"2019-12-23 01:22:26.000000000","message":"Agree.","commit_id":"f2608c91175411ec7c2604035adb39306d7e607e"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"d8358f9880b12346ad2d22a1b5a3833f6214e002","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        self.assertEqual(instance_actions.CREATE, action[\u0027action\u0027])"},{"line_number":69,"context_line":"        self.assertEqual(\u0027Error\u0027, action[\u0027message\u0027])"},{"line_number":70,"context_line":"        # Get the events. There should be one with an Error result."},{"line_number":71,"context_line":"        action \u003d self.api.api_get("},{"line_number":72,"context_line":"            \u0027/servers/%s/os-instance-actions/%s\u0027 %"},{"line_number":73,"context_line":"            (server[\u0027id\u0027], action[\u0027request_id\u0027])).body[\u0027instanceAction\u0027]"},{"line_number":74,"context_line":"        events \u003d action[\u0027events\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_19ef02fb","line":71,"in_reply_to":"3fa7e38b_5e9d6007","updated":"2019-12-20 08:53:23.000000000","message":"Adding the show instance action details api https://review.opendev.org/#/c/700123/","commit_id":"f2608c91175411ec7c2604035adb39306d7e607e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"58787d6610906b71526a50766c1af2e9ce7f1314","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        self.assertEqual(instance_actions.CREATE, action[\u0027action\u0027])"},{"line_number":69,"context_line":"        self.assertEqual(\u0027Error\u0027, action[\u0027message\u0027])"},{"line_number":70,"context_line":"        # Get the events. There should be one with an Error result."},{"line_number":71,"context_line":"        action \u003d self.api.api_get("},{"line_number":72,"context_line":"            \u0027/servers/%s/os-instance-actions/%s\u0027 %"},{"line_number":73,"context_line":"            (server[\u0027id\u0027], action[\u0027request_id\u0027])).body[\u0027instanceAction\u0027]"},{"line_number":74,"context_line":"        events \u003d action[\u0027events\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_367204b2","line":71,"in_reply_to":"3fa7e38b_5e9d6007","updated":"2019-12-20 15:29:54.000000000","message":"Personally I don\u0027t really care either way about using the helper functions on the API client, especially in tests for bug fixes where the patch might be backported to stable branches because then there is a chance that you just have to go back to the direct GET calls in stable branches because the helper function doesn\u0027t exist there.","commit_id":"f2608c91175411ec7c2604035adb39306d7e607e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"6f229aef5e252e755da5719013d357f716e205f7","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        events \u003d action[\u0027events\u0027]"},{"line_number":75,"context_line":"        self.assertEqual(1, len(events), events)"},{"line_number":76,"context_line":"        event \u003d events[0]"},{"line_number":77,"context_line":"        self.assertEqual(\u0027conductor_schedule_and_build_instances\u0027,"},{"line_number":78,"context_line":"                         event[\u0027event\u0027])"},{"line_number":79,"context_line":"        self.assertEqual(\u0027Error\u0027, event[\u0027result\u0027])"},{"line_number":80,"context_line":"        # Normally non-admins cannot see the event traceback but we enabled"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_d39d706c","line":77,"range":{"start_line":77,"start_character":26,"end_line":77,"end_character":64},"updated":"2020-01-06 18:23:15.000000000","message":"✔","commit_id":"f2608c91175411ec7c2604035adb39306d7e607e"}],"releasenotes/notes/bug-1852458-cell0-instance-action-e3112cf17bcc7c64.yaml":[{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"f7945f947c842c4babd01096c8f83fd81f038c76","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    ``create`` action will be created with an event named"},{"line_number":9,"context_line":"    ``conductor_schedule_and_build_instances``."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    .. __: https://bugs.launchpad.net/nova/+bug/1852458"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"3fa7e38b_7e5e1c52","line":11,"range":{"start_line":11,"start_character":7,"end_line":11,"end_character":10},"updated":"2019-12-20 07:55:22.000000000","message":"nit:In terms of code style, \"_regression:\" is easier to read.","commit_id":"f2608c91175411ec7c2604035adb39306d7e607e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8a6c715239b418ff89ff223831e352fbcd63c045","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    ``create`` action will be created with an event named"},{"line_number":9,"context_line":"    ``conductor_schedule_and_build_instances``."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    .. __: https://bugs.launchpad.net/nova/+bug/1852458"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"3fa7e38b_84bd77d8","line":11,"range":{"start_line":11,"start_character":7,"end_line":11,"end_character":10},"in_reply_to":"3fa7e38b_166fc8c4","updated":"2020-01-06 14:51:29.000000000","message":"\u003e The anonymous link is used because \"regression\" is a generic term\n \u003e and there could be other release notes trying to use the same link\n \u003e name.\n\n++","commit_id":"f2608c91175411ec7c2604035adb39306d7e607e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"58787d6610906b71526a50766c1af2e9ce7f1314","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    ``create`` action will be created with an event named"},{"line_number":9,"context_line":"    ``conductor_schedule_and_build_instances``."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    .. __: https://bugs.launchpad.net/nova/+bug/1852458"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"3fa7e38b_166fc8c4","line":11,"range":{"start_line":11,"start_character":7,"end_line":11,"end_character":10},"in_reply_to":"3fa7e38b_7e5e1c52","updated":"2019-12-20 15:29:54.000000000","message":"The anonymous link is used because \"regression\" is a generic term and there could be other release notes trying to use the same link name.","commit_id":"f2608c91175411ec7c2604035adb39306d7e607e"}]}
