)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"83bfe88608577730a0cd14a6159cddd86e12fbe1","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Fetch InProgress migrations through Admin API"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"DocImpact: This patch adds an extension \u0027Migrations\u0027. If this"},{"line_number":10,"context_line":"extension is enabled and admin would be able to fetch InProgress"},{"line_number":11,"context_line":"migrations for a region/cell. The route for fetching migrations for"},{"line_number":12,"context_line":"a region is - v2/{tenant_id}/os-migrations. The route for fetching for"},{"line_number":13,"context_line":"a cell is -v2/{tenant_id}/os-migrations?cell_name\u003d{cell_name}."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAPH%2F%2Fj5A%3D","line":10,"updated":"2013-05-30 14:54:45.000000000","message":"s/and/an/","commit_id":"82e7080a26eca240e4fe1c9484d2bb53c3dcbfdf"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b7da068a3da00c6e0f769210b826ec466505b767","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Mahesh Panchaksharaiah \u003cmaheshp@thoughtworks.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-05-30 21:02:20 +0530"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fetch InProgress migrations through Admin API"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"DocImpact: This patch adds an extension \u0027Migrations\u0027. If this"},{"line_number":10,"context_line":"extension is enabled an admin would be able to fetch InProgress"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAPH%2F%2Fcq8%3D","line":7,"updated":"2013-06-03 18:58:55.000000000","message":"do you mean \"in progress migrations\"","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b7da068a3da00c6e0f769210b826ec466505b767","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fetch InProgress migrations through Admin API"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"DocImpact: This patch adds an extension \u0027Migrations\u0027. If this"},{"line_number":10,"context_line":"extension is enabled an admin would be able to fetch InProgress"},{"line_number":11,"context_line":"migrations for a region/cell. The route for fetching migrations for"},{"line_number":12,"context_line":"a region is - v2/{tenant_id}/os-migrations. The route for fetching for"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAPH%2F%2FcrQ%3D","line":9,"updated":"2013-06-03 18:58:55.000000000","message":"DocImpact isn\u0027t usually used like this.","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"f5e51cbd1245a0200a18f055bbe0e6e60de59d81","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fetch InProgress migrations through Admin API"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"DocImpact: This patch adds an extension \u0027Migrations\u0027. If this"},{"line_number":10,"context_line":"extension is enabled an admin would be able to fetch InProgress"},{"line_number":11,"context_line":"migrations for a region/cell. The route for fetching migrations for"},{"line_number":12,"context_line":"a region is - v2/{tenant_id}/os-migrations. The route for fetching for"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAPH%2F%2FcgM%3D","line":9,"in_reply_to":"AAAAPH%2F%2FcrQ%3D","updated":"2013-06-03 20:06:34.000000000","message":"Yeah, DocImpact should be on its own line down with change-id and blueprint.","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"}],"doc/api_samples/all_extensions/extensions-get-resp.xml":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b7da068a3da00c6e0f769210b826ec466505b767","unresolved":false,"context_lines":[{"line_number":217,"context_line":"    \u003cdescription\u003eVolumes support.\u003c/description\u003e"},{"line_number":218,"context_line":"  \u003c/extension\u003e"},{"line_number":219,"context_line":"  \u003cextension alias\u003d\"os-migrations\" updated\u003d\"2013-05-30T00:00:00+00:00\""},{"line_number":220,"context_line":"             namespace\u003d\"http://docs.openstack.org/compute/ext/migrations/api/v1.0\" name\u003d\"Migrations\"\u003e"},{"line_number":221,"context_line":"    \u003cdescription\u003eProvide data on migrations in progress.\u003c/description\u003e"},{"line_number":222,"context_line":"  \u003c/extension\u003e"},{"line_number":223,"context_line":"\u003c/extensions\u003e"}],"source_content_type":"application/xml","patch_set":4,"id":"AAAAPH%2F%2Fcyk%3D","line":220,"updated":"2013-06-03 18:58:55.000000000","message":"v1.1 or v2 seems more consistent with the other extensions here.","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"}],"doc/api_samples/os-migrations/migrations-get.xml":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b7da068a3da00c6e0f769210b826ec466505b767","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003c?xml version\u003d\u00271.0\u0027 encoding\u003d\u0027UTF-8\u0027?\u003e"},{"line_number":2,"context_line":"\u003cmigrations\u003e"},{"line_number":3,"context_line":"  \u003cmigration dest_host\u003d\"1.2.3.4\" status\u003d\"Done\" old_instance_type_id\u003d\"1\" updated_at\u003d\"2012-10-29 13:42:02\" dest_compute\u003d\"compute2\" created_at\u003d\"2012-10-29 13:42:02\" source_node\u003d\"node1\" instance_uuid\u003d\"instance_id_123\" dest_node\u003d\"node2\" id\u003d\"1234\" new_instance_type_id\u003d\"2\" source_compute\u003d\"compute1\"/\u003e"},{"line_number":4,"context_line":"\u003c/migrations\u003e"}],"source_content_type":"application/xml","patch_set":4,"id":"AAAAPH%2F%2Fcxo%3D","line":3,"updated":"2013-06-03 18:58:55.000000000","message":"This is not very consistent with other XML responses, where it is more like:\n\n\u003cmigrations\u003e\u003cmigration\u003e\u003cdest_host\u003e1.2.3.4\u003c/...\u003e","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"},{"author":{"_account_id":7393,"name":"Mahesh Panchaksharaiah","email":"maheshp@thoughtworks.com","username":"panchaks"},"change_message_id":"0d05d9657634b9739a651cba48814a84cbdf865c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003c?xml version\u003d\u00271.0\u0027 encoding\u003d\u0027UTF-8\u0027?\u003e"},{"line_number":2,"context_line":"\u003cmigrations\u003e"},{"line_number":3,"context_line":"  \u003cmigration dest_host\u003d\"1.2.3.4\" status\u003d\"Done\" old_instance_type_id\u003d\"1\" updated_at\u003d\"2012-10-29 13:42:02\" dest_compute\u003d\"compute2\" created_at\u003d\"2012-10-29 13:42:02\" source_node\u003d\"node1\" instance_uuid\u003d\"instance_id_123\" dest_node\u003d\"node2\" id\u003d\"1234\" new_instance_type_id\u003d\"2\" source_compute\u003d\"compute1\"/\u003e"},{"line_number":4,"context_line":"\u003c/migrations\u003e"}],"source_content_type":"application/xml","patch_set":4,"id":"AAAAPH%2F%2Fb%2Bc%3D","line":3,"in_reply_to":"AAAAPH%2F%2Fcxo%3D","updated":"2013-06-03 23:32:25.000000000","message":"Is there any other reason apart from consistence that you want me to change this?","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b81479086c7a9f6266bdb7988629017fb5a6d379","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003c?xml version\u003d\u00271.0\u0027 encoding\u003d\u0027UTF-8\u0027?\u003e"},{"line_number":2,"context_line":"\u003cmigrations\u003e"},{"line_number":3,"context_line":"  \u003cmigration dest_host\u003d\"1.2.3.4\" status\u003d\"Done\" old_instance_type_id\u003d\"1\" updated_at\u003d\"2012-10-29 13:42:02\" dest_compute\u003d\"compute2\" created_at\u003d\"2012-10-29 13:42:02\" source_node\u003d\"node1\" instance_uuid\u003d\"instance_id_123\" dest_node\u003d\"node2\" id\u003d\"1234\" new_instance_type_id\u003d\"2\" source_compute\u003d\"compute1\"/\u003e"},{"line_number":4,"context_line":"  \u003cmigration dest_host\u003d\"5.6.7.8\" status\u003d\"Done\" old_instance_type_id\u003d\"5\" updated_at\u003d\"2013-10-22 13:42:02\" dest_compute\u003d\"compute20\" created_at\u003d\"2013-10-22 13:42:02\" source_node\u003d\"node10\" instance_uuid\u003d\"instance_id_456\" dest_node\u003d\"node20\" id\u003d\"5678\" new_instance_type_id\u003d\"6\" source_compute\u003d\"compute10\"/\u003e"},{"line_number":5,"context_line":"\u003c/migrations\u003e"}],"source_content_type":"application/xml","patch_set":7,"id":"AAAAPn%2F%2F0HE%3D","line":3,"updated":"2013-06-21 08:30:50.000000000","message":"This format seems quite different to the other XML responses that tend to use entities rather than attributes.","commit_id":"2abf6346f463763185a4f59edf9e365dcf9021e6"},{"author":{"_account_id":7393,"name":"Mahesh Panchaksharaiah","email":"maheshp@thoughtworks.com","username":"panchaks"},"change_message_id":"a6adedcafee455adc6bed6c1d04af6d32701b361","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003c?xml version\u003d\u00271.0\u0027 encoding\u003d\u0027UTF-8\u0027?\u003e"},{"line_number":2,"context_line":"\u003cmigrations\u003e"},{"line_number":3,"context_line":"  \u003cmigration dest_host\u003d\"1.2.3.4\" status\u003d\"Done\" old_instance_type_id\u003d\"1\" updated_at\u003d\"2012-10-29 13:42:02\" dest_compute\u003d\"compute2\" created_at\u003d\"2012-10-29 13:42:02\" source_node\u003d\"node1\" instance_uuid\u003d\"instance_id_123\" dest_node\u003d\"node2\" id\u003d\"1234\" new_instance_type_id\u003d\"2\" source_compute\u003d\"compute1\"/\u003e"},{"line_number":4,"context_line":"  \u003cmigration dest_host\u003d\"5.6.7.8\" status\u003d\"Done\" old_instance_type_id\u003d\"5\" updated_at\u003d\"2013-10-22 13:42:02\" dest_compute\u003d\"compute20\" created_at\u003d\"2013-10-22 13:42:02\" source_node\u003d\"node10\" instance_uuid\u003d\"instance_id_456\" dest_node\u003d\"node20\" id\u003d\"5678\" new_instance_type_id\u003d\"6\" source_compute\u003d\"compute10\"/\u003e"},{"line_number":5,"context_line":"\u003c/migrations\u003e"}],"source_content_type":"application/xml","patch_set":7,"id":"AAAAPn%2F%2FyMg%3D","line":3,"in_reply_to":"AAAAPn%2F%2F0HE%3D","updated":"2013-06-21 11:15:59.000000000","message":"I have seen a mix of both, cells-get-resp.xml, services-get-resp.xml are some examples of using attributes. I can change it if there strong reasons to do it.","commit_id":"2abf6346f463763185a4f59edf9e365dcf9021e6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a2b6354213e138865fb94c97077fad7f83db2706","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003c?xml version\u003d\u00271.0\u0027 encoding\u003d\u0027UTF-8\u0027?\u003e"},{"line_number":2,"context_line":"\u003cmigrations\u003e"},{"line_number":3,"context_line":"  \u003cmigration dest_host\u003d\"1.2.3.4\" status\u003d\"Done\" old_instance_type_id\u003d\"1\" updated_at\u003d\"2012-10-29 13:42:02\" dest_compute\u003d\"compute2\" created_at\u003d\"2012-10-29 13:42:02\" source_node\u003d\"node1\" instance_uuid\u003d\"instance_id_123\" dest_node\u003d\"node2\" id\u003d\"1234\" new_instance_type_id\u003d\"2\" source_compute\u003d\"compute1\"/\u003e"},{"line_number":4,"context_line":"  \u003cmigration dest_host\u003d\"5.6.7.8\" status\u003d\"Done\" old_instance_type_id\u003d\"5\" updated_at\u003d\"2013-10-22 13:42:02\" dest_compute\u003d\"compute20\" created_at\u003d\"2013-10-22 13:42:02\" source_node\u003d\"node10\" instance_uuid\u003d\"instance_id_456\" dest_node\u003d\"node20\" id\u003d\"5678\" new_instance_type_id\u003d\"6\" source_compute\u003d\"compute10\"/\u003e"},{"line_number":5,"context_line":"\u003c/migrations\u003e"}],"source_content_type":"application/xml","patch_set":7,"id":"AAAAPn%2F%2Fa%2BA%3D","line":3,"in_reply_to":"AAAAPn%2F%2FyMg%3D","updated":"2013-07-02 10:41:48.000000000","message":"Hmm, OK.","commit_id":"2abf6346f463763185a4f59edf9e365dcf9021e6"}],"nova/api/openstack/compute/contrib/migrations.py":[{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"83bfe88608577730a0cd14a6159cddd86e12fbe1","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            target[\u0027cell_name\u0027] \u003d req.GET.get(\u0027cell_name\u0027)"},{"line_number":66,"context_line":"        try:"},{"line_number":67,"context_line":"            return {\u0027migrations\u0027: self.compute_api."},{"line_number":68,"context_line":"            migrations_in_progress(context, target)}"},{"line_number":69,"context_line":"        except exception.CellNotFound:"},{"line_number":70,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2Fj40%3D","line":68,"updated":"2013-05-30 14:54:45.000000000","message":"continuation line needs indentation for readability","commit_id":"82e7080a26eca240e4fe1c9484d2bb53c3dcbfdf"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"f5e51cbd1245a0200a18f055bbe0e6e60de59d81","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2Fcgs%3D","line":3,"updated":"2013-06-03 20:06:34.000000000","message":"This line isn\u0027t necessary.  And if you do want to add it I think it should technically be Rackspace Hosting since that\u0027s who the contributor agreement is with.\n\nSame for all new files.","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b7da068a3da00c6e0f769210b826ec466505b767","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from nova import exception"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"XMLNS \u003d \"http://docs.openstack.org/compute/ext/migrations/api/v1.0\""},{"line_number":27,"context_line":"ALIAS \u003d \"os-migrations\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FcwU%3D","line":26,"updated":"2013-06-03 18:58:55.000000000","message":"as mentioned before I think this is inconsistent with other extensions.","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b7da068a3da00c6e0f769210b826ec466505b767","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        self.compute_api \u003d compute.API()"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @wsgi.serializers(xml\u003dMigrationsTemplate)"},{"line_number":57,"context_line":"    def index(self, req):"},{"line_number":58,"context_line":"        \"\"\"Return all migrations in progress.\"\"\""},{"line_number":59,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":60,"context_line":"        target \u003d {"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FcxQ%3D","line":57,"updated":"2013-06-03 18:58:55.000000000","message":"Needs policy checks, you might want this admin only I assume?","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b7da068a3da00c6e0f769210b826ec466505b767","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        \"\"\"Return all migrations in progress.\"\"\""},{"line_number":59,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":60,"context_line":"        target \u003d {"},{"line_number":61,"context_line":"            \u0027project_id\u0027: context.project_id,"},{"line_number":62,"context_line":"            \u0027user_id\u0027: context.user_id"},{"line_number":63,"context_line":"        }"},{"line_number":64,"context_line":"        if \u0027cell_name\u0027 in req.GET:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FcxA%3D","line":61,"updated":"2013-06-03 18:58:55.000000000","message":"it doesn\u0027t seem like project_id and user_id are used by anything. Why are they here?","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"f5e51cbd1245a0200a18f055bbe0e6e60de59d81","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        \"\"\"Return all migrations in progress.\"\"\""},{"line_number":59,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":60,"context_line":"        target \u003d {"},{"line_number":61,"context_line":"            \u0027project_id\u0027: context.project_id,"},{"line_number":62,"context_line":"            \u0027user_id\u0027: context.user_id"},{"line_number":63,"context_line":"        }"},{"line_number":64,"context_line":"        if \u0027cell_name\u0027 in req.GET:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FceM%3D","line":61,"in_reply_to":"AAAAPH%2F%2FcxA%3D","updated":"2013-06-03 20:06:34.000000000","message":"They appear to be here for the wrap_check_policy decorator in the compute api.  But I agree with your point above about policy checks here.  I don\u0027t see why policy checking shouldn\u0027t happen at this level.","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b7da068a3da00c6e0f769210b826ec466505b767","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            target[\u0027cell_name\u0027] \u003d req.GET.get(\u0027cell_name\u0027)"},{"line_number":66,"context_line":"        try:"},{"line_number":67,"context_line":"            return {\u0027migrations\u0027: self.compute_api."},{"line_number":68,"context_line":"                migrations_in_progress(context, target)}"},{"line_number":69,"context_line":"        except exception.CellNotFound:"},{"line_number":70,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2Fcwg%3D","line":68,"updated":"2013-06-03 18:58:55.000000000","message":"The API seems a bit incomplete.\n\nShould the user not specify what state they would like, then maybe default to \"in progress\"? Maybe they want to see any that are yet to be confirmed, but have finished.\n\nWould they not want to filter by host or cell?","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"f5e51cbd1245a0200a18f055bbe0e6e60de59d81","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            target[\u0027cell_name\u0027] \u003d req.GET.get(\u0027cell_name\u0027)"},{"line_number":66,"context_line":"        try:"},{"line_number":67,"context_line":"            return {\u0027migrations\u0027: self.compute_api."},{"line_number":68,"context_line":"                migrations_in_progress(context, target)}"},{"line_number":69,"context_line":"        except exception.CellNotFound:"},{"line_number":70,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FcdM%3D","line":68,"in_reply_to":"AAAAPH%2F%2Fcwg%3D","updated":"2013-06-03 20:06:34.000000000","message":"I agree that this should be a bit more generic.  If we\u0027re going to expose migrations then they should be more fully exposed.  And more filtering options.","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"a73fe1b2bb43949a84d5ca300dda8ac49e861e06","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":60,"context_line":"        authorize(context, \"index\")"},{"line_number":61,"context_line":"        return {"},{"line_number":62,"context_line":"        \u0027migrations\u0027: self.compute_api.get_migrations(context, req.GET)}"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"class Migrations(extensions.ExtensionDescriptor):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPX%2F%2Frfw%3D","line":62,"updated":"2013-06-12 22:17:13.000000000","message":"This line needs to be indented.  I recommend changing this to read:\n\n    migrations \u003d self.compute_api.get_migrations(context, req.GET)\n    return {\u0027migrations\u0027: migrations}","commit_id":"3692b8901cf636bd5a749b8a5f497cde57246de8"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b81479086c7a9f6266bdb7988629017fb5a6d379","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    def index(self, req):"},{"line_number":58,"context_line":"        \"\"\"Return all migrations in progress.\"\"\""},{"line_number":59,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":60,"context_line":"        authorize(context, \"index\")"},{"line_number":61,"context_line":"        migrations \u003d self.compute_api.get_migrations(context, req.GET)"},{"line_number":62,"context_line":"        return {\u0027migrations\u0027: migrations}"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2Fye4%3D","line":60,"updated":"2013-06-21 08:30:50.000000000","message":"would be good to check we get the correct response code when this raises. A unit test using a user rather than context maybe?","commit_id":"2abf6346f463763185a4f59edf9e365dcf9021e6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a2b6354213e138865fb94c97077fad7f83db2706","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    def index(self, req):"},{"line_number":58,"context_line":"        \"\"\"Return all migrations in progress.\"\"\""},{"line_number":59,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":60,"context_line":"        authorize(context, \"index\")"},{"line_number":61,"context_line":"        migrations \u003d self.compute_api.get_migrations(context, req.GET)"},{"line_number":62,"context_line":"        return {\u0027migrations\u0027: migrations}"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2Fa%2BE%3D","line":60,"in_reply_to":"AAAAPn%2F%2FyMw%3D","updated":"2013-07-02 10:41:48.000000000","message":"Hmm, I as just thinking making sure the correct authorize is called in a unit test, but its not a deal breaker.","commit_id":"2abf6346f463763185a4f59edf9e365dcf9021e6"},{"author":{"_account_id":7393,"name":"Mahesh Panchaksharaiah","email":"maheshp@thoughtworks.com","username":"panchaks"},"change_message_id":"a6adedcafee455adc6bed6c1d04af6d32701b361","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    def index(self, req):"},{"line_number":58,"context_line":"        \"\"\"Return all migrations in progress.\"\"\""},{"line_number":59,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":60,"context_line":"        authorize(context, \"index\")"},{"line_number":61,"context_line":"        migrations \u003d self.compute_api.get_migrations(context, req.GET)"},{"line_number":62,"context_line":"        return {\u0027migrations\u0027: migrations}"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2FyMw%3D","line":60,"in_reply_to":"AAAAPn%2F%2Fye4%3D","updated":"2013-06-21 11:15:59.000000000","message":"The reason I did not add this test is because when we throw a NotAuthorized exception in the controller, the framework would take care of sending an appropriate response in nova/api/openstack/wsgi.py and I believe this is tested. \n\nCan this be more of an tempest integration test.","commit_id":"2abf6346f463763185a4f59edf9e365dcf9021e6"}],"nova/cells/manager.py":[{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"83bfe88608577730a0cd14a6159cddd86e12fbe1","unresolved":false,"context_lines":[{"line_number":50,"context_line":"CONF.register_opts(cell_manager_opts, group\u003d\u0027cells\u0027)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"# Separator used between cell names for the \u0027full cell name\u0027."},{"line_number":53,"context_line":"_PATH_CELL_SEP \u003d cells_utils._PATH_CELL_SEP"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"class CellsManager(manager.Manager):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2Fj4o%3D","line":53,"updated":"2013-05-30 14:54:45.000000000","message":"Is it worth putting this in a global if you only use it once?","commit_id":"82e7080a26eca240e4fe1c9484d2bb53c3dcbfdf"},{"author":{"_account_id":7393,"name":"Mahesh Panchaksharaiah","email":"maheshp@thoughtworks.com","username":"panchaks"},"change_message_id":"c645e53b4a09de6687b6c356c33f67bb660877b4","unresolved":false,"context_lines":[{"line_number":50,"context_line":"CONF.register_opts(cell_manager_opts, group\u003d\u0027cells\u0027)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"# Separator used between cell names for the \u0027full cell name\u0027."},{"line_number":53,"context_line":"_PATH_CELL_SEP \u003d cells_utils._PATH_CELL_SEP"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"class CellsManager(manager.Manager):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2FjxI%3D","line":53,"in_reply_to":"AAAAPH%2F%2Fj4o%3D","updated":"2013-05-30 15:32:59.000000000","message":"Agreed, guess not required.","commit_id":"82e7080a26eca240e4fe1c9484d2bb53c3dcbfdf"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b7da068a3da00c6e0f769210b826ec466505b767","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    messages."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    Scheduling requests get passed to the scheduler class."},{"line_number":67,"context_line":"    \"\"\""},{"line_number":68,"context_line":"    RPC_API_VERSION \u003d \u00271.7\u0027"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2Fct8%3D","line":67,"updated":"2013-06-03 18:58:55.000000000","message":"Need to bump the version","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"}],"nova/cells/messaging.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b7da068a3da00c6e0f769210b826ec466505b767","unresolved":false,"context_lines":[{"line_number":777,"context_line":"        return self.compute_rpcapi.validate_console_port(message.ctxt,"},{"line_number":778,"context_line":"                instance, console_port, console_type)"},{"line_number":779,"context_line":""},{"line_number":780,"context_line":"    def migrations_in_progress(self, message):"},{"line_number":781,"context_line":"        ctxt \u003d message.ctxt"},{"line_number":782,"context_line":"        target \u003d {"},{"line_number":783,"context_line":"            \u0027project_id\u0027: ctxt.project_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2Fcvw%3D","line":780,"updated":"2013-06-03 18:58:55.000000000","message":"Maybe get_migrations(self, message, project_uuid\u003dNone, state\u003dIN_PROGRESS) or something like that would a more useful additon?","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b7da068a3da00c6e0f769210b826ec466505b767","unresolved":false,"context_lines":[{"line_number":783,"context_line":"            \u0027project_id\u0027: ctxt.project_id,"},{"line_number":784,"context_line":"            \u0027user_id\u0027: ctxt.user_id"},{"line_number":785,"context_line":"        }"},{"line_number":786,"context_line":"        return self.compute_api.migrations_in_progress(ctxt, target)"},{"line_number":787,"context_line":""},{"line_number":788,"context_line":""},{"line_number":789,"context_line":"class _BroadcastMessageMethods(_BaseMessageMethods):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FcjI%3D","line":786,"updated":"2013-06-03 18:58:55.000000000","message":"This seems a bit odd, but can\u0027t think how it should be done right now.\n\nI thought this is where you would do the call to the child cell?","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"7bd8ec47b460f560a7564f6e6e77e2d6e3524dc7","unresolved":false,"context_lines":[{"line_number":783,"context_line":"            \u0027project_id\u0027: ctxt.project_id,"},{"line_number":784,"context_line":"            \u0027user_id\u0027: ctxt.user_id"},{"line_number":785,"context_line":"        }"},{"line_number":786,"context_line":"        return self.compute_api.migrations_in_progress(ctxt, target)"},{"line_number":787,"context_line":""},{"line_number":788,"context_line":""},{"line_number":789,"context_line":"class _BroadcastMessageMethods(_BaseMessageMethods):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPX%2F%2F%2BmY%3D","line":786,"in_reply_to":"AAAAPH%2F%2FcjI%3D","updated":"2013-06-04 18:16:34.000000000","message":"This code actually gets executed in the child cell.","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"7bd8ec47b460f560a7564f6e6e77e2d6e3524dc7","unresolved":false,"context_lines":[{"line_number":1339,"context_line":"                                   cell_name, need_response\u003dTrue)"},{"line_number":1340,"context_line":"        return message.process()"},{"line_number":1341,"context_line":""},{"line_number":1342,"context_line":"    def migrations_in_progress(self, ctxt, cell_name):"},{"line_number":1343,"context_line":"        \"\"\"Migrations in progress for a given cell name.\"\"\""},{"line_number":1344,"context_line":"        method_kwargs \u003d dict()"},{"line_number":1345,"context_line":"        message \u003d _TargetedMessage(self, ctxt, \u0027migrations_in_progress\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPX%2F%2F%2BlU%3D","line":1342,"updated":"2013-06-04 18:16:34.000000000","message":"There\u0027s no need to add a targeted message that just calls compute api.  There\u0027s a general \u0027run_compute_api_method\u0027 call already.  You can see examples of it being called all over nova/compute/cells_api.py.  However, you may want to add a Broadcast version so you can get migrations from all cells.","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"},{"author":{"_account_id":7393,"name":"Mahesh Panchaksharaiah","email":"maheshp@thoughtworks.com","username":"panchaks"},"change_message_id":"afaca97631852b3dbd84d66758ea3f4b513188a2","unresolved":false,"context_lines":[{"line_number":1339,"context_line":"                                   cell_name, need_response\u003dTrue)"},{"line_number":1340,"context_line":"        return message.process()"},{"line_number":1341,"context_line":""},{"line_number":1342,"context_line":"    def migrations_in_progress(self, ctxt, cell_name):"},{"line_number":1343,"context_line":"        \"\"\"Migrations in progress for a given cell name.\"\"\""},{"line_number":1344,"context_line":"        method_kwargs \u003d dict()"},{"line_number":1345,"context_line":"        message \u003d _TargetedMessage(self, ctxt, \u0027migrations_in_progress\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPX%2F%2F9h4%3D","line":1342,"in_reply_to":"AAAAPX%2F%2F%2BlU%3D","updated":"2013-06-05 03:44:41.000000000","message":"I thought of using run_compute_api_method, but it requires an instance_uuid to be passed and it tries to load up the instance.  Is this right, or am I missing something?","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"}],"nova/cells/rpcapi.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b7da068a3da00c6e0f769210b826ec466505b767","unresolved":false,"context_lines":[{"line_number":48,"context_line":"              compute_node_stats()"},{"line_number":49,"context_line":"        1.5 - Adds actions_get(), action_get_by_request_id(), and"},{"line_number":50,"context_line":"              action_events_get()"},{"line_number":51,"context_line":"        1.6 - Adds consoleauth_delete_tokens() and validate_console_port()"},{"line_number":52,"context_line":"        1.7 - Adds service_update()"},{"line_number":53,"context_line":"    \u0027\u0027\u0027"},{"line_number":54,"context_line":"    BASE_RPC_API_VERSION \u003d \u00271.0\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FcuI%3D","line":51,"updated":"2013-06-03 18:58:55.000000000","message":"This needs versioning correctly.","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b7da068a3da00c6e0f769210b826ec466505b767","unresolved":false,"context_lines":[{"line_number":282,"context_line":"    def migrations_in_progress(self, ctxt, cell_name):"},{"line_number":283,"context_line":"        \"\"\"Get InProgress migrations for the given cell_name.\"\"\""},{"line_number":284,"context_line":"        return self.call(ctxt, self.make_msg(\u0027migrations_in_progress\u0027,"},{"line_number":285,"context_line":"                                             cell_name\u003dcell_name))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FcuE%3D","line":285,"updated":"2013-06-03 18:58:55.000000000","message":"should be 1.8 or similar here, plus all the other changes.","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"}],"nova/compute/api.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"f5e51cbd1245a0200a18f055bbe0e6e60de59d81","unresolved":false,"context_lines":[{"line_number":2540,"context_line":"                                        on_shared_storage\u003don_shared_storage,"},{"line_number":2541,"context_line":"                                        host\u003dhost)"},{"line_number":2542,"context_line":""},{"line_number":2543,"context_line":"    @wrap_check_policy"},{"line_number":2544,"context_line":"    def migrations_in_progress(self, context, target):"},{"line_number":2545,"context_line":"        \"\"\"Get all InProgress migrations.\"\"\""},{"line_number":2546,"context_line":"        return self.db.migration_get_in_progress(context)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FcdE%3D","line":2543,"updated":"2013-06-03 20:06:34.000000000","message":"This is better done at the API level.","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"f1666aee3cc9a257383f02d4c4738141bd4ca603","unresolved":false,"context_lines":[{"line_number":2540,"context_line":"                                        on_shared_storage\u003don_shared_storage,"},{"line_number":2541,"context_line":"                                        host\u003dhost)"},{"line_number":2542,"context_line":""},{"line_number":2543,"context_line":"    @wrap_check_policy"},{"line_number":2544,"context_line":"    def migrations_in_progress(self, context, target):"},{"line_number":2545,"context_line":"        \"\"\"Get all InProgress migrations.\"\"\""},{"line_number":2546,"context_line":"        return self.db.migration_get_in_progress(context)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPX%2F%2F%2FKU%3D","line":2543,"in_reply_to":"AAAAPH%2F%2Fb%2FA%3D","updated":"2013-06-04 14:16:35.000000000","message":"The difference for this method and others is that wrap_check_policy is intended for when you have an instance as the third argument of the method.  It\u0027s use case is designed for instance specific policy, whereas this is a more general \u0027do I have this power\u0027 policy not specific to the target.  If you look at other methods, like instance actions, the common method is to verify roles at the API level, and check the target here.  But in this case there\u0027s no target specific policy.","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"},{"author":{"_account_id":7393,"name":"Mahesh Panchaksharaiah","email":"maheshp@thoughtworks.com","username":"panchaks"},"change_message_id":"500049cd431e80cb38a2fd323bc6e7e22d9e2296","unresolved":false,"context_lines":[{"line_number":2540,"context_line":"                                        on_shared_storage\u003don_shared_storage,"},{"line_number":2541,"context_line":"                                        host\u003dhost)"},{"line_number":2542,"context_line":""},{"line_number":2543,"context_line":"    @wrap_check_policy"},{"line_number":2544,"context_line":"    def migrations_in_progress(self, context, target):"},{"line_number":2545,"context_line":"        \"\"\"Get all InProgress migrations.\"\"\""},{"line_number":2546,"context_line":"        return self.db.migration_get_in_progress(context)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2Fb%2FA%3D","line":2543,"in_reply_to":"AAAAPH%2F%2FcdE%3D","updated":"2013-06-03 23:27:48.000000000","message":"I expect multiple consumers of this method, so added the check policy here over controller. This seems to be the case for instance actions as well.","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"},{"author":{"_account_id":7393,"name":"Mahesh Panchaksharaiah","email":"maheshp@thoughtworks.com","username":"panchaks"},"change_message_id":"cce04f870c459b208186ff2cd7de83c968d8019c","unresolved":false,"context_lines":[{"line_number":2540,"context_line":"                                        on_shared_storage\u003don_shared_storage,"},{"line_number":2541,"context_line":"                                        host\u003dhost)"},{"line_number":2542,"context_line":""},{"line_number":2543,"context_line":"    @wrap_check_policy"},{"line_number":2544,"context_line":"    def migrations_in_progress(self, context, target):"},{"line_number":2545,"context_line":"        \"\"\"Get all InProgress migrations.\"\"\""},{"line_number":2546,"context_line":"        return self.db.migration_get_in_progress(context)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPX%2F%2F%2BwE%3D","line":2543,"in_reply_to":"AAAAPX%2F%2F%2FKU%3D","updated":"2013-06-04 17:17:27.000000000","message":"Agreed that wrap_check_policy is intended for an instance, but what is a little confusing is we enforce policy all across the code from db api to controller action. I thought since we use compute api to make calls to compute this would be ideal place to enforce policy so that it would cover all the consumers of compute api. That said, I agree that a user should be authorised to perform a particular action in the controller action. Will do the changes. Thanks.","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b7da068a3da00c6e0f769210b826ec466505b767","unresolved":false,"context_lines":[{"line_number":2541,"context_line":"                                        host\u003dhost)"},{"line_number":2542,"context_line":""},{"line_number":2543,"context_line":"    @wrap_check_policy"},{"line_number":2544,"context_line":"    def migrations_in_progress(self, context, target):"},{"line_number":2545,"context_line":"        \"\"\"Get all InProgress migrations.\"\"\""},{"line_number":2546,"context_line":"        return self.db.migration_get_in_progress(context)"},{"line_number":2547,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2Fch8%3D","line":2544,"updated":"2013-06-03 18:58:55.000000000","message":"get_migrations_in_progress or get_all_migrations_in_progress might be more consistent name wise?\n\nIt looks odd having target here. Would it be better to have cell_name explicitly?","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"7bd8ec47b460f560a7564f6e6e77e2d6e3524dc7","unresolved":false,"context_lines":[{"line_number":2541,"context_line":"                                        host\u003dhost)"},{"line_number":2542,"context_line":""},{"line_number":2543,"context_line":"    @wrap_check_policy"},{"line_number":2544,"context_line":"    def migrations_in_progress(self, context, target):"},{"line_number":2545,"context_line":"        \"\"\"Get all InProgress migrations.\"\"\""},{"line_number":2546,"context_line":"        return self.db.migration_get_in_progress(context)"},{"line_number":2547,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPX%2F%2F%2BmI%3D","line":2544,"in_reply_to":"AAAAPH%2F%2FcdI%3D","updated":"2013-06-04 18:16:34.000000000","message":"I like the idea of state and filters... Or well.. \u0027state\u0027 could be a part of the filters.","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"f5e51cbd1245a0200a18f055bbe0e6e60de59d81","unresolved":false,"context_lines":[{"line_number":2541,"context_line":"                                        host\u003dhost)"},{"line_number":2542,"context_line":""},{"line_number":2543,"context_line":"    @wrap_check_policy"},{"line_number":2544,"context_line":"    def migrations_in_progress(self, context, target):"},{"line_number":2545,"context_line":"        \"\"\"Get all InProgress migrations.\"\"\""},{"line_number":2546,"context_line":"        return self.db.migration_get_in_progress(context)"},{"line_number":2547,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FcdI%3D","line":2544,"in_reply_to":"AAAAPH%2F%2Fch8%3D","updated":"2013-06-03 20:06:34.000000000","message":"Maybe something like state and filters as options?","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"}],"nova/compute/cells_api.py":[{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"7bd8ec47b460f560a7564f6e6e77e2d6e3524dc7","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            cell_name \u003d target[\u0027cell_name\u0027]"},{"line_number":155,"context_line":"            db.cell_get(context, cell_name)"},{"line_number":156,"context_line":"        except KeyError:"},{"line_number":157,"context_line":"            raise exception.CellNotFound(cell_name\u003dcell_name)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def backup(self, context, instance, name, backup_type, rotation,"},{"line_number":160,"context_line":"               extra_properties\u003dNone, image_id\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPX%2F%2F%2Bl8%3D","line":157,"updated":"2013-06-04 18:16:34.000000000","message":"Checking that a cell exists does not work because cells is hierarchical and the current cell only knows about its immediate child.  You can only tell if the *next hop* exists or not.  This code would only work for a flat configuration of child cells.  And even then,  you\u0027d lave to leave the API cell name off in \u0027target\u0027.","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b7da068a3da00c6e0f769210b826ec466505b767","unresolved":false,"context_lines":[{"line_number":590,"context_line":"                            block_migration, disk_over_commit, host_name)"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"    @wrap_check_policy"},{"line_number":593,"context_line":"    @check_cell_exists"},{"line_number":594,"context_line":"    def migrations_in_progress(self, context, target):"},{"line_number":595,"context_line":"        return self.cells_rpcapi.migrations_in_progress(context,"},{"line_number":596,"context_line":"                                                        target[\u0027cell_name\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FchI%3D","line":593,"updated":"2013-06-03 18:58:55.000000000","message":"not sure this feels right, compare to the others.","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b7da068a3da00c6e0f769210b826ec466505b767","unresolved":false,"context_lines":[{"line_number":592,"context_line":"    @wrap_check_policy"},{"line_number":593,"context_line":"    @check_cell_exists"},{"line_number":594,"context_line":"    def migrations_in_progress(self, context, target):"},{"line_number":595,"context_line":"        return self.cells_rpcapi.migrations_in_progress(context,"},{"line_number":596,"context_line":"                                                        target[\u0027cell_name\u0027])"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2Fcg4%3D","line":595,"updated":"2013-06-03 18:58:55.000000000","message":"do you not really want to get all your migration, then add them to all those in all your child cells?\n\nExcept in the case where there is a cell specified, you try and send it there.","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"7bd8ec47b460f560a7564f6e6e77e2d6e3524dc7","unresolved":false,"context_lines":[{"line_number":592,"context_line":"    @wrap_check_policy"},{"line_number":593,"context_line":"    @check_cell_exists"},{"line_number":594,"context_line":"    def migrations_in_progress(self, context, target):"},{"line_number":595,"context_line":"        return self.cells_rpcapi.migrations_in_progress(context,"},{"line_number":596,"context_line":"                                                        target[\u0027cell_name\u0027])"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPX%2F%2F%2Bl4%3D","line":595,"in_reply_to":"AAAAPH%2F%2Fcg4%3D","updated":"2013-06-04 18:16:34.000000000","message":"I think so.","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"}],"nova/db/api.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"a73fe1b2bb43949a84d5ca300dda8ac49e861e06","unresolved":false,"context_lines":[{"line_number":421,"context_line":"def migration_get_all_by_filters(context, filters):"},{"line_number":422,"context_line":"    \"\"\"Finds all migrations in progress.\"\"\""},{"line_number":423,"context_line":"    return IMPL.migration_get_all_by_filters(context, filters)"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"####################"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPX%2F%2FrfU%3D","line":424,"updated":"2013-06-12 22:17:13.000000000","message":"Please add one more blank line here to maintain consistency…","commit_id":"3692b8901cf636bd5a749b8a5f497cde57246de8"}],"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b7da068a3da00c6e0f769210b826ec466505b767","unresolved":false,"context_lines":[{"line_number":3616,"context_line":"            all()"},{"line_number":3617,"context_line":""},{"line_number":3618,"context_line":""},{"line_number":3619,"context_line":"@require_admin_context"},{"line_number":3620,"context_line":"def migration_get_in_progress(context):"},{"line_number":3621,"context_line":"    return model_query(context, models.Migration).\\"},{"line_number":3622,"context_line":"            filter(~models.Migration.status.in_([\u0027confirmed\u0027, \u0027reverted\u0027])).\\"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FcpQ%3D","line":3619,"updated":"2013-06-03 18:58:55.000000000","message":"I think we are moving away from this kind of check, but see what other people say.","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"7bd8ec47b460f560a7564f6e6e77e2d6e3524dc7","unresolved":false,"context_lines":[{"line_number":3616,"context_line":"            all()"},{"line_number":3617,"context_line":""},{"line_number":3618,"context_line":""},{"line_number":3619,"context_line":"@require_admin_context"},{"line_number":3620,"context_line":"def migration_get_in_progress(context):"},{"line_number":3621,"context_line":"    return model_query(context, models.Migration).\\"},{"line_number":3622,"context_line":"            filter(~models.Migration.status.in_([\u0027confirmed\u0027, \u0027reverted\u0027])).\\"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPX%2F%2F%2Blw%3D","line":3619,"in_reply_to":"AAAAPH%2F%2FcpQ%3D","updated":"2013-06-04 18:16:34.000000000","message":"I\u0027m okay having the decorator here because it\u0027s consistent with the other DB API methods right now.","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b7da068a3da00c6e0f769210b826ec466505b767","unresolved":false,"context_lines":[{"line_number":3619,"context_line":"@require_admin_context"},{"line_number":3620,"context_line":"def migration_get_in_progress(context):"},{"line_number":3621,"context_line":"    return model_query(context, models.Migration).\\"},{"line_number":3622,"context_line":"            filter(~models.Migration.status.in_([\u0027confirmed\u0027, \u0027reverted\u0027])).\\"},{"line_number":3623,"context_line":"            all()"},{"line_number":3624,"context_line":""},{"line_number":3625,"context_line":"##################"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FcsE%3D","line":3622,"updated":"2013-06-03 18:58:55.000000000","message":"might be good to share this line of code with the above method","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"a73fe1b2bb43949a84d5ca300dda8ac49e861e06","unresolved":false,"context_lines":[{"line_number":3670,"context_line":"        query \u003d query.filter(or_(models.Migration.source_compute \u003d\u003d host,"},{"line_number":3671,"context_line":"                                 models.Migration.dest_compute \u003d\u003d host))"},{"line_number":3672,"context_line":"    return query.all()"},{"line_number":3673,"context_line":""},{"line_number":3674,"context_line":"##################"},{"line_number":3675,"context_line":""},{"line_number":3676,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPX%2F%2FrfE%3D","line":3673,"updated":"2013-06-12 22:17:13.000000000","message":"Again, please add one more blank line for consistency…","commit_id":"3692b8901cf636bd5a749b8a5f497cde57246de8"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b81479086c7a9f6266bdb7988629017fb5a6d379","unresolved":false,"context_lines":[{"line_number":3649,"context_line":"            all()"},{"line_number":3650,"context_line":""},{"line_number":3651,"context_line":""},{"line_number":3652,"context_line":"@require_admin_context"},{"line_number":3653,"context_line":"def migration_get_all_by_filters(context, filters):"},{"line_number":3654,"context_line":"    query \u003d model_query(context, models.Migration)"},{"line_number":3655,"context_line":"    if \"status\" in filters:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2F0Es%3D","line":3652,"updated":"2013-06-21 08:30:50.000000000","message":"so, I thought we were trying to stop using require_admin_context and rely on the json.policy instead? But someone else can confirm.","commit_id":"2abf6346f463763185a4f59edf9e365dcf9021e6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a2b6354213e138865fb94c97077fad7f83db2706","unresolved":false,"context_lines":[{"line_number":3649,"context_line":"            all()"},{"line_number":3650,"context_line":""},{"line_number":3651,"context_line":""},{"line_number":3652,"context_line":"@require_admin_context"},{"line_number":3653,"context_line":"def migration_get_all_by_filters(context, filters):"},{"line_number":3654,"context_line":"    query \u003d model_query(context, models.Migration)"},{"line_number":3655,"context_line":"    if \"status\" in filters:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2Fa%2BI%3D","line":3652,"in_reply_to":"AAAAPn%2F%2F0Es%3D","updated":"2013-07-02 10:41:48.000000000","message":"ChrisB seemed OK with this for consistency of what we currently do, and that seems fair.","commit_id":"2abf6346f463763185a4f59edf9e365dcf9021e6"}],"nova/tests/api/openstack/compute/contrib/test_migrations.py":[{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"83bfe88608577730a0cd14a6159cddd86e12fbe1","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import datetime"},{"line_number":19,"context_line":"from lxml import etree"},{"line_number":20,"context_line":"from webob import exc"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2Fj4Y%3D","line":18,"updated":"2013-05-30 14:54:45.000000000","message":"Newline between stdlib imports and third-party imports.","commit_id":"82e7080a26eca240e4fe1c9484d2bb53c3dcbfdf"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"a73fe1b2bb43949a84d5ca300dda8ac49e861e06","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        \u0027new_instance_type_id\u0027: 6,"},{"line_number":54,"context_line":"        \u0027created_at\u0027: datetime.datetime(2013, 10, 22, 13, 42, 2),"},{"line_number":55,"context_line":"        \u0027updated_at\u0027: datetime.datetime(2013, 10, 22, 13, 42, 2)"},{"line_number":56,"context_line":"    }"},{"line_number":57,"context_line":"]"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPX%2F%2Freo%3D","line":56,"updated":"2013-06-12 22:17:13.000000000","message":"We like to have trailing commas in list and dictionary literals; see HACKING.rst § \"Dictionaries/Lists\".","commit_id":"3692b8901cf636bd5a749b8a5f497cde57246de8"}],"nova/tests/fake_policy.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b7da068a3da00c6e0f769210b826ec466505b767","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    \"compute:soft_delete\": \"\","},{"line_number":92,"context_line":"    \"compute:force_delete\": \"\","},{"line_number":93,"context_line":"    \"compute:restore\": \"\","},{"line_number":94,"context_line":"    \"compute:migrations_in_progress\":\"\","},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    \"compute_extension:accounts\": \"\","}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2Fcgo%3D","line":94,"updated":"2013-06-03 18:58:55.000000000","message":"you need to update the real policy file too","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"f5e51cbd1245a0200a18f055bbe0e6e60de59d81","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    \"compute:soft_delete\": \"\","},{"line_number":92,"context_line":"    \"compute:force_delete\": \"\","},{"line_number":93,"context_line":"    \"compute:restore\": \"\","},{"line_number":94,"context_line":"    \"compute:migrations_in_progress\":\"\","},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    \"compute_extension:accounts\": \"\","}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2Fcck%3D","line":94,"in_reply_to":"AAAAPH%2F%2Fcgo%3D","updated":"2013-06-03 20:06:34.000000000","message":"And the default policy should be admin only, for the actual conf file.","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"}],"nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.json.tpl":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"a73fe1b2bb43949a84d5ca300dda8ac49e861e06","unresolved":false,"context_lines":[{"line_number":546,"context_line":"        },"},{"line_number":547,"context_line":"        {"},{"line_number":548,"context_line":"            \"alias\": \"os-migrations\","},{"line_number":549,"context_line":"            \"description\": \"Provide data on migrations.\","},{"line_number":550,"context_line":"            \"links\": [],"},{"line_number":551,"context_line":"            \"name\": \"Migrations\","},{"line_number":552,"context_line":"            \"namespace\": \"http://docs.openstack.org/compute/ext/migrations/api/v2.0\","}],"source_content_type":"text/x-smarty","patch_set":5,"id":"AAAAPX%2F%2FrdM%3D","line":549,"updated":"2013-06-12 22:17:13.000000000","message":"Shouldn\u0027t this be \"%(text)s\"?","commit_id":"3692b8901cf636bd5a749b8a5f497cde57246de8"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"a73fe1b2bb43949a84d5ca300dda8ac49e861e06","unresolved":false,"context_lines":[{"line_number":550,"context_line":"            \"links\": [],"},{"line_number":551,"context_line":"            \"name\": \"Migrations\","},{"line_number":552,"context_line":"            \"namespace\": \"http://docs.openstack.org/compute/ext/migrations/api/v2.0\","},{"line_number":553,"context_line":"            \"updated\": \"2013-05-30T00:00:00+00:00\""},{"line_number":554,"context_line":"        }"},{"line_number":555,"context_line":"    ]"},{"line_number":556,"context_line":"}"}],"source_content_type":"text/x-smarty","patch_set":5,"id":"AAAAPX%2F%2FrdI%3D","line":553,"updated":"2013-06-12 22:17:13.000000000","message":"Same here…","commit_id":"3692b8901cf636bd5a749b8a5f497cde57246de8"}],"nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.xml.tpl":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"a73fe1b2bb43949a84d5ca300dda8ac49e861e06","unresolved":false,"context_lines":[{"line_number":204,"context_line":"  \u003cextension alias\u003d\"os-instance-actions\" updated\u003d\"%(timestamp)s\" namespace\u003d\"http://docs.openstack.org/compute/ext/instance-actions/api/v1.1\" name\u003d\"InstanceActions\"\u003e"},{"line_number":205,"context_line":"    \u003cdescription\u003e%(text)s\u003c/description\u003e"},{"line_number":206,"context_line":"  \u003c/extension\u003e"},{"line_number":207,"context_line":"  \u003cextension alias\u003d\"os-migrations\" updated\u003d\"2013-05-30T00:00:00+00:00\" namespace\u003d\"http://docs.openstack.org/compute/ext/migrations/api/v2.0\" name\u003d\"Migrations\"\u003e"},{"line_number":208,"context_line":"    \u003cdescription\u003eProvide data on migrations.\u003c/description\u003e"},{"line_number":209,"context_line":"  \u003c/extension\u003e"},{"line_number":210,"context_line":"\u003c/extensions\u003e"}],"source_content_type":"text/x-smarty","patch_set":5,"id":"AAAAPX%2F%2FrdE%3D","line":207,"updated":"2013-06-12 22:17:13.000000000","message":"Here also…","commit_id":"3692b8901cf636bd5a749b8a5f497cde57246de8"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"a73fe1b2bb43949a84d5ca300dda8ac49e861e06","unresolved":false,"context_lines":[{"line_number":205,"context_line":"    \u003cdescription\u003e%(text)s\u003c/description\u003e"},{"line_number":206,"context_line":"  \u003c/extension\u003e"},{"line_number":207,"context_line":"  \u003cextension alias\u003d\"os-migrations\" updated\u003d\"2013-05-30T00:00:00+00:00\" namespace\u003d\"http://docs.openstack.org/compute/ext/migrations/api/v2.0\" name\u003d\"Migrations\"\u003e"},{"line_number":208,"context_line":"    \u003cdescription\u003eProvide data on migrations.\u003c/description\u003e"},{"line_number":209,"context_line":"  \u003c/extension\u003e"},{"line_number":210,"context_line":"\u003c/extensions\u003e"}],"source_content_type":"text/x-smarty","patch_set":5,"id":"AAAAPX%2F%2FrdA%3D","line":208,"updated":"2013-06-12 22:17:13.000000000","message":"And here…","commit_id":"3692b8901cf636bd5a749b8a5f497cde57246de8"}],"nova/tests/integrated/api_samples/os-migrations/migrations-get.json.tpl":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"a73fe1b2bb43949a84d5ca300dda8ac49e861e06","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"migrations\": ["},{"line_number":3,"context_line":"        {"},{"line_number":4,"context_line":"            \"created_at\": \"2012-10-29T13:42:02.000000\","},{"line_number":5,"context_line":"            \"dest_compute\": \"compute2\","},{"line_number":6,"context_line":"            \"dest_host\": \"1.2.3.4\","},{"line_number":7,"context_line":"            \"dest_node\": \"node2\","}],"source_content_type":"text/x-smarty","patch_set":5,"id":"AAAAPX%2F%2Frc8%3D","line":4,"updated":"2013-06-12 22:17:13.000000000","message":"I think this should be full of expandos…","commit_id":"3692b8901cf636bd5a749b8a5f497cde57246de8"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"8dc3531254cb2bb592b5410c5c422cc76509d309","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"migrations\": ["},{"line_number":3,"context_line":"        {"},{"line_number":4,"context_line":"            \"created_at\": \"2012-10-29T13:42:02.000000\","},{"line_number":5,"context_line":"            \"dest_compute\": \"compute2\","},{"line_number":6,"context_line":"            \"dest_host\": \"1.2.3.4\","},{"line_number":7,"context_line":"            \"dest_node\": \"node2\","}],"source_content_type":"text/x-smarty","patch_set":5,"id":"AAAAPX%2F%2FpJg%3D","line":4,"in_reply_to":"AAAAPX%2F%2Fqbc%3D","updated":"2013-06-13 16:28:59.000000000","message":"To be honest, I\u0027m just going by consistency with other API samples; I\u0027m not really that much of an expert on the API sample testing.  I still think it should be full of expandos, but I consider that a femtonit, and given that you\u0027ve addressed all my other comments, I\u0027m going to be +2\u0027ing…","commit_id":"3692b8901cf636bd5a749b8a5f497cde57246de8"},{"author":{"_account_id":7393,"name":"Mahesh Panchaksharaiah","email":"maheshp@thoughtworks.com","username":"panchaks"},"change_message_id":"8a821576b00c49ec8181efc7dcbd19be4a2273c1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"migrations\": ["},{"line_number":3,"context_line":"        {"},{"line_number":4,"context_line":"            \"created_at\": \"2012-10-29T13:42:02.000000\","},{"line_number":5,"context_line":"            \"dest_compute\": \"compute2\","},{"line_number":6,"context_line":"            \"dest_host\": \"1.2.3.4\","},{"line_number":7,"context_line":"            \"dest_node\": \"node2\","}],"source_content_type":"text/x-smarty","patch_set":5,"id":"AAAAPX%2F%2Fqbc%3D","line":4,"in_reply_to":"AAAAPX%2F%2Frc8%3D","updated":"2013-06-13 08:23:27.000000000","message":"Can you please help me understand why do we need expandos here. Since I have stubbed the call to fetch migrations, the response would not change.","commit_id":"3692b8901cf636bd5a749b8a5f497cde57246de8"}],"nova/tests/integrated/api_samples/os-migrations/migrations-get.xml.tpl":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b7da068a3da00c6e0f769210b826ec466505b767","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003c?xml version\u003d\u00271.0\u0027 encoding\u003d\u0027UTF-8\u0027?\u003e"},{"line_number":2,"context_line":"\u003cmigrations\u003e"},{"line_number":3,"context_line":"  \u003cmigration dest_host\u003d\"1.2.3.4\" status\u003d\"Done\" old_instance_type_id\u003d\"1\" updated_at\u003d\"2012-10-29 13:42:02\" dest_compute\u003d\"compute2\" created_at\u003d\"2012-10-29 13:42:02\" source_node\u003d\"node1\" instance_uuid\u003d\"instance_id_123\" dest_node\u003d\"node2\" id\u003d\"1234\" new_instance_type_id\u003d\"2\" source_compute\u003d\"compute1\"/\u003e"},{"line_number":4,"context_line":"\u003c/migrations\u003e"}],"source_content_type":"text/x-smarty","patch_set":4,"id":"AAAAPH%2F%2Fcr0%3D","line":3,"updated":"2013-06-03 18:58:55.000000000","message":"might be good to test with too migrations, just to make sure it works with multiple.","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"a73fe1b2bb43949a84d5ca300dda8ac49e861e06","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003c?xml version\u003d\u00271.0\u0027 encoding\u003d\u0027UTF-8\u0027?\u003e"},{"line_number":2,"context_line":"\u003cmigrations\u003e"},{"line_number":3,"context_line":"  \u003cmigration dest_host\u003d\"1.2.3.4\" status\u003d\"Done\" old_instance_type_id\u003d\"1\" updated_at\u003d\"2012-10-29 13:42:02\" dest_compute\u003d\"compute2\" created_at\u003d\"2012-10-29 13:42:02\" source_node\u003d\"node1\" instance_uuid\u003d\"instance_id_123\" dest_node\u003d\"node2\" id\u003d\"1234\" new_instance_type_id\u003d\"2\" source_compute\u003d\"compute1\"/\u003e"},{"line_number":4,"context_line":"  \u003cmigration dest_host\u003d\"5.6.7.8\" status\u003d\"Done\" old_instance_type_id\u003d\"5\" updated_at\u003d\"2013-10-22 13:42:02\" dest_compute\u003d\"compute20\" created_at\u003d\"2013-10-22 13:42:02\" source_node\u003d\"node10\" instance_uuid\u003d\"instance_id_456\" dest_node\u003d\"node20\" id\u003d\"5678\" new_instance_type_id\u003d\"6\" source_compute\u003d\"compute10\"/\u003e"},{"line_number":5,"context_line":"\u003c/migrations\u003e"}],"source_content_type":"text/x-smarty","patch_set":5,"id":"AAAAPX%2F%2Frc4%3D","line":3,"updated":"2013-06-12 22:17:13.000000000","message":"Here also…","commit_id":"3692b8901cf636bd5a749b8a5f497cde57246de8"}],"nova/tests/integrated/test_api_samples.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b7da068a3da00c6e0f769210b826ec466505b767","unresolved":false,"context_lines":[{"line_number":3844,"context_line":""},{"line_number":3845,"context_line":"    def _stub_migrations(self, context, target):"},{"line_number":3846,"context_line":"        fake_migrations \u003d ["},{"line_number":3847,"context_line":"            {"},{"line_number":3848,"context_line":"                \u0027id\u0027: 1234,"},{"line_number":3849,"context_line":"                \u0027source_node\u0027: \u0027node1\u0027,"},{"line_number":3850,"context_line":"                \u0027dest_node\u0027: \u0027node2\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2Fcrs%3D","line":3847,"updated":"2013-06-03 18:58:55.000000000","message":"might be nice to test with two migrations?","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b7da068a3da00c6e0f769210b826ec466505b767","unresolved":false,"context_lines":[{"line_number":3872,"context_line":""},{"line_number":3873,"context_line":"        self.assertEqual(response.status, 200)"},{"line_number":3874,"context_line":"        self._verify_response(\u0027migrations-get\u0027, subs, response, 200)"},{"line_number":3875,"context_line":""},{"line_number":3876,"context_line":""},{"line_number":3877,"context_line":"class MigrationsSamplesXmlTest(MigrationsSamplesJsonTest):"},{"line_number":3878,"context_line":"    ctype \u003d \u0027xml\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FcrU%3D","line":3875,"updated":"2013-06-03 18:58:55.000000000","message":"Would be good to see a test to check it is an admin only API, and you get the correct 401, not sure it is at the moment.","commit_id":"0eb0ba74e2d20ec1f7721ce87172f8d5b023dac4"}]}
