)]}'
{"novaclient/tests/functional/v2/test_instance_action.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"104ba3d0541430f770bc19623c479f6278104fba","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            output, \"Request_ID\")"},{"line_number":77,"context_line":"        action \u003d self._get_list_of_values_from_single_column_table("},{"line_number":78,"context_line":"            output, \"Action\")"},{"line_number":79,"context_line":"        self.assertEqual(action, [\u0027stop\u0027])"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        output \u003d self.nova(\"instance-action-list %s --limit 1 \""},{"line_number":82,"context_line":"                           \"--marker %s\" % (server.id, marker_req))"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf8cb3f7_434da270","line":79,"updated":"2017-12-22 17:04:29.000000000","message":"Might be nice to leave a comment explaining why stop is the one we get when limit\u003d1; the answer is because the actions are sorted by created_at in descending order, so we have two actions: create and stop, and stop was most recently created so it\u0027s what we get back when limit\u003d1.","commit_id":"12f8223716381372e06a9c496e09775583349175"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"a67bd5d98bb5c702ac10b4c1d5e691a03430c0c0","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            output, \"Request_ID\")"},{"line_number":77,"context_line":"        action \u003d self._get_list_of_values_from_single_column_table("},{"line_number":78,"context_line":"            output, \"Action\")"},{"line_number":79,"context_line":"        self.assertEqual(action, [\u0027stop\u0027])"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        output \u003d self.nova(\"instance-action-list %s --limit 1 \""},{"line_number":82,"context_line":"                           \"--marker %s\" % (server.id, marker_req))"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf8cb3f7_098818e5","line":79,"in_reply_to":"bf8cb3f7_434da270","updated":"2017-12-23 04:15:45.000000000","message":"Done","commit_id":"12f8223716381372e06a9c496e09775583349175"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"37afc62740ed752721c5b5e66d0458c0360d679d","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        self.assertEqual(action, [\u0027create\u0027])"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def test_list_instance_action_with_changes_since(self):"},{"line_number":91,"context_line":"        before_create \u003d datetime.datetime.isoformat(timeutils.utcnow())"},{"line_number":92,"context_line":"        server \u003d self._create_server()"},{"line_number":93,"context_line":"        before_stop \u003d datetime.datetime.isoformat(timeutils.utcnow())"},{"line_number":94,"context_line":"        server.stop()"}],"source_content_type":"text/x-python","patch_set":8,"id":"bf8cb3f7_d0163af2","line":91,"range":{"start_line":91,"start_character":24,"end_line":91,"end_character":71},"updated":"2017-12-26 07:38:45.000000000","message":"timeutils.utcnow().isoformat()","commit_id":"a56e3c7a5fc8160f9d52451c0d0e0a4139ad88ca"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"de400d625b68290cedf5a98bb32fe73016c7ec19","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        self.assertEqual(action, [\u0027create\u0027])"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def test_list_instance_action_with_changes_since(self):"},{"line_number":91,"context_line":"        before_create \u003d datetime.datetime.isoformat(timeutils.utcnow())"},{"line_number":92,"context_line":"        server \u003d self._create_server()"},{"line_number":93,"context_line":"        before_stop \u003d datetime.datetime.isoformat(timeutils.utcnow())"},{"line_number":94,"context_line":"        server.stop()"}],"source_content_type":"text/x-python","patch_set":8,"id":"bf8cb3f7_9991bd9c","line":91,"range":{"start_line":91,"start_character":24,"end_line":91,"end_character":71},"in_reply_to":"bf8cb3f7_d0163af2","updated":"2017-12-26 12:24:36.000000000","message":"Done","commit_id":"a56e3c7a5fc8160f9d52451c0d0e0a4139ad88ca"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"37afc62740ed752721c5b5e66d0458c0360d679d","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    def test_list_instance_action_with_changes_since(self):"},{"line_number":91,"context_line":"        before_create \u003d datetime.datetime.isoformat(timeutils.utcnow())"},{"line_number":92,"context_line":"        server \u003d self._create_server()"},{"line_number":93,"context_line":"        before_stop \u003d datetime.datetime.isoformat(timeutils.utcnow())"},{"line_number":94,"context_line":"        server.stop()"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        output \u003d self.nova(\"instance-action-list %s \""}],"source_content_type":"text/x-python","patch_set":8,"id":"bf8cb3f7_90d67227","line":93,"range":{"start_line":93,"start_character":22,"end_line":93,"end_character":69},"updated":"2017-12-26 07:38:45.000000000","message":"ditto","commit_id":"a56e3c7a5fc8160f9d52451c0d0e0a4139ad88ca"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"de400d625b68290cedf5a98bb32fe73016c7ec19","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    def test_list_instance_action_with_changes_since(self):"},{"line_number":91,"context_line":"        before_create \u003d datetime.datetime.isoformat(timeutils.utcnow())"},{"line_number":92,"context_line":"        server \u003d self._create_server()"},{"line_number":93,"context_line":"        before_stop \u003d datetime.datetime.isoformat(timeutils.utcnow())"},{"line_number":94,"context_line":"        server.stop()"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        output \u003d self.nova(\"instance-action-list %s \""}],"source_content_type":"text/x-python","patch_set":8,"id":"bf8cb3f7_b98cc17f","line":93,"range":{"start_line":93,"start_character":22,"end_line":93,"end_character":69},"in_reply_to":"bf8cb3f7_90d67227","updated":"2017-12-26 12:24:36.000000000","message":"Done","commit_id":"a56e3c7a5fc8160f9d52451c0d0e0a4139ad88ca"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a5c987803b777cb018b57cfd10be3c1e76544259","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                           \"--changes-since %s\" % (server.id, before_stop))"},{"line_number":102,"context_line":"        action \u003d self._get_list_of_values_from_single_column_table("},{"line_number":103,"context_line":"            output, \"Action\")"},{"line_number":104,"context_line":"        self.assertEqual(action, [\u0027stop\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f91af0f_babfe5ce","line":104,"updated":"2018-01-03 15:16:15.000000000","message":"This failed:\n\nhttp://logs.openstack.org/01/528601/13/check/novaclient-dsvm-functional/65d7b9f/job-output.txt.gz#_2018-01-02_16_26_16_401088\n\nThis is the request to stop the server:\n\nhttp://logs.openstack.org/01/528601/13/check/novaclient-dsvm-functional/65d7b9f/logs/screen-n-api.txt.gz#_Jan_02_16_17_12_195504\n\nThis is the os-instance-actions request with the changes-since filter:\n\nhttp://logs.openstack.org/01/528601/13/check/novaclient-dsvm-functional/65d7b9f/logs/screen-n-api.txt.gz#_Jan_02_16_17_13_494510\n\nThat ends up being this query string:\n\n2018-01-02T16:17:06.346349\n\nSo that should work as it\u0027s 6 seconds before the stop action was requested.\n\nThis is where the stop_instance method starts running in the compute service:\n\nhttp://logs.openstack.org/01/528601/13/check/novaclient-dsvm-functional/65d7b9f/logs/screen-n-cpu.txt.gz#_Jan_02_16_17_12_340186\n\nWe could wait for the instance status to change to SHUTDOWN, but we shouldn\u0027t have to because the stop action should be created in the API before it returns the 202 response to the client.","commit_id":"574581f452391407ad2c775268194aaf2ca323c7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6bcf272df37792753e4abf31c98c7c0084bb70ab","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                           \"--changes-since %s\" % (server.id, before_stop))"},{"line_number":102,"context_line":"        action \u003d self._get_list_of_values_from_single_column_table("},{"line_number":103,"context_line":"            output, \"Action\")"},{"line_number":104,"context_line":"        self.assertEqual(action, [\u0027stop\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f91af0f_dadae915","line":104,"in_reply_to":"9f91af0f_babfe5ce","updated":"2018-01-03 15:19:30.000000000","message":"I suggest that in order to debug when this fails, you save different variables for the two instance-action-list calls, and when the latter one fails, dump the full action list (from the first call) so we can see the created_at and updated_at output to compare to what your changes-since filter is. The assertEqual method takes a message argument which you can use to dump that debug information when the assertion fails.","commit_id":"574581f452391407ad2c775268194aaf2ca323c7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"87009112adccf4e5b8fceedbad87d3ad78bafefe","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        action \u003d self._get_list_of_values_from_single_column_table("},{"line_number":104,"context_line":"            stop_output, \"Action\")"},{"line_number":105,"context_line":"        # Provide detailed debug information if this fails."},{"line_number":106,"context_line":"        self.assertEqual(action, [\u0027stop\u0027],"},{"line_number":107,"context_line":"                         \u0027Expected to find the stop action with \u0027"},{"line_number":108,"context_line":"                         \u0027--changes-since\u003d%s but got: %s\\n\\n\u0027"},{"line_number":109,"context_line":"                         \u0027First instance-action-list output: %s\u0027 %"}],"source_content_type":"text/x-python","patch_set":14,"id":"9f91af0f_b5d338d5","line":106,"updated":"2018-01-06 14:38:01.000000000","message":"Hit this again and we have debug output:\n\nhttp://logs.openstack.org/01/528601/14/check/novaclient-dsvm-functional/9d7f086/job-output.txt.gz#_2018-01-05_22_39_36_991143\n\nIt appears that the changes-since value we pass in has milliseconds that the API/DB doesn\u0027t use:\n\nWe filter using: 2018-01-05T22:27:43.297157\nBut the stop action updated_at is: 2018-01-05T22:27:43.000000\n\nSo that\u0027s why we don\u0027t get it.\n\nI\u0027m not sure about what we\u0027re doing wrong on the client side that is different on the server side, or is something wrong on the server side?\n\nThis is where the updated_at value comes from in the server:\n\nhttps://github.com/openstack/nova/blob/master/nova/objects/instance_action.py#L59\n\nAnd modified here:\n\nhttps://github.com/openstack/nova/blob/master/nova/db/sqlalchemy/api.py#L336\n\nThis is how the request context timestamp gets set on the nova side:\n\nhttps://github.com/openstack/nova/blob/master/nova/context.py#L112-L116\n\nSo it might be a difference of using parse_strtime?\n\nEither way, I\u0027d suggest we just set our before_stop to be either with 0 microseconds or -1 second than utcnow() to be a deterministic test.","commit_id":"c7c61dec0a19483362a2da985c411b1887513879"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"2a66f7d30e10d6cd80f4e0765d4ea8cb3478fb16","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def test_list_instance_action_with_changes_since(self):"},{"line_number":89,"context_line":"        # Ignore microseconds to make this a deterministic test."},{"line_number":90,"context_line":"        before_create \u003d timeutils.utcnow().replace(microsecond\u003d0).isoformat()"},{"line_number":91,"context_line":"        server \u003d self._create_server()"},{"line_number":92,"context_line":"        before_stop \u003d timeutils.utcnow().replace(microsecond\u003d0).isoformat()"},{"line_number":93,"context_line":"        server.stop()"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        create_output \u003d self.nova("}],"source_content_type":"text/x-python","patch_set":15,"id":"9f91af0f_4ceedeed","line":92,"range":{"start_line":90,"start_character":0,"end_line":92,"end_character":75},"updated":"2018-01-08 06:09:38.000000000","message":"testtools.matchers._impl.MismatchError: [\u0027create\u0027, \u0027stop\u0027] !\u003d [\u0027stop\u0027]:\n Expected to find the stop action with --changes-since\u003d2018-01-06T18:28:05 but got: \n \n| create | req-7520d1a1-ba4b-4d2b-a36f-7665b70dc6ba | -       | 2018-01-06T18:27:59.000000 | 2018-01-06T18:28:05.000000 |\n| stop   | req-f1dc357b-7b4e-4379-9bfc-ef3efa2f3de0 | -       | 2018-01-06T18:28:05.000000 | 2018-01-06T18:28:05.000000 |\n\nwe get back all actions, beacause the time is same after replace microsec\u003d0, I think we can add some delay like time.sleep(2) before stop action.","commit_id":"4778c316b6106fb60ee43f17cca896cb7db2ed8f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3fd7372ed492dffd37a248a3651aa59eb88000e7","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        # Ignore microseconds to make this a deterministic test."},{"line_number":92,"context_line":"        before_create \u003d timeutils.utcnow().replace(microsecond\u003d0).isoformat()"},{"line_number":93,"context_line":"        server \u003d self._create_server()"},{"line_number":94,"context_line":"        time.sleep(2)"},{"line_number":95,"context_line":"        before_stop \u003d timeutils.utcnow().replace(microsecond\u003d0).isoformat()"},{"line_number":96,"context_line":"        server.stop()"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"9f91af0f_f637744c","line":94,"range":{"start_line":94,"start_character":19,"end_line":94,"end_character":20},"updated":"2018-01-08 14:15:34.000000000","message":"1 second should be sufficient.","commit_id":"8b6b9e580d07ae69a38d3329f4b369f412729806"}],"novaclient/tests/unit/v2/fakes.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"104ba3d0541430f770bc19623c479f6278104fba","unresolved":false,"context_lines":[{"line_number":58,"context_line":"FAKE_SERVICE_UUID_1 \u003d \u002775e9eabc-ed3b-4f11-8bba-add1e7e7e2de\u0027"},{"line_number":59,"context_line":"FAKE_SERVICE_UUID_2 \u003d \u00271f140183-c914-4ddf-8757-6df73028aa86\u0027"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"FAKE_UUID_1 \u003d \u002712140183-c814-4ddf-8453-6df43028aa67\u0027"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"class FakeClient(fakes.FakeClient, client.Client):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf8cb3f7_63522616","line":61,"updated":"2017-12-22 17:04:29.000000000","message":"I\u0027m not sure why this is needed here, it\u0027s not used in this module at all. You could just define this local to the test that is using it, couldn\u0027t you?","commit_id":"12f8223716381372e06a9c496e09775583349175"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"a67bd5d98bb5c702ac10b4c1d5e691a03430c0c0","unresolved":false,"context_lines":[{"line_number":58,"context_line":"FAKE_SERVICE_UUID_1 \u003d \u002775e9eabc-ed3b-4f11-8bba-add1e7e7e2de\u0027"},{"line_number":59,"context_line":"FAKE_SERVICE_UUID_2 \u003d \u00271f140183-c914-4ddf-8757-6df73028aa86\u0027"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"FAKE_UUID_1 \u003d \u002712140183-c814-4ddf-8453-6df43028aa67\u0027"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"class FakeClient(fakes.FakeClient, client.Client):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf8cb3f7_0919f883","line":61,"in_reply_to":"bf8cb3f7_63522616","updated":"2017-12-23 04:15:45.000000000","message":"Yes, I will update.","commit_id":"12f8223716381372e06a9c496e09775583349175"}],"novaclient/tests/unit/v2/test_shell.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"104ba3d0541430f770bc19623c479f6278104fba","unresolved":false,"context_lines":[{"line_number":3068,"context_line":"            \u0027GET\u0027,"},{"line_number":3069,"context_line":"            \u0027/servers/1234/os-instance-actions/req-abcde12345\u0027)"},{"line_number":3070,"context_line":""},{"line_number":3071,"context_line":"    def test_instance_action_list_limit_marker_v258(self):"},{"line_number":3072,"context_line":"        self.run_command(\u0027instance-action-list sample-server --limit 10 \u0027"},{"line_number":3073,"context_line":"                         \u0027--marker %s\u0027 % FAKE_UUID_1,"},{"line_number":3074,"context_line":"                         api_version\u003d\u00272.58\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf8cb3f7_637b068c","line":3071,"range":{"start_line":3071,"start_character":8,"end_line":3071,"end_character":51},"updated":"2017-12-22 17:04:29.000000000","message":"It would be good to have a test where you try to use the new CLI options with microversion 2.57 to show they aren\u0027t allowed (these tests will raise a SystemExit in that case, which you can assert using assertRaises).","commit_id":"12f8223716381372e06a9c496e09775583349175"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"a67bd5d98bb5c702ac10b4c1d5e691a03430c0c0","unresolved":false,"context_lines":[{"line_number":3068,"context_line":"            \u0027GET\u0027,"},{"line_number":3069,"context_line":"            \u0027/servers/1234/os-instance-actions/req-abcde12345\u0027)"},{"line_number":3070,"context_line":""},{"line_number":3071,"context_line":"    def test_instance_action_list_limit_marker_v258(self):"},{"line_number":3072,"context_line":"        self.run_command(\u0027instance-action-list sample-server --limit 10 \u0027"},{"line_number":3073,"context_line":"                         \u0027--marker %s\u0027 % FAKE_UUID_1,"},{"line_number":3074,"context_line":"                         api_version\u003d\u00272.58\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf8cb3f7_c49f754e","line":3071,"range":{"start_line":3071,"start_character":8,"end_line":3071,"end_character":51},"in_reply_to":"bf8cb3f7_637b068c","updated":"2017-12-23 04:15:45.000000000","message":"Done","commit_id":"12f8223716381372e06a9c496e09775583349175"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"2a1fe7796d2f284e80569d92c28e821e2a046b8a","unresolved":false,"context_lines":[{"line_number":3097,"context_line":"            \u0027instance-action-list sample-server --changes-since 0123456789\u0027,"},{"line_number":3098,"context_line":"            api_version\u003d\u00272.58\u0027)"},{"line_number":3099,"context_line":"        self.assertIn(\u0027Invalid changes-since value\u0027, six.text_type(ex))"},{"line_number":3100,"context_line":""},{"line_number":3101,"context_line":"    def test_cell_show(self):"},{"line_number":3102,"context_line":"        self.run_command(\u0027cell-show child_cell\u0027)"},{"line_number":3103,"context_line":"        self.assert_called(\u0027GET\u0027, \u0027/os-cells/child_cell\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"bf8cb3f7_9050b20c","line":3100,"updated":"2017-12-26 07:06:50.000000000","message":"Missing test case that \u0027 --changes-since\u0027 with 2.57 (before 2.58).","commit_id":"a56e3c7a5fc8160f9d52451c0d0e0a4139ad88ca"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"de400d625b68290cedf5a98bb32fe73016c7ec19","unresolved":false,"context_lines":[{"line_number":3097,"context_line":"            \u0027instance-action-list sample-server --changes-since 0123456789\u0027,"},{"line_number":3098,"context_line":"            api_version\u003d\u00272.58\u0027)"},{"line_number":3099,"context_line":"        self.assertIn(\u0027Invalid changes-since value\u0027, six.text_type(ex))"},{"line_number":3100,"context_line":""},{"line_number":3101,"context_line":"    def test_cell_show(self):"},{"line_number":3102,"context_line":"        self.run_command(\u0027cell-show child_cell\u0027)"},{"line_number":3103,"context_line":"        self.assert_called(\u0027GET\u0027, \u0027/os-cells/child_cell\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"bf8cb3f7_f992499f","line":3100,"in_reply_to":"bf8cb3f7_9050b20c","updated":"2017-12-26 12:24:36.000000000","message":"Done","commit_id":"a56e3c7a5fc8160f9d52451c0d0e0a4139ad88ca"}],"novaclient/v2/instance_action.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"104ba3d0541430f770bc19623c479f6278104fba","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    @api_versions.wraps(\"2.58\")"},{"line_number":45,"context_line":"    def list(self, server, marker\u003dNone, limit\u003dNone, changes_since\u003dNone):"},{"line_number":46,"context_line":"        \"\"\""},{"line_number":47,"context_line":"        Get a list of actions performed on a server."},{"line_number":48,"context_line":"        \"\"\""},{"line_number":49,"context_line":"        opts \u003d {}"},{"line_number":50,"context_line":"        if marker:"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf8cb3f7_c369b2be","line":47,"updated":"2017-12-22 17:04:29.000000000","message":"Would be good to add :param: descriptions for the parameters, like what is the marker value, what are the bounds on the limit, what is the format for changes-since, etc. You could probably just copy some wording out of the compute API reference.","commit_id":"12f8223716381372e06a9c496e09775583349175"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"a67bd5d98bb5c702ac10b4c1d5e691a03430c0c0","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    @api_versions.wraps(\"2.58\")"},{"line_number":45,"context_line":"    def list(self, server, marker\u003dNone, limit\u003dNone, changes_since\u003dNone):"},{"line_number":46,"context_line":"        \"\"\""},{"line_number":47,"context_line":"        Get a list of actions performed on a server."},{"line_number":48,"context_line":"        \"\"\""},{"line_number":49,"context_line":"        opts \u003d {}"},{"line_number":50,"context_line":"        if marker:"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf8cb3f7_2460a1a5","line":47,"in_reply_to":"bf8cb3f7_c369b2be","updated":"2017-12-23 04:15:45.000000000","message":"Done","commit_id":"12f8223716381372e06a9c496e09775583349175"}],"novaclient/v2/shell.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"104ba3d0541430f770bc19623c479f6278104fba","unresolved":false,"context_lines":[{"line_number":5161,"context_line":""},{"line_number":5162,"context_line":""},{"line_number":5163,"context_line":"@api_versions.wraps(\"2.58\")"},{"line_number":5164,"context_line":"@utils.arg("},{"line_number":5165,"context_line":"    \u0027server\u0027,"},{"line_number":5166,"context_line":"    metavar\u003d\u0027\u003cserver\u003e\u0027,"},{"line_number":5167,"context_line":"    help\u003d_(\u0027Name or UUID of the server to list actions for.\u0027),"},{"line_number":5168,"context_line":"    start_version\u003d\"2.0\", end_version\u003d\"2.20\")"},{"line_number":5169,"context_line":"@utils.arg("},{"line_number":5170,"context_line":"    \u0027server\u0027,"},{"line_number":5171,"context_line":"    metavar\u003d\u0027\u003cserver\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf8cb3f7_439b62c8","line":5168,"range":{"start_line":5164,"start_character":0,"end_line":5168,"end_character":44},"updated":"2017-12-22 17:04:29.000000000","message":"This isn\u0027t valid in here because we require at least 2.58.","commit_id":"12f8223716381372e06a9c496e09775583349175"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"a67bd5d98bb5c702ac10b4c1d5e691a03430c0c0","unresolved":false,"context_lines":[{"line_number":5161,"context_line":""},{"line_number":5162,"context_line":""},{"line_number":5163,"context_line":"@api_versions.wraps(\"2.58\")"},{"line_number":5164,"context_line":"@utils.arg("},{"line_number":5165,"context_line":"    \u0027server\u0027,"},{"line_number":5166,"context_line":"    metavar\u003d\u0027\u003cserver\u003e\u0027,"},{"line_number":5167,"context_line":"    help\u003d_(\u0027Name or UUID of the server to list actions for.\u0027),"},{"line_number":5168,"context_line":"    start_version\u003d\"2.0\", end_version\u003d\"2.20\")"},{"line_number":5169,"context_line":"@utils.arg("},{"line_number":5170,"context_line":"    \u0027server\u0027,"},{"line_number":5171,"context_line":"    metavar\u003d\u0027\u003cserver\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf8cb3f7_c470d575","line":5168,"range":{"start_line":5164,"start_character":0,"end_line":5168,"end_character":44},"in_reply_to":"bf8cb3f7_439b62c8","updated":"2017-12-23 04:15:45.000000000","message":"Done","commit_id":"12f8223716381372e06a9c496e09775583349175"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"104ba3d0541430f770bc19623c479f6278104fba","unresolved":false,"context_lines":[{"line_number":5171,"context_line":"    metavar\u003d\u0027\u003cserver\u003e\u0027,"},{"line_number":5172,"context_line":"    help\u003d_(\u0027Name or UUID of the server to list actions for. Only UUID can be \u0027"},{"line_number":5173,"context_line":"           \u0027used to list actions on a deleted server.\u0027),"},{"line_number":5174,"context_line":"    start_version\u003d\"2.21\")"},{"line_number":5175,"context_line":"@utils.arg("},{"line_number":5176,"context_line":"    \u0027--marker\u0027,"},{"line_number":5177,"context_line":"    dest\u003d\u0027marker\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf8cb3f7_23aaded3","line":5174,"range":{"start_line":5174,"start_character":4,"end_line":5174,"end_character":24},"updated":"2017-12-22 17:04:29.000000000","message":"This could be removed since we\u0027re required to have \u003e\u003d2.58 for this.","commit_id":"12f8223716381372e06a9c496e09775583349175"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"a67bd5d98bb5c702ac10b4c1d5e691a03430c0c0","unresolved":false,"context_lines":[{"line_number":5171,"context_line":"    metavar\u003d\u0027\u003cserver\u003e\u0027,"},{"line_number":5172,"context_line":"    help\u003d_(\u0027Name or UUID of the server to list actions for. Only UUID can be \u0027"},{"line_number":5173,"context_line":"           \u0027used to list actions on a deleted server.\u0027),"},{"line_number":5174,"context_line":"    start_version\u003d\"2.21\")"},{"line_number":5175,"context_line":"@utils.arg("},{"line_number":5176,"context_line":"    \u0027--marker\u0027,"},{"line_number":5177,"context_line":"    dest\u003d\u0027marker\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf8cb3f7_646d4997","line":5174,"range":{"start_line":5174,"start_character":4,"end_line":5174,"end_character":24},"in_reply_to":"bf8cb3f7_23aaded3","updated":"2017-12-23 04:15:45.000000000","message":"Done","commit_id":"12f8223716381372e06a9c496e09775583349175"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"104ba3d0541430f770bc19623c479f6278104fba","unresolved":false,"context_lines":[{"line_number":5179,"context_line":"    default\u003dNone,"},{"line_number":5180,"context_line":"    help\u003d_(\u0027The last migration of the previous page; displays list of \u0027"},{"line_number":5181,"context_line":"           \u0027migrations after \"marker\".\u0027),"},{"line_number":5182,"context_line":"    start_version\u003d\"2.58\")"},{"line_number":5183,"context_line":"@utils.arg("},{"line_number":5184,"context_line":"    \u0027--limit\u0027,"},{"line_number":5185,"context_line":"    dest\u003d\u0027limit\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf8cb3f7_c3ae92e6","line":5182,"range":{"start_line":5182,"start_character":4,"end_line":5182,"end_character":24},"updated":"2017-12-22 17:04:29.000000000","message":"you don\u0027t need these when the entire function is decorated with @api_versions.wraps(\"2.58\")","commit_id":"12f8223716381372e06a9c496e09775583349175"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"a67bd5d98bb5c702ac10b4c1d5e691a03430c0c0","unresolved":false,"context_lines":[{"line_number":5179,"context_line":"    default\u003dNone,"},{"line_number":5180,"context_line":"    help\u003d_(\u0027The last migration of the previous page; displays list of \u0027"},{"line_number":5181,"context_line":"           \u0027migrations after \"marker\".\u0027),"},{"line_number":5182,"context_line":"    start_version\u003d\"2.58\")"},{"line_number":5183,"context_line":"@utils.arg("},{"line_number":5184,"context_line":"    \u0027--limit\u0027,"},{"line_number":5185,"context_line":"    dest\u003d\u0027limit\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf8cb3f7_846acd7d","line":5182,"range":{"start_line":5182,"start_character":4,"end_line":5182,"end_character":24},"in_reply_to":"bf8cb3f7_c3ae92e6","updated":"2017-12-23 04:15:45.000000000","message":"Done","commit_id":"12f8223716381372e06a9c496e09775583349175"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"104ba3d0541430f770bc19623c479f6278104fba","unresolved":false,"context_lines":[{"line_number":5186,"context_line":"    metavar\u003d\u0027\u003climit\u003e\u0027,"},{"line_number":5187,"context_line":"    type\u003dint,"},{"line_number":5188,"context_line":"    default\u003dNone,"},{"line_number":5189,"context_line":"    help\u003d_(\"Maximum number of instance actions to display. If limit is bigger \""},{"line_number":5190,"context_line":"           \"than \u0027CONF.api.max_limit\u0027 option of Nova API, limit \""},{"line_number":5191,"context_line":"           \"\u0027CONF.api.max_limit\u0027 will be used instead.\"),"},{"line_number":5192,"context_line":"    start_version\u003d\"2.58\")"},{"line_number":5193,"context_line":"@utils.arg("},{"line_number":5194,"context_line":"    \u0027--changes-since\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf8cb3f7_83916a9c","line":5191,"range":{"start_line":5189,"start_character":58,"end_line":5191,"end_character":55},"updated":"2017-12-22 17:04:29.000000000","message":"The user will have no idea what the server is configured for. I think you copied this from elsewhere, but it\u0027s probably not something we should say in here.\n\nMaybe just add something like,\n\n\"Note that there is a configurable max limit on the server, and the limit that is used will be the minimum between what is requested here and what is configured in the server.\"","commit_id":"12f8223716381372e06a9c496e09775583349175"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"a67bd5d98bb5c702ac10b4c1d5e691a03430c0c0","unresolved":false,"context_lines":[{"line_number":5186,"context_line":"    metavar\u003d\u0027\u003climit\u003e\u0027,"},{"line_number":5187,"context_line":"    type\u003dint,"},{"line_number":5188,"context_line":"    default\u003dNone,"},{"line_number":5189,"context_line":"    help\u003d_(\"Maximum number of instance actions to display. If limit is bigger \""},{"line_number":5190,"context_line":"           \"than \u0027CONF.api.max_limit\u0027 option of Nova API, limit \""},{"line_number":5191,"context_line":"           \"\u0027CONF.api.max_limit\u0027 will be used instead.\"),"},{"line_number":5192,"context_line":"    start_version\u003d\"2.58\")"},{"line_number":5193,"context_line":"@utils.arg("},{"line_number":5194,"context_line":"    \u0027--changes-since\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf8cb3f7_e4271964","line":5191,"range":{"start_line":5189,"start_character":58,"end_line":5191,"end_character":55},"in_reply_to":"bf8cb3f7_83916a9c","updated":"2017-12-23 04:15:45.000000000","message":"Done","commit_id":"12f8223716381372e06a9c496e09775583349175"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"104ba3d0541430f770bc19623c479f6278104fba","unresolved":false,"context_lines":[{"line_number":5189,"context_line":"    help\u003d_(\"Maximum number of instance actions to display. If limit is bigger \""},{"line_number":5190,"context_line":"           \"than \u0027CONF.api.max_limit\u0027 option of Nova API, limit \""},{"line_number":5191,"context_line":"           \"\u0027CONF.api.max_limit\u0027 will be used instead.\"),"},{"line_number":5192,"context_line":"    start_version\u003d\"2.58\")"},{"line_number":5193,"context_line":"@utils.arg("},{"line_number":5194,"context_line":"    \u0027--changes-since\u0027,"},{"line_number":5195,"context_line":"    dest\u003d\u0027changes_since\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf8cb3f7_e3ab96d3","line":5192,"updated":"2017-12-22 17:04:29.000000000","message":"same","commit_id":"12f8223716381372e06a9c496e09775583349175"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"a67bd5d98bb5c702ac10b4c1d5e691a03430c0c0","unresolved":false,"context_lines":[{"line_number":5189,"context_line":"    help\u003d_(\"Maximum number of instance actions to display. If limit is bigger \""},{"line_number":5190,"context_line":"           \"than \u0027CONF.api.max_limit\u0027 option of Nova API, limit \""},{"line_number":5191,"context_line":"           \"\u0027CONF.api.max_limit\u0027 will be used instead.\"),"},{"line_number":5192,"context_line":"    start_version\u003d\"2.58\")"},{"line_number":5193,"context_line":"@utils.arg("},{"line_number":5194,"context_line":"    \u0027--changes-since\u0027,"},{"line_number":5195,"context_line":"    dest\u003d\u0027changes_since\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf8cb3f7_c41e950b","line":5192,"in_reply_to":"bf8cb3f7_e3ab96d3","updated":"2017-12-23 04:15:45.000000000","message":"Done","commit_id":"12f8223716381372e06a9c496e09775583349175"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"104ba3d0541430f770bc19623c479f6278104fba","unresolved":false,"context_lines":[{"line_number":5195,"context_line":"    dest\u003d\u0027changes_since\u0027,"},{"line_number":5196,"context_line":"    metavar\u003d\u0027\u003cchanges_since\u003e\u0027,"},{"line_number":5197,"context_line":"    default\u003dNone,"},{"line_number":5198,"context_line":"    help\u003d_(\"List only instance actions changed after a certain point of time.\""},{"line_number":5199,"context_line":"           \"The provided time should be an ISO 8061 formatted time.\""},{"line_number":5200,"context_line":"           \"ex 2016-03-04T06:27:59Z .\"),"},{"line_number":5201,"context_line":"    start_version\u003d\"2.58\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf8cb3f7_63eea623","line":5198,"range":{"start_line":5198,"start_character":77,"end_line":5198,"end_character":78},"updated":"2017-12-22 17:04:29.000000000","message":"blank space","commit_id":"12f8223716381372e06a9c496e09775583349175"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"a67bd5d98bb5c702ac10b4c1d5e691a03430c0c0","unresolved":false,"context_lines":[{"line_number":5195,"context_line":"    dest\u003d\u0027changes_since\u0027,"},{"line_number":5196,"context_line":"    metavar\u003d\u0027\u003cchanges_since\u003e\u0027,"},{"line_number":5197,"context_line":"    default\u003dNone,"},{"line_number":5198,"context_line":"    help\u003d_(\"List only instance actions changed after a certain point of time.\""},{"line_number":5199,"context_line":"           \"The provided time should be an ISO 8061 formatted time.\""},{"line_number":5200,"context_line":"           \"ex 2016-03-04T06:27:59Z .\"),"},{"line_number":5201,"context_line":"    start_version\u003d\"2.58\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf8cb3f7_84188d1d","line":5198,"range":{"start_line":5198,"start_character":77,"end_line":5198,"end_character":78},"in_reply_to":"bf8cb3f7_63eea623","updated":"2017-12-23 04:15:45.000000000","message":"Done","commit_id":"12f8223716381372e06a9c496e09775583349175"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"104ba3d0541430f770bc19623c479f6278104fba","unresolved":false,"context_lines":[{"line_number":5196,"context_line":"    metavar\u003d\u0027\u003cchanges_since\u003e\u0027,"},{"line_number":5197,"context_line":"    default\u003dNone,"},{"line_number":5198,"context_line":"    help\u003d_(\"List only instance actions changed after a certain point of time.\""},{"line_number":5199,"context_line":"           \"The provided time should be an ISO 8061 formatted time.\""},{"line_number":5200,"context_line":"           \"ex 2016-03-04T06:27:59Z .\"),"},{"line_number":5201,"context_line":"    start_version\u003d\"2.58\")"},{"line_number":5202,"context_line":"def do_instance_action_list(cs, args):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf8cb3f7_43e92218","line":5199,"range":{"start_line":5199,"start_character":67,"end_line":5199,"end_character":68},"updated":"2017-12-22 17:04:29.000000000","message":"blank space here","commit_id":"12f8223716381372e06a9c496e09775583349175"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"a67bd5d98bb5c702ac10b4c1d5e691a03430c0c0","unresolved":false,"context_lines":[{"line_number":5196,"context_line":"    metavar\u003d\u0027\u003cchanges_since\u003e\u0027,"},{"line_number":5197,"context_line":"    default\u003dNone,"},{"line_number":5198,"context_line":"    help\u003d_(\"List only instance actions changed after a certain point of time.\""},{"line_number":5199,"context_line":"           \"The provided time should be an ISO 8061 formatted time.\""},{"line_number":5200,"context_line":"           \"ex 2016-03-04T06:27:59Z .\"),"},{"line_number":5201,"context_line":"    start_version\u003d\"2.58\")"},{"line_number":5202,"context_line":"def do_instance_action_list(cs, args):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf8cb3f7_44d84552","line":5199,"range":{"start_line":5199,"start_character":67,"end_line":5199,"end_character":68},"in_reply_to":"bf8cb3f7_43e92218","updated":"2017-12-23 04:15:45.000000000","message":"Done","commit_id":"12f8223716381372e06a9c496e09775583349175"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"104ba3d0541430f770bc19623c479f6278104fba","unresolved":false,"context_lines":[{"line_number":5201,"context_line":"    start_version\u003d\"2.58\")"},{"line_number":5202,"context_line":"def do_instance_action_list(cs, args):"},{"line_number":5203,"context_line":"    \"\"\"List actions on a server.\"\"\""},{"line_number":5204,"context_line":"    if cs.api_version \u003c api_versions.APIVersion(\"2.21\"):"},{"line_number":5205,"context_line":"        server \u003d _find_server(cs, args.server)"},{"line_number":5206,"context_line":"    else:"},{"line_number":5207,"context_line":"        server \u003d _find_server(cs, args.server, raise_if_notfound\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf8cb3f7_c3dc5276","line":5204,"range":{"start_line":5204,"start_character":4,"end_line":5204,"end_character":56},"updated":"2017-12-22 17:04:29.000000000","message":"don\u0027t need this","commit_id":"12f8223716381372e06a9c496e09775583349175"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"a67bd5d98bb5c702ac10b4c1d5e691a03430c0c0","unresolved":false,"context_lines":[{"line_number":5201,"context_line":"    start_version\u003d\"2.58\")"},{"line_number":5202,"context_line":"def do_instance_action_list(cs, args):"},{"line_number":5203,"context_line":"    \"\"\"List actions on a server.\"\"\""},{"line_number":5204,"context_line":"    if cs.api_version \u003c api_versions.APIVersion(\"2.21\"):"},{"line_number":5205,"context_line":"        server \u003d _find_server(cs, args.server)"},{"line_number":5206,"context_line":"    else:"},{"line_number":5207,"context_line":"        server \u003d _find_server(cs, args.server, raise_if_notfound\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf8cb3f7_a4cfd17d","line":5204,"range":{"start_line":5204,"start_character":4,"end_line":5204,"end_character":56},"in_reply_to":"bf8cb3f7_c3dc5276","updated":"2017-12-23 04:15:45.000000000","message":"Done","commit_id":"12f8223716381372e06a9c496e09775583349175"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"104ba3d0541430f770bc19623c479f6278104fba","unresolved":false,"context_lines":[{"line_number":5214,"context_line":"    actions \u003d cs.instance_action.list(server, marker\u003dargs.marker,"},{"line_number":5215,"context_line":"                                      limit\u003dargs.limit,"},{"line_number":5216,"context_line":"                                      changes_since\u003dargs.changes_since)"},{"line_number":5217,"context_line":"    utils.print_list(actions,"},{"line_number":5218,"context_line":"                     [\u0027Action\u0027, \u0027Request_ID\u0027, \u0027Message\u0027, \u0027Start_Time\u0027],"},{"line_number":5219,"context_line":"                     sortby_index\u003d3)"},{"line_number":5220,"context_line":""},{"line_number":5221,"context_line":""},{"line_number":5222,"context_line":"def do_list_extensions(cs, _args):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf8cb3f7_c3c53290","line":5219,"range":{"start_line":5217,"start_character":4,"end_line":5219,"end_character":36},"updated":"2017-12-22 17:04:29.000000000","message":"Hmm, if we\u0027re paging and got a next link back, wouldn\u0027t we want to print out the marker here so the user can use that marker to continue paging?","commit_id":"12f8223716381372e06a9c496e09775583349175"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ff0766277ca7d1121e282dbd3c7dd1a5a653c550","unresolved":false,"context_lines":[{"line_number":5214,"context_line":"    actions \u003d cs.instance_action.list(server, marker\u003dargs.marker,"},{"line_number":5215,"context_line":"                                      limit\u003dargs.limit,"},{"line_number":5216,"context_line":"                                      changes_since\u003dargs.changes_since)"},{"line_number":5217,"context_line":"    utils.print_list(actions,"},{"line_number":5218,"context_line":"                     [\u0027Action\u0027, \u0027Request_ID\u0027, \u0027Message\u0027, \u0027Start_Time\u0027],"},{"line_number":5219,"context_line":"                     sortby_index\u003d3)"},{"line_number":5220,"context_line":""},{"line_number":5221,"context_line":""},{"line_number":5222,"context_line":"def do_list_extensions(cs, _args):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f91af0f_272e79a5","line":5219,"range":{"start_line":5217,"start_character":4,"end_line":5219,"end_character":36},"in_reply_to":"bf8cb3f7_a494b145","updated":"2018-01-02 14:49:45.000000000","message":"It just isn\u0027t very clear that there is more to page if we don\u0027t print out a marker when there is a next link. I was thinking that if there is a next link, we could split the marker out and add that to the output table, as an indication there are more results, rather than assume the request_id in the output is the marker for the next page.","commit_id":"12f8223716381372e06a9c496e09775583349175"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"a67bd5d98bb5c702ac10b4c1d5e691a03430c0c0","unresolved":false,"context_lines":[{"line_number":5214,"context_line":"    actions \u003d cs.instance_action.list(server, marker\u003dargs.marker,"},{"line_number":5215,"context_line":"                                      limit\u003dargs.limit,"},{"line_number":5216,"context_line":"                                      changes_since\u003dargs.changes_since)"},{"line_number":5217,"context_line":"    utils.print_list(actions,"},{"line_number":5218,"context_line":"                     [\u0027Action\u0027, \u0027Request_ID\u0027, \u0027Message\u0027, \u0027Start_Time\u0027],"},{"line_number":5219,"context_line":"                     sortby_index\u003d3)"},{"line_number":5220,"context_line":""},{"line_number":5221,"context_line":""},{"line_number":5222,"context_line":"def do_list_extensions(cs, _args):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf8cb3f7_a494b145","line":5219,"range":{"start_line":5217,"start_character":4,"end_line":5219,"end_character":36},"in_reply_to":"bf8cb3f7_c3c53290","updated":"2017-12-23 04:15:45.000000000","message":"Sure, we should, but the marker is request id, we already print it, right?\n\nI think maybe you regard the action UUID as the marker in your mind? or some other thing I misunderstand?","commit_id":"12f8223716381372e06a9c496e09775583349175"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"3958030b3806032b1b70d5ec45f85bf7c529d772","unresolved":false,"context_lines":[{"line_number":5171,"context_line":"    dest\u003d\u0027marker\u0027,"},{"line_number":5172,"context_line":"    metavar\u003d\u0027\u003cmarker\u003e\u0027,"},{"line_number":5173,"context_line":"    default\u003dNone,"},{"line_number":5174,"context_line":"    help\u003d_(\u0027The last migration of the previous page; displays list of \u0027"},{"line_number":5175,"context_line":"           \u0027migrations after \"marker\".\u0027))"},{"line_number":5176,"context_line":"@utils.arg("},{"line_number":5177,"context_line":"    \u0027--limit\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf8cb3f7_842bad92","line":5174,"range":{"start_line":5174,"start_character":21,"end_line":5174,"end_character":30},"updated":"2017-12-23 06:35:31.000000000","message":"migration? I thought this is instance action :)","commit_id":"3ff6e44bf00d4bcf59ffd6ed83aac4543e00c4e2"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"83fa372745f1c1bf2effb43c8ee5ebeecbd130ec","unresolved":false,"context_lines":[{"line_number":5171,"context_line":"    dest\u003d\u0027marker\u0027,"},{"line_number":5172,"context_line":"    metavar\u003d\u0027\u003cmarker\u003e\u0027,"},{"line_number":5173,"context_line":"    default\u003dNone,"},{"line_number":5174,"context_line":"    help\u003d_(\u0027The last migration of the previous page; displays list of \u0027"},{"line_number":5175,"context_line":"           \u0027migrations after \"marker\".\u0027))"},{"line_number":5176,"context_line":"@utils.arg("},{"line_number":5177,"context_line":"    \u0027--limit\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf8cb3f7_5fb80e29","line":5174,"range":{"start_line":5174,"start_character":21,"end_line":5174,"end_character":30},"in_reply_to":"bf8cb3f7_842bad92","updated":"2017-12-23 06:53:06.000000000","message":"Done","commit_id":"3ff6e44bf00d4bcf59ffd6ed83aac4543e00c4e2"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"2a1fe7796d2f284e80569d92c28e821e2a046b8a","unresolved":false,"context_lines":[{"line_number":5160,"context_line":"                     sortby_index\u003d3)"},{"line_number":5161,"context_line":""},{"line_number":5162,"context_line":""},{"line_number":5163,"context_line":"@api_versions.wraps(\"2.58\")"},{"line_number":5164,"context_line":"@utils.arg("},{"line_number":5165,"context_line":"    \u0027server\u0027,"},{"line_number":5166,"context_line":"    metavar\u003d\u0027\u003cserver\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"bf8cb3f7_0d09ef2f","line":5163,"range":{"start_line":5163,"start_character":0,"end_line":5163,"end_character":27},"updated":"2017-12-26 07:06:50.000000000","message":"You can use \u0027start_version\u0027 in @utils.arg.\nSo, IMO, this \u0027do_instance_action_list\u0027 is not necessary.","commit_id":"a56e3c7a5fc8160f9d52451c0d0e0a4139ad88ca"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"de400d625b68290cedf5a98bb32fe73016c7ec19","unresolved":false,"context_lines":[{"line_number":5160,"context_line":"                     sortby_index\u003d3)"},{"line_number":5161,"context_line":""},{"line_number":5162,"context_line":""},{"line_number":5163,"context_line":"@api_versions.wraps(\"2.58\")"},{"line_number":5164,"context_line":"@utils.arg("},{"line_number":5165,"context_line":"    \u0027server\u0027,"},{"line_number":5166,"context_line":"    metavar\u003d\u0027\u003cserver\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"bf8cb3f7_f9c0097f","line":5163,"range":{"start_line":5163,"start_character":0,"end_line":5163,"end_character":27},"in_reply_to":"bf8cb3f7_0d09ef2f","updated":"2017-12-26 12:24:36.000000000","message":"Yes, we can, but I think it\u0027s more clearly and readable, right? Just something like keypair list:\n\nhttps://github.com/openstack/python-novaclient/blob/0988e46e39ae80a281e4b4cecdbb1602d3bdcee8/novaclient/v2/shell.py#L2807-L2854\n\nand your idea?","commit_id":"a56e3c7a5fc8160f9d52451c0d0e0a4139ad88ca"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ae1f22089817830985b30a0e19b54aa8c60e8042","unresolved":false,"context_lines":[{"line_number":5172,"context_line":"    metavar\u003d\u0027\u003cmarker\u003e\u0027,"},{"line_number":5173,"context_line":"    default\u003dNone,"},{"line_number":5174,"context_line":"    help\u003d_(\u0027The last instance action of the previous page; displays list of \u0027"},{"line_number":5175,"context_line":"           \u0027migrations after \"marker\".\u0027))"},{"line_number":5176,"context_line":"@utils.arg("},{"line_number":5177,"context_line":"    \u0027--limit\u0027,"},{"line_number":5178,"context_line":"    dest\u003d\u0027limit\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f91af0f_7a0f342e","line":5175,"range":{"start_line":5175,"start_character":12,"end_line":5175,"end_character":22},"updated":"2018-01-02 14:54:26.000000000","message":"actions","commit_id":"bda2c454abe610652d251d18d07eca95307cd769"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ae1f22089817830985b30a0e19b54aa8c60e8042","unresolved":false,"context_lines":[{"line_number":5190,"context_line":"    default\u003dNone,"},{"line_number":5191,"context_line":"    help\u003d_(\u0027List only instance actions changed after a certain point of \u0027"},{"line_number":5192,"context_line":"           \u0027time. The provided time should be an ISO 8061 formatted time. \u0027"},{"line_number":5193,"context_line":"           \u0027ex 2016-03-04T06:27:59Z .\u0027))"},{"line_number":5194,"context_line":"def do_instance_action_list(cs, args):"},{"line_number":5195,"context_line":"    \"\"\"List actions on a server.\"\"\""},{"line_number":5196,"context_line":"    server \u003d _find_server(cs, args.server, raise_if_notfound\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f91af0f_da2760b6","line":5193,"range":{"start_line":5193,"start_character":35,"end_line":5193,"end_character":36},"updated":"2018-01-02 14:54:26.000000000","message":"nit: unnecessary space","commit_id":"bda2c454abe610652d251d18d07eca95307cd769"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6bcf272df37792753e4abf31c98c7c0084bb70ab","unresolved":false,"context_lines":[{"line_number":5224,"context_line":"                                      changes_since\u003dargs.changes_since)"},{"line_number":5225,"context_line":"    # TODO(yikun): Output a \"Marker\" column if there is a next link?"},{"line_number":5226,"context_line":"    utils.print_list(actions,"},{"line_number":5227,"context_line":"                     [\u0027Action\u0027, \u0027Request_ID\u0027, \u0027Message\u0027, \u0027Start_Time\u0027],"},{"line_number":5228,"context_line":"                     sortby_index\u003d3)"},{"line_number":5229,"context_line":""},{"line_number":5230,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9f91af0f_5a001968","line":5227,"updated":"2018-01-03 15:19:30.000000000","message":"We should include Updated_At in this list since that is a new field here and is needed for the changes-since filtering (and debug for that functional test failure).","commit_id":"574581f452391407ad2c775268194aaf2ca323c7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3e9af56af31f9695320381e9584706770c3ac89a","unresolved":false,"context_lines":[{"line_number":5224,"context_line":"                                      changes_since\u003dargs.changes_since)"},{"line_number":5225,"context_line":"    # TODO(yikun): Output a \"Marker\" column if there is a next link?"},{"line_number":5226,"context_line":"    utils.print_list(actions,"},{"line_number":5227,"context_line":"                     [\u0027Action\u0027, \u0027Request_ID\u0027, \u0027Message\u0027, \u0027Start_Time\u0027],"},{"line_number":5228,"context_line":"                     sortby_index\u003d3)"},{"line_number":5229,"context_line":""},{"line_number":5230,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9f91af0f_a2bb1c0c","line":5227,"in_reply_to":"9f91af0f_5a001968","updated":"2018-01-05 00:11:03.000000000","message":"Done","commit_id":"574581f452391407ad2c775268194aaf2ca323c7"}],"releasenotes/notes/microversion-v2_58-327c1031ebfe4a3a.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"104ba3d0541430f770bc19623c479f6278104fba","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added microversion v2.58 which introduces pagination support for instance"},{"line_number":5,"context_line":"    actions with the help of new optional parameters ``limit``, ``marker`` and"},{"line_number":6,"context_line":"    ``changes-since``."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"bf8cb3f7_a3bcae05","line":4,"range":{"start_line":4,"start_character":10,"end_line":4,"end_character":22},"updated":"2017-12-22 17:04:29.000000000","message":"Added support for microversion v2.58...","commit_id":"12f8223716381372e06a9c496e09775583349175"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"a67bd5d98bb5c702ac10b4c1d5e691a03430c0c0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added microversion v2.58 which introduces pagination support for instance"},{"line_number":5,"context_line":"    actions with the help of new optional parameters ``limit``, ``marker`` and"},{"line_number":6,"context_line":"    ``changes-since``."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"bf8cb3f7_64ac698c","line":4,"range":{"start_line":4,"start_character":10,"end_line":4,"end_character":22},"in_reply_to":"bf8cb3f7_a3bcae05","updated":"2017-12-23 04:15:45.000000000","message":"Done","commit_id":"12f8223716381372e06a9c496e09775583349175"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"104ba3d0541430f770bc19623c479f6278104fba","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added microversion v2.58 which introduces pagination support for instance"},{"line_number":5,"context_line":"    actions with the help of new optional parameters ``limit``, ``marker`` and"},{"line_number":6,"context_line":"    ``changes-since``."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"bf8cb3f7_633c6693","line":6,"range":{"start_line":6,"start_character":4,"end_line":6,"end_character":21},"updated":"2017-12-22 17:04:29.000000000","message":"This doesn\u0027t really have anything to do with paging support, it\u0027s just for filtering.","commit_id":"12f8223716381372e06a9c496e09775583349175"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"a67bd5d98bb5c702ac10b4c1d5e691a03430c0c0","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added microversion v2.58 which introduces pagination support for instance"},{"line_number":5,"context_line":"    actions with the help of new optional parameters ``limit``, ``marker`` and"},{"line_number":6,"context_line":"    ``changes-since``."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"bf8cb3f7_84a96d7c","line":6,"range":{"start_line":6,"start_character":4,"end_line":6,"end_character":21},"in_reply_to":"bf8cb3f7_633c6693","updated":"2017-12-23 04:15:45.000000000","message":"Done","commit_id":"12f8223716381372e06a9c496e09775583349175"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ae1f22089817830985b30a0e19b54aa8c60e8042","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added support for microversion v2.58 which introduces pagination support"},{"line_number":5,"context_line":"    for instance actions with the help of new optional parameters ``limit``,"},{"line_number":6,"context_line":"    ``marker``, and also adds the new filter ``changes-since``, users can use"},{"line_number":7,"context_line":"    ``changes-since`` filter to filter the results based on the last time the"},{"line_number":8,"context_line":"    instance action was updated."}],"source_content_type":"text/x-yaml","patch_set":12,"id":"9f91af0f_fa510410","line":6,"range":{"start_line":6,"start_character":62,"end_line":6,"end_character":65},"updated":"2018-01-02 14:54:26.000000000","message":"new sentence: \". Users\"","commit_id":"bda2c454abe610652d251d18d07eca95307cd769"}]}
