)]}'
{"tempest/api/volume/test_volumes_extend.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"60f93bee066495aeef0d2eb57d9dd1a24c400ac1","unresolved":false,"context_lines":[{"line_number":61,"context_line":"class VolumesExtendAttachedTest(base.BaseVolumeTest):"},{"line_number":62,"context_line":"    \"\"\"Tests extending the size of an attached volume.\"\"\""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    # We need admin credentials for getting instance action event details. By"},{"line_number":65,"context_line":"    # default a non-admin can list and show instance actions if they own the"},{"line_number":66,"context_line":"    # server instance, but since the event details can contain error messages"},{"line_number":67,"context_line":"    # and tracebacks, like an instance fault, those are not viewable by"},{"line_number":68,"context_line":"    # non-admins. This is obviously not a great user experience since the user"},{"line_number":69,"context_line":"    # may not know when the operation is actually complete. Maybe the compute"},{"line_number":70,"context_line":"    # API should be enhanced to consider an overall action is complete when"},{"line_number":71,"context_line":"    # it has at least one event and all events are completed."},{"line_number":72,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027admin\u0027]"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    _api_version \u003d 3"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f1d235d_1e02d80a","line":71,"range":{"start_line":64,"start_character":4,"end_line":71,"end_character":61},"updated":"2017-07-06 14:35:03.000000000","message":"I think what we\u0027re going to do is in the same 2.50 microversion in nova, expose the instance action events for admin-or-owner *except* for the traceback field, that would remain admin-only by default.","commit_id":"6134f3809cf9c5f75f991150b766ed62027ad663"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"ec2756c5febdce6ae24027c6e8316990c6166dbb","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    _api_version \u003d 3"},{"line_number":75,"context_line":"    # NOTE(mriedem): The minimum required volume API version is 3.42 and the"},{"line_number":76,"context_line":"    # minimum required compute API microversion is 3.50, but the compute call"},{"line_number":77,"context_line":"    # is implicit - Cinder calls Nova at that microversion, Tempest does not."},{"line_number":78,"context_line":"    min_microversion \u003d \u00273.42\u0027"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f1d235d_7328f795","line":76,"range":{"start_line":76,"start_character":51,"end_line":76,"end_character":56},"updated":"2017-07-06 07:37:50.000000000","message":"2.50?","commit_id":"6134f3809cf9c5f75f991150b766ed62027ad663"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"60f93bee066495aeef0d2eb57d9dd1a24c400ac1","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    _api_version \u003d 3"},{"line_number":75,"context_line":"    # NOTE(mriedem): The minimum required volume API version is 3.42 and the"},{"line_number":76,"context_line":"    # minimum required compute API microversion is 3.50, but the compute call"},{"line_number":77,"context_line":"    # is implicit - Cinder calls Nova at that microversion, Tempest does not."},{"line_number":78,"context_line":"    min_microversion \u003d \u00273.42\u0027"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f1d235d_3b280695","line":76,"range":{"start_line":76,"start_character":51,"end_line":76,"end_character":56},"in_reply_to":"3f1d235d_7328f795","updated":"2017-07-06 14:35:03.000000000","message":"Ah yeah nice catch.","commit_id":"6134f3809cf9c5f75f991150b766ed62027ad663"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6a91f604194042559cb3ccc954461f827f66aaec","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    def _find_extend_volume_instance_action_finish_event(self, action):"},{"line_number":93,"context_line":"        # This has to be called by an admin client otherwise"},{"line_number":94,"context_line":"        # the events don\u0027t show up."},{"line_number":95,"context_line":"        action \u003d self.admin_servers_client.show_instance_action("},{"line_number":96,"context_line":"            action[\u0027instance_uuid\u0027], action[\u0027request_id\u0027])"},{"line_number":97,"context_line":"        for event in action[\u0027events\u0027]:"},{"line_number":98,"context_line":"            if (event[\u0027event\u0027] \u003d\u003d \u0027compute_extend_volume\u0027 and"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f1d235d_e54f8068","line":95,"updated":"2017-07-06 20:23:22.000000000","message":"Looks like there is a bug in the tempest instance action event response schema validation:\n\nhttp://logs.openstack.org/78/480778/2/check/gate-tempest-dsvm-py35-ubuntu-xenial/c01e60a/console.html#_2017-07-06_20_14_43_209769\n\nIt expects a string for the finish_time but nova returns None, which is perfectly valid for an event that\u0027s not complete.","commit_id":"6134f3809cf9c5f75f991150b766ed62027ad663"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"dc5f30d7efafefda6f742422411a9815cfe3e576","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    # events but will continue to hide the traceback field."},{"line_number":72,"context_line":"    # TODO(mriedem): Change this to not rely on the admin user to get the event"},{"line_number":73,"context_line":"    # details once that microversion is available in Nova."},{"line_number":74,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027admin\u0027]"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    _api_version \u003d 3"},{"line_number":77,"context_line":"    # NOTE(mriedem): The minimum required volume API version is 3.42 and the"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f1d235d_be5f1d71","line":74,"range":{"start_line":74,"start_character":31,"end_line":74,"end_character":36},"updated":"2017-07-10 02:25:17.000000000","message":"if admin is needed, then the testcase should inherit from BaseVolumeAdminTest, and it should be moved to the admin folders.","commit_id":"a7e2de99c9bad8f94e6672e7aaeae20d44f278a5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"15f04f923004a743a201b30b99d582bbeff8c89b","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    # events but will continue to hide the traceback field."},{"line_number":72,"context_line":"    # TODO(mriedem): Change this to not rely on the admin user to get the event"},{"line_number":73,"context_line":"    # details once that microversion is available in Nova."},{"line_number":74,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027admin\u0027]"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    _api_version \u003d 3"},{"line_number":77,"context_line":"    # NOTE(mriedem): The minimum required volume API version is 3.42 and the"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f1a1f67_6e87a5d9","line":74,"range":{"start_line":74,"start_character":31,"end_line":74,"end_character":36},"in_reply_to":"3f1d235d_2050430a","updated":"2017-07-12 16:27:06.000000000","message":"Sure, but this is a volume API test, it\u0027s under tempest/api/volume so having it extend the BaseV2ComputeAdminTest class would be weird. And I don\u0027t need the admin credentials for the volume API, I need them for the *compute* API because I\u0027m using cls.os_admin.servers_client. So even if this test extends BaseVolumeAdminTest it\u0027s not going to be what I need since I still have to get the admin servers client.","commit_id":"a7e2de99c9bad8f94e6672e7aaeae20d44f278a5"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"339828d9b38e26fdaf393759f05f859bf122a299","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    # events but will continue to hide the traceback field."},{"line_number":72,"context_line":"    # TODO(mriedem): Change this to not rely on the admin user to get the event"},{"line_number":73,"context_line":"    # details once that microversion is available in Nova."},{"line_number":74,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027admin\u0027]"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    _api_version \u003d 3"},{"line_number":77,"context_line":"    # NOTE(mriedem): The minimum required volume API version is 3.42 and the"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f1d235d_2050430a","line":74,"range":{"start_line":74,"start_character":31,"end_line":74,"end_character":36},"in_reply_to":"3f1d235d_a5f24c6e","updated":"2017-07-11 21:14:08.000000000","message":"As I understand it, the only meaningful difference between the admin and non-admin base classes is that: 1) the admin class uses credentials \u003d [\u0027primary\u0027, \u0027admin\u0027] [0] while non-admin class uses credentials \u003d [\u0027primary\u0027] and 2) the admin class uses admin clients. The primary credentials in the admin class should still be non-admin.\n\nhttps://github.com/openstack/tempest/blob/master/tempest/api/compute/base.py#L468","commit_id":"a7e2de99c9bad8f94e6672e7aaeae20d44f278a5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"91482a1dea5f256dfaa003ac419f5d2546f706c5","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    # events but will continue to hide the traceback field."},{"line_number":72,"context_line":"    # TODO(mriedem): Change this to not rely on the admin user to get the event"},{"line_number":73,"context_line":"    # details once that microversion is available in Nova."},{"line_number":74,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027admin\u0027]"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    _api_version \u003d 3"},{"line_number":77,"context_line":"    # NOTE(mriedem): The minimum required volume API version is 3.42 and the"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f1d235d_a5f24c6e","line":74,"range":{"start_line":74,"start_character":31,"end_line":74,"end_character":36},"in_reply_to":"3f1d235d_be5f1d71","updated":"2017-07-10 22:50:25.000000000","message":"If we do that, then don\u0027t the primary credentials become the admin credentials? That\u0027s not really what I want.","commit_id":"a7e2de99c9bad8f94e6672e7aaeae20d44f278a5"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"a82a13c5880fcc475198655d340fac34cdff39e2","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027admin\u0027]"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    _api_version \u003d 3"},{"line_number":77,"context_line":"    # NOTE(mriedem): The minimum required volume API version is 3.42 and the"},{"line_number":78,"context_line":"    # minimum required compute API microversion is 2.50, but the compute call"},{"line_number":79,"context_line":"    # is implicit - Cinder calls Nova at that microversion, Tempest does not."},{"line_number":80,"context_line":"    min_microversion \u003d \u00273.42\u0027"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @classmethod"},{"line_number":83,"context_line":"    def setup_clients(cls):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f1d235d_375e6076","line":80,"range":{"start_line":77,"start_character":0,"end_line":80,"end_character":29},"updated":"2017-07-11 10:34:01.000000000","message":"ohh, i am worried about supporting 2 services microversion at a time. no such scenario till now. may be for scenario tests we might need.\nwe can do that with doing all base class logic explicitly in test but not sure that is good. let me think more on this to support such scenario.","commit_id":"a7e2de99c9bad8f94e6672e7aaeae20d44f278a5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9ddd4698d331c91510845680a1bf40387bb9bb1d","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027admin\u0027]"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    _api_version \u003d 3"},{"line_number":77,"context_line":"    # NOTE(mriedem): The minimum required volume API version is 3.42 and the"},{"line_number":78,"context_line":"    # minimum required compute API microversion is 2.50, but the compute call"},{"line_number":79,"context_line":"    # is implicit - Cinder calls Nova at that microversion, Tempest does not."},{"line_number":80,"context_line":"    min_microversion \u003d \u00273.42\u0027"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @classmethod"},{"line_number":83,"context_line":"    def setup_clients(cls):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f1d235d_6f6071a6","line":80,"range":{"start_line":77,"start_character":0,"end_line":80,"end_character":29},"in_reply_to":"3f1d235d_375e6076","updated":"2017-07-11 18:07:35.000000000","message":"This is why it\u0027s a TODO for now. This test is passing the way it\u0027s written, but it\u0027s using the limitation of relying on the admin client to get the instance action event details.","commit_id":"a7e2de99c9bad8f94e6672e7aaeae20d44f278a5"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"dc5f30d7efafefda6f742422411a9815cfe3e576","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        # The volume status should go back to in-use since it is still attached"},{"line_number":137,"context_line":"        # to the server instance."},{"line_number":138,"context_line":"        waiters.wait_for_volume_resource_status(self.volumes_client,"},{"line_number":139,"context_line":"                                                volume[\u0027id\u0027], \u0027in-use\u0027)"},{"line_number":140,"context_line":"        # Assert that the volume size has changed in the volume API."},{"line_number":141,"context_line":"        volume \u003d self.volumes_client.show_volume(volume[\u0027id\u0027])[\u0027volume\u0027]"},{"line_number":142,"context_line":"        self.assertEqual(extend_size, volume[\u0027size\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f1d235d_616208db","line":139,"range":{"start_line":139,"start_character":62,"end_line":139,"end_character":70},"updated":"2017-07-10 02:25:17.000000000","message":"If we call show_volume immediately after extend_volume, is there such a possibility that the status hasn\u0027t been changed to extending yet?","commit_id":"a7e2de99c9bad8f94e6672e7aaeae20d44f278a5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"91482a1dea5f256dfaa003ac419f5d2546f706c5","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        # The volume status should go back to in-use since it is still attached"},{"line_number":137,"context_line":"        # to the server instance."},{"line_number":138,"context_line":"        waiters.wait_for_volume_resource_status(self.volumes_client,"},{"line_number":139,"context_line":"                                                volume[\u0027id\u0027], \u0027in-use\u0027)"},{"line_number":140,"context_line":"        # Assert that the volume size has changed in the volume API."},{"line_number":141,"context_line":"        volume \u003d self.volumes_client.show_volume(volume[\u0027id\u0027])[\u0027volume\u0027]"},{"line_number":142,"context_line":"        self.assertEqual(extend_size, volume[\u0027size\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f1d235d_65ec348f","line":139,"range":{"start_line":139,"start_character":62,"end_line":139,"end_character":70},"in_reply_to":"3f1d235d_616208db","updated":"2017-07-10 22:50:25.000000000","message":"No, it\u0027s atomic in the Cinder API - the status is changed before the response is sent back to the user.","commit_id":"a7e2de99c9bad8f94e6672e7aaeae20d44f278a5"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"dc5f30d7efafefda6f742422411a9815cfe3e576","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        # Now we wait for the \"compute_extend_volume\" instance action event"},{"line_number":144,"context_line":"        # to show up for the server instance. This is our indication that the"},{"line_number":145,"context_line":"        # asynchronous operation is complete on the compute side."},{"line_number":146,"context_line":"        start_time \u003d int(time.time())"},{"line_number":147,"context_line":"        timeout \u003d self.servers_client.build_timeout"},{"line_number":148,"context_line":"        action \u003d self._find_extend_volume_instance_action(server[\u0027id\u0027])"},{"line_number":149,"context_line":"        while action is None and int(time.time()) - start_time \u003c timeout:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f1d235d_212770b9","line":146,"range":{"start_line":146,"start_character":8,"end_line":146,"end_character":37},"updated":"2017-07-10 02:25:17.000000000","message":"how about using test_utils.call_until_true?","commit_id":"a7e2de99c9bad8f94e6672e7aaeae20d44f278a5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"91482a1dea5f256dfaa003ac419f5d2546f706c5","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        # Now we wait for the \"compute_extend_volume\" instance action event"},{"line_number":144,"context_line":"        # to show up for the server instance. This is our indication that the"},{"line_number":145,"context_line":"        # asynchronous operation is complete on the compute side."},{"line_number":146,"context_line":"        start_time \u003d int(time.time())"},{"line_number":147,"context_line":"        timeout \u003d self.servers_client.build_timeout"},{"line_number":148,"context_line":"        action \u003d self._find_extend_volume_instance_action(server[\u0027id\u0027])"},{"line_number":149,"context_line":"        while action is None and int(time.time()) - start_time \u003c timeout:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f1d235d_25fe3c38","line":146,"range":{"start_line":146,"start_character":8,"end_line":146,"end_character":37},"in_reply_to":"3f1d235d_212770b9","updated":"2017-07-10 22:50:25.000000000","message":"I looked at that and it wasn\u0027t a good fit.","commit_id":"a7e2de99c9bad8f94e6672e7aaeae20d44f278a5"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"0eb5245302b32e757d70171f0551f1285d9a6f94","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            raise lib_exc.TimeoutException(msg)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        # Finally, assert that the action completed successfully."},{"line_number":179,"context_line":"        self.assertTrue("},{"line_number":180,"context_line":"            event[\u0027result\u0027].lower() \u003d\u003d \u0027success\u0027,"},{"line_number":181,"context_line":"            \"Unexpected compute_extend_volume result \u0027%(result)s\u0027 for request \""},{"line_number":182,"context_line":"            \"%(request_id)s.\" %"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f1d235d_6f9511e4","line":179,"updated":"2017-07-11 18:30:29.000000000","message":"Next time, use assertEqual. Because with assertTrue, if that test fails, the log will be \"False is not True\" whereas with assertEqual logs will be \"$whatever_is_event[\u0027result\u0027] is not \u0027success\u0027\" which is more descriptive.","commit_id":"a7e2de99c9bad8f94e6672e7aaeae20d44f278a5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"545fa038d36d165cd426310c2f3836682975b826","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            raise lib_exc.TimeoutException(msg)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        # Finally, assert that the action completed successfully."},{"line_number":179,"context_line":"        self.assertTrue("},{"line_number":180,"context_line":"            event[\u0027result\u0027].lower() \u003d\u003d \u0027success\u0027,"},{"line_number":181,"context_line":"            \"Unexpected compute_extend_volume result \u0027%(result)s\u0027 for request \""},{"line_number":182,"context_line":"            \"%(request_id)s.\" %"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f1a1f67_ce9a39c4","line":179,"in_reply_to":"1f1a1f67_abbc8fbb","updated":"2017-07-12 16:12:06.000000000","message":"Also, the whole reason I didn\u0027t use assertEqual was because I\u0027m doing a case insensitive check and didn\u0027t want that to be put into the error message. Which is why I provide the detailed error message with the actual value from the response.","commit_id":"a7e2de99c9bad8f94e6672e7aaeae20d44f278a5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a1d02d69ce939b546266783415fe9eaa9a6831b9","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            raise lib_exc.TimeoutException(msg)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        # Finally, assert that the action completed successfully."},{"line_number":179,"context_line":"        self.assertTrue("},{"line_number":180,"context_line":"            event[\u0027result\u0027].lower() \u003d\u003d \u0027success\u0027,"},{"line_number":181,"context_line":"            \"Unexpected compute_extend_volume result \u0027%(result)s\u0027 for request \""},{"line_number":182,"context_line":"            \"%(request_id)s.\" %"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f1a1f67_abbc8fbb","line":179,"in_reply_to":"3f1d235d_6f9511e4","updated":"2017-07-12 15:57:40.000000000","message":"This is why I provided a detailed error message.","commit_id":"a7e2de99c9bad8f94e6672e7aaeae20d44f278a5"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"bd975becce551807ee47d6e46bf36f7cb2913985","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            msg \u003d (\"Timed out waiting to get \u0027extend_volume\u0027 instance action \""},{"line_number":155,"context_line":"                   \"record for server %(server)s after %(timeout)s seconds.\" %"},{"line_number":156,"context_line":"                   {\u0027server\u0027: server[\u0027id\u0027], \u0027timeout\u0027: timeout})"},{"line_number":157,"context_line":"            raise lib_exc.TimeoutException(msg)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        # Now that we found the extend_volume instance action, we can wait for"},{"line_number":160,"context_line":"        # the compute_extend_volume instance action event to show up to"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f515b1d_3b58ebf8","line":157,"updated":"2017-10-03 18:10:50.000000000","message":"I kinda feel like this should go in tempest/common/waiters as a wait_for_instance_action_x function. But since it\u0027s only used here for now we can add that in a followup. It also might not be the easiest to turn into a generic helper function.","commit_id":"0cc76bf3bb3e455575f104a0b41e4eb2ce493429"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"d19253128b248f51f2cd44bbeb4a187a58ebe356","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            msg \u003d (\"Timed out waiting to get \u0027extend_volume\u0027 instance action \""},{"line_number":155,"context_line":"                   \"record for server %(server)s after %(timeout)s seconds.\" %"},{"line_number":156,"context_line":"                   {\u0027server\u0027: server[\u0027id\u0027], \u0027timeout\u0027: timeout})"},{"line_number":157,"context_line":"            raise lib_exc.TimeoutException(msg)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        # Now that we found the extend_volume instance action, we can wait for"},{"line_number":160,"context_line":"        # the compute_extend_volume instance action event to show up to"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f515b1d_9a21d2a2","line":157,"in_reply_to":"7f515b1d_3b58ebf8","updated":"2017-10-05 17:25:58.000000000","message":"+1","commit_id":"0cc76bf3bb3e455575f104a0b41e4eb2ce493429"}]}
