)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"6f7db47704e5725d2bef0d1bca3760e4294f45d5","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Users can now use \u0027limit\u0027 and \u0027marker\u0027 to perform paginate"},{"line_number":13,"context_line":"query of instance action list. Users can also filter the"},{"line_number":14,"context_line":"results according to the actions\u0027 statr_time."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"DocImpact: This adds API microversion"},{"line_number":17,"context_line":"APIImpact: Support pagination and timestamp filter for"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":26,"id":"1f485f77_4b99e2c1","line":14,"range":{"start_line":14,"start_character":34,"end_line":14,"end_character":44},"updated":"2017-11-17 03:40:43.000000000","message":"updated_at time","commit_id":"c8c71c731f220015c17886513f99769c0ea1b035"}],"api-ref/source/os-instance-actions.inc":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b2fd7d3441542bee670a7bca788a2f6c27e1a949","unresolved":false,"context_lines":[{"line_number":123,"context_line":".. literalinclude:: ../../doc/api_samples/os-instance-actions/v2.51/instance-action-get-non-admin-resp.json"},{"line_number":124,"context_line":"   :language: javascript"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"**Example Show Server Action Details For Admin (v2.56)**"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":".. literalinclude:: ../../doc/api_samples/os-instance-actions/v2.56/instance-action-get-resp.json"},{"line_number":129,"context_line":"   :language: javascript"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"**Example Show Server Action Details For Non-Admin (v2.56)**"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":".. literalinclude:: ../../doc/api_samples/os-instance-actions/v2.56/instance-action-get-non-admin-resp.json"},{"line_number":134,"context_line":"   :language: javascript"}],"source_content_type":"text/x-c++src","patch_set":28,"id":"ff82abbf_6bceff2d","line":134,"range":{"start_line":126,"start_character":0,"end_line":134,"end_character":24},"updated":"2017-11-27 23:21:34.000000000","message":"We probably don\u0027t need to include these samples for this change. The most interesting thing is the response from GET /servers/{server_id}/os-instance-actions.","commit_id":"1e4fe9a6c015413452eccdf34c879791d9936989"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"eaa9b2ba4d2e4d60ef1ea6748111582e26410347","unresolved":false,"context_lines":[{"line_number":123,"context_line":".. literalinclude:: ../../doc/api_samples/os-instance-actions/v2.51/instance-action-get-non-admin-resp.json"},{"line_number":124,"context_line":"   :language: javascript"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"**Example Show Server Action Details For Admin (v2.56)**"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":".. literalinclude:: ../../doc/api_samples/os-instance-actions/v2.56/instance-action-get-resp.json"},{"line_number":129,"context_line":"   :language: javascript"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"**Example Show Server Action Details For Non-Admin (v2.56)**"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":".. literalinclude:: ../../doc/api_samples/os-instance-actions/v2.56/instance-action-get-non-admin-resp.json"},{"line_number":134,"context_line":"   :language: javascript"}],"source_content_type":"text/x-c++src","patch_set":28,"id":"ff82abbf_a895e234","line":134,"range":{"start_line":126,"start_character":0,"end_line":134,"end_character":24},"in_reply_to":"ff82abbf_6bceff2d","updated":"2017-11-28 10:20:37.000000000","message":"OK, I will remove these.","commit_id":"1e4fe9a6c015413452eccdf34c879791d9936989"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6dfe27283fa76091d0d500be0576bc6739cae01a","unresolved":false,"context_lines":[{"line_number":50,"context_line":"  - start_time: start_time"},{"line_number":51,"context_line":"  - user_id: user_id"},{"line_number":52,"context_line":"  - updated_at: updated_instance_action"},{"line_number":53,"context_line":"  - instance_actions_links: instance_actions_next_links_2_57"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"**Example List Actions For Server: JSON response**"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":35,"id":"df87a7cf_96a5e306","line":53,"range":{"start_line":53,"start_character":55,"end_line":53,"end_character":60},"updated":"2017-12-06 23:02:22.000000000","message":"We don\u0027t really need this on the parameter variable name.","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"bf6d3aa6383a55ecf730845cbddc8e98121c7aa3","unresolved":false,"context_lines":[{"line_number":50,"context_line":"  - start_time: start_time"},{"line_number":51,"context_line":"  - user_id: user_id"},{"line_number":52,"context_line":"  - updated_at: updated_instance_action"},{"line_number":53,"context_line":"  - instance_actions_links: instance_actions_next_links_2_57"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"**Example List Actions For Server: JSON response**"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":35,"id":"df87a7cf_d49602f1","line":53,"range":{"start_line":53,"start_character":55,"end_line":53,"end_character":60},"in_reply_to":"df87a7cf_96a5e306","updated":"2017-12-07 09:50:47.000000000","message":"Done","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6dfe27283fa76091d0d500be0576bc6739cae01a","unresolved":false,"context_lines":[{"line_number":57,"context_line":".. literalinclude:: ../../doc/api_samples/os-instance-actions/instance-actions-list-resp.json"},{"line_number":58,"context_line":"   :language: javascript"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"**Example List Actions For Server (v2.57): JSON response**"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":".. literalinclude:: ../../doc/api_samples/os-instance-actions/v2.57/instance-actions-list-resp.json"},{"line_number":63,"context_line":"   :language: javascript"}],"source_content_type":"text/x-c++src","patch_set":35,"id":"df87a7cf_96f3a30a","line":60,"range":{"start_line":60,"start_character":2,"end_line":60,"end_character":34},"updated":"2017-12-06 23:02:22.000000000","message":"If you use instance-actions-list-with-limit-resp, rename the title to \"Example List Actions For Server with Links (v2.57)\".","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6dfe27283fa76091d0d500be0576bc6739cae01a","unresolved":false,"context_lines":[{"line_number":57,"context_line":".. literalinclude:: ../../doc/api_samples/os-instance-actions/instance-actions-list-resp.json"},{"line_number":58,"context_line":"   :language: javascript"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"**Example List Actions For Server (v2.57): JSON response**"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":".. literalinclude:: ../../doc/api_samples/os-instance-actions/v2.57/instance-actions-list-resp.json"},{"line_number":63,"context_line":"   :language: javascript"}],"source_content_type":"text/x-c++src","patch_set":35,"id":"df87a7cf_b6f6e7f8","line":60,"range":{"start_line":60,"start_character":42,"end_line":60,"end_character":56},"updated":"2017-12-06 23:02:22.000000000","message":"You don\u0027t have to include the \"JSON response\" part - we only have JSON responses anymore (xml support was removed long ago).","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"bf6d3aa6383a55ecf730845cbddc8e98121c7aa3","unresolved":false,"context_lines":[{"line_number":57,"context_line":".. literalinclude:: ../../doc/api_samples/os-instance-actions/instance-actions-list-resp.json"},{"line_number":58,"context_line":"   :language: javascript"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"**Example List Actions For Server (v2.57): JSON response**"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":".. literalinclude:: ../../doc/api_samples/os-instance-actions/v2.57/instance-actions-list-resp.json"},{"line_number":63,"context_line":"   :language: javascript"}],"source_content_type":"text/x-c++src","patch_set":35,"id":"df87a7cf_f49b0615","line":60,"range":{"start_line":60,"start_character":2,"end_line":60,"end_character":34},"in_reply_to":"df87a7cf_96f3a30a","updated":"2017-12-07 09:50:47.000000000","message":"Done","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"bf6d3aa6383a55ecf730845cbddc8e98121c7aa3","unresolved":false,"context_lines":[{"line_number":57,"context_line":".. literalinclude:: ../../doc/api_samples/os-instance-actions/instance-actions-list-resp.json"},{"line_number":58,"context_line":"   :language: javascript"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"**Example List Actions For Server (v2.57): JSON response**"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":".. literalinclude:: ../../doc/api_samples/os-instance-actions/v2.57/instance-actions-list-resp.json"},{"line_number":63,"context_line":"   :language: javascript"}],"source_content_type":"text/x-c++src","patch_set":35,"id":"df87a7cf_d464c224","line":60,"range":{"start_line":60,"start_character":42,"end_line":60,"end_character":56},"in_reply_to":"df87a7cf_b6f6e7f8","updated":"2017-12-07 09:50:47.000000000","message":"OK, I didn\u0027t notice it before, I will remove it.","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6dfe27283fa76091d0d500be0576bc6739cae01a","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"**Example List Actions For Server (v2.57): JSON response**"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":".. literalinclude:: ../../doc/api_samples/os-instance-actions/v2.57/instance-actions-list-resp.json"},{"line_number":63,"context_line":"   :language: javascript"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"Show Server Action Details"}],"source_content_type":"text/x-c++src","patch_set":35,"id":"df87a7cf_d6e92b1a","line":62,"range":{"start_line":62,"start_character":68,"end_line":62,"end_character":94},"updated":"2017-12-06 23:02:22.000000000","message":"This isn\u0027t an interesting wrinkle for the samples, instance-actions-list-with-limit-resp would be more interesting since it shows the \"next\" link.","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"bf6d3aa6383a55ecf730845cbddc8e98121c7aa3","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"**Example List Actions For Server (v2.57): JSON response**"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":".. literalinclude:: ../../doc/api_samples/os-instance-actions/v2.57/instance-actions-list-resp.json"},{"line_number":63,"context_line":"   :language: javascript"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"Show Server Action Details"}],"source_content_type":"text/x-c++src","patch_set":35,"id":"df87a7cf_34540e21","line":62,"range":{"start_line":62,"start_character":68,"end_line":62,"end_character":94},"in_reply_to":"df87a7cf_d6e92b1a","updated":"2017-12-07 09:50:47.000000000","message":"Done","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"}],"api-ref/source/parameters.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b2fd7d3441542bee670a7bca788a2f6c27e1a949","unresolved":false,"context_lines":[{"line_number":423,"context_line":"changes_since_instance_action:"},{"line_number":424,"context_line":"  description: |"},{"line_number":425,"context_line":"    Filters the response by a date and time stamp when the instance action last"},{"line_number":426,"context_line":"    changed. To help keep track of changes this may also return recently"},{"line_number":427,"context_line":"    instance action."},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"    The date and time stamp format is `ISO 8601 \u003chttps://en.wikipedia.org/wiki/ISO_8601\u003e`_:"},{"line_number":430,"context_line":"    ::"}],"source_content_type":"text/x-yaml","patch_set":28,"id":"ff82abbf_6b0b5f7c","line":427,"range":{"start_line":426,"start_character":64,"end_line":427,"end_character":20},"updated":"2017-11-27 23:21:34.000000000","message":"recently instance action?","commit_id":"1e4fe9a6c015413452eccdf34c879791d9936989"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"eaa9b2ba4d2e4d60ef1ea6748111582e26410347","unresolved":false,"context_lines":[{"line_number":423,"context_line":"changes_since_instance_action:"},{"line_number":424,"context_line":"  description: |"},{"line_number":425,"context_line":"    Filters the response by a date and time stamp when the instance action last"},{"line_number":426,"context_line":"    changed. To help keep track of changes this may also return recently"},{"line_number":427,"context_line":"    instance action."},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"    The date and time stamp format is `ISO 8601 \u003chttps://en.wikipedia.org/wiki/ISO_8601\u003e`_:"},{"line_number":430,"context_line":"    ::"}],"source_content_type":"text/x-yaml","patch_set":28,"id":"ff82abbf_4881b6fa","line":427,"range":{"start_line":426,"start_character":64,"end_line":427,"end_character":20},"in_reply_to":"ff82abbf_6b0b5f7c","updated":"2017-11-28 10:20:37.000000000","message":"recently updated instance action\n\n:)","commit_id":"1e4fe9a6c015413452eccdf34c879791d9936989"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6dfe27283fa76091d0d500be0576bc6739cae01a","unresolved":false,"context_lines":[{"line_number":709,"context_line":"  min_version: 2.57"},{"line_number":710,"context_line":"instance_action_marker:"},{"line_number":711,"context_line":"  description: |"},{"line_number":712,"context_line":"    The request id of the last-seen instance action. Use the ``limit``"},{"line_number":713,"context_line":"    parameter to make an initial limited request and use the last-seen"},{"line_number":714,"context_line":"    item from the response as the ``marker`` parameter value in a subsequent"},{"line_number":715,"context_line":"    limited request."}],"source_content_type":"text/x-yaml","patch_set":35,"id":"df87a7cf_f69eafb6","line":712,"range":{"start_line":712,"start_character":8,"end_line":712,"end_character":18},"updated":"2017-12-06 23:02:22.000000000","message":"nit: ``request_id`` since that\u0027s the parameter name in the response.","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"bf6d3aa6383a55ecf730845cbddc8e98121c7aa3","unresolved":false,"context_lines":[{"line_number":709,"context_line":"  min_version: 2.57"},{"line_number":710,"context_line":"instance_action_marker:"},{"line_number":711,"context_line":"  description: |"},{"line_number":712,"context_line":"    The request id of the last-seen instance action. Use the ``limit``"},{"line_number":713,"context_line":"    parameter to make an initial limited request and use the last-seen"},{"line_number":714,"context_line":"    item from the response as the ``marker`` parameter value in a subsequent"},{"line_number":715,"context_line":"    limited request."}],"source_content_type":"text/x-yaml","patch_set":35,"id":"df87a7cf_94387aee","line":712,"range":{"start_line":712,"start_character":8,"end_line":712,"end_character":18},"in_reply_to":"df87a7cf_f69eafb6","updated":"2017-12-07 09:50:47.000000000","message":"Done","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6dfe27283fa76091d0d500be0576bc6739cae01a","unresolved":false,"context_lines":[{"line_number":3424,"context_line":"  required: true"},{"line_number":3425,"context_line":"  type: array"},{"line_number":3426,"context_line":"  min_version: 2.51"},{"line_number":3427,"context_line":"instance_actions_next_links_2_57:"},{"line_number":3428,"context_line":"  description: |"},{"line_number":3429,"context_line":"    Links pertaining to the instance action."},{"line_number":3430,"context_line":"    This parameter is returned when paging and more data is available."}],"source_content_type":"text/x-yaml","patch_set":35,"id":"df87a7cf_76aa9fd2","line":3427,"range":{"start_line":3427,"start_character":27,"end_line":3427,"end_character":32},"updated":"2017-12-06 23:02:22.000000000","message":"You could remove this from the name, we don\u0027t use it in any other of the new instance action param variable names.","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"bf6d3aa6383a55ecf730845cbddc8e98121c7aa3","unresolved":false,"context_lines":[{"line_number":3424,"context_line":"  required: true"},{"line_number":3425,"context_line":"  type: array"},{"line_number":3426,"context_line":"  min_version: 2.51"},{"line_number":3427,"context_line":"instance_actions_next_links_2_57:"},{"line_number":3428,"context_line":"  description: |"},{"line_number":3429,"context_line":"    Links pertaining to the instance action."},{"line_number":3430,"context_line":"    This parameter is returned when paging and more data is available."}],"source_content_type":"text/x-yaml","patch_set":35,"id":"df87a7cf_f43786fe","line":3427,"range":{"start_line":3427,"start_character":27,"end_line":3427,"end_character":32},"in_reply_to":"df87a7cf_76aa9fd2","updated":"2017-12-07 09:50:47.000000000","message":"Done","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"969ae6d260a1796eec088f64f1a9a340ec3be341","unresolved":false,"context_lines":[{"line_number":709,"context_line":"  min_version: 2.57"},{"line_number":710,"context_line":"instance_action_marker:"},{"line_number":711,"context_line":"  description: |"},{"line_number":712,"context_line":"    The request_id of the last-seen instance action. Use the ``limit``"},{"line_number":713,"context_line":"    parameter to make an initial limited request and use the last-seen"},{"line_number":714,"context_line":"    item from the response as the ``marker`` parameter value in a subsequent"},{"line_number":715,"context_line":"    limited request."}],"source_content_type":"text/x-yaml","patch_set":41,"id":"df87a7cf_86e2119f","line":712,"range":{"start_line":712,"start_character":8,"end_line":712,"end_character":18},"updated":"2017-12-12 19:24:47.000000000","message":"nit: ``request_id``","commit_id":"3213e093e8bbec20b6512b5d8b5a19e03e9e87a6"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"fe4b10250bbb94f7b68c612d5b854c841b2699fa","unresolved":false,"context_lines":[{"line_number":709,"context_line":"  min_version: 2.57"},{"line_number":710,"context_line":"instance_action_marker:"},{"line_number":711,"context_line":"  description: |"},{"line_number":712,"context_line":"    The request_id of the last-seen instance action. Use the ``limit``"},{"line_number":713,"context_line":"    parameter to make an initial limited request and use the last-seen"},{"line_number":714,"context_line":"    item from the response as the ``marker`` parameter value in a subsequent"},{"line_number":715,"context_line":"    limited request."}],"source_content_type":"text/x-yaml","patch_set":41,"id":"df87a7cf_0f75a4cc","line":712,"range":{"start_line":712,"start_character":8,"end_line":712,"end_character":18},"in_reply_to":"df87a7cf_86e2119f","updated":"2017-12-13 09:12:30.000000000","message":"Done","commit_id":"3213e093e8bbec20b6512b5d8b5a19e03e9e87a6"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ec568a5e13194aed7673141df566bdf359993437","unresolved":false,"context_lines":[{"line_number":432,"context_line":"changes_since_instance_action:"},{"line_number":433,"context_line":"  description: |"},{"line_number":434,"context_line":"    Filters the response by a date and time stamp when the instance action last"},{"line_number":435,"context_line":"    changed. To help keep track of changes this may also return recently updated"},{"line_number":436,"context_line":"    instance actions."},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"    The date and time stamp format is `ISO 8601 \u003chttps://en.wikipedia.org/wiki/ISO_8601\u003e`_:"},{"line_number":439,"context_line":"    ::"}],"source_content_type":"text/x-yaml","patch_set":43,"id":"df87a7cf_3e7217e5","line":436,"range":{"start_line":435,"start_character":13,"end_line":436,"end_character":21},"updated":"2017-12-13 13:03:02.000000000","message":"While it make sense to state for the server change-since query that it returns recently deleted servers. Here it is confusing to say that this query may return recently updated actions as the whole purpose of this filter is to return every recently update actions. I think you can delete this sentence.","commit_id":"d27e24a362231df092b214b4b2f50e6cdd78a1d7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f97590fbc5c687d43c4b241b6109ce48ca7947a3","unresolved":false,"context_lines":[{"line_number":432,"context_line":"changes_since_instance_action:"},{"line_number":433,"context_line":"  description: |"},{"line_number":434,"context_line":"    Filters the response by a date and time stamp when the instance action last"},{"line_number":435,"context_line":"    changed. To help keep track of changes this may also return recently updated"},{"line_number":436,"context_line":"    instance actions."},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"    The date and time stamp format is `ISO 8601 \u003chttps://en.wikipedia.org/wiki/ISO_8601\u003e`_:"},{"line_number":439,"context_line":"    ::"}],"source_content_type":"text/x-yaml","patch_set":43,"id":"df87a7cf_98db364e","line":436,"range":{"start_line":435,"start_character":13,"end_line":436,"end_character":21},"in_reply_to":"df87a7cf_3e7217e5","updated":"2017-12-13 14:38:18.000000000","message":"Done","commit_id":"d27e24a362231df092b214b4b2f50e6cdd78a1d7"}],"doc/api_samples/os-instance-actions/v2.57/instance-action-get-resp.json":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6dfe27283fa76091d0d500be0576bc6739cae01a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"instanceAction\": {"},{"line_number":3,"context_line":"        \"action\": \"reboot\","},{"line_number":4,"context_line":"        \"events\": ["},{"line_number":5,"context_line":"            {"},{"line_number":6,"context_line":"                \"event\": \"schedule\","},{"line_number":7,"context_line":"                \"finish_time\": \"2012-12-05T01:02:00.000000\","},{"line_number":8,"context_line":"                \"result\": \"Success\","},{"line_number":9,"context_line":"                \"start_time\": \"2012-12-05T01:00:02.000000\","},{"line_number":10,"context_line":"                \"traceback\": \"\""},{"line_number":11,"context_line":"            },"},{"line_number":12,"context_line":"            {"},{"line_number":13,"context_line":"                \"event\": \"compute_create\","},{"line_number":14,"context_line":"                \"finish_time\": \"2012-12-05T01:04:00.000000\","},{"line_number":15,"context_line":"                \"result\": \"Success\","},{"line_number":16,"context_line":"                \"start_time\": \"2012-12-05T01:03:00.000000\","},{"line_number":17,"context_line":"                \"traceback\": \"\""},{"line_number":18,"context_line":"            }"},{"line_number":19,"context_line":"        ],"},{"line_number":20,"context_line":"        \"instance_uuid\": \"b48316c5-71e8-45e4-9884-6c78055b9b13\","},{"line_number":21,"context_line":"        \"message\": \"\","},{"line_number":22,"context_line":"        \"project_id\": \"147\","}],"source_content_type":"application/json","patch_set":35,"id":"df87a7cf_56743b68","line":19,"range":{"start_line":4,"start_character":8,"end_line":19,"end_character":10},"updated":"2017-12-06 23:02:22.000000000","message":"These don\u0027t even seem like real events - I\u0027m sure this is due to the mock nature of the API samples, which is unfortunate. Can we build the 2.57 API samples without using the mocks? It should be simple to do something like create an instance and then stop it. That would be 2 actions (create and stop) and the stop action should have a \"compute_stop_instance\" event with a start_time and finish_time - and it would show that the action\u0027s updated_at time is newer than it\u0027s created_at time, which is obviously wrong in this sample (created and updated are the same time).","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"bf6d3aa6383a55ecf730845cbddc8e98121c7aa3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"instanceAction\": {"},{"line_number":3,"context_line":"        \"action\": \"reboot\","},{"line_number":4,"context_line":"        \"events\": ["},{"line_number":5,"context_line":"            {"},{"line_number":6,"context_line":"                \"event\": \"schedule\","},{"line_number":7,"context_line":"                \"finish_time\": \"2012-12-05T01:02:00.000000\","},{"line_number":8,"context_line":"                \"result\": \"Success\","},{"line_number":9,"context_line":"                \"start_time\": \"2012-12-05T01:00:02.000000\","},{"line_number":10,"context_line":"                \"traceback\": \"\""},{"line_number":11,"context_line":"            },"},{"line_number":12,"context_line":"            {"},{"line_number":13,"context_line":"                \"event\": \"compute_create\","},{"line_number":14,"context_line":"                \"finish_time\": \"2012-12-05T01:04:00.000000\","},{"line_number":15,"context_line":"                \"result\": \"Success\","},{"line_number":16,"context_line":"                \"start_time\": \"2012-12-05T01:03:00.000000\","},{"line_number":17,"context_line":"                \"traceback\": \"\""},{"line_number":18,"context_line":"            }"},{"line_number":19,"context_line":"        ],"},{"line_number":20,"context_line":"        \"instance_uuid\": \"b48316c5-71e8-45e4-9884-6c78055b9b13\","},{"line_number":21,"context_line":"        \"message\": \"\","},{"line_number":22,"context_line":"        \"project_id\": \"147\","}],"source_content_type":"application/json","patch_set":35,"id":"df87a7cf_da2f093d","line":19,"range":{"start_line":4,"start_character":8,"end_line":19,"end_character":10},"in_reply_to":"df87a7cf_56743b68","updated":"2017-12-07 09:50:47.000000000","message":"Yeah, I will have a try.","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"969ae6d260a1796eec088f64f1a9a340ec3be341","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"instanceAction\": {"},{"line_number":3,"context_line":"        \"action\": \"stop\","},{"line_number":4,"context_line":"        \"events\": ["}],"source_content_type":"application/json","patch_set":41,"id":"df87a7cf_862c51ac","line":1,"updated":"2017-12-12 19:24:47.000000000","message":"This is a lot better with real data.","commit_id":"3213e093e8bbec20b6512b5d8b5a19e03e9e87a6"}],"doc/api_samples/os-instance-actions/v2.57/instance-actions-list-resp.json":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"969ae6d260a1796eec088f64f1a9a340ec3be341","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"instanceActions\": ["},{"line_number":3,"context_line":"        {"},{"line_number":4,"context_line":"            \"instance_uuid\": \"e357e6d8-952e-4d1d-b74f-c8519e937706\","}],"source_content_type":"application/json","patch_set":41,"id":"df87a7cf_a62715c7","line":1,"updated":"2017-12-12 19:24:47.000000000","message":"Same - this is much better than the fakes in the 2.1 api samples.","commit_id":"3213e093e8bbec20b6512b5d8b5a19e03e9e87a6"}],"doc/api_samples/os-instance-actions/v2.57/instance-actions-list-with-marker-resp.json":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"969ae6d260a1796eec088f64f1a9a340ec3be341","unresolved":false,"context_lines":[{"line_number":6,"context_line":"            \"start_time\": \"2017-12-07T11:07:04.313653\","},{"line_number":7,"context_line":"            \"updated_at\": \"2017-12-07T11:07:06.058351\","},{"line_number":8,"context_line":"            \"request_id\": \"req-c8fd339d-d2bf-43c2-a98a-84328281f83e\","},{"line_number":9,"context_line":"            \"action\": \"create\","},{"line_number":10,"context_line":"            \"message\": null,"},{"line_number":11,"context_line":"            \"project_id\": \"6f70656e737461636b20342065766572\""},{"line_number":12,"context_line":"        }"}],"source_content_type":"application/json","patch_set":41,"id":"df87a7cf_a1437f3e","line":9,"updated":"2017-12-12 19:24:47.000000000","message":"OK the marker is the request_id for the stop action, and since we sort by created_at descending, stop comes first and then create, so if our marker is the request_id for stop, the only remaining action is \u0027create\u0027, which is why we get this. Makes sense.","commit_id":"3213e093e8bbec20b6512b5d8b5a19e03e9e87a6"}],"nova/api/openstack/compute/instance_actions.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"601c26c21659c53ab3fbc93a1f39d1a9a680dcf2","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                                                      marker\u003dmarker,"},{"line_number":93,"context_line":"                                                      filters\u003dsearch_opts)"},{"line_number":94,"context_line":"        else:"},{"line_number":95,"context_line":"            actions_raw \u003d self.action_api.actions_get(context, instance)"},{"line_number":96,"context_line":"        actions \u003d [self._format_action(action) for action in actions_raw]"},{"line_number":97,"context_line":"        return {\u0027instanceActions\u0027: actions}"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_d3a6b8bf","line":95,"updated":"2016-06-27 07:52:32.000000000","message":"This change the default sort order for the api under 2.32. We should keep the same behaviour as before.","commit_id":"1fd1a88b563600571fa49be68377990003152666"},{"author":{"_account_id":19853,"name":"Nguyen Hung Phuong","email":"phuongnh@vn.fujitsu.com","username":"phuongnh"},"change_message_id":"57ba4b9c006ea975e2718e5d58106ab5fc700f73","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        instance \u003d self._get_instance(req, context, server_id)"},{"line_number":125,"context_line":"        context.can(ia_policies.BASE_POLICY_NAME, instance)"},{"line_number":126,"context_line":"        try:"},{"line_number":127,"context_line":"            action \u003d self.action_api.action_get_by_request_id(context, instance,"},{"line_number":128,"context_line":"                                                              id)"},{"line_number":129,"context_line":"        except exception.InstanceActionNotFound:"},{"line_number":130,"context_line":"            msg \u003d _(\"Action %s not found\") % id"}],"source_content_type":"text/x-python","patch_set":31,"id":"ff82abbf_75fb19c0","line":127,"range":{"start_line":127,"start_character":12,"end_line":127,"end_character":80},"updated":"2017-11-29 02:32:29.000000000","message":"Line is too long.","commit_id":"9fb08918bc6af65e89699c79f636a027b3ce3df9"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"ecb89123759a15f5610d7a757ffee9b8cc89b31b","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        instance \u003d self._get_instance(req, context, server_id)"},{"line_number":125,"context_line":"        context.can(ia_policies.BASE_POLICY_NAME, instance)"},{"line_number":126,"context_line":"        try:"},{"line_number":127,"context_line":"            action \u003d self.action_api.action_get_by_request_id(context, instance,"},{"line_number":128,"context_line":"                                                              id)"},{"line_number":129,"context_line":"        except exception.InstanceActionNotFound:"},{"line_number":130,"context_line":"            msg \u003d _(\"Action %s not found\") % id"}],"source_content_type":"text/x-python","patch_set":31,"id":"ff82abbf_f83080a1","line":127,"range":{"start_line":127,"start_character":12,"end_line":127,"end_character":80},"in_reply_to":"ff82abbf_75fb19c0","updated":"2017-11-29 03:27:40.000000000","message":"Done","commit_id":"9fb08918bc6af65e89699c79f636a027b3ce3df9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6dfe27283fa76091d0d500be0576bc6739cae01a","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from nova.api.openstack import wsgi"},{"line_number":28,"context_line":"from nova.api import validation"},{"line_number":29,"context_line":"from nova import compute"},{"line_number":30,"context_line":"import nova.conf"},{"line_number":31,"context_line":"from nova import exception"},{"line_number":32,"context_line":"from nova.i18n import _"},{"line_number":33,"context_line":"from nova.policies import instance_actions as ia_policies"}],"source_content_type":"text/x-python","patch_set":35,"id":"df87a7cf_f608efd9","line":30,"updated":"2017-12-06 23:02:22.000000000","message":"Remove this - it\u0027s not used.","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"bf6d3aa6383a55ecf730845cbddc8e98121c7aa3","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from nova.api.openstack import wsgi"},{"line_number":28,"context_line":"from nova.api import validation"},{"line_number":29,"context_line":"from nova import compute"},{"line_number":30,"context_line":"import nova.conf"},{"line_number":31,"context_line":"from nova import exception"},{"line_number":32,"context_line":"from nova.i18n import _"},{"line_number":33,"context_line":"from nova.policies import instance_actions as ia_policies"}],"source_content_type":"text/x-python","patch_set":35,"id":"df87a7cf_1a61f1d3","line":30,"in_reply_to":"df87a7cf_f608efd9","updated":"2017-12-07 09:50:47.000000000","message":"Done","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6dfe27283fa76091d0d500be0576bc6739cae01a","unresolved":false,"context_lines":[{"line_number":32,"context_line":"from nova.i18n import _"},{"line_number":33,"context_line":"from nova.policies import instance_actions as ia_policies"},{"line_number":34,"context_line":"from nova import utils"},{"line_number":35,"context_line":"CONF \u003d nova.conf.CONF"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"ACTION_KEYS \u003d [\u0027action\u0027, \u0027instance_uuid\u0027, \u0027request_id\u0027, \u0027user_id\u0027,"}],"source_content_type":"text/x-python","patch_set":35,"id":"df87a7cf_3669778a","line":35,"range":{"start_line":35,"start_character":0,"end_line":35,"end_character":21},"updated":"2017-12-06 23:02:22.000000000","message":"This isn\u0027t used.","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"bf6d3aa6383a55ecf730845cbddc8e98121c7aa3","unresolved":false,"context_lines":[{"line_number":32,"context_line":"from nova.i18n import _"},{"line_number":33,"context_line":"from nova.policies import instance_actions as ia_policies"},{"line_number":34,"context_line":"from nova import utils"},{"line_number":35,"context_line":"CONF \u003d nova.conf.CONF"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"ACTION_KEYS \u003d [\u0027action\u0027, \u0027instance_uuid\u0027, \u0027request_id\u0027, \u0027user_id\u0027,"}],"source_content_type":"text/x-python","patch_set":35,"id":"df87a7cf_3a5e3512","line":35,"range":{"start_line":35,"start_character":0,"end_line":35,"end_character":21},"in_reply_to":"df87a7cf_3669778a","updated":"2017-12-07 09:50:47.000000000","message":"Done","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6dfe27283fa76091d0d500be0576bc6739cae01a","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":124,"context_line":"        instance \u003d self._get_instance(req, context, server_id)"},{"line_number":125,"context_line":"        context.can(ia_policies.BASE_POLICY_NAME, instance)"},{"line_number":126,"context_line":"        try:"},{"line_number":127,"context_line":"            action \u003d self.action_api.action_get_by_request_id("},{"line_number":128,"context_line":"                context, instance, id)"},{"line_number":129,"context_line":"        except exception.InstanceActionNotFound:"},{"line_number":130,"context_line":"            msg \u003d _(\"Action %s not found\") % id"},{"line_number":131,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        action_id \u003d action[\u0027id\u0027]"},{"line_number":134,"context_line":"        if api_version_request.is_supported(req, min_version\u003d\"2.57\"):"}],"source_content_type":"text/x-python","patch_set":35,"id":"df87a7cf_b6aee795","line":131,"range":{"start_line":126,"start_character":7,"end_line":131,"end_character":51},"updated":"2017-12-06 23:02:22.000000000","message":"Why does this need to change?","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"bf6d3aa6383a55ecf730845cbddc8e98121c7aa3","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":124,"context_line":"        instance \u003d self._get_instance(req, context, server_id)"},{"line_number":125,"context_line":"        context.can(ia_policies.BASE_POLICY_NAME, instance)"},{"line_number":126,"context_line":"        try:"},{"line_number":127,"context_line":"            action \u003d self.action_api.action_get_by_request_id("},{"line_number":128,"context_line":"                context, instance, id)"},{"line_number":129,"context_line":"        except exception.InstanceActionNotFound:"},{"line_number":130,"context_line":"            msg \u003d _(\"Action %s not found\") % id"},{"line_number":131,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        action_id \u003d action[\u0027id\u0027]"},{"line_number":134,"context_line":"        if api_version_request.is_supported(req, min_version\u003d\"2.57\"):"}],"source_content_type":"text/x-python","patch_set":35,"id":"df87a7cf_9aa2e1fb","line":131,"range":{"start_line":126,"start_character":7,"end_line":131,"end_character":51},"in_reply_to":"df87a7cf_b6aee795","updated":"2017-12-07 09:50:47.000000000","message":"As mention in below, I will revert this change","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"969ae6d260a1796eec088f64f1a9a340ec3be341","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":122,"context_line":"        instance \u003d self._get_instance(req, context, server_id)"},{"line_number":123,"context_line":"        context.can(ia_policies.BASE_POLICY_NAME, instance)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        action \u003d self.action_api.action_get_by_request_id(context, instance,"},{"line_number":126,"context_line":"                                                          id)"},{"line_number":127,"context_line":"        if action is None:"}],"source_content_type":"text/x-python","patch_set":41,"id":"df87a7cf_c626d9ce","line":124,"updated":"2017-12-12 19:24:47.000000000","message":"unrelated whitespace change during a rebase","commit_id":"3213e093e8bbec20b6512b5d8b5a19e03e9e87a6"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"fe4b10250bbb94f7b68c612d5b854c841b2699fa","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":122,"context_line":"        instance \u003d self._get_instance(req, context, server_id)"},{"line_number":123,"context_line":"        context.can(ia_policies.BASE_POLICY_NAME, instance)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        action \u003d self.action_api.action_get_by_request_id(context, instance,"},{"line_number":126,"context_line":"                                                          id)"},{"line_number":127,"context_line":"        if action is None:"}],"source_content_type":"text/x-python","patch_set":41,"id":"df87a7cf_cf7edcae","line":124,"in_reply_to":"df87a7cf_c626d9ce","updated":"2017-12-13 09:12:30.000000000","message":"Done","commit_id":"3213e093e8bbec20b6512b5d8b5a19e03e9e87a6"}],"nova/api/openstack/compute/rest_api_version_history.rst":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6dfe27283fa76091d0d500be0576bc6739cae01a","unresolved":false,"context_lines":[{"line_number":714,"context_line":"----"},{"line_number":715,"context_line":""},{"line_number":716,"context_line":"  Add pagination support and ``changes-since`` filter for os-instance-actions"},{"line_number":717,"context_line":"  API. Users can now use ``limit`` and ``marker`` to perform paginate query"},{"line_number":718,"context_line":"  when listing instance actions. Users can also use ``changes-since`` filter"},{"line_number":719,"context_line":"  to filter the results based on the last time the instance action was"},{"line_number":720,"context_line":"  updated."}],"source_content_type":"text/x-rst","patch_set":35,"id":"df87a7cf_36fe57ae","line":717,"range":{"start_line":717,"start_character":61,"end_line":717,"end_character":69},"updated":"2017-12-06 23:02:22.000000000","message":"paginated","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"bf6d3aa6383a55ecf730845cbddc8e98121c7aa3","unresolved":false,"context_lines":[{"line_number":714,"context_line":"----"},{"line_number":715,"context_line":""},{"line_number":716,"context_line":"  Add pagination support and ``changes-since`` filter for os-instance-actions"},{"line_number":717,"context_line":"  API. Users can now use ``limit`` and ``marker`` to perform paginate query"},{"line_number":718,"context_line":"  when listing instance actions. Users can also use ``changes-since`` filter"},{"line_number":719,"context_line":"  to filter the results based on the last time the instance action was"},{"line_number":720,"context_line":"  updated."}],"source_content_type":"text/x-rst","patch_set":35,"id":"df87a7cf_3402ce0c","line":717,"range":{"start_line":717,"start_character":61,"end_line":717,"end_character":69},"in_reply_to":"df87a7cf_36fe57ae","updated":"2017-12-07 09:50:47.000000000","message":"Done","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d7592bfcd1e9b48c7b72d18cff81688ca49f57b3","unresolved":false,"context_lines":[{"line_number":714,"context_line":"----"},{"line_number":715,"context_line":""},{"line_number":716,"context_line":"  Add pagination support and ``changes-since`` filter for os-instance-actions"},{"line_number":717,"context_line":"  API. Users can now use ``limit`` and ``marker`` to perform paginated query"},{"line_number":718,"context_line":"  when listing instance actions. Users can also use ``changes-since`` filter"},{"line_number":719,"context_line":"  to filter the results based on the last time the instance action was"},{"line_number":720,"context_line":"  updated."}],"source_content_type":"text/x-rst","patch_set":44,"id":"df87a7cf_86f50786","line":720,"range":{"start_line":717,"start_character":2,"end_line":720,"end_character":10},"updated":"2017-12-14 02:05:27.000000000","message":"Looks like you dropped this part?","commit_id":"779d9498d514dc1f956eeb9d6e729fbd2a5817c8"}],"nova/api/openstack/compute/schemas/instance_actions.py":[{"author":{"_account_id":19853,"name":"Nguyen Hung Phuong","email":"phuongnh@vn.fujitsu.com","username":"phuongnh"},"change_message_id":"74215d75ae51f3a21c959283530859d78852aca8","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import copy"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from nova.api.validation import parameter_types"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"1f485f77_df216cfd","line":15,"range":{"start_line":15,"start_character":7,"end_line":15,"end_character":11},"updated":"2017-11-14 11:04:33.000000000","message":"imported but unused","commit_id":"7e0083920dedddf52f75a4e3e865f85c9dadfe45"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ec568a5e13194aed7673141df566bdf359993437","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 Huawei Technologies Co.,LTD."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_e98f1773","line":1,"updated":"2017-12-13 13:03:02.000000000","message":"nit: I think this line is not necessary","commit_id":"d27e24a362231df092b214b4b2f50e6cdd78a1d7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"076fc2fe235530e1081d26875a0287f9fdcfde36","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 Huawei Technologies Co.,LTD."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_58db6e7c","line":1,"in_reply_to":"df87a7cf_e98f1773","updated":"2017-12-13 14:15:32.000000000","message":"Depends on the company, some have contribution guidelines for copyrights. I think I\u0027m guilty of starting this trend for Huawei because IBM had specific guidelines and I was used to those so I carried them over to Huawei when I joined.","commit_id":"d27e24a362231df092b214b4b2f50e6cdd78a1d7"}],"nova/api/openstack/compute/views/instance_actions.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6dfe27283fa76091d0d500be0576bc6739cae01a","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from nova.api.openstack import common"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"class ViewBuilder(common.ViewBuilder):"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    def get_links(self, request, server_id, instance_actions):"},{"line_number":21,"context_line":"        collection_name \u003d \u0027servers/%s/os-instance-actions\u0027 % server_id"},{"line_number":22,"context_line":"        return self._get_collection_links(request, instance_actions,"},{"line_number":23,"context_line":"                                          collection_name, \u0027request_id\u0027)"}],"source_content_type":"text/x-python","patch_set":35,"id":"df87a7cf_16ad5387","line":23,"range":{"start_line":18,"start_character":0,"end_line":23,"end_character":72},"updated":"2017-12-06 23:02:22.000000000","message":"I\u0027m not sure we need an entirely new view builder for this, we could just use common.ViewBuilder._get_collection_links, but accessing a private method is kind of ugly I guess. Plus long-term we could move the _format_action() method in here.","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ec568a5e13194aed7673141df566bdf359993437","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 Huawei Technologies Co.,LTD."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_a9e7cf46","line":1,"updated":"2017-12-13 13:03:02.000000000","message":"ditto","commit_id":"d27e24a362231df092b214b4b2f50e6cdd78a1d7"}],"nova/api/openstack/rest_api_version_history.rst":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"6d8a40a3645fd010dadf31249946b9c706fa47fb","unresolved":false,"context_lines":[{"line_number":333,"context_line":"  API. Users can now use ``limit`` and ``marker`` to perform paginate query"},{"line_number":334,"context_line":"  when listing instance actions. Users can also use filter ``changes-since``"},{"line_number":335,"context_line":"  to filter the results depend on action start time."},{"line_number":336,"context_line":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e Add pagination and changes-since for instance-actions"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3aaa91ec_c9573224","line":336,"updated":"2016-06-27 05:02:29.000000000","message":"I guess this is a mistake when rebase.","commit_id":"a75dbb212c6ae266ab6e5a03daac5c45df683f9e"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"7cd5964cb78e855b3b655f7fac7f5c3f24d8aedc","unresolved":false,"context_lines":[{"line_number":333,"context_line":"  API. Users can now use ``limit`` and ``marker`` to perform paginate query"},{"line_number":334,"context_line":"  when listing instance actions. Users can also use filter ``changes-since``"},{"line_number":335,"context_line":"  to filter the results depend on action start time."},{"line_number":336,"context_line":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e Add pagination and changes-since for instance-actions"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3aaa91ec_4a0a1127","line":336,"in_reply_to":"3aaa91ec_c9573224","updated":"2016-06-27 06:45:22.000000000","message":"Ah, yes","commit_id":"a75dbb212c6ae266ab6e5a03daac5c45df683f9e"}],"nova/compute/api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b2fd7d3441542bee670a7bca788a2f6c27e1a949","unresolved":false,"context_lines":[{"line_number":4544,"context_line":"class InstanceActionAPI(base.Base):"},{"line_number":4545,"context_line":"    \"\"\"Sub-set of the Compute Manager API for managing instance actions.\"\"\""},{"line_number":4546,"context_line":""},{"line_number":4547,"context_line":"    def actions_get(self, context, instance, limit\u003dNone, marker\u003dNone,"},{"line_number":4548,"context_line":"                    filters\u003dNone):"},{"line_number":4549,"context_line":"        return objects.InstanceActionList.get_by_instance_uuid("},{"line_number":4550,"context_line":"            context, instance.uuid, limit, marker, filters)"}],"source_content_type":"text/x-python","patch_set":28,"id":"ff82abbf_4b23fbbd","line":4547,"updated":"2017-11-27 23:21:34.000000000","message":"You need to also do this in nova.compute.api.cells_api but just ignore the parameters in that case.","commit_id":"1e4fe9a6c015413452eccdf34c879791d9936989"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"eaa9b2ba4d2e4d60ef1ea6748111582e26410347","unresolved":false,"context_lines":[{"line_number":4544,"context_line":"class InstanceActionAPI(base.Base):"},{"line_number":4545,"context_line":"    \"\"\"Sub-set of the Compute Manager API for managing instance actions.\"\"\""},{"line_number":4546,"context_line":""},{"line_number":4547,"context_line":"    def actions_get(self, context, instance, limit\u003dNone, marker\u003dNone,"},{"line_number":4548,"context_line":"                    filters\u003dNone):"},{"line_number":4549,"context_line":"        return objects.InstanceActionList.get_by_instance_uuid("},{"line_number":4550,"context_line":"            context, instance.uuid, limit, marker, filters)"}],"source_content_type":"text/x-python","patch_set":28,"id":"ff82abbf_a831625c","line":4547,"in_reply_to":"ff82abbf_4b23fbbd","updated":"2017-11-28 10:20:37.000000000","message":"Yes, I will plus these params on cells_api.","commit_id":"1e4fe9a6c015413452eccdf34c879791d9936989"}],"nova/compute/cells_api.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ec568a5e13194aed7673141df566bdf359993437","unresolved":false,"context_lines":[{"line_number":678,"context_line":""},{"line_number":679,"context_line":"    def actions_get(self, context, instance, limit\u003dNone, marker\u003dNone,"},{"line_number":680,"context_line":"                    filters\u003dNone):"},{"line_number":681,"context_line":"        return self.cells_rpcapi.actions_get(context, instance)"},{"line_number":682,"context_line":""},{"line_number":683,"context_line":"    def action_get_by_request_id(self, context, instance, request_id):"},{"line_number":684,"context_line":"        return self.cells_rpcapi.action_get_by_request_id(context, instance,"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_e9e4f73e","line":681,"updated":"2017-12-13 13:03:02.000000000","message":"don\u0027t we have to pass the limit, marker and filter params?","commit_id":"d27e24a362231df092b214b4b2f50e6cdd78a1d7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"076fc2fe235530e1081d26875a0287f9fdcfde36","unresolved":false,"context_lines":[{"line_number":678,"context_line":""},{"line_number":679,"context_line":"    def actions_get(self, context, instance, limit\u003dNone, marker\u003dNone,"},{"line_number":680,"context_line":"                    filters\u003dNone):"},{"line_number":681,"context_line":"        return self.cells_rpcapi.actions_get(context, instance)"},{"line_number":682,"context_line":""},{"line_number":683,"context_line":"    def action_get_by_request_id(self, context, instance, request_id):"},{"line_number":684,"context_line":"        return self.cells_rpcapi.action_get_by_request_id(context, instance,"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_78d8b27e","line":681,"in_reply_to":"df87a7cf_e9e4f73e","updated":"2017-12-13 14:15:32.000000000","message":"No, we aren\u0027t going to add the support for cells v1 since it\u0027s feature frozen. We could add a comment here to that effect if we care.","commit_id":"d27e24a362231df092b214b4b2f50e6cdd78a1d7"}],"nova/db/api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b2fd7d3441542bee670a7bca788a2f6c27e1a949","unresolved":false,"context_lines":[{"line_number":1948,"context_line":"    return IMPL.action_finish(context, values)"},{"line_number":1949,"context_line":""},{"line_number":1950,"context_line":""},{"line_number":1951,"context_line":"def actions_get(context, uuid):"},{"line_number":1952,"context_line":"    \"\"\"Get all instance actions for the provided instance.\"\"\""},{"line_number":1953,"context_line":"    return IMPL.actions_get(context, uuid)"},{"line_number":1954,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"ff82abbf_cb206baf","line":1951,"range":{"start_line":1951,"start_character":4,"end_line":1951,"end_character":15},"updated":"2017-11-27 23:21:34.000000000","message":"Why not just modify this DB API? Otherwise nothing is going to be using this (except some cells v1 messaging code, but if you make it kwargs with defaults like below it shouldn\u0027t be a problem).","commit_id":"1e4fe9a6c015413452eccdf34c879791d9936989"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"eaa9b2ba4d2e4d60ef1ea6748111582e26410347","unresolved":false,"context_lines":[{"line_number":1948,"context_line":"    return IMPL.action_finish(context, values)"},{"line_number":1949,"context_line":""},{"line_number":1950,"context_line":""},{"line_number":1951,"context_line":"def actions_get(context, uuid):"},{"line_number":1952,"context_line":"    \"\"\"Get all instance actions for the provided instance.\"\"\""},{"line_number":1953,"context_line":"    return IMPL.actions_get(context, uuid)"},{"line_number":1954,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"ff82abbf_08296ee4","line":1951,"range":{"start_line":1951,"start_character":4,"end_line":1951,"end_character":15},"in_reply_to":"ff82abbf_cb206baf","updated":"2017-11-28 10:20:37.000000000","message":"Done","commit_id":"1e4fe9a6c015413452eccdf34c879791d9936989"}],"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"6d8a40a3645fd010dadf31249946b9c706fa47fb","unresolved":false,"context_lines":[{"line_number":5992,"context_line":"                                          marker\u003dNone, filters\u003dNone):"},{"line_number":5993,"context_line":"    if limit \u003d\u003d 0:"},{"line_number":5994,"context_line":"        return []"},{"line_number":5995,"context_line":"    sort_keys \u003d [\u0027created_at\u0027, \u0027id\u0027]"},{"line_number":5996,"context_line":"    sort_dirs \u003d [\u0027desc\u0027, \u0027desc\u0027]"},{"line_number":5997,"context_line":"    query_prefix \u003d model_query(context, models.InstanceAction).\\"},{"line_number":5998,"context_line":"        filter_by(instance_uuid\u003dinstance_uuid)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_0402bf09","line":5995,"range":{"start_line":5995,"start_character":17,"end_line":5995,"end_character":28},"updated":"2016-06-27 05:02:29.000000000","message":"when pagination, we should sort by \u0027updated_at\u0027. As the marker is \u0027changes-since\u0027, \"change\" means update, right?","commit_id":"a75dbb212c6ae266ab6e5a03daac5c45df683f9e"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"7cd5964cb78e855b3b655f7fac7f5c3f24d8aedc","unresolved":false,"context_lines":[{"line_number":5992,"context_line":"                                          marker\u003dNone, filters\u003dNone):"},{"line_number":5993,"context_line":"    if limit \u003d\u003d 0:"},{"line_number":5994,"context_line":"        return []"},{"line_number":5995,"context_line":"    sort_keys \u003d [\u0027created_at\u0027, \u0027id\u0027]"},{"line_number":5996,"context_line":"    sort_dirs \u003d [\u0027desc\u0027, \u0027desc\u0027]"},{"line_number":5997,"context_line":"    query_prefix \u003d model_query(context, models.InstanceAction).\\"},{"line_number":5998,"context_line":"        filter_by(instance_uuid\u003dinstance_uuid)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_4d118b51","line":5995,"range":{"start_line":5995,"start_character":17,"end_line":5995,"end_character":28},"in_reply_to":"3aaa91ec_0402bf09","updated":"2016-06-27 06:45:22.000000000","message":"yes, thanks for the review","commit_id":"a75dbb212c6ae266ab6e5a03daac5c45df683f9e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b2fd7d3441542bee670a7bca788a2f6c27e1a949","unresolved":false,"context_lines":[{"line_number":6242,"context_line":"    if marker is not None:"},{"line_number":6243,"context_line":"        try:"},{"line_number":6244,"context_line":"            marker \u003d action_get_by_request_id(context, instance_uuid, marker)"},{"line_number":6245,"context_line":"        except exception.InstanceActionNotFound:"},{"line_number":6246,"context_line":"            raise exception.MarkerNotFound"},{"line_number":6247,"context_line":"    actions \u003d sqlalchemyutils.paginate_query(query_prefix,"},{"line_number":6248,"context_line":"                                             models.InstanceAction, limit,"},{"line_number":6249,"context_line":"                                             sort_keys, marker\u003dmarker,"}],"source_content_type":"text/x-python","patch_set":28,"id":"ff82abbf_b638ee9f","line":6246,"range":{"start_line":6245,"start_character":7,"end_line":6246,"end_character":42},"updated":"2017-11-27 23:21:34.000000000","message":"There is no DB API unit test for this case.","commit_id":"1e4fe9a6c015413452eccdf34c879791d9936989"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"eaa9b2ba4d2e4d60ef1ea6748111582e26410347","unresolved":false,"context_lines":[{"line_number":6242,"context_line":"    if marker is not None:"},{"line_number":6243,"context_line":"        try:"},{"line_number":6244,"context_line":"            marker \u003d action_get_by_request_id(context, instance_uuid, marker)"},{"line_number":6245,"context_line":"        except exception.InstanceActionNotFound:"},{"line_number":6246,"context_line":"            raise exception.MarkerNotFound"},{"line_number":6247,"context_line":"    actions \u003d sqlalchemyutils.paginate_query(query_prefix,"},{"line_number":6248,"context_line":"                                             models.InstanceAction, limit,"},{"line_number":6249,"context_line":"                                             sort_keys, marker\u003dmarker,"}],"source_content_type":"text/x-python","patch_set":28,"id":"ff82abbf_086e4e2e","line":6246,"range":{"start_line":6245,"start_character":7,"end_line":6246,"end_character":42},"in_reply_to":"ff82abbf_b638ee9f","updated":"2017-11-28 10:20:37.000000000","message":"oh my bad, I will plus soon.","commit_id":"1e4fe9a6c015413452eccdf34c879791d9936989"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6dfe27283fa76091d0d500be0576bc6739cae01a","unresolved":false,"context_lines":[{"line_number":2147,"context_line":"    if limit \u003d\u003d 0:"},{"line_number":2148,"context_line":"        return []"},{"line_number":2149,"context_line":""},{"line_number":2150,"context_line":"    sort_keys, sort_dirs \u003d process_sort_params(sort_keys,"},{"line_number":2151,"context_line":"                                               sort_dirs,"},{"line_number":2152,"context_line":"                                               default_dir\u003d\u0027desc\u0027)"},{"line_number":2153,"context_line":""},{"line_number":2154,"context_line":"    if columns_to_join is None:"},{"line_number":2155,"context_line":"        columns_to_join_new \u003d [\u0027info_cache\u0027, \u0027security_groups\u0027]"}],"source_content_type":"text/x-python","patch_set":35,"id":"df87a7cf_76ccdf60","line":2152,"range":{"start_line":2150,"start_character":27,"end_line":2152,"end_character":66},"updated":"2017-12-06 23:02:22.000000000","message":"Only other place process_sort_params is used is here for listing instances, and the default direction is descending, so that\u0027s what we\u0027re copying when listing instance actions.","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"bf6d3aa6383a55ecf730845cbddc8e98121c7aa3","unresolved":false,"context_lines":[{"line_number":2147,"context_line":"    if limit \u003d\u003d 0:"},{"line_number":2148,"context_line":"        return []"},{"line_number":2149,"context_line":""},{"line_number":2150,"context_line":"    sort_keys, sort_dirs \u003d process_sort_params(sort_keys,"},{"line_number":2151,"context_line":"                                               sort_dirs,"},{"line_number":2152,"context_line":"                                               default_dir\u003d\u0027desc\u0027)"},{"line_number":2153,"context_line":""},{"line_number":2154,"context_line":"    if columns_to_join is None:"},{"line_number":2155,"context_line":"        columns_to_join_new \u003d [\u0027info_cache\u0027, \u0027security_groups\u0027]"}],"source_content_type":"text/x-python","patch_set":35,"id":"df87a7cf_b7b820e5","line":2152,"range":{"start_line":2150,"start_character":27,"end_line":2152,"end_character":66},"in_reply_to":"df87a7cf_76ccdf60","updated":"2017-12-07 09:50:47.000000000","message":"yeah","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6dfe27283fa76091d0d500be0576bc6739cae01a","unresolved":false,"context_lines":[{"line_number":2510,"context_line":""},{"line_number":2511,"context_line":""},{"line_number":2512,"context_line":"def process_sort_params(sort_keys, sort_dirs,"},{"line_number":2513,"context_line":"                        default_keys\u003d[\u0027created_at\u0027, \u0027id\u0027],"},{"line_number":2514,"context_line":"                        default_dir\u003d\u0027asc\u0027):"},{"line_number":2515,"context_line":"    \"\"\"Process the sort parameters to include default keys."},{"line_number":2516,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"df87a7cf_b6ea67a9","line":2513,"range":{"start_line":2513,"start_character":24,"end_line":2513,"end_character":58},"updated":"2017-12-06 23:02:22.000000000","message":"OK so what you\u0027re using defaults to the same thing in here for sort_keys.","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"bf6d3aa6383a55ecf730845cbddc8e98121c7aa3","unresolved":false,"context_lines":[{"line_number":2510,"context_line":""},{"line_number":2511,"context_line":""},{"line_number":2512,"context_line":"def process_sort_params(sort_keys, sort_dirs,"},{"line_number":2513,"context_line":"                        default_keys\u003d[\u0027created_at\u0027, \u0027id\u0027],"},{"line_number":2514,"context_line":"                        default_dir\u003d\u0027asc\u0027):"},{"line_number":2515,"context_line":"    \"\"\"Process the sort parameters to include default keys."},{"line_number":2516,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"df87a7cf_f7c22859","line":2513,"range":{"start_line":2513,"start_character":24,"end_line":2513,"end_character":58},"in_reply_to":"df87a7cf_b6ea67a9","updated":"2017-12-07 09:50:47.000000000","message":"Yes","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6dfe27283fa76091d0d500be0576bc6739cae01a","unresolved":false,"context_lines":[{"line_number":6233,"context_line":"    if limit \u003d\u003d 0:"},{"line_number":6234,"context_line":"        return []"},{"line_number":6235,"context_line":""},{"line_number":6236,"context_line":"    sort_keys \u003d [\u0027created_at\u0027, \u0027id\u0027]"},{"line_number":6237,"context_line":"    sort_dirs \u003d [\u0027desc\u0027, \u0027desc\u0027]"},{"line_number":6238,"context_line":""},{"line_number":6239,"context_line":"    query_prefix \u003d model_query(context, models.InstanceAction).\\"}],"source_content_type":"text/x-python","patch_set":35,"id":"df87a7cf_763a9f34","line":6236,"range":{"start_line":6236,"start_character":18,"end_line":6236,"end_character":28},"updated":"2017-12-06 23:02:22.000000000","message":"We talked about using updated_at if \u0027changes-since\u0027 is in filters, but never got a reply in the ML:\n\nhttp://lists.openstack.org/pipermail/openstack-dev/2017-October/123802.html\n\nThis also more or less matches the defaults from the API:\n\nhttps://github.com/openstack/nova/blob/cbdc893032f10db06a13984df6f8710cb9f9429d/nova/api/openstack/common.py#L142","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"bf6d3aa6383a55ecf730845cbddc8e98121c7aa3","unresolved":false,"context_lines":[{"line_number":6233,"context_line":"    if limit \u003d\u003d 0:"},{"line_number":6234,"context_line":"        return []"},{"line_number":6235,"context_line":""},{"line_number":6236,"context_line":"    sort_keys \u003d [\u0027created_at\u0027, \u0027id\u0027]"},{"line_number":6237,"context_line":"    sort_dirs \u003d [\u0027desc\u0027, \u0027desc\u0027]"},{"line_number":6238,"context_line":""},{"line_number":6239,"context_line":"    query_prefix \u003d model_query(context, models.InstanceAction).\\"}],"source_content_type":"text/x-python","patch_set":35,"id":"df87a7cf_17eeacec","line":6236,"range":{"start_line":6236,"start_character":18,"end_line":6236,"end_character":28},"in_reply_to":"df87a7cf_763a9f34","updated":"2017-12-07 09:50:47.000000000","message":"Yes, so, I just keep sort_keys and sort_dirs as default desc(created_at, id)","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6dfe27283fa76091d0d500be0576bc6739cae01a","unresolved":false,"context_lines":[{"line_number":6259,"context_line":"def action_get_by_request_id(context, instance_uuid, request_id):"},{"line_number":6260,"context_line":"    \"\"\"Get the action by request_id and given instance.\"\"\""},{"line_number":6261,"context_line":"    action \u003d _action_get_by_request_id(context, instance_uuid, request_id)"},{"line_number":6262,"context_line":"    if not action:"},{"line_number":6263,"context_line":"        raise exception.InstanceActionNotFound("},{"line_number":6264,"context_line":"            request_id\u003drequest_id, instance_uuid\u003dinstance_uuid)"},{"line_number":6265,"context_line":"    return action"},{"line_number":6266,"context_line":""},{"line_number":6267,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"df87a7cf_16c6b349","line":6264,"range":{"start_line":6262,"start_character":4,"end_line":6264,"end_character":63},"updated":"2017-12-06 23:02:22.000000000","message":"Why do we need this behavior change? I think we should remove this.","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"bf6d3aa6383a55ecf730845cbddc8e98121c7aa3","unresolved":false,"context_lines":[{"line_number":6259,"context_line":"def action_get_by_request_id(context, instance_uuid, request_id):"},{"line_number":6260,"context_line":"    \"\"\"Get the action by request_id and given instance.\"\"\""},{"line_number":6261,"context_line":"    action \u003d _action_get_by_request_id(context, instance_uuid, request_id)"},{"line_number":6262,"context_line":"    if not action:"},{"line_number":6263,"context_line":"        raise exception.InstanceActionNotFound("},{"line_number":6264,"context_line":"            request_id\u003drequest_id, instance_uuid\u003dinstance_uuid)"},{"line_number":6265,"context_line":"    return action"},{"line_number":6266,"context_line":""},{"line_number":6267,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"df87a7cf_374f3035","line":6264,"range":{"start_line":6262,"start_character":4,"end_line":6264,"end_character":63},"in_reply_to":"df87a7cf_16c6b349","updated":"2017-12-07 09:50:47.000000000","message":"In my previous consideration, I thought we find the marker record using this method, and if marker is not found, we expect it raise InstanceActionNotFound(but it returns [] before). So, I added these code like instance_get_by_uuid done:\nhttps://github.com/openstack/nova/blob/1f29d4283aeeaa6d3cc42eaf72fdb9e2ae417caf/nova/db/sqlalchemy/api.py#L1894\n\nBut these changes also have some effect on the behavior of \u0027instance action show\u0027, so I add some try catch on \"show\" method.\n\nAfter your comment, I found alternate apporach is that we can also do something when get marker like:\n\nmarker \u003d action_get_by_request_id(context, instance_uuid, marker)\nif not marker:\n    raise exception.MarkerNotFound(marker\u003dmarker)\n\njust like keypair and flavor done:\nhttps://github.com/openstack/nova/blob/1f29d4283aeeaa6d3cc42eaf72fdb9e2ae417caf/nova/db/sqlalchemy/api.py#L3063\nhttps://github.com/openstack/nova/blob/1f29d4283aeeaa6d3cc42eaf72fdb9e2ae417caf/nova/db/sqlalchemy/api.py#L4658\n\nYeah, that\u0027s already meet our requirement, I will remove this. : )","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"}],"nova/tests/functional/api_sample_tests/api_samples/os-instance-actions/v2.32/instance-actions-limited-list-resp.json.tpl":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"601c26c21659c53ab3fbc93a1f39d1a9a680dcf2","unresolved":false,"context_lines":[{"line_number":7,"context_line":"            \"user_id\": \"%(integer_id)s\","},{"line_number":8,"context_line":"            \"project_id\": \"%(integer_id)s\","},{"line_number":9,"context_line":"            \"start_time\": \"%(strtime)s\","},{"line_number":10,"context_line":"            \"message\": \"\""},{"line_number":11,"context_line":"        }"},{"line_number":12,"context_line":"    ]"},{"line_number":13,"context_line":"}"}],"source_content_type":"text/x-smarty","patch_set":13,"id":"3aaa91ec_737f0415","line":10,"updated":"2016-06-27 07:52:32.000000000","message":"I think we should expose \u0027updated_at\u0027 to the user. For the next page links, I would like to get some feedback from other api subteam members.","commit_id":"1fd1a88b563600571fa49be68377990003152666"}],"nova/tests/functional/api_sample_tests/test_instance_actions.py":[{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"3a0e2e042c3cff37b6042b4061acb44b8c89150d","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    ADMIN_API \u003d False"},{"line_number":128,"context_line":"    microversion \u003d \u00272.51\u0027"},{"line_number":129,"context_line":"    scenarios \u003d [(\u0027v2_51\u0027, {\u0027api_major_version\u0027: \u0027v2.1\u0027})]"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"class ServerActionsV255SampleJsonTest(ServerActionsSampleJsonTest):"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f485f77_51c1fae3","line":130,"updated":"2017-11-14 06:14:45.000000000","message":"delete one","commit_id":"20c0825c442c8d2f6abbde0023df9557f7397b78"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"130abec175df3dc959e0d52595bc4d99f5fdb5c9","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    ADMIN_API \u003d False"},{"line_number":128,"context_line":"    microversion \u003d \u00272.51\u0027"},{"line_number":129,"context_line":"    scenarios \u003d [(\u0027v2_51\u0027, {\u0027api_major_version\u0027: \u0027v2.1\u0027})]"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"class ServerActionsV255SampleJsonTest(ServerActionsSampleJsonTest):"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f485f77_bc16bef0","line":130,"in_reply_to":"1f485f77_51c1fae3","updated":"2017-11-14 10:02:47.000000000","message":"Done","commit_id":"20c0825c442c8d2f6abbde0023df9557f7397b78"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"30a1e61f6b83eb804d466ecdeb672d8003c1e274","unresolved":false,"context_lines":[{"line_number":139,"context_line":"    scenarios \u003d [(\u0027v2_51\u0027, {\u0027api_major_version\u0027: \u0027v2.1\u0027})]"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"class ServerActionsV255NonAdminSampleJsonTest(ServerActionsV251NonAdminSampleJsonTest):"},{"line_number":143,"context_line":"    microversion \u003d \u00272.55\u0027"},{"line_number":144,"context_line":"    scenarios \u003d [(\u0027v2_55\u0027, {\u0027api_major_version\u0027: \u0027v2.1\u0027})]"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"1f485f77_56ac2c33","line":142,"range":{"start_line":142,"start_character":0,"end_line":142,"end_character":87},"updated":"2017-11-15 06:23:56.000000000","message":"too long","commit_id":"6b1e77a4ed1038d20752cc26e0e839737e6664c4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b2fd7d3441542bee670a7bca788a2f6c27e1a949","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        def fake_instance_action_get_by_request_id(context, uuid, request_id):"},{"line_number":45,"context_line":"            return copy.deepcopy(self.actions[uuid][request_id])"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        def fake_server_actions_get(context, uuid, limit, marker, filters):"},{"line_number":48,"context_line":"            if limit \u003d\u003d 1:"},{"line_number":49,"context_line":"                return [copy.deepcopy(value) for value in"},{"line_number":50,"context_line":"                        six.itervalues(self.first_actions[uuid])]"}],"source_content_type":"text/x-python","patch_set":28,"id":"ff82abbf_d6a1f2f9","line":47,"updated":"2017-11-27 23:21:34.000000000","message":"Please add some comments for the conditional logic in here. It\u0027s unfortunate that we are relying on stubbing out so much of the API testing in these tests. It\u0027s something I\u0027ve wanted to clean up but just haven\u0027t had the time (and can be done later in a follow up change).","commit_id":"1e4fe9a6c015413452eccdf34c879791d9936989"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"eaa9b2ba4d2e4d60ef1ea6748111582e26410347","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        def fake_instance_action_get_by_request_id(context, uuid, request_id):"},{"line_number":45,"context_line":"            return copy.deepcopy(self.actions[uuid][request_id])"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        def fake_server_actions_get(context, uuid, limit, marker, filters):"},{"line_number":48,"context_line":"            if limit \u003d\u003d 1:"},{"line_number":49,"context_line":"                return [copy.deepcopy(value) for value in"},{"line_number":50,"context_line":"                        six.itervalues(self.first_actions[uuid])]"}],"source_content_type":"text/x-python","patch_set":28,"id":"ff82abbf_2d8a4169","line":47,"in_reply_to":"ff82abbf_d6a1f2f9","updated":"2017-11-28 10:20:37.000000000","message":"Done","commit_id":"1e4fe9a6c015413452eccdf34c879791d9936989"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6dfe27283fa76091d0d500be0576bc6739cae01a","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        self.actions \u003d fake_server_actions.FAKE_ACTIONS"},{"line_number":35,"context_line":"        self.events \u003d fake_server_actions.FAKE_EVENTS"},{"line_number":36,"context_line":"        self.instance \u003d test_utils.get_test_instance(obj\u003dTrue)"},{"line_number":37,"context_line":"        self.first_actions \u003d fake_server_actions.FAKE_FRIST_ACTIONS"},{"line_number":38,"context_line":"        self.last_actions \u003d fake_server_actions.FAKE_LAST_ACTIONS"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        def _fake_get(stub_self, context, instance_uuid, expected_attrs\u003dNone):"},{"line_number":41,"context_line":"            return fake_instance.fake_instance_obj("},{"line_number":42,"context_line":"                None, **{\u0027uuid\u0027: instance_uuid})"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        def fake_instance_action_get_by_request_id(context, uuid, request_id):"},{"line_number":45,"context_line":"            return copy.deepcopy(self.actions[uuid][request_id])"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        def fake_server_actions_get(context, uuid, limit, marker, filters):"},{"line_number":48,"context_line":"            # It will be used in test_instance_actions_list_with_limit,"},{"line_number":49,"context_line":"            # and it only returns the first fake action."},{"line_number":50,"context_line":"            if limit \u003d\u003d 1:"},{"line_number":51,"context_line":"                return [copy.deepcopy(value) for value in"},{"line_number":52,"context_line":"                        six.itervalues(self.first_actions[uuid])]"},{"line_number":53,"context_line":"            # It will be used in test_instance_actions_list_with_marker and"},{"line_number":54,"context_line":"            # test_instance_actions_list_with_marker, and it only returns"},{"line_number":55,"context_line":"            # the last fake action."},{"line_number":56,"context_line":"            elif marker or (filters and \u0027changes-since\u0027 in filters):"},{"line_number":57,"context_line":"                return [copy.deepcopy(value) for value in"},{"line_number":58,"context_line":"                        six.itervalues(self.last_actions[uuid])]"},{"line_number":59,"context_line":"            else:"},{"line_number":60,"context_line":"                return [copy.deepcopy(value) for value in"},{"line_number":61,"context_line":"                        six.itervalues(self.actions[uuid])]"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        def fake_instance_action_events_get(context, action_id):"},{"line_number":64,"context_line":"            return copy.deepcopy(self.events[action_id])"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        def fake_instance_get_by_uuid(context, instance_id):"},{"line_number":67,"context_line":"            return self.instance"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        self.stub_out(\u0027nova.db.action_get_by_request_id\u0027,"},{"line_number":70,"context_line":"                      fake_instance_action_get_by_request_id)"},{"line_number":71,"context_line":"        self.stub_out(\u0027nova.db.actions_get\u0027,"},{"line_number":72,"context_line":"                      fake_server_actions_get)"},{"line_number":73,"context_line":"        self.stub_out(\u0027nova.db.action_events_get\u0027,"},{"line_number":74,"context_line":"                      fake_instance_action_events_get)"},{"line_number":75,"context_line":"        self.stub_out(\u0027nova.db.instance_get_by_uuid\u0027,"},{"line_number":76,"context_line":"                      fake_instance_get_by_uuid)"},{"line_number":77,"context_line":"        self.stub_out(\u0027nova.compute.api.API.get\u0027, _fake_get)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def test_instance_action_get(self):"},{"line_number":80,"context_line":"        fake_uuid \u003d fake_server_actions.FAKE_UUID"}],"source_content_type":"text/x-python","patch_set":35,"id":"df87a7cf_d695abe5","line":77,"range":{"start_line":37,"start_character":8,"end_line":77,"end_character":60},"updated":"2017-12-06 23:02:22.000000000","message":"See my comment in the sample. Can we avoid building on the stubs used in here for the 2.57 samples? We should be able to create and stop a server to get 2 actions which would have an event in each action, and then you can test paging across the actions too and we\u0027d actually have real samples plus we\u0027d actually be testing the code functionality rather than faking everything out.","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"bf6d3aa6383a55ecf730845cbddc8e98121c7aa3","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        self.actions \u003d fake_server_actions.FAKE_ACTIONS"},{"line_number":35,"context_line":"        self.events \u003d fake_server_actions.FAKE_EVENTS"},{"line_number":36,"context_line":"        self.instance \u003d test_utils.get_test_instance(obj\u003dTrue)"},{"line_number":37,"context_line":"        self.first_actions \u003d fake_server_actions.FAKE_FRIST_ACTIONS"},{"line_number":38,"context_line":"        self.last_actions \u003d fake_server_actions.FAKE_LAST_ACTIONS"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        def _fake_get(stub_self, context, instance_uuid, expected_attrs\u003dNone):"},{"line_number":41,"context_line":"            return fake_instance.fake_instance_obj("},{"line_number":42,"context_line":"                None, **{\u0027uuid\u0027: instance_uuid})"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        def fake_instance_action_get_by_request_id(context, uuid, request_id):"},{"line_number":45,"context_line":"            return copy.deepcopy(self.actions[uuid][request_id])"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        def fake_server_actions_get(context, uuid, limit, marker, filters):"},{"line_number":48,"context_line":"            # It will be used in test_instance_actions_list_with_limit,"},{"line_number":49,"context_line":"            # and it only returns the first fake action."},{"line_number":50,"context_line":"            if limit \u003d\u003d 1:"},{"line_number":51,"context_line":"                return [copy.deepcopy(value) for value in"},{"line_number":52,"context_line":"                        six.itervalues(self.first_actions[uuid])]"},{"line_number":53,"context_line":"            # It will be used in test_instance_actions_list_with_marker and"},{"line_number":54,"context_line":"            # test_instance_actions_list_with_marker, and it only returns"},{"line_number":55,"context_line":"            # the last fake action."},{"line_number":56,"context_line":"            elif marker or (filters and \u0027changes-since\u0027 in filters):"},{"line_number":57,"context_line":"                return [copy.deepcopy(value) for value in"},{"line_number":58,"context_line":"                        six.itervalues(self.last_actions[uuid])]"},{"line_number":59,"context_line":"            else:"},{"line_number":60,"context_line":"                return [copy.deepcopy(value) for value in"},{"line_number":61,"context_line":"                        six.itervalues(self.actions[uuid])]"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        def fake_instance_action_events_get(context, action_id):"},{"line_number":64,"context_line":"            return copy.deepcopy(self.events[action_id])"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        def fake_instance_get_by_uuid(context, instance_id):"},{"line_number":67,"context_line":"            return self.instance"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        self.stub_out(\u0027nova.db.action_get_by_request_id\u0027,"},{"line_number":70,"context_line":"                      fake_instance_action_get_by_request_id)"},{"line_number":71,"context_line":"        self.stub_out(\u0027nova.db.actions_get\u0027,"},{"line_number":72,"context_line":"                      fake_server_actions_get)"},{"line_number":73,"context_line":"        self.stub_out(\u0027nova.db.action_events_get\u0027,"},{"line_number":74,"context_line":"                      fake_instance_action_events_get)"},{"line_number":75,"context_line":"        self.stub_out(\u0027nova.db.instance_get_by_uuid\u0027,"},{"line_number":76,"context_line":"                      fake_instance_get_by_uuid)"},{"line_number":77,"context_line":"        self.stub_out(\u0027nova.compute.api.API.get\u0027, _fake_get)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def test_instance_action_get(self):"},{"line_number":80,"context_line":"        fake_uuid \u003d fake_server_actions.FAKE_UUID"}],"source_content_type":"text/x-python","patch_set":35,"id":"df87a7cf_7af7ddd4","line":77,"range":{"start_line":37,"start_character":8,"end_line":77,"end_character":60},"in_reply_to":"df87a7cf_d695abe5","updated":"2017-12-07 09:50:47.000000000","message":"OK, I will have a try.","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"969ae6d260a1796eec088f64f1a9a340ec3be341","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        subs[\u0027request_id\u0027] \u003d (\u0027req-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}\u0027"},{"line_number":159,"context_line":"                              \u0027-[0-9a-f]{4}-[0-9a-f]{12}\u0027)"},{"line_number":160,"context_line":"        subs[\u0027result\u0027] \u003d \u0027Success\u0027"},{"line_number":161,"context_line":"        subs[\u0027event\u0027] \u003d \u0027compute_stop_instance\u0027"},{"line_number":162,"context_line":"        # Non-admins can see event details except for the \"traceback\" field"},{"line_number":163,"context_line":"        # starting in the 2.51 microversion."},{"line_number":164,"context_line":"        if self.ADMIN_API:"}],"source_content_type":"text/x-python","patch_set":41,"id":"df87a7cf_c13d63c4","line":161,"updated":"2017-12-12 19:24:47.000000000","message":"nit: we likely wouldn\u0027t need to sub this out if we actually waited for the stop operation to complete above, because os-stop is an RPC cast from the API to the compute service, so by the time the API responds, the instance action is created but when we get the action details, the compute_stop_instance event might not have been created (or completed). If we wanted to make this more deterministic, we could poll the server status until it\u0027s SHUTOFF, using:\n\nhttps://github.com/openstack/nova/blob/32c8ac6b7dfe4ca0c211cbce7c5a67d88558126f/nova/tests/functional/integrated_helpers.py#L242","commit_id":"3213e093e8bbec20b6512b5d8b5a19e03e9e87a6"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"fe4b10250bbb94f7b68c612d5b854c841b2699fa","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        subs[\u0027request_id\u0027] \u003d (\u0027req-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}\u0027"},{"line_number":159,"context_line":"                              \u0027-[0-9a-f]{4}-[0-9a-f]{12}\u0027)"},{"line_number":160,"context_line":"        subs[\u0027result\u0027] \u003d \u0027Success\u0027"},{"line_number":161,"context_line":"        subs[\u0027event\u0027] \u003d \u0027compute_stop_instance\u0027"},{"line_number":162,"context_line":"        # Non-admins can see event details except for the \"traceback\" field"},{"line_number":163,"context_line":"        # starting in the 2.51 microversion."},{"line_number":164,"context_line":"        if self.ADMIN_API:"}],"source_content_type":"text/x-python","patch_set":41,"id":"df87a7cf_0fb4c334","line":161,"in_reply_to":"df87a7cf_c13d63c4","updated":"2017-12-13 09:12:30.000000000","message":"oops, I didn\u0027t catch this before, I will address it.","commit_id":"3213e093e8bbec20b6512b5d8b5a19e03e9e87a6"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"c834a9573270a7f6ffdbf597ecfc8fc430a51050","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        response_data \u003d api_samples_test_base.pretty_data(response.content)"},{"line_number":150,"context_line":"        actions \u003d api_samples_test_base.objectify(response_data)"},{"line_number":151,"context_line":"        self.action_stop \u003d actions[\u0027instanceActions\u0027][0]"},{"line_number":152,"context_line":"        self._wait_for_state_change(self.api, {\u0027id\u0027: self.uuid }, \u0027SHUTOFF\u0027)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def test_instance_action_get(self):"},{"line_number":155,"context_line":"        req_id \u003d self.action_stop[\u0027request_id\u0027]"}],"source_content_type":"text/x-python","patch_set":42,"id":"df87a7cf_12b4ec34","line":152,"range":{"start_line":152,"start_character":62,"end_line":152,"end_character":63},"updated":"2017-12-13 09:35:55.000000000","message":":(","commit_id":"cc094f04848ac7d77cc7e96073cf1a2ed7f8aad4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f97590fbc5c687d43c4b241b6109ce48ca7947a3","unresolved":false,"context_lines":[{"line_number":142,"context_line":"    def setUp(self):"},{"line_number":143,"context_line":"        super(ServerActionsV257SampleJsonTest, self).setUp()"},{"line_number":144,"context_line":"        # Create and stop a server"},{"line_number":145,"context_line":"        self.uuid \u003d self._post_server()"},{"line_number":146,"context_line":"        self._get_response(\u0027servers/%s/action\u0027 % self.uuid, \u0027POST\u0027,"},{"line_number":147,"context_line":"                           \u0027{\"os-stop\": null}\u0027)"},{"line_number":148,"context_line":"        response \u003d self._do_get(\u0027servers/%s/os-instance-actions\u0027 % self.uuid)"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_18e3a6a6","line":145,"range":{"start_line":145,"start_character":8,"end_line":145,"end_character":39},"updated":"2017-12-13 14:38:18.000000000","message":"We can use this to sub out the uuid in the sample response as well.","commit_id":"d27e24a362231df092b214b4b2f50e6cdd78a1d7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ec568a5e13194aed7673141df566bdf359993437","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        self.uuid \u003d self._post_server()"},{"line_number":146,"context_line":"        self._get_response(\u0027servers/%s/action\u0027 % self.uuid, \u0027POST\u0027,"},{"line_number":147,"context_line":"                           \u0027{\"os-stop\": null}\u0027)"},{"line_number":148,"context_line":"        response \u003d self._do_get(\u0027servers/%s/os-instance-actions\u0027 % self.uuid)"},{"line_number":149,"context_line":"        response_data \u003d api_samples_test_base.pretty_data(response.content)"},{"line_number":150,"context_line":"        actions \u003d api_samples_test_base.objectify(response_data)"},{"line_number":151,"context_line":"        self.action_stop \u003d actions[\u0027instanceActions\u0027][0]"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_49e2c303","line":148,"updated":"2017-12-13 13:03:02.000000000","message":"just note for the other readers: This get won\u0027t race with the above os-stop request as the InstanceAction start is called from compute.api before the os-stop returns.","commit_id":"d27e24a362231df092b214b4b2f50e6cdd78a1d7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f97590fbc5c687d43c4b241b6109ce48ca7947a3","unresolved":false,"context_lines":[{"line_number":157,"context_line":"                                (self.uuid, req_id))"},{"line_number":158,"context_line":"        subs \u003d {}"},{"line_number":159,"context_line":"        subs[\u0027action\u0027] \u003d \u0027stop\u0027"},{"line_number":160,"context_line":"        subs[\u0027integer_id\u0027] \u003d \u0027[0-9]+\u0027"},{"line_number":161,"context_line":"        subs[\u0027request_id\u0027] \u003d (\u0027req-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}\u0027"},{"line_number":162,"context_line":"                              \u0027-[0-9a-f]{4}-[0-9a-f]{12}\u0027)"},{"line_number":163,"context_line":"        subs[\u0027result\u0027] \u003d \u0027Success\u0027"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_58ca8e4f","line":160,"range":{"start_line":160,"start_character":8,"end_line":160,"end_character":37},"updated":"2017-12-13 14:38:18.000000000","message":"this isn\u0027t used","commit_id":"d27e24a362231df092b214b4b2f50e6cdd78a1d7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f97590fbc5c687d43c4b241b6109ce48ca7947a3","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        subs \u003d {}"},{"line_number":159,"context_line":"        subs[\u0027action\u0027] \u003d \u0027stop\u0027"},{"line_number":160,"context_line":"        subs[\u0027integer_id\u0027] \u003d \u0027[0-9]+\u0027"},{"line_number":161,"context_line":"        subs[\u0027request_id\u0027] \u003d (\u0027req-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}\u0027"},{"line_number":162,"context_line":"                              \u0027-[0-9a-f]{4}-[0-9a-f]{12}\u0027)"},{"line_number":163,"context_line":"        subs[\u0027result\u0027] \u003d \u0027Success\u0027"},{"line_number":164,"context_line":"        subs[\u0027event\u0027] \u003d \u0027compute_stop_instance\u0027"},{"line_number":165,"context_line":"        # Non-admins can see event details except for the \"traceback\" field"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_f8e042cf","line":162,"range":{"start_line":161,"start_character":8,"end_line":162,"end_character":58},"updated":"2017-12-13 14:38:18.000000000","message":"We can move this into _get_regexes.","commit_id":"d27e24a362231df092b214b4b2f50e6cdd78a1d7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9ef23c681a06ef1329c90b2a70f5bae116e5db4e","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        subs[\u0027request_id\u0027] \u003d (\u0027req-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}\u0027"},{"line_number":162,"context_line":"                              \u0027-[0-9a-f]{4}-[0-9a-f]{12}\u0027)"},{"line_number":163,"context_line":"        subs[\u0027result\u0027] \u003d \u0027Success\u0027"},{"line_number":164,"context_line":"        subs[\u0027event\u0027] \u003d \u0027compute_stop_instance\u0027"},{"line_number":165,"context_line":"        # Non-admins can see event details except for the \"traceback\" field"},{"line_number":166,"context_line":"        # starting in the 2.51 microversion."},{"line_number":167,"context_line":"        if self.ADMIN_API:"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_d85e9ee8","line":164,"range":{"start_line":164,"start_character":8,"end_line":164,"end_character":47},"updated":"2017-12-13 14:19:47.000000000","message":"Can we remove this now and hard-code it into the sample? We should be able to expect this to be there since you\u0027re waiting for the instance state to be SHUTOFF.","commit_id":"d27e24a362231df092b214b4b2f50e6cdd78a1d7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f97590fbc5c687d43c4b241b6109ce48ca7947a3","unresolved":false,"context_lines":[{"line_number":173,"context_line":"    def test_instance_actions_list(self):"},{"line_number":174,"context_line":"        response \u003d self._do_get(\u0027servers/%s/os-instance-actions\u0027 % self.uuid)"},{"line_number":175,"context_line":"        subs \u003d {}"},{"line_number":176,"context_line":"        subs[\u0027action\u0027] \u003d \u0027(create)|(stop)\u0027"},{"line_number":177,"context_line":"        subs[\u0027integer_id\u0027] \u003d \u0027[0-9]+\u0027"},{"line_number":178,"context_line":"        subs[\u0027request_id\u0027] \u003d (\u0027req-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}\u0027"},{"line_number":179,"context_line":"                              \u0027-[0-9a-f]{4}-[0-9a-f]{12}\u0027)"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_b8863adb","line":176,"range":{"start_line":176,"start_character":8,"end_line":176,"end_character":42},"updated":"2017-12-13 14:38:18.000000000","message":"We shouldn\u0027t need this either because we know the sort order is created_at in descending order, so stop will come before create.","commit_id":"d27e24a362231df092b214b4b2f50e6cdd78a1d7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"73f50c9a5b2e8fe102ac97d60c438b7e391d2513","unresolved":false,"context_lines":[{"line_number":142,"context_line":"    def setUp(self):"},{"line_number":143,"context_line":"        super(ServerActionsV258SampleJsonTest, self).setUp()"},{"line_number":144,"context_line":"        # Create and stop a server"},{"line_number":145,"context_line":"        self.uuid \u003d self._post_server()"},{"line_number":146,"context_line":"        self._get_response(\u0027servers/%s/action\u0027 % self.uuid, \u0027POST\u0027,"},{"line_number":147,"context_line":"                           \u0027{\"os-stop\": null}\u0027)"},{"line_number":148,"context_line":"        response \u003d self._do_get(\u0027servers/%s/os-instance-actions\u0027 % self.uuid)"}],"source_content_type":"text/x-python","patch_set":48,"id":"df87a7cf_49b4f035","line":145,"range":{"start_line":145,"start_character":8,"end_line":145,"end_character":39},"updated":"2017-12-14 02:42:16.000000000","message":"Is this using the 2.1 sample with personality files? I think that\u0027s maybe why this is failing - you\u0027d need to use the 2.57 server create sample.","commit_id":"a257678c0ea98eeef8d4b5611ed34abc77452c05"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"5c64f8f5ac23c4cc5c5bf2366be492a36f083409","unresolved":false,"context_lines":[{"line_number":142,"context_line":"    def setUp(self):"},{"line_number":143,"context_line":"        super(ServerActionsV258SampleJsonTest, self).setUp()"},{"line_number":144,"context_line":"        # Create and stop a server"},{"line_number":145,"context_line":"        self.uuid \u003d self._post_server()"},{"line_number":146,"context_line":"        self._get_response(\u0027servers/%s/action\u0027 % self.uuid, \u0027POST\u0027,"},{"line_number":147,"context_line":"                           \u0027{\"os-stop\": null}\u0027)"},{"line_number":148,"context_line":"        response \u003d self._do_get(\u0027servers/%s/os-instance-actions\u0027 % self.uuid)"}],"source_content_type":"text/x-python","patch_set":48,"id":"df87a7cf_15503b32","line":145,"range":{"start_line":145,"start_character":8,"end_line":145,"end_character":39},"in_reply_to":"df87a7cf_49b4f035","updated":"2017-12-14 08:06:03.000000000","message":"As current change, we(I and Kevin) add some new sample file to post common server, it works, and I think it is benefit for future use.\n\n\nBTW, I also try to create the server directly using _build_minimal_create_server_request and post_server as your second suggestion. But I found something difference in new microversion, see note in:\nhttps://github.com/openstack/nova/blob/e599b13e4940fb9654f0e0c0f43077a6979eaabe/nova/tests/functional/integrated_helpers.py#L143, we also need other specific params(such as networks).\n\nWith the version up, we also need make these test utils  \u0027up\u0027, maybe I can do something to improve these in follow up.","commit_id":"a257678c0ea98eeef8d4b5611ed34abc77452c05"}],"nova/tests/functional/api_samples_test_base.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ec568a5e13194aed7673141df566bdf359993437","unresolved":false,"context_lines":[{"line_number":451,"context_line":"            \u0027text\u0027: text,"},{"line_number":452,"context_line":"            \u0027int\u0027: \u0027[0-9]+\u0027,"},{"line_number":453,"context_line":"            \u0027user_id\u0027: text,"},{"line_number":454,"context_line":"            \u0027project_id\u0027: text,"},{"line_number":455,"context_line":"            \u0027api_vers\u0027: self.api_major_version,"},{"line_number":456,"context_line":"            \u0027compute_endpoint\u0027: self._get_compute_endpoint(),"},{"line_number":457,"context_line":"            \u0027versioned_compute_endpoint\u0027: self._get_vers_compute_endpoint(),"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_29ce5f83","line":454,"updated":"2017-12-13 13:03:02.000000000","message":"It feels like an unrelated change but I can be mistaken.","commit_id":"d27e24a362231df092b214b4b2f50e6cdd78a1d7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"540289ca068afc60d5dd2482df2d8af5468a9404","unresolved":false,"context_lines":[{"line_number":451,"context_line":"            \u0027text\u0027: text,"},{"line_number":452,"context_line":"            \u0027int\u0027: \u0027[0-9]+\u0027,"},{"line_number":453,"context_line":"            \u0027user_id\u0027: text,"},{"line_number":454,"context_line":"            \u0027project_id\u0027: text,"},{"line_number":455,"context_line":"            \u0027api_vers\u0027: self.api_major_version,"},{"line_number":456,"context_line":"            \u0027compute_endpoint\u0027: self._get_compute_endpoint(),"},{"line_number":457,"context_line":"            \u0027versioned_compute_endpoint\u0027: self._get_vers_compute_endpoint(),"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_78c19280","line":454,"in_reply_to":"df87a7cf_18e5e638","updated":"2017-12-13 14:18:19.000000000","message":"Used here:\n\nhttps://review.openstack.org/#/c/326326/43/nova/tests/functional/api_sample_tests/api_samples/os-instance-actions/v2.57/instance-action-get-non-admin-resp.json.tpl@7\n\nAlthough, we could use the self.action_stop[\u0027project_id\u0027] value for the sub in the test and then we wouldn\u0027t probably need this.","commit_id":"d27e24a362231df092b214b4b2f50e6cdd78a1d7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"076fc2fe235530e1081d26875a0287f9fdcfde36","unresolved":false,"context_lines":[{"line_number":451,"context_line":"            \u0027text\u0027: text,"},{"line_number":452,"context_line":"            \u0027int\u0027: \u0027[0-9]+\u0027,"},{"line_number":453,"context_line":"            \u0027user_id\u0027: text,"},{"line_number":454,"context_line":"            \u0027project_id\u0027: text,"},{"line_number":455,"context_line":"            \u0027api_vers\u0027: self.api_major_version,"},{"line_number":456,"context_line":"            \u0027compute_endpoint\u0027: self._get_compute_endpoint(),"},{"line_number":457,"context_line":"            \u0027versioned_compute_endpoint\u0027: self._get_vers_compute_endpoint(),"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_18e5e638","line":454,"in_reply_to":"df87a7cf_29ce5f83","updated":"2017-12-13 14:15:32.000000000","message":"I don\u0027t think so, it\u0027s a sub for the samples.","commit_id":"d27e24a362231df092b214b4b2f50e6cdd78a1d7"}],"nova/tests/functional/test_instance_actions.py":[{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"3a0e2e042c3cff37b6042b4061acb44b8c89150d","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"class InstanceActionsTestV233(InstanceActionsTestV221):"},{"line_number":85,"context_line":"    microversion \u003d \u00272.323\u0027"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def setUp(self):"},{"line_number":88,"context_line":"        super(InstanceActionsTestV233, self).setUp()"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f485f77_918d32d5","line":85,"range":{"start_line":85,"start_character":20,"end_line":85,"end_character":25},"updated":"2017-11-14 06:14:45.000000000","message":"Typo?","commit_id":"20c0825c442c8d2f6abbde0023df9557f7397b78"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"130abec175df3dc959e0d52595bc4d99f5fdb5c9","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"class InstanceActionsTestV233(InstanceActionsTestV221):"},{"line_number":85,"context_line":"    microversion \u003d \u00272.323\u0027"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def setUp(self):"},{"line_number":88,"context_line":"        super(InstanceActionsTestV233, self).setUp()"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f485f77_dc1bba18","line":85,"range":{"start_line":85,"start_character":20,"end_line":85,"end_character":25},"in_reply_to":"1f485f77_918d32d5","updated":"2017-11-14 10:02:47.000000000","message":"Done","commit_id":"20c0825c442c8d2f6abbde0023df9557f7397b78"}],"nova/tests/unit/api/openstack/compute/test_instance_actions.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b2fd7d3441542bee670a7bca788a2f6c27e1a949","unresolved":false,"context_lines":[{"line_number":241,"context_line":"    expect_events_non_admin \u003d True"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"class InstanceActionsTestV256(InstanceActionsTestV251):"},{"line_number":245,"context_line":"    wsgi_api_version \u003d \"2.56\""},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    @mock.patch(\u0027nova.db.actions_get_by_filters_and_pagination\u0027)"}],"source_content_type":"text/x-python","patch_set":28,"id":"ff82abbf_b6ea2e0c","line":244,"range":{"start_line":244,"start_character":6,"end_line":244,"end_character":29},"updated":"2017-11-27 23:21:34.000000000","message":"For the 3 new tests in here, the schema defines them all as single parameter, so you could also add a case to each test where you specify the parameter more than once, e.g. ?marker\u003dA\u0026marker\u003dB.","commit_id":"1e4fe9a6c015413452eccdf34c879791d9936989"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"eaa9b2ba4d2e4d60ef1ea6748111582e26410347","unresolved":false,"context_lines":[{"line_number":241,"context_line":"    expect_events_non_admin \u003d True"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"class InstanceActionsTestV256(InstanceActionsTestV251):"},{"line_number":245,"context_line":"    wsgi_api_version \u003d \"2.56\""},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    @mock.patch(\u0027nova.db.actions_get_by_filters_and_pagination\u0027)"}],"source_content_type":"text/x-python","patch_set":28,"id":"ff82abbf_2d056111","line":244,"range":{"start_line":244,"start_character":6,"end_line":244,"end_character":29},"in_reply_to":"ff82abbf_b6ea2e0c","updated":"2017-11-28 10:20:37.000000000","message":"OK, sure.","commit_id":"1e4fe9a6c015413452eccdf34c879791d9936989"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b2fd7d3441542bee670a7bca788a2f6c27e1a949","unresolved":false,"context_lines":[{"line_number":266,"context_line":"    def test_get_action_with_invalid_change_since(self):"},{"line_number":267,"context_line":"        \"\"\"Tests get paging with a invalid change_since.\"\"\""},{"line_number":268,"context_line":"        req \u003d self._get_http_req(\u0027os-instance-actions?\u0027"},{"line_number":269,"context_line":"                                 \u0027change_since\u003dwrong_time\u0027)"},{"line_number":270,"context_line":"        self.assertRaises(exception.ValidationError,"},{"line_number":271,"context_line":"                          self.controller.index, req)"}],"source_content_type":"text/x-python","patch_set":28,"id":"ff82abbf_36c7fe98","line":269,"range":{"start_line":269,"start_character":34,"end_line":269,"end_character":46},"updated":"2017-11-27 23:21:34.000000000","message":"This is failing for the wrong reason. The parameter is \"changes-since\" but you have \"change_since\" which is wrong. So this fails because \"additionalProperties: false\", but I don\u0027t think that\u0027s what you meant to test - although that\u0027s also a good test to have.\n\nYou should maybe assert something about the error to make sure the ValidationError is what you expect, e.g.:\n\nex \u003d self.assertRaises(exception.ValidationError, ...)\nself.assertIn(\u0027something you expect in the error message\u0027,\n              six.text_type(ex))","commit_id":"1e4fe9a6c015413452eccdf34c879791d9936989"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"eaa9b2ba4d2e4d60ef1ea6748111582e26410347","unresolved":false,"context_lines":[{"line_number":266,"context_line":"    def test_get_action_with_invalid_change_since(self):"},{"line_number":267,"context_line":"        \"\"\"Tests get paging with a invalid change_since.\"\"\""},{"line_number":268,"context_line":"        req \u003d self._get_http_req(\u0027os-instance-actions?\u0027"},{"line_number":269,"context_line":"                                 \u0027change_since\u003dwrong_time\u0027)"},{"line_number":270,"context_line":"        self.assertRaises(exception.ValidationError,"},{"line_number":271,"context_line":"                          self.controller.index, req)"}],"source_content_type":"text/x-python","patch_set":28,"id":"ff82abbf_ea843fd5","line":269,"range":{"start_line":269,"start_character":34,"end_line":269,"end_character":46},"in_reply_to":"ff82abbf_36c7fe98","updated":"2017-11-28 10:20:37.000000000","message":"Oh, good catch, ^o^. I have to admit it\u0027s the lucky passed, I will address this following your advice.","commit_id":"1e4fe9a6c015413452eccdf34c879791d9936989"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6dfe27283fa76091d0d500be0576bc6739cae01a","unresolved":false,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def test_action_not_found(self):"},{"line_number":205,"context_line":"        def fake_no_action(context, uuid, action_id):"},{"line_number":206,"context_line":"            raise exception.InstanceActionNotFound("},{"line_number":207,"context_line":"                request_id\u003daction_id, instance_uuid\u003duuid)"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        self.stub_out(\u0027nova.db.action_get_by_request_id\u0027, fake_no_action)"},{"line_number":210,"context_line":"        req \u003d self._get_http_req(\u0027os-instance-actions/1\u0027)"}],"source_content_type":"text/x-python","patch_set":35,"id":"df87a7cf_f698ef1b","line":207,"range":{"start_line":206,"start_character":12,"end_line":207,"end_character":57},"updated":"2017-12-06 23:02:22.000000000","message":"This shouldn\u0027t need to change...","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"bf6d3aa6383a55ecf730845cbddc8e98121c7aa3","unresolved":false,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def test_action_not_found(self):"},{"line_number":205,"context_line":"        def fake_no_action(context, uuid, action_id):"},{"line_number":206,"context_line":"            raise exception.InstanceActionNotFound("},{"line_number":207,"context_line":"                request_id\u003daction_id, instance_uuid\u003duuid)"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        self.stub_out(\u0027nova.db.action_get_by_request_id\u0027, fake_no_action)"},{"line_number":210,"context_line":"        req \u003d self._get_http_req(\u0027os-instance-actions/1\u0027)"}],"source_content_type":"text/x-python","patch_set":35,"id":"df87a7cf_17c78c66","line":207,"range":{"start_line":206,"start_character":12,"end_line":207,"end_character":57},"in_reply_to":"df87a7cf_f698ef1b","updated":"2017-12-07 09:50:47.000000000","message":"OK, I will revert it.","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6dfe27283fa76091d0d500be0576bc6739cae01a","unresolved":false,"context_lines":[{"line_number":244,"context_line":"class InstanceActionsTestV257(InstanceActionsTestV251):"},{"line_number":245,"context_line":"    wsgi_api_version \u003d \"2.57\""},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    @mock.patch(\u0027nova.db.actions_get\u0027)"},{"line_number":248,"context_line":"    def test_get_action_with_invalid_marker(self, mock_actions_get):"},{"line_number":249,"context_line":"        \"\"\"Tests detail paging with an invalid marker (not found).\"\"\""},{"line_number":250,"context_line":"        mock_actions_get.side_effect \u003d exception.MarkerNotFound("}],"source_content_type":"text/x-python","patch_set":35,"id":"df87a7cf_96b88376","line":247,"range":{"start_line":247,"start_character":17,"end_line":247,"end_character":37},"updated":"2017-12-06 23:02:22.000000000","message":"I\u0027d prefer if we mock on the InstanceActionList object rather than way down on the DB API code.","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"}],"nova/tests/unit/db/test_db_api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6dfe27283fa76091d0d500be0576bc6739cae01a","unresolved":false,"context_lines":[{"line_number":4095,"context_line":"        action_values[\u0027request_id\u0027] \u003d \u0027req-\u0027 + uuidsentinel.reqid1"},{"line_number":4096,"context_line":"        db.action_start(self.ctxt, action_values)"},{"line_number":4097,"context_line":""},{"line_number":4098,"context_line":"        actions \u003d db.actions_get(self.ctxt, uuid1,"},{"line_number":4099,"context_line":"                                                           limit\u003d1)"},{"line_number":4100,"context_line":"        self.assertEqual(1, len(actions))"},{"line_number":4101,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"df87a7cf_b67027de","line":4098,"range":{"start_line":4098,"start_character":21,"end_line":4098,"end_character":32},"updated":"2017-12-06 23:02:22.000000000","message":"Before we apply the limit, should we call to assert that we have 2 total actions?","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"bf6d3aa6383a55ecf730845cbddc8e98121c7aa3","unresolved":false,"context_lines":[{"line_number":4095,"context_line":"        action_values[\u0027request_id\u0027] \u003d \u0027req-\u0027 + uuidsentinel.reqid1"},{"line_number":4096,"context_line":"        db.action_start(self.ctxt, action_values)"},{"line_number":4097,"context_line":""},{"line_number":4098,"context_line":"        actions \u003d db.actions_get(self.ctxt, uuid1,"},{"line_number":4099,"context_line":"                                                           limit\u003d1)"},{"line_number":4100,"context_line":"        self.assertEqual(1, len(actions))"},{"line_number":4101,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"df87a7cf_f79b0815","line":4098,"range":{"start_line":4098,"start_character":21,"end_line":4098,"end_character":32},"in_reply_to":"df87a7cf_b67027de","updated":"2017-12-07 09:50:47.000000000","message":"Yeah, done.","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6dfe27283fa76091d0d500be0576bc6739cae01a","unresolved":false,"context_lines":[{"line_number":4095,"context_line":"        action_values[\u0027request_id\u0027] \u003d \u0027req-\u0027 + uuidsentinel.reqid1"},{"line_number":4096,"context_line":"        db.action_start(self.ctxt, action_values)"},{"line_number":4097,"context_line":""},{"line_number":4098,"context_line":"        actions \u003d db.actions_get(self.ctxt, uuid1,"},{"line_number":4099,"context_line":"                                                           limit\u003d1)"},{"line_number":4100,"context_line":"        self.assertEqual(1, len(actions))"},{"line_number":4101,"context_line":""},{"line_number":4102,"context_line":"        actions \u003d db.actions_get("}],"source_content_type":"text/x-python","patch_set":35,"id":"df87a7cf_d6636b19","line":4099,"range":{"start_line":4098,"start_character":50,"end_line":4099,"end_character":66},"updated":"2017-12-06 23:02:22.000000000","message":"Something happened here...","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"bf6d3aa6383a55ecf730845cbddc8e98121c7aa3","unresolved":false,"context_lines":[{"line_number":4095,"context_line":"        action_values[\u0027request_id\u0027] \u003d \u0027req-\u0027 + uuidsentinel.reqid1"},{"line_number":4096,"context_line":"        db.action_start(self.ctxt, action_values)"},{"line_number":4097,"context_line":""},{"line_number":4098,"context_line":"        actions \u003d db.actions_get(self.ctxt, uuid1,"},{"line_number":4099,"context_line":"                                                           limit\u003d1)"},{"line_number":4100,"context_line":"        self.assertEqual(1, len(actions))"},{"line_number":4101,"context_line":""},{"line_number":4102,"context_line":"        actions \u003d db.actions_get("}],"source_content_type":"text/x-python","patch_set":35,"id":"df87a7cf_97807cc1","line":4099,"range":{"start_line":4098,"start_character":50,"end_line":4099,"end_character":66},"in_reply_to":"df87a7cf_d6636b19","updated":"2017-12-07 09:50:47.000000000","message":"oops","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6dfe27283fa76091d0d500be0576bc6739cae01a","unresolved":false,"context_lines":[{"line_number":4122,"context_line":"        action_values[\u0027action\u0027] \u003d \u0027delete\u0027"},{"line_number":4123,"context_line":"        action2 \u003d db.action_start(self.ctxt, action_values)"},{"line_number":4124,"context_line":""},{"line_number":4125,"context_line":"        actions \u003d db.actions_get("},{"line_number":4126,"context_line":"            self.ctxt, uuid1, filters\u003d{\u0027changes-since\u0027: timestamp})"},{"line_number":4127,"context_line":"        self.assertEqual(1, len(actions))"},{"line_number":4128,"context_line":"        self._assertEqualListsOfObjects([action2], actions)"}],"source_content_type":"text/x-python","patch_set":35,"id":"df87a7cf_d64ccb9f","line":4125,"range":{"start_line":4125,"start_character":21,"end_line":4125,"end_character":32},"updated":"2017-12-06 23:02:22.000000000","message":"Before we filter on updated_at, it would be good to assert that we have 2 actions in the DB and they have different updated_at values.","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"bf6d3aa6383a55ecf730845cbddc8e98121c7aa3","unresolved":false,"context_lines":[{"line_number":4122,"context_line":"        action_values[\u0027action\u0027] \u003d \u0027delete\u0027"},{"line_number":4123,"context_line":"        action2 \u003d db.action_start(self.ctxt, action_values)"},{"line_number":4124,"context_line":""},{"line_number":4125,"context_line":"        actions \u003d db.actions_get("},{"line_number":4126,"context_line":"            self.ctxt, uuid1, filters\u003d{\u0027changes-since\u0027: timestamp})"},{"line_number":4127,"context_line":"        self.assertEqual(1, len(actions))"},{"line_number":4128,"context_line":"        self._assertEqualListsOfObjects([action2], actions)"}],"source_content_type":"text/x-python","patch_set":35,"id":"df87a7cf_979cfc0e","line":4125,"range":{"start_line":4125,"start_character":21,"end_line":4125,"end_character":32},"in_reply_to":"df87a7cf_d64ccb9f","updated":"2017-12-07 09:50:47.000000000","message":"Done","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"}],"nova/tests/unit/fake_server_actions.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"969ae6d260a1796eec088f64f1a9a340ec3be341","unresolved":false,"context_lines":[{"line_number":18,"context_line":"FAKE_UUID \u003d \u0027b48316c5-71e8-45e4-9884-6c78055b9b13\u0027"},{"line_number":19,"context_line":"FAKE_REQUEST_ID1 \u003d \u0027req-3293a3f1-b44c-4609-b8d2-d81b105636b8\u0027"},{"line_number":20,"context_line":"FAKE_REQUEST_ID2 \u003d \u0027req-25517360-b757-47d3-be45-0e8d2a01b36a\u0027"},{"line_number":21,"context_line":"FAKE_REQUEST_ID3 \u003d \u0027req-77788888-b757-47d3-be45-0e8d2a01b36a\u0027"},{"line_number":22,"context_line":"FAKE_ACTION_ID1 \u003d 123"},{"line_number":23,"context_line":"FAKE_ACTION_ID2 \u003d 456"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"FAKE_ACTIONS \u003d {"},{"line_number":26,"context_line":"    FAKE_UUID: {"},{"line_number":27,"context_line":"        FAKE_REQUEST_ID1: {\u0027id\u0027: FAKE_ACTION_ID1,"},{"line_number":28,"context_line":"                           \u0027action\u0027: \u0027reboot\u0027,"},{"line_number":29,"context_line":"                           \u0027instance_uuid\u0027: FAKE_UUID,"},{"line_number":30,"context_line":"                           \u0027request_id\u0027: FAKE_REQUEST_ID1,"},{"line_number":31,"context_line":"                           \u0027project_id\u0027: \u0027147\u0027,"},{"line_number":32,"context_line":"                           \u0027user_id\u0027: \u0027789\u0027,"},{"line_number":33,"context_line":"                           \u0027start_time\u0027: datetime.datetime("},{"line_number":34,"context_line":"                               2012, 12, 5, 0, 0, 0, 0),"},{"line_number":35,"context_line":"                           \u0027finish_time\u0027: None,"},{"line_number":36,"context_line":"                           \u0027message\u0027: \u0027\u0027,"},{"line_number":37,"context_line":"                           \u0027created_at\u0027: datetime.datetime("},{"line_number":38,"context_line":"                               2012, 12, 5, 0, 0, 0, 0),"},{"line_number":39,"context_line":"                           \u0027updated_at\u0027: datetime.datetime("},{"line_number":40,"context_line":"                               2012, 12, 5, 0, 0, 0, 0),"},{"line_number":41,"context_line":"                           \u0027deleted_at\u0027: None,"},{"line_number":42,"context_line":"                           \u0027deleted\u0027: False,"},{"line_number":43,"context_line":"        },"},{"line_number":44,"context_line":"        FAKE_REQUEST_ID2: {\u0027id\u0027: FAKE_ACTION_ID2,"},{"line_number":45,"context_line":"                           \u0027action\u0027: \u0027resize\u0027,"},{"line_number":46,"context_line":"                           \u0027instance_uuid\u0027: FAKE_UUID,"},{"line_number":47,"context_line":"                           \u0027request_id\u0027: FAKE_REQUEST_ID2,"},{"line_number":48,"context_line":"                           \u0027user_id\u0027: \u0027789\u0027,"},{"line_number":49,"context_line":"                           \u0027project_id\u0027: \u0027842\u0027,"},{"line_number":50,"context_line":"                           \u0027start_time\u0027: datetime.datetime("},{"line_number":51,"context_line":"                               2012, 12, 5, 1, 0, 0, 0),"},{"line_number":52,"context_line":"                           \u0027finish_time\u0027: None,"},{"line_number":53,"context_line":"                           \u0027message\u0027: \u0027\u0027,"},{"line_number":54,"context_line":"                           \u0027created_at\u0027: datetime.datetime("},{"line_number":55,"context_line":"                               2012, 12, 5, 1, 0, 0, 0),"},{"line_number":56,"context_line":"                           \u0027updated_at\u0027: datetime.datetime("},{"line_number":57,"context_line":"                               2012, 12, 5, 1, 0, 0, 0),"},{"line_number":58,"context_line":"                           \u0027deleted_at\u0027: None,"},{"line_number":59,"context_line":"                           \u0027deleted\u0027: False,"},{"line_number":60,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":41,"id":"df87a7cf_a15cdf18","line":57,"range":{"start_line":21,"start_character":0,"end_line":57,"end_character":56},"updated":"2017-12-12 19:24:47.000000000","message":"Do we need any of these changes now that you\u0027ve changed the 2.57 API samples functional tests to not be relying on fakes? Or I guess these are needed for the unit tests:\n\nhttps://review.openstack.org/#/c/326326/41/nova/tests/unit/api/openstack/compute/test_instance_actions.py","commit_id":"3213e093e8bbec20b6512b5d8b5a19e03e9e87a6"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"fe4b10250bbb94f7b68c612d5b854c841b2699fa","unresolved":false,"context_lines":[{"line_number":18,"context_line":"FAKE_UUID \u003d \u0027b48316c5-71e8-45e4-9884-6c78055b9b13\u0027"},{"line_number":19,"context_line":"FAKE_REQUEST_ID1 \u003d \u0027req-3293a3f1-b44c-4609-b8d2-d81b105636b8\u0027"},{"line_number":20,"context_line":"FAKE_REQUEST_ID2 \u003d \u0027req-25517360-b757-47d3-be45-0e8d2a01b36a\u0027"},{"line_number":21,"context_line":"FAKE_REQUEST_ID3 \u003d \u0027req-77788888-b757-47d3-be45-0e8d2a01b36a\u0027"},{"line_number":22,"context_line":"FAKE_ACTION_ID1 \u003d 123"},{"line_number":23,"context_line":"FAKE_ACTION_ID2 \u003d 456"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"FAKE_ACTIONS \u003d {"},{"line_number":26,"context_line":"    FAKE_UUID: {"},{"line_number":27,"context_line":"        FAKE_REQUEST_ID1: {\u0027id\u0027: FAKE_ACTION_ID1,"},{"line_number":28,"context_line":"                           \u0027action\u0027: \u0027reboot\u0027,"},{"line_number":29,"context_line":"                           \u0027instance_uuid\u0027: FAKE_UUID,"},{"line_number":30,"context_line":"                           \u0027request_id\u0027: FAKE_REQUEST_ID1,"},{"line_number":31,"context_line":"                           \u0027project_id\u0027: \u0027147\u0027,"},{"line_number":32,"context_line":"                           \u0027user_id\u0027: \u0027789\u0027,"},{"line_number":33,"context_line":"                           \u0027start_time\u0027: datetime.datetime("},{"line_number":34,"context_line":"                               2012, 12, 5, 0, 0, 0, 0),"},{"line_number":35,"context_line":"                           \u0027finish_time\u0027: None,"},{"line_number":36,"context_line":"                           \u0027message\u0027: \u0027\u0027,"},{"line_number":37,"context_line":"                           \u0027created_at\u0027: datetime.datetime("},{"line_number":38,"context_line":"                               2012, 12, 5, 0, 0, 0, 0),"},{"line_number":39,"context_line":"                           \u0027updated_at\u0027: datetime.datetime("},{"line_number":40,"context_line":"                               2012, 12, 5, 0, 0, 0, 0),"},{"line_number":41,"context_line":"                           \u0027deleted_at\u0027: None,"},{"line_number":42,"context_line":"                           \u0027deleted\u0027: False,"},{"line_number":43,"context_line":"        },"},{"line_number":44,"context_line":"        FAKE_REQUEST_ID2: {\u0027id\u0027: FAKE_ACTION_ID2,"},{"line_number":45,"context_line":"                           \u0027action\u0027: \u0027resize\u0027,"},{"line_number":46,"context_line":"                           \u0027instance_uuid\u0027: FAKE_UUID,"},{"line_number":47,"context_line":"                           \u0027request_id\u0027: FAKE_REQUEST_ID2,"},{"line_number":48,"context_line":"                           \u0027user_id\u0027: \u0027789\u0027,"},{"line_number":49,"context_line":"                           \u0027project_id\u0027: \u0027842\u0027,"},{"line_number":50,"context_line":"                           \u0027start_time\u0027: datetime.datetime("},{"line_number":51,"context_line":"                               2012, 12, 5, 1, 0, 0, 0),"},{"line_number":52,"context_line":"                           \u0027finish_time\u0027: None,"},{"line_number":53,"context_line":"                           \u0027message\u0027: \u0027\u0027,"},{"line_number":54,"context_line":"                           \u0027created_at\u0027: datetime.datetime("},{"line_number":55,"context_line":"                               2012, 12, 5, 1, 0, 0, 0),"},{"line_number":56,"context_line":"                           \u0027updated_at\u0027: datetime.datetime("},{"line_number":57,"context_line":"                               2012, 12, 5, 1, 0, 0, 0),"},{"line_number":58,"context_line":"                           \u0027deleted_at\u0027: None,"},{"line_number":59,"context_line":"                           \u0027deleted\u0027: False,"},{"line_number":60,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":41,"id":"df87a7cf_af5ef7e6","line":57,"range":{"start_line":21,"start_character":0,"end_line":57,"end_character":56},"in_reply_to":"df87a7cf_a15cdf18","updated":"2017-12-13 09:12:30.000000000","message":"emm...only the FAKE_REQUEST_ID3 is introduced as a FAKE_REQUEST_NOTFOUND_ID.\n\nAnd we can change FAKE_REQUEST_NOTFOUND_ID to:\n\nFAKE_REQUEST_NOTFOUND_ID \u003d \u0027req-\u0027 + uuids.req_not_found\n\nSo, I can revert all these unrelated changes.","commit_id":"3213e093e8bbec20b6512b5d8b5a19e03e9e87a6"}],"releasenotes/notes/bp-add-pagination-for-instance-actions-1c14cb3fc9887d2a.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6dfe27283fa76091d0d500be0576bc6739cae01a","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add pagination support and ``changes-since`` filter for os-instance-actions"},{"line_number":5,"context_line":"    API. Users can now use ``limit`` and ``marker`` to perform paginate query"},{"line_number":6,"context_line":"    when listing instance actions. Users can also use ``changes-since`` filter"},{"line_number":7,"context_line":"    to filter the results based on the last time the instance action was"},{"line_number":8,"context_line":"    updated."}],"source_content_type":"text/x-yaml","patch_set":35,"id":"df87a7cf_3655f71d","line":5,"range":{"start_line":5,"start_character":63,"end_line":5,"end_character":71},"updated":"2017-12-06 23:02:22.000000000","message":"paginated","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"bf6d3aa6383a55ecf730845cbddc8e98121c7aa3","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add pagination support and ``changes-since`` filter for os-instance-actions"},{"line_number":5,"context_line":"    API. Users can now use ``limit`` and ``marker`` to perform paginate query"},{"line_number":6,"context_line":"    when listing instance actions. Users can also use ``changes-since`` filter"},{"line_number":7,"context_line":"    to filter the results based on the last time the instance action was"},{"line_number":8,"context_line":"    updated."}],"source_content_type":"text/x-yaml","patch_set":35,"id":"df87a7cf_37c4105f","line":5,"range":{"start_line":5,"start_character":63,"end_line":5,"end_character":71},"in_reply_to":"df87a7cf_3655f71d","updated":"2017-12-07 09:50:47.000000000","message":"Done","commit_id":"1b274fb1e9114ab9dca884a61ce24673c596477d"}]}
