)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"10a9a7554707a34f73c37776c5f8f29b5381750a","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Two new novaclient commands server-migration-list and"},{"line_number":14,"context_line":"server-migration-show will be added."},{"line_number":15,"context_line":"ref: Ia92ecbe3c99082e3a34adf4fd29041b1a95ef21e"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Partially implements blueprint live-migration-progress-report"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"dae33548_028664da","line":15,"range":{"start_line":15,"start_character":5,"end_line":15,"end_character":46},"updated":"2016-02-17 15:50:52.000000000","message":"wrong ref:)\n\nThe correct one is I071198fa9ba0699383bdebf4fab54714a435e6c3","commit_id":"192fac397747b11148ad9cc8a7fc0cd9bd7fb958"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"60754a2015faf2815ae641e1f714e236bed3341c","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Two new novaclient commands server-migration-list and"},{"line_number":14,"context_line":"server-migration-show will be added."},{"line_number":15,"context_line":"ref: Ia92ecbe3c99082e3a34adf4fd29041b1a95ef21e"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Partially implements blueprint live-migration-progress-report"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"dae33548_2c971a49","line":15,"range":{"start_line":15,"start_character":5,"end_line":15,"end_character":46},"in_reply_to":"dae33548_028664da","updated":"2016-02-17 16:26:33.000000000","message":"Done\n\nThanks.","commit_id":"192fac397747b11148ad9cc8a7fc0cd9bd7fb958"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d65f352921906ad77f15d5df0267504cac36962e","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add new APIs and deprecate old API for migrations"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch do two things:"},{"line_number":10,"context_line":"1. Add two APIs /servers/migrations:index/show for server migrations."},{"line_number":11,"context_line":"Two new novaclient commands server-migration-list and"},{"line_number":12,"context_line":"server-migration-show will also be added."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":28,"id":"bae84128_1f6dd1cb","line":9,"updated":"2016-02-24 14:57:43.000000000","message":"s/do/does/","commit_id":"7a9da9932675fe903a261ba26d0361fb0dd208c5"}],"doc/api_samples/os-migrations/v2.23/migrations-get.json":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"db00f4a6e6022d160103efb8195186852bac44f1","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\": \"2016-01-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\","},{"line_number":8,"context_line":"            \"id\": 1234,"},{"line_number":9,"context_line":"            \"instance_uuid\": \"8600d31b-d1a1-4632-b2ff-45c2be1a70ff\","},{"line_number":10,"context_line":"            \"links\": ["},{"line_number":11,"context_line":"                {"},{"line_number":12,"context_line":"                    \"href\": \"http://openstack.example.com/v2.1/openstack/servers/8600d31b-d1a1-4632-b2ff-45c2be1a70ff/migrations/1234\","},{"line_number":13,"context_line":"                    \"rel\": \"self\""},{"line_number":14,"context_line":"                },"},{"line_number":15,"context_line":"                {"},{"line_number":16,"context_line":"                    \"href\": \"http://openstack.example.com/openstack/servers/8600d31b-d1a1-4632-b2ff-45c2be1a70ff/migrations/1234\","},{"line_number":17,"context_line":"                    \"rel\": \"bookmark\""},{"line_number":18,"context_line":"                }"},{"line_number":19,"context_line":"            ],"},{"line_number":20,"context_line":"            \"new_instance_type_id\": 2,"},{"line_number":21,"context_line":"            \"old_instance_type_id\": 1,"},{"line_number":22,"context_line":"            \"source_compute\": \"compute1\","},{"line_number":23,"context_line":"            \"source_node\": \"node1\","},{"line_number":24,"context_line":"            \"status\": \"migrating\","},{"line_number":25,"context_line":"            \"updated_at\": \"2016-01-29T13:42:02.000000\""},{"line_number":26,"context_line":"        },"},{"line_number":27,"context_line":"        {"},{"line_number":28,"context_line":"            \"created_at\": \"2016-01-22T13:42:02.000000\","}],"source_content_type":"application/json","patch_set":18,"id":"bae84128_521275b5","line":25,"range":{"start_line":4,"start_character":11,"end_line":25,"end_character":54},"updated":"2016-02-19 23:01:07.000000000","message":"same comment as PS11","commit_id":"c19b1b01dae599a6ab98ad67f3d3b15618c89d89"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"7ff0679a155998bc832111a7783a32c2eaa09851","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\": \"2016-01-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\","},{"line_number":8,"context_line":"            \"id\": 1234,"},{"line_number":9,"context_line":"            \"instance_uuid\": \"8600d31b-d1a1-4632-b2ff-45c2be1a70ff\","},{"line_number":10,"context_line":"            \"links\": ["},{"line_number":11,"context_line":"                {"},{"line_number":12,"context_line":"                    \"href\": \"http://openstack.example.com/v2.1/openstack/servers/8600d31b-d1a1-4632-b2ff-45c2be1a70ff/migrations/1234\","},{"line_number":13,"context_line":"                    \"rel\": \"self\""},{"line_number":14,"context_line":"                },"},{"line_number":15,"context_line":"                {"},{"line_number":16,"context_line":"                    \"href\": \"http://openstack.example.com/openstack/servers/8600d31b-d1a1-4632-b2ff-45c2be1a70ff/migrations/1234\","},{"line_number":17,"context_line":"                    \"rel\": \"bookmark\""},{"line_number":18,"context_line":"                }"},{"line_number":19,"context_line":"            ],"},{"line_number":20,"context_line":"            \"new_instance_type_id\": 2,"},{"line_number":21,"context_line":"            \"old_instance_type_id\": 1,"},{"line_number":22,"context_line":"            \"source_compute\": \"compute1\","},{"line_number":23,"context_line":"            \"source_node\": \"node1\","},{"line_number":24,"context_line":"            \"status\": \"migrating\","},{"line_number":25,"context_line":"            \"updated_at\": \"2016-01-29T13:42:02.000000\""},{"line_number":26,"context_line":"        },"},{"line_number":27,"context_line":"        {"},{"line_number":28,"context_line":"            \"created_at\": \"2016-01-22T13:42:02.000000\","}],"source_content_type":"application/json","patch_set":18,"id":"bae84128_f57c37ed","line":25,"range":{"start_line":4,"start_character":11,"end_line":25,"end_character":54},"in_reply_to":"bae84128_1569edbe","updated":"2016-02-21 07:33:38.000000000","message":"Thanks pawel.\n\nGot it.\n\nPS is abbreviation of patch set.","commit_id":"c19b1b01dae599a6ab98ad67f3d3b15618c89d89"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"13384f53195bdd53632c15b6f398692fe5b8b846","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\": \"2016-01-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\","},{"line_number":8,"context_line":"            \"id\": 1234,"},{"line_number":9,"context_line":"            \"instance_uuid\": \"8600d31b-d1a1-4632-b2ff-45c2be1a70ff\","},{"line_number":10,"context_line":"            \"links\": ["},{"line_number":11,"context_line":"                {"},{"line_number":12,"context_line":"                    \"href\": \"http://openstack.example.com/v2.1/openstack/servers/8600d31b-d1a1-4632-b2ff-45c2be1a70ff/migrations/1234\","},{"line_number":13,"context_line":"                    \"rel\": \"self\""},{"line_number":14,"context_line":"                },"},{"line_number":15,"context_line":"                {"},{"line_number":16,"context_line":"                    \"href\": \"http://openstack.example.com/openstack/servers/8600d31b-d1a1-4632-b2ff-45c2be1a70ff/migrations/1234\","},{"line_number":17,"context_line":"                    \"rel\": \"bookmark\""},{"line_number":18,"context_line":"                }"},{"line_number":19,"context_line":"            ],"},{"line_number":20,"context_line":"            \"new_instance_type_id\": 2,"},{"line_number":21,"context_line":"            \"old_instance_type_id\": 1,"},{"line_number":22,"context_line":"            \"source_compute\": \"compute1\","},{"line_number":23,"context_line":"            \"source_node\": \"node1\","},{"line_number":24,"context_line":"            \"status\": \"migrating\","},{"line_number":25,"context_line":"            \"updated_at\": \"2016-01-29T13:42:02.000000\""},{"line_number":26,"context_line":"        },"},{"line_number":27,"context_line":"        {"},{"line_number":28,"context_line":"            \"created_at\": \"2016-01-22T13:42:02.000000\","}],"source_content_type":"application/json","patch_set":18,"id":"bae84128_1569edbe","line":25,"range":{"start_line":4,"start_character":11,"end_line":25,"end_character":54},"in_reply_to":"bae84128_28c5bd8d","updated":"2016-02-20 08:51:31.000000000","message":"It\u0027s patch set 11, this comment:\nhttps://review.openstack.org/#/c/258771/11/doc/api_samples/server-migrations/v2.23/migrations-get.json","commit_id":"c19b1b01dae599a6ab98ad67f3d3b15618c89d89"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"7ff0679a155998bc832111a7783a32c2eaa09851","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\": \"2016-01-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\","},{"line_number":8,"context_line":"            \"id\": 1234,"},{"line_number":9,"context_line":"            \"instance_uuid\": \"8600d31b-d1a1-4632-b2ff-45c2be1a70ff\","},{"line_number":10,"context_line":"            \"links\": ["},{"line_number":11,"context_line":"                {"},{"line_number":12,"context_line":"                    \"href\": \"http://openstack.example.com/v2.1/openstack/servers/8600d31b-d1a1-4632-b2ff-45c2be1a70ff/migrations/1234\","},{"line_number":13,"context_line":"                    \"rel\": \"self\""},{"line_number":14,"context_line":"                },"},{"line_number":15,"context_line":"                {"},{"line_number":16,"context_line":"                    \"href\": \"http://openstack.example.com/openstack/servers/8600d31b-d1a1-4632-b2ff-45c2be1a70ff/migrations/1234\","},{"line_number":17,"context_line":"                    \"rel\": \"bookmark\""},{"line_number":18,"context_line":"                }"},{"line_number":19,"context_line":"            ],"},{"line_number":20,"context_line":"            \"new_instance_type_id\": 2,"},{"line_number":21,"context_line":"            \"old_instance_type_id\": 1,"},{"line_number":22,"context_line":"            \"source_compute\": \"compute1\","},{"line_number":23,"context_line":"            \"source_node\": \"node1\","},{"line_number":24,"context_line":"            \"status\": \"migrating\","},{"line_number":25,"context_line":"            \"updated_at\": \"2016-01-29T13:42:02.000000\""},{"line_number":26,"context_line":"        },"},{"line_number":27,"context_line":"        {"},{"line_number":28,"context_line":"            \"created_at\": \"2016-01-22T13:42:02.000000\","}],"source_content_type":"application/json","patch_set":18,"id":"bae84128_3587bfd8","line":25,"range":{"start_line":4,"start_character":11,"end_line":25,"end_character":54},"in_reply_to":"bae84128_521275b5","updated":"2016-02-21 07:33:38.000000000","message":"hi, Ken\u0027ichi Ohmichi\n \n before patch set 18, it only do one things, just add a new API.\n \n After patch set 18, it integrate another patch, it touch another API os-migrations. ref: https://review.openstack.org/#/c/281123/\n \n This json file is for os-migrations API. The spec does not change the existed fields of os-migrations.\n \n And this json is for new API, and it addresses comment of PS11.  \n https://review.openstack.org/#/c/258771/18/doc/api_samples/server-migrations/v2.23/migrations-get.json","commit_id":"c19b1b01dae599a6ab98ad67f3d3b15618c89d89"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"05caa17bcea8a1a3639eb72084c00c3cdb571d4a","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\": \"2016-01-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\","},{"line_number":8,"context_line":"            \"id\": 1234,"},{"line_number":9,"context_line":"            \"instance_uuid\": \"8600d31b-d1a1-4632-b2ff-45c2be1a70ff\","},{"line_number":10,"context_line":"            \"links\": ["},{"line_number":11,"context_line":"                {"},{"line_number":12,"context_line":"                    \"href\": \"http://openstack.example.com/v2.1/openstack/servers/8600d31b-d1a1-4632-b2ff-45c2be1a70ff/migrations/1234\","},{"line_number":13,"context_line":"                    \"rel\": \"self\""},{"line_number":14,"context_line":"                },"},{"line_number":15,"context_line":"                {"},{"line_number":16,"context_line":"                    \"href\": \"http://openstack.example.com/openstack/servers/8600d31b-d1a1-4632-b2ff-45c2be1a70ff/migrations/1234\","},{"line_number":17,"context_line":"                    \"rel\": \"bookmark\""},{"line_number":18,"context_line":"                }"},{"line_number":19,"context_line":"            ],"},{"line_number":20,"context_line":"            \"new_instance_type_id\": 2,"},{"line_number":21,"context_line":"            \"old_instance_type_id\": 1,"},{"line_number":22,"context_line":"            \"source_compute\": \"compute1\","},{"line_number":23,"context_line":"            \"source_node\": \"node1\","},{"line_number":24,"context_line":"            \"status\": \"migrating\","},{"line_number":25,"context_line":"            \"updated_at\": \"2016-01-29T13:42:02.000000\""},{"line_number":26,"context_line":"        },"},{"line_number":27,"context_line":"        {"},{"line_number":28,"context_line":"            \"created_at\": \"2016-01-22T13:42:02.000000\","}],"source_content_type":"application/json","patch_set":18,"id":"bae84128_28c5bd8d","line":25,"range":{"start_line":4,"start_character":11,"end_line":25,"end_character":54},"in_reply_to":"bae84128_521275b5","updated":"2016-02-20 06:34:13.000000000","message":"ｓｏｒｒｙ，\n\nwhat is PS11?","commit_id":"c19b1b01dae599a6ab98ad67f3d3b15618c89d89"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"83ddd22d01933d3b92efd29b99a4ddd1c008cb0a","unresolved":false,"context_lines":[{"line_number":18,"context_line":"                }"},{"line_number":19,"context_line":"            ],"},{"line_number":20,"context_line":"            \"new_instance_type_id\": 2,"},{"line_number":21,"context_line":"            \"old_instance_type_id\": 1,"},{"line_number":22,"context_line":"            \"source_compute\": \"compute1\","},{"line_number":23,"context_line":"            \"source_node\": \"node1\","},{"line_number":24,"context_line":"            \"status\": \"migrating\","}],"source_content_type":"application/json","patch_set":30,"id":"bae84128_59b8f2e5","line":21,"updated":"2016-02-25 01:34:13.000000000","message":"these shouldn\u0027t be here.","commit_id":"08acc976a248243a65c56c4202b373493ecfe116"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6a2d2084c5676caaa7f5a1b579651388b2eb92d6","unresolved":false,"context_lines":[{"line_number":13,"context_line":"                    \"rel\": \"self\""},{"line_number":14,"context_line":"                },"},{"line_number":15,"context_line":"                {"},{"line_number":16,"context_line":"                    \"href\": \"http://openstack.example.com/openstack/servers/8600d31b-d1a1-4632-b2ff-45c2be1a70ff/migrations/1234\","},{"line_number":17,"context_line":"                    \"rel\": \"bookmark\""},{"line_number":18,"context_line":"                }"},{"line_number":19,"context_line":"            ],"}],"source_content_type":"application/json","patch_set":35,"id":"9aed3d3a_d6aaf4d3","line":16,"updated":"2016-02-26 11:21:23.000000000","message":"I am having cold feet on this one, because its going to return 404 always for non-live-migrate migrations.","commit_id":"b15a9edca76c7132e8b3e3baedd7938bfe96ffd6"}],"doc/api_samples/server-migrations/v2.23/migrations-get.json":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9725c7115f01a60877351c7a6f141eb63cc3a18b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"created_at\": \"2016-01-29T13:42:02.000000\","},{"line_number":3,"context_line":"    \"dest_compute\": \"compute2\","},{"line_number":4,"context_line":"    \"dest_host\": \"1.2.3.4\","},{"line_number":5,"context_line":"    \"dest_node\": \"node2\","},{"line_number":6,"context_line":"    \"id\": 1234,"},{"line_number":7,"context_line":"    \"instance_uuid\": \"instance_id_123\","},{"line_number":8,"context_line":"    \"new_instance_type_id\": 2,"},{"line_number":9,"context_line":"    \"old_instance_type_id\": 1,"},{"line_number":10,"context_line":"    \"source_compute\": \"compute1\","},{"line_number":11,"context_line":"    \"source_node\": \"node1\","},{"line_number":12,"context_line":"    \"status\": \"migrating\","},{"line_number":13,"context_line":"    \"updated_at\": \"2016-01-29T13:42:02.000000\""},{"line_number":14,"context_line":"}"}],"source_content_type":"application/json","patch_set":11,"id":"dae33548_e3d4b848","line":13,"range":{"start_line":2,"start_character":0,"end_line":13,"end_character":46},"updated":"2016-02-15 06:00:06.000000000","message":"This is different from the approved spec: http://specs.openstack.org/openstack/nova-specs/specs/mitaka/approved/live-migration-progress-report.html#rest-api-impact\n\nGenerally, instance_type is deprecated and \"flavor\" should be exposed instead on REST API. In addition, instance also is deprecated.\nPlease check the response format on the spec.","commit_id":"348aa983005580086468333e16690862f27d3aa3"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"82db346d10fe81806c9f6e5ec2d8230f80de7cd5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"created_at\": \"2016-01-29T13:42:02.000000\","},{"line_number":3,"context_line":"    \"dest_compute\": \"compute2\","},{"line_number":4,"context_line":"    \"dest_host\": \"1.2.3.4\","},{"line_number":5,"context_line":"    \"dest_node\": \"node2\","},{"line_number":6,"context_line":"    \"id\": 1234,"},{"line_number":7,"context_line":"    \"instance_uuid\": \"instance_id_123\","},{"line_number":8,"context_line":"    \"new_instance_type_id\": 2,"},{"line_number":9,"context_line":"    \"old_instance_type_id\": 1,"},{"line_number":10,"context_line":"    \"source_compute\": \"compute1\","},{"line_number":11,"context_line":"    \"source_node\": \"node1\","},{"line_number":12,"context_line":"    \"status\": \"migrating\","},{"line_number":13,"context_line":"    \"updated_at\": \"2016-01-29T13:42:02.000000\""},{"line_number":14,"context_line":"}"}],"source_content_type":"application/json","patch_set":11,"id":"dae33548_e37dd8e8","line":13,"range":{"start_line":2,"start_character":0,"end_line":13,"end_character":46},"in_reply_to":"dae33548_e3d4b848","updated":"2016-02-15 10:09:31.000000000","message":"Good catch. Thanks.","commit_id":"348aa983005580086468333e16690862f27d3aa3"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0fdffa6f4fb0d163ea33c82c0c06e553e2909ba8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"created_at\": \"2016-01-29T13:42:02.000000\","},{"line_number":3,"context_line":"    \"dest_compute\": \"compute2\","},{"line_number":4,"context_line":"    \"dest_host\": \"1.2.3.4\","},{"line_number":5,"context_line":"    \"dest_node\": \"node2\","}],"source_content_type":"application/json","patch_set":23,"id":"bae84128_89661a4f","line":2,"updated":"2016-02-23 15:07:05.000000000","message":"so this is what is in the spec, but it looks odd to me.\n\nI tried to check and didn\u0027t find much to help:\nhttp://specs.openstack.org/openstack/api-wg/guidelines/representation_structure.html#singular-resources\n\nThe normal nova pattern is to always contain inside something, so more like this:\n{ \"migration\": \u003cexisting doc\u003e }","commit_id":"bf0a96936084c34df39c4e97c062adbd244cbfcf"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"802b55eaba2e3b9326f5dc127256040c967b6eaf","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"created_at\": \"2016-01-29T13:42:02.000000\","},{"line_number":3,"context_line":"    \"dest_compute\": \"compute2\","},{"line_number":4,"context_line":"    \"dest_host\": \"1.2.3.4\","},{"line_number":5,"context_line":"    \"dest_node\": \"node2\","}],"source_content_type":"application/json","patch_set":23,"id":"bae84128_b4b34697","line":2,"in_reply_to":"bae84128_741ffe5a","updated":"2016-02-24 07:27:42.000000000","message":"I have checked the API official doc.\n\nAnd other\u0027s code,  it does likes this:\n{ \"migration\": \u003cexisting doc\u003e }\n\nAlex will discuss it with you tonight.","commit_id":"bf0a96936084c34df39c4e97c062adbd244cbfcf"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f037d6e4c22890d1160ef365af36e1523cc07bfe","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"created_at\": \"2016-01-29T13:42:02.000000\","},{"line_number":3,"context_line":"    \"dest_compute\": \"compute2\","},{"line_number":4,"context_line":"    \"dest_host\": \"1.2.3.4\","},{"line_number":5,"context_line":"    \"dest_node\": \"node2\","}],"source_content_type":"application/json","patch_set":23,"id":"bae84128_b8d1a259","line":2,"in_reply_to":"bae84128_89661a4f","updated":"2016-02-23 15:34:56.000000000","message":"so we could leave it this way, it just feels a little in consistent.","commit_id":"bf0a96936084c34df39c4e97c062adbd244cbfcf"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"da27e46ccda21e42b028d438b1e9c4c3e1738a03","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"created_at\": \"2016-01-29T13:42:02.000000\","},{"line_number":3,"context_line":"    \"dest_compute\": \"compute2\","},{"line_number":4,"context_line":"    \"dest_host\": \"1.2.3.4\","},{"line_number":5,"context_line":"    \"dest_node\": \"node2\","}],"source_content_type":"application/json","patch_set":23,"id":"bae84128_e0b87013","line":2,"in_reply_to":"bae84128_b8d1a259","updated":"2016-02-24 06:19:31.000000000","message":"leave this","commit_id":"bf0a96936084c34df39c4e97c062adbd244cbfcf"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c0f662a6f5835b7e3be90040b2a27797e97ef5b6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"created_at\": \"2016-01-29T13:42:02.000000\","},{"line_number":3,"context_line":"    \"dest_compute\": \"compute2\","},{"line_number":4,"context_line":"    \"dest_host\": \"1.2.3.4\","},{"line_number":5,"context_line":"    \"dest_node\": \"node2\","}],"source_content_type":"application/json","patch_set":23,"id":"bae84128_741ffe5a","line":2,"in_reply_to":"bae84128_e0b87013","updated":"2016-02-24 07:00:52.000000000","message":"Indeed, it looks like a mistake I made when I update the spec. I prefer to correct it","commit_id":"bf0a96936084c34df39c4e97c062adbd244cbfcf"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0fdffa6f4fb0d163ea33c82c0c06e553e2909ba8","unresolved":false,"context_lines":[{"line_number":3,"context_line":"    \"dest_compute\": \"compute2\","},{"line_number":4,"context_line":"    \"dest_host\": \"1.2.3.4\","},{"line_number":5,"context_line":"    \"dest_node\": \"node2\","},{"line_number":6,"context_line":"    \"id\": 1234,"},{"line_number":7,"context_line":"    \"server_uuid\": \"4cfba335-03d8-49b2-8c52-e69043d1e8fe\","},{"line_number":8,"context_line":"    \"new_flavor_id\": 2,"},{"line_number":9,"context_line":"    \"old_flavor_id\": 1,"}],"source_content_type":"application/json","patch_set":23,"id":"bae84128_224a8326","line":6,"updated":"2016-02-23 15:07:05.000000000","message":"With cells v2 in place, migrations in every cell, this id is not unique, although it is unique per instance.\n\nI just wonder if we should really add a uuid in here, and use that in the API... hmm, annoyed I only just noticed this here.\n\nLets leave this, for now, as others seemed fine with this at the spec level.","commit_id":"bf0a96936084c34df39c4e97c062adbd244cbfcf"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"da27e46ccda21e42b028d438b1e9c4c3e1738a03","unresolved":false,"context_lines":[{"line_number":3,"context_line":"    \"dest_compute\": \"compute2\","},{"line_number":4,"context_line":"    \"dest_host\": \"1.2.3.4\","},{"line_number":5,"context_line":"    \"dest_node\": \"node2\","},{"line_number":6,"context_line":"    \"id\": 1234,"},{"line_number":7,"context_line":"    \"server_uuid\": \"4cfba335-03d8-49b2-8c52-e69043d1e8fe\","},{"line_number":8,"context_line":"    \"new_flavor_id\": 2,"},{"line_number":9,"context_line":"    \"old_flavor_id\": 1,"}],"source_content_type":"application/json","patch_set":23,"id":"bae84128_00be34fe","line":6,"in_reply_to":"bae84128_224a8326","updated":"2016-02-24 06:19:31.000000000","message":"OK, leave this.","commit_id":"bf0a96936084c34df39c4e97c062adbd244cbfcf"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"4c50c2357b7e6f121d35f6c657524615af800aa2","unresolved":false,"context_lines":[{"line_number":7,"context_line":"        \"id\": 1234,"},{"line_number":8,"context_line":"        \"server_uuid\": \"4cfba335-03d8-49b2-8c52-e69043d1e8fe\","},{"line_number":9,"context_line":"        \"new_flavor_id\": 2,"},{"line_number":10,"context_line":"        \"old_flavor_id\": 1,"},{"line_number":11,"context_line":"        \"source_compute\": \"compute1\","},{"line_number":12,"context_line":"        \"source_node\": \"node1\","},{"line_number":13,"context_line":"        \"status\": \"migrating\","}],"source_content_type":"application/json","patch_set":27,"id":"bae84128_41d949f2","line":10,"updated":"2016-02-24 12:52:53.000000000","message":"oh, I missed this, this is bad...","commit_id":"cdc77be56688bd03ee430f7bfc25bb11e3a0a893"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"4229815bb1e12d48702edf51ea7a691569ae8270","unresolved":false,"context_lines":[{"line_number":7,"context_line":"        \"id\": 1234,"},{"line_number":8,"context_line":"        \"server_uuid\": \"4cfba335-03d8-49b2-8c52-e69043d1e8fe\","},{"line_number":9,"context_line":"        \"new_flavor_id\": 2,"},{"line_number":10,"context_line":"        \"old_flavor_id\": 1,"},{"line_number":11,"context_line":"        \"source_compute\": \"compute1\","},{"line_number":12,"context_line":"        \"source_node\": \"node1\","},{"line_number":13,"context_line":"        \"status\": \"migrating\","}],"source_content_type":"application/json","patch_set":27,"id":"bae84128_610f2d37","line":10,"in_reply_to":"bae84128_41d949f2","updated":"2016-02-24 12:57:42.000000000","message":"hmm, so looking at these:\nhttp://developer.openstack.org/api-ref-compute-v2.1.html#showServer\n\nand:\nhttp://developer.openstack.org/api-ref-compute-v2.1.html#listFlavors\n\nWe should match the server, and have refs here, I feel?","commit_id":"cdc77be56688bd03ee430f7bfc25bb11e3a0a893"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"86359f9ebc1d15769260e9b95ba384020ccd6c7d","unresolved":false,"context_lines":[{"line_number":7,"context_line":"        \"id\": 1234,"},{"line_number":8,"context_line":"        \"server_uuid\": \"4cfba335-03d8-49b2-8c52-e69043d1e8fe\","},{"line_number":9,"context_line":"        \"new_flavor_id\": 2,"},{"line_number":10,"context_line":"        \"old_flavor_id\": 1,"},{"line_number":11,"context_line":"        \"source_compute\": \"compute1\","},{"line_number":12,"context_line":"        \"source_node\": \"node1\","},{"line_number":13,"context_line":"        \"status\": \"migrating\","}],"source_content_type":"application/json","patch_set":27,"id":"bae84128_e4286b88","line":10,"in_reply_to":"bae84128_610f2d37","updated":"2016-02-24 12:58:50.000000000","message":"oh, I missed the key point, it should be a string, not an int.","commit_id":"cdc77be56688bd03ee430f7bfc25bb11e3a0a893"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"488a1de5db48a058ea64d3885b5ab06d1c60cc7a","unresolved":false,"context_lines":[{"line_number":15,"context_line":"        \"disk_total_bytes\": 234567,"},{"line_number":16,"context_line":"        \"disk_processed_bytes\": 23456,"},{"line_number":17,"context_line":"        \"disk_remaining_bytes\": 230000,"},{"line_number":18,"context_line":"        \"updated_at\": \"2016-01-29T13:42:02.000000\""},{"line_number":19,"context_line":"    }"},{"line_number":20,"context_line":"}"}],"source_content_type":"application/json","patch_set":31,"id":"bae84128_deace08e","line":18,"updated":"2016-02-25 05:32:52.000000000","message":"sorry, one more thought, should we expose \u0027migration_type\u0027? There are multiple type migration(live-migration, resize, migration, evacuate),  User may want to what is this migration.","commit_id":"f13bef449884f024a978e26d87516947cd9eaf78"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"8e1b38800730bb3968058aa0eb4836963dd18327","unresolved":false,"context_lines":[{"line_number":15,"context_line":"        \"disk_total_bytes\": 234567,"},{"line_number":16,"context_line":"        \"disk_processed_bytes\": 23456,"},{"line_number":17,"context_line":"        \"disk_remaining_bytes\": 230000,"},{"line_number":18,"context_line":"        \"updated_at\": \"2016-01-29T13:42:02.000000\""},{"line_number":19,"context_line":"    }"},{"line_number":20,"context_line":"}"}],"source_content_type":"application/json","patch_set":32,"id":"bae84128_c20fe22c","line":18,"updated":"2016-02-25 07:09:53.000000000","message":"sorry, one more thought, should we expose \u0027migration_type\u0027? There are multiple type migration(live-migration, resize, migration, evacuate),  User may want to what is this migration.","commit_id":"61b88e3a42c0334f0b9ac5eaf1c4bd12e2b027ef"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"508de1362d66f9509e45d16d66f616026c51ba4b","unresolved":false,"context_lines":[{"line_number":15,"context_line":"        \"disk_total_bytes\": 234567,"},{"line_number":16,"context_line":"        \"disk_processed_bytes\": 23456,"},{"line_number":17,"context_line":"        \"disk_remaining_bytes\": 230000,"},{"line_number":18,"context_line":"        \"updated_at\": \"2016-01-29T13:42:02.000000\""},{"line_number":19,"context_line":"    }"},{"line_number":20,"context_line":"}"}],"source_content_type":"application/json","patch_set":32,"id":"bae84128_cdf70a8b","line":18,"in_reply_to":"bae84128_57ed478d","updated":"2016-02-25 11:08:03.000000000","message":"migration type can be exposed once there is more than one. Let\u0027s address that in a microversion.","commit_id":"61b88e3a42c0334f0b9ac5eaf1c4bd12e2b027ef"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"513730cc10222d95ef2440d2a7e002c3664db7b8","unresolved":false,"context_lines":[{"line_number":15,"context_line":"        \"disk_total_bytes\": 234567,"},{"line_number":16,"context_line":"        \"disk_processed_bytes\": 23456,"},{"line_number":17,"context_line":"        \"disk_remaining_bytes\": 230000,"},{"line_number":18,"context_line":"        \"updated_at\": \"2016-01-29T13:42:02.000000\""},{"line_number":19,"context_line":"    }"},{"line_number":20,"context_line":"}"}],"source_content_type":"application/json","patch_set":32,"id":"bae84128_57ed478d","line":18,"in_reply_to":"bae84128_c20fe22c","updated":"2016-02-25 10:41:42.000000000","message":"hmm, interesting point... at one point I thought this was only going to be for live-migrate, at least for the first version.","commit_id":"61b88e3a42c0334f0b9ac5eaf1c4bd12e2b027ef"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"8c73bd017bb1a541a4330997d23d569c5e5be859","unresolved":false,"context_lines":[{"line_number":15,"context_line":"        \"disk_total_bytes\": 234567,"},{"line_number":16,"context_line":"        \"disk_processed_bytes\": 23456,"},{"line_number":17,"context_line":"        \"disk_remaining_bytes\": 230000,"},{"line_number":18,"context_line":"        \"updated_at\": \"2016-01-29T13:42:02.000000\""},{"line_number":19,"context_line":"    }"},{"line_number":20,"context_line":"}"}],"source_content_type":"application/json","patch_set":32,"id":"bae84128_08ad6088","line":18,"in_reply_to":"bae84128_cdf70a8b","updated":"2016-02-25 11:19:28.000000000","message":"ACK","commit_id":"61b88e3a42c0334f0b9ac5eaf1c4bd12e2b027ef"}],"doc/api_samples/server-migrations/v2.23/migrations-index.json":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9725c7115f01a60877351c7a6f141eb63cc3a18b","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\": \"2016-01-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\","},{"line_number":8,"context_line":"            \"id\": 1234,"},{"line_number":9,"context_line":"            \"instance_uuid\": \"instance_id_123\","},{"line_number":10,"context_line":"            \"new_instance_type_id\": 2,"},{"line_number":11,"context_line":"            \"old_instance_type_id\": 1,"},{"line_number":12,"context_line":"            \"source_compute\": \"compute1\","},{"line_number":13,"context_line":"            \"source_node\": \"node1\","},{"line_number":14,"context_line":"            \"status\": \"migrating\","},{"line_number":15,"context_line":"            \"updated_at\": \"2016-01-29T13:42:02.000000\""},{"line_number":16,"context_line":"        },"},{"line_number":17,"context_line":"        {"},{"line_number":18,"context_line":"            \"created_at\": \"2016-01-22T13:42:02.000000\","},{"line_number":19,"context_line":"            \"dest_compute\": \"compute20\","},{"line_number":20,"context_line":"            \"dest_host\": \"5.6.7.8\","},{"line_number":21,"context_line":"            \"dest_node\": \"node20\","},{"line_number":22,"context_line":"            \"id\": 5678,"},{"line_number":23,"context_line":"            \"instance_uuid\": \"instance_id_456\","},{"line_number":24,"context_line":"            \"new_instance_type_id\": 6,"},{"line_number":25,"context_line":"            \"old_instance_type_id\": 5,"},{"line_number":26,"context_line":"            \"source_compute\": \"compute10\","},{"line_number":27,"context_line":"            \"source_node\": \"node10\","},{"line_number":28,"context_line":"            \"status\": \"migrating\","},{"line_number":29,"context_line":"            \"updated_at\": \"2016-01-22T13:42:02.000000\""},{"line_number":30,"context_line":"        }"},{"line_number":31,"context_line":"    ]"},{"line_number":32,"context_line":"}"}],"source_content_type":"application/json","patch_set":11,"id":"dae33548_83c4cc92","line":30,"range":{"start_line":4,"start_character":0,"end_line":30,"end_character":9},"updated":"2016-02-15 06:00:06.000000000","message":"ditto","commit_id":"348aa983005580086468333e16690862f27d3aa3"}],"etc/nova/policy.json":[{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"de9e4705f979e8d76cd45960294604d8612ab3cd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3a7e1126_bc8b58c2","updated":"2015-12-21 06:15:44.000000000","message":"os_compute_api:servers:migrations:show\n\nrule:admin","commit_id":"52a42f704a037c930a84dea377305246cdbbc852"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"af26e408701f72ce322fdc8fe24e99dfbb819b08","unresolved":false,"context_lines":[{"line_number":439,"context_line":"    \"os_compute_api:os-server-groups\": \"\","},{"line_number":440,"context_line":"    \"os_compute_api:os-server-groups:discoverable\": \"\","},{"line_number":441,"context_line":"    \"os_compute_api:os-server-migrations:index\": \"rule:admin_or_owner\","},{"line_number":442,"context_line":"    \"os_compute_api:os-server-migrations:show\": \"rule:admin_or_owner\","},{"line_number":443,"context_line":"    \"os_compute_api:os-services\": \"rule:admin_api\","},{"line_number":444,"context_line":"    \"os_compute_api:os-services:discoverable\": \"\","},{"line_number":445,"context_line":"    \"os_compute_api:server-metadata:discoverable\": \"\","}],"source_content_type":"application/json","patch_set":1,"id":"3a7e1126_bc7f3f65","line":442,"updated":"2015-12-17 17:07:25.000000000","message":"This new API should also be discoverable","commit_id":"52a42f704a037c930a84dea377305246cdbbc852"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"514f2cb7c1425e70009dacc74274e4e1e66d0b49","unresolved":false,"context_lines":[{"line_number":270,"context_line":"    \"os_compute_api:servers:start\": \"rule:admin_or_owner\","},{"line_number":271,"context_line":"    \"os_compute_api:servers:stop\": \"rule:admin_or_owner\","},{"line_number":272,"context_line":"    \"os_compute_api:servers:trigger_crash_dump\": \"rule:admin_or_owner\","},{"line_number":273,"context_line":"    \"os_compute_api:servers:migrations:force_complete\": \"rule:admin_api\","},{"line_number":274,"context_line":"    \"os_compute_api:os-access-ips:discoverable\": \"\","},{"line_number":275,"context_line":"    \"os_compute_api:os-access-ips\": \"\","},{"line_number":276,"context_line":"    \"os_compute_api:os-admin-actions\": \"rule:admin_api\","}],"source_content_type":"application/json","patch_set":11,"id":"dae33548_b8ce5a81","line":273,"updated":"2016-02-15 08:46:36.000000000","message":"how about we move those two policy rule after here...then this is good for user to read this file...","commit_id":"348aa983005580086468333e16690862f27d3aa3"}],"nova/api/openstack/compute/migrations.py":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"85f9d71b1c5acd9897f7d865ccfc8e76f8fb9093","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        del obj[\u0027deleted\u0027]"},{"line_number":36,"context_line":"        del obj[\u0027deleted_at\u0027]"},{"line_number":37,"context_line":"        del obj[\u0027migration_type\u0027]"},{"line_number":38,"context_line":"        del obj[\u0027hidden\u0027]"},{"line_number":39,"context_line":"    return objects"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"bae84128_f5cbd01c","side":"PARENT","line":38,"range":{"start_line":38,"start_character":23,"end_line":38,"end_character":25},"updated":"2016-02-19 13:57:05.000000000","message":"might conflict to https://review.openstack.org/#/c/258797/\n:)","commit_id":"b57fbc725f83b4629e2523cde1ce5431d065b794"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f037d6e4c22890d1160ef365af36e1523cc07bfe","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        migrations \u003d self.compute_api.get_migrations(context, req.GET)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        req_version \u003d req.api_version_request"},{"line_number":73,"context_line":"        if req_version \u003e\u003d avr.APIVersionRequest(\"2.23\"):"},{"line_number":74,"context_line":"            return {\u0027migrations\u0027: self._output(req, migrations, True)}"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        return {\u0027migrations\u0027: self._output(req, migrations)}"}],"source_content_type":"text/x-python","patch_set":23,"id":"bae84128_b8a242ac","line":73,"updated":"2016-02-23 15:34:56.000000000","message":"normally this is done using:\n\n  if api_version_request.is_supported(req, min_version\u003d\u00272.23\u0027):","commit_id":"bf0a96936084c34df39c4e97c062adbd244cbfcf"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"da27e46ccda21e42b028d438b1e9c4c3e1738a03","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        migrations \u003d self.compute_api.get_migrations(context, req.GET)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        req_version \u003d req.api_version_request"},{"line_number":73,"context_line":"        if req_version \u003e\u003d avr.APIVersionRequest(\"2.23\"):"},{"line_number":74,"context_line":"            return {\u0027migrations\u0027: self._output(req, migrations, True)}"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        return {\u0027migrations\u0027: self._output(req, migrations)}"}],"source_content_type":"text/x-python","patch_set":23,"id":"bae84128_c0c72c94","line":73,"in_reply_to":"bae84128_b8a242ac","updated":"2016-02-24 06:19:31.000000000","message":"Done","commit_id":"bf0a96936084c34df39c4e97c062adbd244cbfcf"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"8e1b38800730bb3968058aa0eb4836963dd18327","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        super(MigrationsController, self).__init__()"},{"line_number":36,"context_line":"        self.compute_api \u003d compute.API()"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def _output(self, req, migrations_obj, add_link\u003dFalse):"},{"line_number":39,"context_line":"        \"\"\"Returns the desired output of the API from an object."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        From a MigrationsList\u0027s object this method returns a list of"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_df94db45","line":38,"range":{"start_line":38,"start_character":3,"end_line":38,"end_character":59},"updated":"2016-02-25 07:09:53.000000000","message":"Same suggestion as in server_migration, we generate response explicitly. But that can be later patch.","commit_id":"61b88e3a42c0334f0b9ac5eaf1c4bd12e2b027ef"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"0f40f8a611bfa30d81b438aea2d7a605036322a2","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        for obj in objects:"},{"line_number":51,"context_line":"            del obj[\u0027deleted\u0027]"},{"line_number":52,"context_line":"            del obj[\u0027deleted_at\u0027]"},{"line_number":53,"context_line":"            del obj[\u0027migration_type\u0027]"},{"line_number":54,"context_line":"            del obj[\u0027hidden\u0027]"},{"line_number":55,"context_line":"            if \u0027memory_total\u0027 in obj:"},{"line_number":56,"context_line":"                for key in detail_keys:"}],"source_content_type":"text/x-python","patch_set":35,"id":"9aed3d3a_36cb6055","line":53,"updated":"2016-02-26 11:24:55.000000000","message":"let\u0027s not delete this.","commit_id":"b15a9edca76c7132e8b3e3baedd7938bfe96ffd6"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"0f40f8a611bfa30d81b438aea2d7a605036322a2","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            if \u0027memory_total\u0027 in obj:"},{"line_number":56,"context_line":"                for key in detail_keys:"},{"line_number":57,"context_line":"                    del obj[key]"},{"line_number":58,"context_line":"            if add_link:"},{"line_number":59,"context_line":"                obj[\"links\"] \u003d self._view_builder._get_links("},{"line_number":60,"context_line":"                    req, obj[\"id\"],"},{"line_number":61,"context_line":"                    self._collection_name % obj[\u0027instance_uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":35,"id":"9aed3d3a_f6fe186a","line":58,"updated":"2016-02-26 11:24:55.000000000","message":"and only add links for live-migration","commit_id":"b15a9edca76c7132e8b3e3baedd7938bfe96ffd6"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"3124817bcccda5ec8596cb0346bb191cb33ed0e7","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                obj[\"links\"] \u003d self._view_builder._get_links("},{"line_number":67,"context_line":"                    req, obj[\"id\"],"},{"line_number":68,"context_line":"                    self._collection_name % obj[\u0027instance_uuid\u0027])"},{"line_number":69,"context_line":"            else:"},{"line_number":70,"context_line":"                del obj[\u0027migration_type\u0027]"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        return objects"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"9aed3d3a_656887f6","line":70,"range":{"start_line":69,"start_character":0,"end_line":70,"end_character":41},"updated":"2016-02-26 13:57:37.000000000","message":"these can get deleted, then we get the behavior we want","commit_id":"1ef17c11c4fd2c6a58923e3a07967a698c348f86"}],"nova/api/openstack/compute/server_migrations.py":[{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"af26e408701f72ce322fdc8fe24e99dfbb819b08","unresolved":false,"context_lines":[{"line_number":24,"context_line":"authorize \u003d extensions.os_compute_authorizer(ALIAS)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class ServerMigrationController(wsgi.Controller):"},{"line_number":28,"context_line":"    \"\"\"The Server Migration API controller for the OpenStack API.\"\"\""},{"line_number":29,"context_line":"    def __init__(self, **kwargs):"},{"line_number":30,"context_line":"        super(ServerMigrationController, self).__init__(**kwargs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a7e1126_995855fc","line":27,"range":{"start_line":27,"start_character":6,"end_line":27,"end_character":31},"updated":"2015-12-17 17:07:25.000000000","message":"This requires a bump of rest api version","commit_id":"52a42f704a037c930a84dea377305246cdbbc852"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"af26e408701f72ce322fdc8fe24e99dfbb819b08","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        authorize(context)"},{"line_number":37,"context_line":"        migrations \u003d self.compute_api.get_migrations_in_progress(context,"},{"line_number":38,"context_line":"                                                                 server_id)"},{"line_number":39,"context_line":"        return {\u0027migrations\u0027: migrations}"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    @extensions.expected_errors(404)"},{"line_number":42,"context_line":"    def show(self, req, server_id, migration_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a7e1126_39ffe1ab","line":39,"range":{"start_line":39,"start_character":17,"end_line":39,"end_character":27},"updated":"2015-12-17 17:07:25.000000000","message":"Is there really no need to handle exceptions explicitly?","commit_id":"52a42f704a037c930a84dea377305246cdbbc852"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"af26e408701f72ce322fdc8fe24e99dfbb819b08","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":46,"context_line":"        authorize(context)"},{"line_number":47,"context_line":"        migration \u003d self.compute_api.get_migration_by_id(context, migration_id)"},{"line_number":48,"context_line":"        return migration"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a7e1126_19f225d3","line":47,"range":{"start_line":47,"start_character":37,"end_line":47,"end_character":56},"updated":"2015-12-17 17:07:25.000000000","message":"You don\u0027t pass server_id here so you are not sure that this particular migration is related to instance with given ID.","commit_id":"52a42f704a037c930a84dea377305246cdbbc852"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"af26e408701f72ce322fdc8fe24e99dfbb819b08","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":46,"context_line":"        authorize(context)"},{"line_number":47,"context_line":"        migration \u003d self.compute_api.get_migration_by_id(context, migration_id)"},{"line_number":48,"context_line":"        return migration"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class ServerMigration(extensions.V21APIExtensionBase):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a7e1126_39eda1ef","line":48,"range":{"start_line":48,"start_character":8,"end_line":48,"end_character":14},"updated":"2015-12-17 17:07:25.000000000","message":"Same question about exceptions.","commit_id":"52a42f704a037c930a84dea377305246cdbbc852"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"af26e408701f72ce322fdc8fe24e99dfbb819b08","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                  \u0027collection_name\u0027: \u0027servers\u0027}"},{"line_number":61,"context_line":"        resources \u003d ["},{"line_number":62,"context_line":"            extensions.ResourceExtension("},{"line_number":63,"context_line":"                ALIAS, ServerMigrationController(), parent\u003dparent,"},{"line_number":64,"context_line":"                member_name\u003d\u0027migration\u0027)]"},{"line_number":65,"context_line":"        return resources"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a7e1126_b9851108","line":63,"range":{"start_line":63,"start_character":16,"end_line":63,"end_character":21},"updated":"2015-12-17 17:07:25.000000000","message":"With this piece of code the API will look like /servers/\u003cuuid\u003e/os-server-migrations/\u003cid\u003e but I might be wrong there.","commit_id":"52a42f704a037c930a84dea377305246cdbbc852"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"45a7cc92a8c32c911aaf37b64ed37ac326714d9c","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from nova.api.openstack import extensions"},{"line_number":19,"context_line":"from nova.api.openstack import wsgi"},{"line_number":20,"context_line":"from nova.api import validation"},{"line_number":21,"context_line":"from nova import compute"},{"line_number":22,"context_line":"from nova import exception"},{"line_number":23,"context_line":"from nova.objects import base as obj_base"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a7b0d38_813bf7d0","line":20,"range":{"start_line":20,"start_character":21,"end_line":20,"end_character":31},"updated":"2015-12-24 15:14:30.000000000","message":"unused, please remove.","commit_id":"bf9f7586c0da6c85139e1151eacfeb8c0004ba4c"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"392c6aa30aa3d94d6588dfe74c3404b0d1fc172c","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                state_error, \u0027force_complete\u0027, server_id)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    @wsgi.Controller.api_version(\"2.23\")"},{"line_number":85,"context_line":"    @extensions.expected_errors(())"},{"line_number":86,"context_line":"    def index(self, req, server_id):"},{"line_number":87,"context_line":"        \"\"\"Return all migrations of an instance in progress.\"\"\""},{"line_number":88,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"dae33548_443beaeb","line":85,"range":{"start_line":85,"start_character":31,"end_line":85,"end_character":35},"updated":"2016-02-15 08:51:13.000000000","message":"There should be 404 in case that instance was not found","commit_id":"348aa983005580086468333e16690862f27d3aa3"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"514f2cb7c1425e70009dacc74274e4e1e66d0b49","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                state_error, \u0027force_complete\u0027, server_id)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    @wsgi.Controller.api_version(\"2.23\")"},{"line_number":85,"context_line":"    @extensions.expected_errors(())"},{"line_number":86,"context_line":"    def index(self, req, server_id):"},{"line_number":87,"context_line":"        \"\"\"Return all migrations of an instance in progress.\"\"\""},{"line_number":88,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"dae33548_0431e20b","line":85,"range":{"start_line":85,"start_character":32,"end_line":85,"end_character":34},"updated":"2016-02-15 08:46:36.000000000","message":"we should return 404, when instance isn\u0027t existed?","commit_id":"348aa983005580086468333e16690862f27d3aa3"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"82db346d10fe81806c9f6e5ec2d8230f80de7cd5","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                state_error, \u0027force_complete\u0027, server_id)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    @wsgi.Controller.api_version(\"2.23\")"},{"line_number":85,"context_line":"    @extensions.expected_errors(())"},{"line_number":86,"context_line":"    def index(self, req, server_id):"},{"line_number":87,"context_line":"        \"\"\"Return all migrations of an instance in progress.\"\"\""},{"line_number":88,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"dae33548_b1af95e2","line":85,"range":{"start_line":85,"start_character":32,"end_line":85,"end_character":34},"in_reply_to":"dae33548_0431e20b","updated":"2016-02-15 10:09:31.000000000","message":"I have the same concern.\n\nI\u0027m not sure need to check the exist of instance. \n\nBut if the instance has been deleted,  we  can still get its migrations for DB, but not sure is it useful。\n\nBut I can the instance check.","commit_id":"348aa983005580086468333e16690862f27d3aa3"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"392c6aa30aa3d94d6588dfe74c3404b0d1fc172c","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    @wsgi.Controller.api_version(\"2.23\")"},{"line_number":95,"context_line":"    @extensions.expected_errors((404))"},{"line_number":96,"context_line":"    def show(self, req, server_id, id):"},{"line_number":97,"context_line":"        \"\"\"Return the migration of an instance in progress by id.\"\"\""},{"line_number":98,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":99,"context_line":"        authorize(context, action\u003d\"show\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"dae33548_18d82653","line":96,"range":{"start_line":96,"start_character":0,"end_line":96,"end_character":39},"updated":"2016-02-15 08:51:13.000000000","message":"I have a feeling that this call is completely useless. Because there can be only 1 in-progress migration per instance index will return 0 or 1 migration per instance. In case it returned 1 migration why would someone use GET call to retrieve migration details? It will give the same result... I thought that GET will be able to return details of any migration.","commit_id":"348aa983005580086468333e16690862f27d3aa3"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"82db346d10fe81806c9f6e5ec2d8230f80de7cd5","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    @wsgi.Controller.api_version(\"2.23\")"},{"line_number":95,"context_line":"    @extensions.expected_errors((404))"},{"line_number":96,"context_line":"    def show(self, req, server_id, id):"},{"line_number":97,"context_line":"        \"\"\"Return the migration of an instance in progress by id.\"\"\""},{"line_number":98,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":99,"context_line":"        authorize(context, action\u003d\"show\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"dae33548_ceb6f43c","line":96,"range":{"start_line":96,"start_character":0,"end_line":96,"end_character":39},"in_reply_to":"dae33548_18d82653","updated":"2016-02-15 10:09:31.000000000","message":"Yes. I have discuss with Alex about your concern before this patch. \n\nHe told me:\n seems you, and Paul C and the API teams has make \"show\" also return the in-progress migration,  similar to \"index\".  That\u0027s the SPEC.\n \n If we want to get any, please add a new spec to change it. \n\n That\u0027s the nova design rule.\n \n we can not break the rule.","commit_id":"348aa983005580086468333e16690862f27d3aa3"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"392c6aa30aa3d94d6588dfe74c3404b0d1fc172c","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        try:"},{"line_number":101,"context_line":"            migration \u003d self.compute_api.get_migration_by_id_and_instance("},{"line_number":102,"context_line":"                    context, id, server_id)"},{"line_number":103,"context_line":"        except exception.MigrationNotFoundForInstance as e:"},{"line_number":104,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":105,"context_line":"        no_progress \u003d [\u0027accepted\u0027, \u0027confirmed\u0027, \u0027reverted\u0027, \u0027error\u0027]"},{"line_number":106,"context_line":"        if migration.get(\"status\") in no_progress:"}],"source_content_type":"text/x-python","patch_set":11,"id":"dae33548_2417c652","line":103,"updated":"2016-02-15 08:51:13.000000000","message":"Missing exception InstanceNotFound","commit_id":"348aa983005580086468333e16690862f27d3aa3"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"82db346d10fe81806c9f6e5ec2d8230f80de7cd5","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        try:"},{"line_number":101,"context_line":"            migration \u003d self.compute_api.get_migration_by_id_and_instance("},{"line_number":102,"context_line":"                    context, id, server_id)"},{"line_number":103,"context_line":"        except exception.MigrationNotFoundForInstance as e:"},{"line_number":104,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":105,"context_line":"        no_progress \u003d [\u0027accepted\u0027, \u0027confirmed\u0027, \u0027reverted\u0027, \u0027error\u0027]"},{"line_number":106,"context_line":"        if migration.get(\"status\") in no_progress:"}],"source_content_type":"text/x-python","patch_set":11,"id":"dae33548_d1b6993c","line":103,"in_reply_to":"dae33548_2417c652","updated":"2016-02-15 10:09:31.000000000","message":"I have the same concern.\n\nI\u0027m not sure need to check the exist of instance. \n\nBut if the instance has been deleted,  we  can still get its migrations for DB, but not sure is it useful。\n\nBut I can the instance check.","commit_id":"348aa983005580086468333e16690862f27d3aa3"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"514f2cb7c1425e70009dacc74274e4e1e66d0b49","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        no_progress \u003d [\u0027accepted\u0027, \u0027confirmed\u0027, \u0027reverted\u0027, \u0027error\u0027]"},{"line_number":106,"context_line":"        if migration.get(\"status\") in no_progress:"},{"line_number":107,"context_line":"            return {}"},{"line_number":108,"context_line":"        obj \u003d obj_base.obj_to_primitive(migration)"},{"line_number":109,"context_line":"        strip(obj)"},{"line_number":110,"context_line":"        return obj"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"dae33548_382c0a4a","line":108,"range":{"start_line":108,"start_character":8,"end_line":108,"end_character":50},"updated":"2016-02-15 08:46:36.000000000","message":"For example, the instance is on the old node, the \u0027memory_total\u0027 shouldn\u0027t be set in the object. So you will missing \u0027memory_total\u0027 filed in the API response I guess.\n\nAnd actually I didn\u0027t like this way to generate the output. I prefer to generate api output by access each object field explicitly. Then in the future, when we add more new fields in the migration obj, we needn\u0027t add hack like this https://review.openstack.org/#/c/258797/13/nova/api/openstack/compute/migrations.py anymore","commit_id":"348aa983005580086468333e16690862f27d3aa3"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"0e61b27325838c133c5198e08640ff5082522494","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        no_progress \u003d [\u0027accepted\u0027, \u0027confirmed\u0027, \u0027reverted\u0027, \u0027error\u0027]"},{"line_number":106,"context_line":"        if migration.get(\"status\") in no_progress:"},{"line_number":107,"context_line":"            return {}"},{"line_number":108,"context_line":"        obj \u003d obj_base.obj_to_primitive(migration)"},{"line_number":109,"context_line":"        strip(obj)"},{"line_number":110,"context_line":"        return obj"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"dae33548_8687ac0e","line":108,"range":{"start_line":108,"start_character":8,"end_line":108,"end_character":50},"in_reply_to":"dae33548_0cee2422","updated":"2016-02-15 12:27:55.000000000","message":"Emm...after rethink, my first paragraph looks like say something wrong.\n\nFor the generation of api output, sorry, I think I didn\u0027t describe very clear, I prefer something like this:\n\n{\n  \n   \u0027memory_total\u0027: migration. memory_total\n\n   ...\n\n}\n\n\nThen in the future, when have new fields in the migration object, we needn\u0027t add some hack to filter the new fields out to avoid we expose those new fields without microversions.\n\nThis is more safe, avoid us expose extra new fields in the api without microversion in the future.","commit_id":"348aa983005580086468333e16690862f27d3aa3"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"82db346d10fe81806c9f6e5ec2d8230f80de7cd5","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        no_progress \u003d [\u0027accepted\u0027, \u0027confirmed\u0027, \u0027reverted\u0027, \u0027error\u0027]"},{"line_number":106,"context_line":"        if migration.get(\"status\") in no_progress:"},{"line_number":107,"context_line":"            return {}"},{"line_number":108,"context_line":"        obj \u003d obj_base.obj_to_primitive(migration)"},{"line_number":109,"context_line":"        strip(obj)"},{"line_number":110,"context_line":"        return obj"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"dae33548_0cee2422","line":108,"range":{"start_line":108,"start_character":8,"end_line":108,"end_character":50},"in_reply_to":"dae33548_382c0a4a","updated":"2016-02-15 10:09:31.000000000","message":"Not understand your ideas well. \n\nFor the oslo version object  there is a target_version param for obj_to_primitive. \n\nBut the nova base obj_to_primitive there is no target_version.\n\nIMHO, nova will use oslo version object in future, maybe they can handle the missing field.","commit_id":"348aa983005580086468333e16690862f27d3aa3"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"452eedea60a6060e66f45d7db853ffd59c031bb3","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    def get_resources(self):"},{"line_number":120,"context_line":"        parent \u003d {\u0027member_name\u0027: \u0027server\u0027,"},{"line_number":121,"context_line":"                  \u0027collection_name\u0027: \u0027servers\u0027}"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        member_actions \u003d {\u0027action\u0027: \u0027POST\u0027}"},{"line_number":124,"context_line":"        resources \u003d [extensions.ResourceExtension("},{"line_number":125,"context_line":"            \u0027migrations\u0027, ServerMigrationsController(),"}],"source_content_type":"text/x-python","patch_set":11,"id":"dae33548_c6c7f443","line":122,"updated":"2016-02-15 12:29:20.000000000","message":"oops, unrelated change","commit_id":"348aa983005580086468333e16690862f27d3aa3"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"2aba759759203632b1b0940ce2055159dd4e1208","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        # the current nova implementation can accept server_id can be the"},{"line_number":108,"context_line":"        # instance DB index."},{"line_number":109,"context_line":"        # if we need it, the best check way should be decorator."},{"line_number":110,"context_line":"        if not uuidutils.is_uuid_like(server_id):"},{"line_number":111,"context_line":"            raise exc.HTTPNotFound(explanation\u003d_(\"server_id must be a uuid.\"))"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        common.get_instance(self.compute_api, context, server_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"dae33548_5ac5673a","line":110,"updated":"2016-02-15 18:38:42.000000000","message":"We don\u0027t need this check","commit_id":"866ea4886443a45216d7bd4a359951ba9b28a86a"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"2d0ea43519ffc5b134ddd361de2cabfee2b8b029","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        # the current nova implementation can accept server_id can be the"},{"line_number":108,"context_line":"        # instance DB index."},{"line_number":109,"context_line":"        # if we need it, the best check way should be decorator."},{"line_number":110,"context_line":"        if not uuidutils.is_uuid_like(server_id):"},{"line_number":111,"context_line":"            raise exc.HTTPNotFound(explanation\u003d_(\"server_id must be a uuid.\"))"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        common.get_instance(self.compute_api, context, server_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"dae33548_7e4db671","line":110,"in_reply_to":"dae33548_5ac5673a","updated":"2016-02-15 23:03:02.000000000","message":"agree. \n\nBut I wonder which is right.  I need a guide. \n\n1. nova code allow it is not uuid. \nhttps://github.com/openstack/nova/blob/master/nova/compute/api.py#L1939\nEvery API allow server id is an DB index.\nI try a DB index by curl（not nova client）, it can work。\n\n2. nova doc allow it is uuid \nhttp://developer.openstack.org/api-ref-compute-v2.1.html#showServer\nthe API doc require a uuid. \n\nwhich is right?","commit_id":"866ea4886443a45216d7bd4a359951ba9b28a86a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"28b1c3919d64616a17ec6593adfaac492134c612","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        if not uuidutils.is_uuid_like(server_id):"},{"line_number":111,"context_line":"            raise exc.HTTPNotFound(explanation\u003d_(\"server_id must be a uuid.\"))"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        common.get_instance(self.compute_api, context, server_id)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        migrations \u003d self.compute_api.get_migrations_in_progress_by_instance("},{"line_number":116,"context_line":"                context, server_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"dae33548_176e152f","line":113,"range":{"start_line":113,"start_character":15,"end_line":113,"end_character":27},"updated":"2016-02-15 21:05:43.000000000","message":"this function should raise InstanceNotFound if the server_id is not uuid","commit_id":"866ea4886443a45216d7bd4a359951ba9b28a86a"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"f87a988c17b57f8422f25ab0134d4a6ed6bc29e9","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        if not uuidutils.is_uuid_like(server_id):"},{"line_number":111,"context_line":"            raise exc.HTTPNotFound(explanation\u003d_(\"server_id must be a uuid.\"))"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        common.get_instance(self.compute_api, context, server_id)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        migrations \u003d self.compute_api.get_migrations_in_progress_by_instance("},{"line_number":116,"context_line":"                context, server_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"dae33548_1e18ea1c","line":113,"range":{"start_line":113,"start_character":15,"end_line":113,"end_character":27},"in_reply_to":"dae33548_176e152f","updated":"2016-02-15 23:12:14.000000000","message":"Hi jichenjc and Pawel,\n\n\nI think the issue is that：\n1. first check get_instance， then　get migration.\nor \n2. get migration then check get_instance. \n\n\nI prefer 2. \nFor there is a delete API for migration, but there is a delete API for instance.\n\n\nif 1, there will maybe this case: \nwe get the migration successfully, but the instance is delete later, before the the API return. \n\n\nThough this is rare case.","commit_id":"866ea4886443a45216d7bd4a359951ba9b28a86a"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"2d0ea43519ffc5b134ddd361de2cabfee2b8b029","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        if not uuidutils.is_uuid_like(server_id):"},{"line_number":111,"context_line":"            raise exc.HTTPNotFound(explanation\u003d_(\"server_id must be a uuid.\"))"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        common.get_instance(self.compute_api, context, server_id)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        migrations \u003d self.compute_api.get_migrations_in_progress_by_instance("},{"line_number":116,"context_line":"                context, server_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"dae33548_234797bc","line":113,"range":{"start_line":113,"start_character":15,"end_line":113,"end_character":27},"in_reply_to":"dae33548_176e152f","updated":"2016-02-15 23:03:02.000000000","message":"https://github.com/openstack/nova/blob/master/nova/compute/api.py#L1939\n\nit allows server_id is an DB index.\nI try a DB index by curl（not nova client）, it can work。 \n\nor I　ｍｉｓｓ　ｓｏｍｔｈｉｎｇ？","commit_id":"866ea4886443a45216d7bd4a359951ba9b28a86a"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"4a14b91da559617f23a88137ee05386ec0ee9238","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        # NOTE(Shaohe Feng) do not sure we need this check, I have check the"},{"line_number":127,"context_line":"        # API doc"},{"line_number":128,"context_line":"        # http://developer.openstack.org/api-ref-compute-v2.1.html#showServer"},{"line_number":129,"context_line":"        # The show server API require require server_id should be uuid, But"},{"line_number":130,"context_line":"        # the current nova implementation can accept server_id can be the"},{"line_number":131,"context_line":"        # instance DB index."},{"line_number":132,"context_line":"        # if we need it, the best check way should be decorator."}],"source_content_type":"text/x-python","patch_set":12,"id":"dae33548_d1b962eb","line":129,"range":{"start_line":129,"start_character":38,"end_line":129,"end_character":45},"updated":"2016-02-15 17:17:01.000000000","message":"duplicated require.","commit_id":"866ea4886443a45216d7bd4a359951ba9b28a86a"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"4a14b91da559617f23a88137ee05386ec0ee9238","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        # API doc"},{"line_number":128,"context_line":"        # http://developer.openstack.org/api-ref-compute-v2.1.html#showServer"},{"line_number":129,"context_line":"        # The show server API require require server_id should be uuid, But"},{"line_number":130,"context_line":"        # the current nova implementation can accept server_id can be the"},{"line_number":131,"context_line":"        # instance DB index."},{"line_number":132,"context_line":"        # if we need it, the best check way should be decorator."},{"line_number":133,"context_line":"        if not uuidutils.is_uuid_like(server_id):"}],"source_content_type":"text/x-python","patch_set":12,"id":"dae33548_3196ce4c","line":130,"range":{"start_line":130,"start_character":63,"end_line":130,"end_character":66},"updated":"2016-02-15 17:17:01.000000000","message":"can accept server_id as the instance DB index.","commit_id":"866ea4886443a45216d7bd4a359951ba9b28a86a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"28b1c3919d64616a17ec6593adfaac492134c612","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        # the current nova implementation can accept server_id can be the"},{"line_number":131,"context_line":"        # instance DB index."},{"line_number":132,"context_line":"        # if we need it, the best check way should be decorator."},{"line_number":133,"context_line":"        if not uuidutils.is_uuid_like(server_id):"},{"line_number":134,"context_line":"            raise exc.HTTPNotFound(explanation\u003d_(\"server_id must be a uuid.\"))"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        common.get_instance(self.compute_api, context, server_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"dae33548_ea6aa419","line":133,"range":{"start_line":133,"start_character":25,"end_line":133,"end_character":37},"updated":"2016-02-15 21:05:43.000000000","message":"remove it as well","commit_id":"866ea4886443a45216d7bd4a359951ba9b28a86a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"28b1c3919d64616a17ec6593adfaac492134c612","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                    context, id, server_id)"},{"line_number":141,"context_line":"        except exception.MigrationNotFoundForInstance as e:"},{"line_number":142,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":143,"context_line":"        no_progress \u003d [\u0027accepted\u0027, \u0027confirmed\u0027, \u0027reverted\u0027, \u0027error\u0027]"},{"line_number":144,"context_line":"        if migration.get(\"status\") in no_progress:"},{"line_number":145,"context_line":"            return {}"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"dae33548_ea3c6431","line":143,"range":{"start_line":143,"start_character":8,"end_line":143,"end_character":19},"updated":"2016-02-15 21:05:43.000000000","message":"we can add a new function like\ndb.migration_get_in_progress_by_host_and_node\nso we don\u0027t need expose this in API layer","commit_id":"866ea4886443a45216d7bd4a359951ba9b28a86a"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"2d0ea43519ffc5b134ddd361de2cabfee2b8b029","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                    context, id, server_id)"},{"line_number":141,"context_line":"        except exception.MigrationNotFoundForInstance as e:"},{"line_number":142,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":143,"context_line":"        no_progress \u003d [\u0027accepted\u0027, \u0027confirmed\u0027, \u0027reverted\u0027, \u0027error\u0027]"},{"line_number":144,"context_line":"        if migration.get(\"status\") in no_progress:"},{"line_number":145,"context_line":"            return {}"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"dae33548_e3864fb8","line":143,"range":{"start_line":143,"start_character":8,"end_line":143,"end_character":19},"in_reply_to":"dae33548_ea3c6431","updated":"2016-02-15 23:03:02.000000000","message":"yes. \nThis new get API I have discuss many times how it should be. \n\nFor me, I think it should get any id of an instance. \n\nAnd guess, this will not get an agreement among nova developers. \n\nSo I\u0027d like just filter it in the top lever, do not touch the underlying DB logic. \n\n\nIt\u0027s time to discuss this problem again.","commit_id":"866ea4886443a45216d7bd4a359951ba9b28a86a"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"e74039ee16e725a7748d841890e7e010d60d11c6","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        except exception.MigrationNotFoundForInstance as e:"},{"line_number":142,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":143,"context_line":"        no_progress \u003d [\u0027accepted\u0027, \u0027confirmed\u0027, \u0027reverted\u0027, \u0027error\u0027]"},{"line_number":144,"context_line":"        if migration.get(\"status\") in no_progress:"},{"line_number":145,"context_line":"            return {}"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        # TODO(Shaohe Feng): We need to leverage the oslo.versionedobjects."},{"line_number":148,"context_line":"        # Then we can pass the target version to it\u0027s obj_to_primitive."}],"source_content_type":"text/x-python","patch_set":12,"id":"dae33548_ae8c2380","line":145,"range":{"start_line":144,"start_character":7,"end_line":145,"end_character":21},"updated":"2016-02-16 06:43:36.000000000","message":"Hi Pawel:\n\nLet discuss another problem: \n\nShow API. \n\nWe have discuss the index and show API, should get in progress migration. \n\nI have check the spec, \nhttp://specs.openstack.org/openstack/nova-specs/specs/mitaka/approved/live-migration-progress-report.html#rest-api-impact \n\nit does not describe it explicit.\nOnly a response example to describe it.  the status in response example, is \"running\".\n\nSo I think we do not need to change the spec.\n\nWe can just remove it.\n\nLet me fix it in next version.","commit_id":"866ea4886443a45216d7bd4a359951ba9b28a86a"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"2f55aedecc10d4a1e03882028a15e85e7b238986","unresolved":false,"context_lines":[{"line_number":161,"context_line":"    def get_resources(self):"},{"line_number":162,"context_line":"        parent \u003d {\u0027member_name\u0027: \u0027server\u0027,"},{"line_number":163,"context_line":"                  \u0027collection_name\u0027: \u0027servers\u0027}"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        member_actions \u003d {\u0027action\u0027: \u0027POST\u0027}"},{"line_number":166,"context_line":"        resources \u003d [extensions.ResourceExtension("},{"line_number":167,"context_line":"            \u0027migrations\u0027, ServerMigrationsController(),"}],"source_content_type":"text/x-python","patch_set":12,"id":"dae33548_8efaffbb","line":164,"updated":"2016-02-16 06:48:37.000000000","message":"blank line here is delimiter for readable\n\nnow I add a blank line before every resource.\n\nIt is more readable.","commit_id":"866ea4886443a45216d7bd4a359951ba9b28a86a"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"eecebf28927b706ad0fe4729f0da4ddf9670e67b","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        # behaviour, will be fixed in future."},{"line_number":108,"context_line":"        # Here we use an ugly way to check it."},{"line_number":109,"context_line":"        # TODO(Shaohe Feng) We need a good way for server_id check,"},{"line_number":110,"context_line":"        if not uuidutils.is_uuid_like(server_id):"},{"line_number":111,"context_line":"            raise exc.HTTPNotFound(explanation\u003d_(\"server_id must be a uuid.\"))"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        # NOTE(Shaohe Feng) just check the instance is available. To keep"}],"source_content_type":"text/x-python","patch_set":16,"id":"dae33548_39e55508","line":110,"updated":"2016-02-18 17:38:08.000000000","message":"You can remove this check. We no longer support retrieving instances by ID:\nhttps://review.openstack.org/#/c/281277/","commit_id":"6bbe872f28b4c22c95b6eb30c579d9811de012e6"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1b74181b732bd20a118acbd5835e4f996216c904","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        return {\u0027migrations\u0027: output(migrations)}"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    @wsgi.Controller.api_version(\"2.23\")"},{"line_number":109,"context_line":"    @extensions.expected_errors((404))"},{"line_number":110,"context_line":"    def show(self, req, server_id, id):"},{"line_number":111,"context_line":"        \"\"\"Return the migration of an instance in progress by id.\"\"\""},{"line_number":112,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":20,"id":"bae84128_db31520d","line":109,"range":{"start_line":109,"start_character":32,"end_line":109,"end_character":37},"updated":"2016-02-22 07:28:43.000000000","message":"super nit, we can just write like this @extensions.expected_errors(404)","commit_id":"4cc163b94583d68c387e4724322f1163dac83bac"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1b74181b732bd20a118acbd5835e4f996216c904","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        common.get_instance(self.compute_api, context, server_id)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        try:"},{"line_number":120,"context_line":"            migration \u003d self.compute_api.get_migration_by_id_and_instance("},{"line_number":121,"context_line":"                    context, id, server_id)"},{"line_number":122,"context_line":"        except exception.MigrationNotFoundForInstance as e:"},{"line_number":123,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":124,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"bae84128_fb7096de","line":121,"range":{"start_line":120,"start_character":12,"end_line":121,"end_character":43},"updated":"2016-02-22 07:28:43.000000000","message":"I like we show any migration at here. As the ref link in the /migrations works at here. We\u0027d better update spec later with this a little bit.","commit_id":"4cc163b94583d68c387e4724322f1163dac83bac"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1b74181b732bd20a118acbd5835e4f996216c904","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        except exception.MigrationNotFoundForInstance as e:"},{"line_number":123,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        # TODO(Shaohe Feng): We need to leverage the oslo.versionedobjects."},{"line_number":126,"context_line":"        # Then we can pass the target version to it\u0027s obj_to_primitive to get"},{"line_number":127,"context_line":"        # we expected object."},{"line_number":128,"context_line":"        prim \u003d obj_base.obj_to_primitive(migration)"}],"source_content_type":"text/x-python","patch_set":20,"id":"bae84128_5bdc22e4","line":125,"range":{"start_line":125,"start_character":29,"end_line":125,"end_character":75},"updated":"2016-02-22 07:28:43.000000000","message":"Nova already use oslo.versionobjects","commit_id":"4cc163b94583d68c387e4724322f1163dac83bac"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1b74181b732bd20a118acbd5835e4f996216c904","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        # TODO(Shaohe Feng): We need to leverage the oslo.versionedobjects."},{"line_number":126,"context_line":"        # Then we can pass the target version to it\u0027s obj_to_primitive to get"},{"line_number":127,"context_line":"        # we expected object."},{"line_number":128,"context_line":"        prim \u003d obj_base.obj_to_primitive(migration)"},{"line_number":129,"context_line":"        strip(prim)"},{"line_number":130,"context_line":"        update_key(prim)"},{"line_number":131,"context_line":"        return prim"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"class ServerMigrations(extensions.V21APIExtensionBase):"}],"source_content_type":"text/x-python","patch_set":20,"id":"bae84128_3bacbe34","line":131,"range":{"start_line":128,"start_character":8,"end_line":131,"end_character":19},"updated":"2016-02-22 07:28:43.000000000","message":"Looks like I still not explain clearly.\n\nI suggest we write like this:\n\n{\n         \"server_uuid\": migration.instance_uuid,\n         \"new_flavor_id\": migration.new_instance_type_id,\n         \"old_flavor_id\": migration.old_instance_type_id,\n        .....\n }\n\nWe assign each field explicitly.","commit_id":"4cc163b94583d68c387e4724322f1163dac83bac"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1b74181b732bd20a118acbd5835e4f996216c904","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    def get_resources(self):"},{"line_number":141,"context_line":"        parent \u003d {\u0027member_name\u0027: \u0027server\u0027,"},{"line_number":142,"context_line":"                  \u0027collection_name\u0027: \u0027servers\u0027}"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        member_actions \u003d {\u0027action\u0027: \u0027POST\u0027}"},{"line_number":145,"context_line":"        resources \u003d [extensions.ResourceExtension("},{"line_number":146,"context_line":"            \u0027migrations\u0027, ServerMigrationsController(),"}],"source_content_type":"text/x-python","patch_set":20,"id":"bae84128_7b2be694","line":143,"updated":"2016-02-22 07:28:43.000000000","message":"unrelated change","commit_id":"4cc163b94583d68c387e4724322f1163dac83bac"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1b74181b732bd20a118acbd5835e4f996216c904","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            \u0027migrations\u0027, ServerMigrationsController(),"},{"line_number":147,"context_line":"            parent\u003dparent, member_actions\u003dmember_actions)]"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        resource \u003d extensions.ResourceExtension("},{"line_number":150,"context_line":"            \u0027migrations\u0027, ServerMigrationsController(),"},{"line_number":151,"context_line":"            parent\u003dparent, member_name\u003d\"migration\")"},{"line_number":152,"context_line":"        resources.append(resource)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        return resources"}],"source_content_type":"text/x-python","patch_set":20,"id":"bae84128_360fb32f","line":151,"range":{"start_line":149,"start_character":8,"end_line":151,"end_character":51},"updated":"2016-02-22 07:28:43.000000000","message":"looks like we needn\u0027t this. We already register added resource at line 145?","commit_id":"4cc163b94583d68c387e4724322f1163dac83bac"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"32d3c2204cebb19c317597c1aaad8b7f20b4847e","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        \"memory_remaining\": migration.memory_remaining,"},{"line_number":49,"context_line":"        \"memory_total\": migration.memory_total,"},{"line_number":50,"context_line":"        \"new_flavor_id\": migration.new_instance_type_id,"},{"line_number":51,"context_line":"        \"old_flavor_id\": migration.old_instance_type_id,"},{"line_number":52,"context_line":"        \"server_uuid\": migration.instance_uuid,"},{"line_number":53,"context_line":"        \"source_compute\": migration.source_compute,"},{"line_number":54,"context_line":"        \"source_node\": migration.source_node,"}],"source_content_type":"text/x-python","patch_set":27,"id":"bae84128_24e6d3e7","line":51,"updated":"2016-02-24 13:09:29.000000000","message":"This is actually a problem. These fields in migration are pointing to the instance_type.id field. That\u0027s something we never put on the wire to the user.\n\nThese need to be translated to instance_type.flavor_id, which can be done with https://github.com/openstack/nova/blob/128068182c5339595fc96ea387b09e08ef8b81a8/nova/db/sqlalchemy/api.py#L4834-L4841\n\ninstance_type.flavor_id is a string, not an int.","commit_id":"cdc77be56688bd03ee430f7bfc25bb11e3a0a893"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"b5d44b8929e2636deafe71ba3d37bfb92ee61012","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        \"id\": migration.id,"},{"line_number":47,"context_line":"        \"memory_processed\": migration.memory_processed,"},{"line_number":48,"context_line":"        \"memory_remaining\": migration.memory_remaining,"},{"line_number":49,"context_line":"        \"memory_total\": migration.memory_total,"},{"line_number":50,"context_line":"        \"server_uuid\": migration.instance_uuid,"},{"line_number":51,"context_line":"        \"source_compute\": migration.source_compute,"},{"line_number":52,"context_line":"        \"source_node\": migration.source_node,"}],"source_content_type":"text/x-python","patch_set":28,"id":"bae84128_c506fa84","line":49,"updated":"2016-02-24 15:24:40.000000000","message":"so, for all of memory_ and disk_ we should pick a unit (bytes maybe) encode that into the var name. Do whatever math is required to convert the migration raw data to that number.\n\nLater we should make sure the migration values are always reported in that number.","commit_id":"7a9da9932675fe903a261ba26d0361fb0dd208c5"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"8e1b38800730bb3968058aa0eb4836963dd18327","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        # consistency with other API, check it before get migrations."},{"line_number":98,"context_line":"        common.get_instance(self.compute_api, context, server_id)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        migrations \u003d self.compute_api.get_migrations_in_progress_by_instance("},{"line_number":101,"context_line":"                context, server_id)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        return {\u0027migrations\u0027: [output(migration) for migration in migrations]}"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_df885bc9","line":100,"range":{"start_line":100,"start_character":38,"end_line":100,"end_character":76},"updated":"2016-02-25 07:09:53.000000000","message":"Emm... actually we can access the Nova object directly at here.","commit_id":"61b88e3a42c0334f0b9ac5eaf1c4bd12e2b027ef"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d7acacd9773d6681596443c9c78f0fab2f9d0776","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        # consistency with other API, check it before get migrations."},{"line_number":98,"context_line":"        common.get_instance(self.compute_api, context, server_id)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        migrations \u003d self.compute_api.get_migrations_in_progress_by_instance("},{"line_number":101,"context_line":"                context, server_id)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        return {\u0027migrations\u0027: [output(migration) for migration in migrations]}"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_a85a744e","line":100,"range":{"start_line":100,"start_character":38,"end_line":100,"end_character":76},"in_reply_to":"bae84128_88e7b0ab","updated":"2016-02-25 11:25:20.000000000","message":"we could, but lets not do that for now, so we follow the local pattern here.","commit_id":"61b88e3a42c0334f0b9ac5eaf1c4bd12e2b027ef"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"2600c99e3f10d5c61e4707aaa7f0247ea7952249","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        # consistency with other API, check it before get migrations."},{"line_number":98,"context_line":"        common.get_instance(self.compute_api, context, server_id)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        migrations \u003d self.compute_api.get_migrations_in_progress_by_instance("},{"line_number":101,"context_line":"                context, server_id)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        return {\u0027migrations\u0027: [output(migration) for migration in migrations]}"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_c8409838","line":100,"range":{"start_line":100,"start_character":38,"end_line":100,"end_character":76},"in_reply_to":"bae84128_df885bc9","updated":"2016-02-25 11:13:30.000000000","message":"So we need to make sure we only return the live-migrations here.","commit_id":"61b88e3a42c0334f0b9ac5eaf1c4bd12e2b027ef"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"d63da3cf7f1b9165bc5311293523d7f54f461075","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        # consistency with other API, check it before get migrations."},{"line_number":98,"context_line":"        common.get_instance(self.compute_api, context, server_id)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        migrations \u003d self.compute_api.get_migrations_in_progress_by_instance("},{"line_number":101,"context_line":"                context, server_id)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        return {\u0027migrations\u0027: [output(migration) for migration in migrations]}"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_88e7b0ab","line":100,"range":{"start_line":100,"start_character":38,"end_line":100,"end_character":76},"in_reply_to":"bae84128_df885bc9","updated":"2016-02-25 11:23:36.000000000","message":"access the Nova object without compute_api?","commit_id":"61b88e3a42c0334f0b9ac5eaf1c4bd12e2b027ef"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"7b895e40397e57eeabad7d81176669aa8c5c946d","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            migration \u003d self.compute_api.get_migration_by_id_and_instance("},{"line_number":118,"context_line":"                    context, id, server_id)"},{"line_number":119,"context_line":"        except exception.MigrationNotFoundForInstance as e:"},{"line_number":120,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        no_progress \u003d [\u0027accepted\u0027, \u0027confirmed\u0027, \u0027reverted\u0027, \u0027error\u0027, \u0027failed\u0027]"},{"line_number":123,"context_line":"        if migration.get(\"status\") in no_progress:"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_08f2809a","line":120,"range":{"start_line":120,"start_character":35,"end_line":120,"end_character":66},"updated":"2016-02-25 11:20:11.000000000","message":"I prefer we use a better error message, clear to say something like \"a in-progress live migration not found\", the message in the MigrationNotFoundForInstance not very clear to say \"in-progress\" and \"live migration\".","commit_id":"61b88e3a42c0334f0b9ac5eaf1c4bd12e2b027ef"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"8e1b38800730bb3968058aa0eb4836963dd18327","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        no_progress \u003d [\u0027accepted\u0027, \u0027confirmed\u0027, \u0027reverted\u0027, \u0027error\u0027, \u0027failed\u0027]"},{"line_number":123,"context_line":"        if migration.get(\"status\") in no_progress:"},{"line_number":124,"context_line":"            msg \u003d _(\"live migration %(id)s for server uuid %(uuid)s is not in\""},{"line_number":125,"context_line":"                    \" progress.\") % {\"id\": id, \"uuid\": server_id}"},{"line_number":126,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_ffeeffb2","line":123,"range":{"start_line":123,"start_character":8,"end_line":123,"end_character":50},"updated":"2016-02-25 07:09:53.000000000","message":"thinking of why we don\u0027t call get_migrations_in_progress_by_instance directly. (as line 100, actually we can use nova object at here directly)\n\nLine 122, really create another way to filter in-progress migration, as we already have this https://review.openstack.org/#/c/258771/32/nova/db/sqlalchemy/api.py\nSo I think we use get_migrations_in_progress_by_instance directly is better","commit_id":"61b88e3a42c0334f0b9ac5eaf1c4bd12e2b027ef"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"2600c99e3f10d5c61e4707aaa7f0247ea7952249","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        no_progress \u003d [\u0027accepted\u0027, \u0027confirmed\u0027, \u0027reverted\u0027, \u0027error\u0027, \u0027failed\u0027]"},{"line_number":123,"context_line":"        if migration.get(\"status\") in no_progress:"},{"line_number":124,"context_line":"            msg \u003d _(\"live migration %(id)s for server uuid %(uuid)s is not in\""},{"line_number":125,"context_line":"                    \" progress.\") % {\"id\": id, \"uuid\": server_id}"},{"line_number":126,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_cdc9ca5c","line":123,"range":{"start_line":123,"start_character":8,"end_line":123,"end_character":50},"in_reply_to":"bae84128_625d36ec","updated":"2016-02-25 11:13:30.000000000","message":"so that in_progress can probably actually return only one, in theory.","commit_id":"61b88e3a42c0334f0b9ac5eaf1c4bd12e2b027ef"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"df6665b680b008ac67a832ace45fe77ff83fb2ae","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        no_progress \u003d [\u0027accepted\u0027, \u0027confirmed\u0027, \u0027reverted\u0027, \u0027error\u0027, \u0027failed\u0027]"},{"line_number":123,"context_line":"        if migration.get(\"status\") in no_progress:"},{"line_number":124,"context_line":"            msg \u003d _(\"live migration %(id)s for server uuid %(uuid)s is not in\""},{"line_number":125,"context_line":"                    \" progress.\") % {\"id\": id, \"uuid\": server_id}"},{"line_number":126,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_0e09e931","line":123,"range":{"start_line":123,"start_character":8,"end_line":123,"end_character":50},"in_reply_to":"bae84128_cdc9ca5c","updated":"2016-02-25 11:42:54.000000000","message":"yes. we have get an agreement. \n\nwe use \nget_migrations_in_progress_by_instance or get_migration_by_id_and_instance? \n\nget_migrations_in_progress_by_instance , it dose not need the migration id. we can make sure it return one.","commit_id":"61b88e3a42c0334f0b9ac5eaf1c4bd12e2b027ef"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"23e530c85e108d5ae29a605ca424559e39c28fcf","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        no_progress \u003d [\u0027accepted\u0027, \u0027confirmed\u0027, \u0027reverted\u0027, \u0027error\u0027, \u0027failed\u0027]"},{"line_number":123,"context_line":"        if migration.get(\"status\") in no_progress:"},{"line_number":124,"context_line":"            msg \u003d _(\"live migration %(id)s for server uuid %(uuid)s is not in\""},{"line_number":125,"context_line":"                    \" progress.\") % {\"id\": id, \"uuid\": server_id}"},{"line_number":126,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_625d36ec","line":123,"range":{"start_line":123,"start_character":8,"end_line":123,"end_character":50},"in_reply_to":"bae84128_ffeeffb2","updated":"2016-02-25 07:19:31.000000000","message":"No, in_progress maybe a list more than one. \n\nAt present we only define all status are in-progress, beside  \n [\u0027accepted\u0027, \u0027confirmed\u0027, \u0027reverted\u0027, \u0027error\u0027, \u0027failed\u0027].\n\nGet means one.","commit_id":"61b88e3a42c0334f0b9ac5eaf1c4bd12e2b027ef"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"468640987f5b31691d925ebaf1cd2b179d9c744d","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        # NOTE(Shaohe Feng) just check the instance is available. To keep"},{"line_number":97,"context_line":"        # consistency with other API, check it before get migrations."},{"line_number":98,"context_line":"        common.get_instance(self.compute_api, context, server_id)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        migrations \u003d self.compute_api.get_migrations_in_progress_by_instance("},{"line_number":101,"context_line":"                context, server_id, \u0027live-migration\u0027)"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_ec62bb3c","line":98,"updated":"2016-02-25 16:37:19.000000000","message":"I know there is a comment, but it seems weird to do 2 round trips here.","commit_id":"7cddfe6e9d2b5ec38b3ba0afbe6d7283728f482e"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e778e881d2584c40fee2cac5c7de172b1f17d402","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        # TODO(Shaohe Feng) we should share the in-progress list."},{"line_number":130,"context_line":"        in_progress \u003d [\u0027queued\u0027, \u0027preparing\u0027, \u0027running\u0027, \u0027post-migrating\u0027]"},{"line_number":131,"context_line":"        if migration.get(\"status\") not in in_progress:"},{"line_number":132,"context_line":"            msg \u003d _(\"Live migration %(id)s for server %(uuid)s is not in\""},{"line_number":133,"context_line":"                    \" progress.\") % {\"id\": id, \"uuid\": server_id}"},{"line_number":134,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        return {\u0027migration\u0027: output(migration)}"}],"source_content_type":"text/x-python","patch_set":35,"id":"9aed3d3a_8d685ff7","line":133,"range":{"start_line":132,"start_character":12,"end_line":133,"end_character":65},"updated":"2016-02-26 10:47:19.000000000","message":"I prefer just return message like line 120. Pretend this API didn\u0027t know anything of in-progress live-migration. Probably same comment in the line 125. But anyway this isn\u0027t a important thing.","commit_id":"b15a9edca76c7132e8b3e3baedd7938bfe96ffd6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6a2d2084c5676caaa7f5a1b579651388b2eb92d6","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        # TODO(Shaohe Feng) we should share the in-progress list."},{"line_number":130,"context_line":"        in_progress \u003d [\u0027queued\u0027, \u0027preparing\u0027, \u0027running\u0027, \u0027post-migrating\u0027]"},{"line_number":131,"context_line":"        if migration.get(\"status\") not in in_progress:"},{"line_number":132,"context_line":"            msg \u003d _(\"Live migration %(id)s for server %(uuid)s is not in\""},{"line_number":133,"context_line":"                    \" progress.\") % {\"id\": id, \"uuid\": server_id}"},{"line_number":134,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        return {\u0027migration\u0027: output(migration)}"}],"source_content_type":"text/x-python","patch_set":35,"id":"9aed3d3a_53ab9674","line":133,"range":{"start_line":132,"start_character":12,"end_line":133,"end_character":65},"in_reply_to":"9aed3d3a_8d685ff7","updated":"2016-02-26 11:21:23.000000000","message":"Actually got similar thoughts, but yeah, not a blocker.","commit_id":"b15a9edca76c7132e8b3e3baedd7938bfe96ffd6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6a2d2084c5676caaa7f5a1b579651388b2eb92d6","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        if migration.get(\"status\") not in in_progress:"},{"line_number":132,"context_line":"            msg \u003d _(\"Live migration %(id)s for server %(uuid)s is not in\""},{"line_number":133,"context_line":"                    \" progress.\") % {\"id\": id, \"uuid\": server_id}"},{"line_number":134,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        return {\u0027migration\u0027: output(migration)}"},{"line_number":137,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"9aed3d3a_930a3ed1","line":134,"updated":"2016-02-26 11:21:23.000000000","message":"I am not sure I value all these extra error message, and would maybe prefer hiding all that detail, incase folks start reading it. But I don\u0027t want to block on it.","commit_id":"b15a9edca76c7132e8b3e3baedd7938bfe96ffd6"}],"nova/api/openstack/rest_api_version_history.rst":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6a2d2084c5676caaa7f5a1b579651388b2eb92d6","unresolved":false,"context_lines":[{"line_number":203,"context_line":"  index API or the information of a specific migration by get API."},{"line_number":204,"context_line":"  And the old top-level resource `/os-migrations` won\u0027t be extended anymore."},{"line_number":205,"context_line":"  Add ref link to the /servers/{uuid}/migrations/{id} for old /os-migrations"},{"line_number":206,"context_line":"  API."}],"source_content_type":"text/x-rst","patch_set":35,"id":"9aed3d3a_f3358a46","line":206,"updated":"2016-02-26 11:21:23.000000000","message":"I think alex said about this on IRC, would be nice to include more about it really only lists live-migration things.","commit_id":"b15a9edca76c7132e8b3e3baedd7938bfe96ffd6"}],"nova/compute/api.py":[{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"af26e408701f72ce322fdc8fe24e99dfbb819b08","unresolved":false,"context_lines":[{"line_number":3315,"context_line":"        return objects.MigrationList.get_by_filters(context, filters)"},{"line_number":3316,"context_line":""},{"line_number":3317,"context_line":"    def get_migration_by_id(self, context, migration_id):"},{"line_number":3318,"context_line":"        \"\"\"Get all migrations for the given filters.\"\"\""},{"line_number":3319,"context_line":"        return objects.MigrationList.get_by_id(context, migration_id)"},{"line_number":3320,"context_line":""},{"line_number":3321,"context_line":"    def get_migrations_in_progress(self, context, server_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a7e1126_f9b959cc","line":3318,"updated":"2015-12-17 17:07:25.000000000","message":"NIT: You need to update comment there.","commit_id":"52a42f704a037c930a84dea377305246cdbbc852"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"af26e408701f72ce322fdc8fe24e99dfbb819b08","unresolved":false,"context_lines":[{"line_number":3319,"context_line":"        return objects.MigrationList.get_by_id(context, migration_id)"},{"line_number":3320,"context_line":""},{"line_number":3321,"context_line":"    def get_migrations_in_progress(self, context, server_id):"},{"line_number":3322,"context_line":"        \"\"\"Get all migrations for the given filters.\"\"\""},{"line_number":3323,"context_line":"        return objects.MigrationList.migrations_get_in_progress_by_instance("},{"line_number":3324,"context_line":"                            context, server_id)"},{"line_number":3325,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a7e1126_f9e079ce","line":3322,"range":{"start_line":3322,"start_character":19,"end_line":3322,"end_character":29},"updated":"2015-12-17 17:07:25.000000000","message":"NIT: and there too","commit_id":"52a42f704a037c930a84dea377305246cdbbc852"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0fdffa6f4fb0d163ea33c82c0c06e553e2909ba8","unresolved":false,"context_lines":[{"line_number":3392,"context_line":"        return objects.MigrationList.get_in_progress_by_instance("},{"line_number":3393,"context_line":"                context, instance_uuid)"},{"line_number":3394,"context_line":""},{"line_number":3395,"context_line":"    def get_migration_by_id_and_instance(self, context, id, instance_uuid):"},{"line_number":3396,"context_line":"        \"\"\"Get the migration of an instance by id.\"\"\""},{"line_number":3397,"context_line":"        return objects.Migration.get_by_id_and_instance("},{"line_number":3398,"context_line":"                context, id, instance_uuid)"}],"source_content_type":"text/x-python","patch_set":23,"id":"bae84128_e746ed79","line":3395,"updated":"2016-02-23 15:07:05.000000000","message":"nit: migration_id is probably nicer here.","commit_id":"bf0a96936084c34df39c4e97c062adbd244cbfcf"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"da27e46ccda21e42b028d438b1e9c4c3e1738a03","unresolved":false,"context_lines":[{"line_number":3392,"context_line":"        return objects.MigrationList.get_in_progress_by_instance("},{"line_number":3393,"context_line":"                context, instance_uuid)"},{"line_number":3394,"context_line":""},{"line_number":3395,"context_line":"    def get_migration_by_id_and_instance(self, context, id, instance_uuid):"},{"line_number":3396,"context_line":"        \"\"\"Get the migration of an instance by id.\"\"\""},{"line_number":3397,"context_line":"        return objects.Migration.get_by_id_and_instance("},{"line_number":3398,"context_line":"                context, id, instance_uuid)"}],"source_content_type":"text/x-python","patch_set":23,"id":"bae84128_20d6d84e","line":3395,"in_reply_to":"bae84128_e746ed79","updated":"2016-02-24 06:19:31.000000000","message":"Done","commit_id":"bf0a96936084c34df39c4e97c062adbd244cbfcf"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"8e1b38800730bb3968058aa0eb4836963dd18327","unresolved":false,"context_lines":[{"line_number":3395,"context_line":"        \"\"\"Get all migrations for the given filters.\"\"\""},{"line_number":3396,"context_line":"        return objects.MigrationList.get_by_filters(context, filters)"},{"line_number":3397,"context_line":""},{"line_number":3398,"context_line":"    def get_migrations_in_progress_by_instance(self, context, instance_uuid):"},{"line_number":3399,"context_line":"        \"\"\"Get all migrations of an instance in progress.\"\"\""},{"line_number":3400,"context_line":"        return objects.MigrationList.get_in_progress_by_instance("},{"line_number":3401,"context_line":"                context, instance_uuid)"},{"line_number":3402,"context_line":""},{"line_number":3403,"context_line":"    def get_migration_by_id_and_instance(self, context,"},{"line_number":3404,"context_line":"                                         migration_id, instance_uuid):"},{"line_number":3405,"context_line":"        \"\"\"Get the migration of an instance by id.\"\"\""},{"line_number":3406,"context_line":"        return objects.Migration.get_by_id_and_instance("},{"line_number":3407,"context_line":"                context, migration_id, instance_uuid)"},{"line_number":3408,"context_line":""},{"line_number":3409,"context_line":"    @wrap_check_policy"},{"line_number":3410,"context_line":"    def volume_snapshot_create(self, context, volume_id, create_info):"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_5f628b17","line":3407,"range":{"start_line":3398,"start_character":4,"end_line":3407,"end_character":53},"updated":"2016-02-25 07:09:53.000000000","message":"I feel this two method is useless, we can use nova object in the api layer directly.","commit_id":"61b88e3a42c0334f0b9ac5eaf1c4bd12e2b027ef"}],"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"af26e408701f72ce322fdc8fe24e99dfbb819b08","unresolved":false,"context_lines":[{"line_number":4496,"context_line":"                                                          \u0027error\u0027]))"},{"line_number":4497,"context_line":""},{"line_number":4498,"context_line":"    if not result:"},{"line_number":4499,"context_line":"        raise exception.MigrationNotFoundByStatus(instance_uuid\u003dinstance_uuid,"},{"line_number":4500,"context_line":"                                                  status\u003dstatus)"},{"line_number":4501,"context_line":""},{"line_number":4502,"context_line":"    return result"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a7e1126_d979fdfd","line":4499,"updated":"2015-12-17 17:07:25.000000000","message":"I don\u0027t feel that this exception reflects what really happened. It should be translated to something more informative.","commit_id":"52a42f704a037c930a84dea377305246cdbbc852"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"675cd3f6e9ed6713fc7ac0ce837fbfbb49500dca","unresolved":false,"context_lines":[{"line_number":4551,"context_line":"    return model_query(context, models.Migration).\\"},{"line_number":4552,"context_line":"            filter_by(instance_uuid\u003dinstance_uuid).\\"},{"line_number":4553,"context_line":"            filter(~models.Migration.status.in_([\u0027accepted\u0027, \u0027confirmed\u0027,"},{"line_number":4554,"context_line":"                                                 \u0027reverted\u0027, \u0027error\u0027])).\\"},{"line_number":4555,"context_line":"            all()"},{"line_number":4556,"context_line":""},{"line_number":4557,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"bae84128_0025665b","line":4554,"updated":"2016-02-24 17:49:10.000000000","message":"This negative logic is going to be tricky, as we add states.\n\nThink about error vs failed, I think as we add values this will fail.\n\nCan we select all the in progress states instead? In fact, I think we really only want to expose the live-migrate ones to start with?\n\nMaybe just look for things in the status of \"running\"? Or do we want to include \"queued\", \"migrating\" and \"pre-migrating\" and maybe \"post-migrating\"? is that enough?","commit_id":"8681b6b69d43be6a8d3a55c6b72775ce728c93fd"},{"author":{"_account_id":7461,"name":"Paul Murray","email":"pmurray@hpe.com","username":"ptm"},"change_message_id":"8a209e23b9af12b130e8159b5dfa932a140bc18a","unresolved":false,"context_lines":[{"line_number":4551,"context_line":"    return model_query(context, models.Migration).\\"},{"line_number":4552,"context_line":"            filter_by(instance_uuid\u003dinstance_uuid).\\"},{"line_number":4553,"context_line":"            filter(~models.Migration.status.in_([\u0027accepted\u0027, \u0027confirmed\u0027,"},{"line_number":4554,"context_line":"                                                 \u0027reverted\u0027, \u0027error\u0027])).\\"},{"line_number":4555,"context_line":"            all()"},{"line_number":4556,"context_line":""},{"line_number":4557,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"bae84128_699b7d73","line":4554,"in_reply_to":"bae84128_0025665b","updated":"2016-02-24 18:26:51.000000000","message":"That is a good point, but this does match the function above. Maybe this can be changed at the time if its a problem?","commit_id":"8681b6b69d43be6a8d3a55c6b72775ce728c93fd"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5c4bff542792a01829867db0e7f5d9dca4382689","unresolved":false,"context_lines":[{"line_number":4551,"context_line":"    return model_query(context, models.Migration).\\"},{"line_number":4552,"context_line":"            filter_by(instance_uuid\u003dinstance_uuid).\\"},{"line_number":4553,"context_line":"            filter(~models.Migration.status.in_([\u0027accepted\u0027, \u0027confirmed\u0027,"},{"line_number":4554,"context_line":"                                                 \u0027reverted\u0027, \u0027error\u0027])).\\"},{"line_number":4555,"context_line":"            all()"},{"line_number":4556,"context_line":""},{"line_number":4557,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"bae84128_94e6d442","line":4554,"in_reply_to":"bae84128_699b7d73","updated":"2016-02-24 18:34:27.000000000","message":"yeah, it does, actually, we should share that list, rather than cut and paste it, seems like we are missing a state.","commit_id":"8681b6b69d43be6a8d3a55c6b72775ce728c93fd"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"38536cf9531ebcd26727dbc972bd5b72e2b8cb18","unresolved":false,"context_lines":[{"line_number":4551,"context_line":"    return model_query(context, models.Migration).\\"},{"line_number":4552,"context_line":"            filter_by(instance_uuid\u003dinstance_uuid).\\"},{"line_number":4553,"context_line":"            filter(~models.Migration.status.in_([\u0027accepted\u0027, \u0027confirmed\u0027,"},{"line_number":4554,"context_line":"                                                 \u0027reverted\u0027, \u0027error\u0027])).\\"},{"line_number":4555,"context_line":"            all()"},{"line_number":4556,"context_line":""},{"line_number":4557,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"bae84128_1b878cd8","line":4554,"in_reply_to":"bae84128_94e6d442","updated":"2016-02-24 20:59:05.000000000","message":"Honestly, I feel like we can land this as a fixup for relatively little pain. It doesn\u0027t really change the REST interface. And this would like 2.23 and 2.24 land without other potential disruptive rebase conflicts.\n\nWe want both of them in Mitaka.","commit_id":"8681b6b69d43be6a8d3a55c6b72775ce728c93fd"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"202d6218d35a260f6a417c9181551d2405bf3f19","unresolved":false,"context_lines":[{"line_number":4551,"context_line":"    return model_query(context, models.Migration).\\"},{"line_number":4552,"context_line":"            filter_by(instance_uuid\u003dinstance_uuid).\\"},{"line_number":4553,"context_line":"            filter(~models.Migration.status.in_([\u0027accepted\u0027, \u0027confirmed\u0027,"},{"line_number":4554,"context_line":"                                                 \u0027reverted\u0027, \u0027error\u0027])).\\"},{"line_number":4555,"context_line":"            all()"},{"line_number":4556,"context_line":""},{"line_number":4557,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"bae84128_a1190a7c","line":4554,"in_reply_to":"bae84128_94e6d442","updated":"2016-02-24 23:56:48.000000000","message":"really sorry:\nI do not notice that a recent patch add a \u0027failed\u0027 state on Feb 22. just these days. \n\nhttps://review.openstack.org/#/c/277451/5/nova/db/sqlalchemy/api.py\n\nshould I change it to positive? \nor should I just add the missing \u0027failed\u0027 state?","commit_id":"8681b6b69d43be6a8d3a55c6b72775ce728c93fd"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"8f45f874e62432ab5927fd4e3ba62c7c9a1e409b","unresolved":false,"context_lines":[{"line_number":4549,"context_line":"@main_context_manager.reader"},{"line_number":4550,"context_line":"def migration_get_in_progress_by_instance(context, instance_uuid):"},{"line_number":4551,"context_line":"    # NOTE(Shaohe Feng) conside to change it as positive logic."},{"line_number":4552,"context_line":"    # TODO (Shaohe Feng) we should share the non in-progress list."},{"line_number":4553,"context_line":"    # TODO (Shaohe Feng) will also summarize all status to a new"},{"line_number":4554,"context_line":"    # MigrationStatus class."},{"line_number":4555,"context_line":"    return model_query(context, models.Migration).\\"}],"source_content_type":"text/x-python","patch_set":30,"id":"bae84128_bc0bec2a","line":4552,"range":{"start_line":4552,"start_character":4,"end_line":4552,"end_character":24},"updated":"2016-02-25 02:08:01.000000000","message":"oops, pep8 failed here.","commit_id":"08acc976a248243a65c56c4202b373493ecfe116"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6a2d2084c5676caaa7f5a1b579651388b2eb92d6","unresolved":false,"context_lines":[{"line_number":4561,"context_line":"    if migration_type:"},{"line_number":4562,"context_line":"        query \u003d query.filter(models.Migration.migration_type \u003d\u003d migration_type)"},{"line_number":4563,"context_line":""},{"line_number":4564,"context_line":"    return query.all()"},{"line_number":4565,"context_line":""},{"line_number":4566,"context_line":""},{"line_number":4567,"context_line":"@main_context_manager.reader"}],"source_content_type":"text/x-python","patch_set":35,"id":"9aed3d3a_f35aaa82","line":4564,"updated":"2016-02-26 11:21:23.000000000","message":"I think you can implement this whole thing using migration_get_all_by_filters(context, filters), but I guess this is nice and specific?","commit_id":"b15a9edca76c7132e8b3e3baedd7938bfe96ffd6"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"5f0fe11a1121897fce0d5fdc69cf3fa33e36f8c9","unresolved":false,"context_lines":[{"line_number":4561,"context_line":"    if migration_type:"},{"line_number":4562,"context_line":"        query \u003d query.filter(models.Migration.migration_type \u003d\u003d migration_type)"},{"line_number":4563,"context_line":""},{"line_number":4564,"context_line":"    return query.all()"},{"line_number":4565,"context_line":""},{"line_number":4566,"context_line":""},{"line_number":4567,"context_line":"@main_context_manager.reader"}],"source_content_type":"text/x-python","patch_set":35,"id":"9aed3d3a_215f9c42","line":4564,"in_reply_to":"9aed3d3a_a1c72c11","updated":"2016-02-26 11:48:02.000000000","message":"Agreed, migration_get_all_by_filters really is only about migration attributes. Having a new method here is good for not mixing up filtering within the model vs. filtering by external construct.","commit_id":"b15a9edca76c7132e8b3e3baedd7938bfe96ffd6"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"4c2e6908db13113e20aa319b9b4fd9b76ee8f4d3","unresolved":false,"context_lines":[{"line_number":4561,"context_line":"    if migration_type:"},{"line_number":4562,"context_line":"        query \u003d query.filter(models.Migration.migration_type \u003d\u003d migration_type)"},{"line_number":4563,"context_line":""},{"line_number":4564,"context_line":"    return query.all()"},{"line_number":4565,"context_line":""},{"line_number":4566,"context_line":""},{"line_number":4567,"context_line":"@main_context_manager.reader"}],"source_content_type":"text/x-python","patch_set":35,"id":"9aed3d3a_012378be","line":4564,"in_reply_to":"9aed3d3a_a1c72c11","updated":"2016-02-26 11:47:59.000000000","message":"There is a patch that adds it:\nhttps://review.openstack.org/#/c/281137/\nbut it can be incorporated here I think (or accepted in #281137)","commit_id":"b15a9edca76c7132e8b3e3baedd7938bfe96ffd6"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"701ab9dff73db6c55926eb468994bf38528f8d26","unresolved":false,"context_lines":[{"line_number":4561,"context_line":"    if migration_type:"},{"line_number":4562,"context_line":"        query \u003d query.filter(models.Migration.migration_type \u003d\u003d migration_type)"},{"line_number":4563,"context_line":""},{"line_number":4564,"context_line":"    return query.all()"},{"line_number":4565,"context_line":""},{"line_number":4566,"context_line":""},{"line_number":4567,"context_line":"@main_context_manager.reader"}],"source_content_type":"text/x-python","patch_set":35,"id":"9aed3d3a_a1c72c11","line":4564,"in_reply_to":"9aed3d3a_f35aaa82","updated":"2016-02-26 11:44:44.000000000","message":"I do not find migration_get_all_by_filters  can filter instance_uuid.","commit_id":"b15a9edca76c7132e8b3e3baedd7938bfe96ffd6"}],"nova/exception.py":[{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"816aac1c397ebc2c6314f7583eba36ba0a3e52c9","unresolved":false,"context_lines":[{"line_number":1122,"context_line":"                \"with status %(status)s.\")"},{"line_number":1123,"context_line":""},{"line_number":1124,"context_line":""},{"line_number":1125,"context_line":"class MigrationNotFoundForInstance(MigrationNotFound):"},{"line_number":1126,"context_line":"    msg_fmt \u003d _(\"Migration %(migration_id)s not found for instance \""},{"line_number":1127,"context_line":"                \"%(instance_id)s\")"},{"line_number":1128,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"dae33548_6400c4ab","line":1125,"range":{"start_line":1125,"start_character":6,"end_line":1125,"end_character":34},"updated":"2016-02-14 07:14:07.000000000","message":"You can use this exception","commit_id":"4cacf654be6af8712a8c20a6301a52bdd2e8a74e"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"50c6346179d0df4ca2c1478225655abee216dd9c","unresolved":false,"context_lines":[{"line_number":1122,"context_line":"                \"with status %(status)s.\")"},{"line_number":1123,"context_line":""},{"line_number":1124,"context_line":""},{"line_number":1125,"context_line":"class MigrationNotFoundForInstance(MigrationNotFound):"},{"line_number":1126,"context_line":"    msg_fmt \u003d _(\"Migration %(migration_id)s not found for instance \""},{"line_number":1127,"context_line":"                \"%(instance_id)s\")"},{"line_number":1128,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"dae33548_3b51b763","line":1125,"range":{"start_line":1125,"start_character":6,"end_line":1125,"end_character":34},"in_reply_to":"dae33548_6400c4ab","updated":"2016-02-14 09:08:54.000000000","message":"ACK","commit_id":"4cacf654be6af8712a8c20a6301a52bdd2e8a74e"}],"nova/objects/migration.py":[{"author":{"_account_id":7461,"name":"Paul Murray","email":"pmurray@hpe.com","username":"ptm"},"change_message_id":"be4352962a19b50be6e11f18304972f6dcaf17a1","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        return cls._from_db_object(context, cls(), db_migration)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    @base.remotable_classmethod"},{"line_number":93,"context_line":"    def migrations_get_in_progress_by_instance(cls, context, instance_uuid):"},{"line_number":94,"context_line":"        db_migration \u003d db.migrations_get_in_progress_by_instance("},{"line_number":95,"context_line":"            context, instance_uuid)"},{"line_number":96,"context_line":"        return cls._from_db_object(context, cls(), db_migration)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a7e1126_a9e95c1c","line":93,"updated":"2015-12-17 12:32:59.000000000","message":"Adding a remotable method requires a version change in the object","commit_id":"52a42f704a037c930a84dea377305246cdbbc852"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"af26e408701f72ce322fdc8fe24e99dfbb819b08","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        return cls._from_db_object(context, cls(), db_migration)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    @base.remotable_classmethod"},{"line_number":93,"context_line":"    def migrations_get_in_progress_by_instance(cls, context, instance_uuid):"},{"line_number":94,"context_line":"        db_migration \u003d db.migrations_get_in_progress_by_instance("},{"line_number":95,"context_line":"            context, instance_uuid)"},{"line_number":96,"context_line":"        return cls._from_db_object(context, cls(), db_migration)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a7e1126_7c6477e4","line":93,"in_reply_to":"3a7e1126_a9e95c1c","updated":"2015-12-17 17:07:25.000000000","message":"This method should be moved to MigrationList object as it should return a list (actually with only one item - there can\u0027t be more migrations in progress than 1).","commit_id":"52a42f704a037c930a84dea377305246cdbbc852"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"45a7cc92a8c32c911aaf37b64ed37ac326714d9c","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            context, instance_uuid, status)"},{"line_number":96,"context_line":"        return cls._from_db_object(context, cls(), db_migration)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    @base.remotable_classmethod"},{"line_number":99,"context_line":"    def get_by_instance_and_id(cls, context, instance_uuid, id):"},{"line_number":100,"context_line":"        db_migration \u003d db.migration_get_by_instance_and_id("},{"line_number":101,"context_line":"            context, instance_uuid, id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a7b0d38_a13633e5","line":98,"range":{"start_line":98,"start_character":0,"end_line":98,"end_character":4},"updated":"2015-12-24 15:14:30.000000000","message":"nova.tests.unit.objects.test_objects.TestObjectVersions.test_versions\n---------------------------------------------------------------------\n\nCaptured traceback:\n~~~~~~~~~~~~~~~~~~~\n    Traceback (most recent call last):\n      File \"nova/tests/unit/objects/test_objects.py\", line 1257, in test_versions\n        \u0027Some objects have changed; please make sure the \u0027\n      File \"/home/jenkins/workspace/gate-nova-python27/.tox/py27/local/lib/python2.7/site-packages/testtools/testcase.py\", line 350, in assertEqual\n        self.assertThat(observed, matcher, message)\n      File \"/home/jenkins/workspace/gate-nova-python27/.tox/py27/local/lib/python2.7/site-packages/testtools/testcase.py\", line 435, in assertThat\n        raise mismatch_error\n    testtools.matchers._impl.MismatchError: !\u003d:\n    reference \u003d {\u0027Migration\u0027: \u00271.2-8784125bedcea0a9227318511904e853\u0027,\n     \u0027MigrationList\u0027: \u00271.2-02c0ec0c50b75ca86a2a74c5e8c911cc\u0027}\n    actual    \u003d {\u0027Migration\u0027: \u00271.2-fda5caf5ad5206a10d5acddffdc40256\u0027,\n     \u0027MigrationList\u0027: \u00271.2-565dee5e1111a4c08aba3ef7696dac36\u0027}\n    : Some objects have changed; please make sure the versions have been bumped, and then update their hashes here.","commit_id":"bf9f7586c0da6c85139e1151eacfeb8c0004ba4c"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"65f8fd28f0efb3f1437f2d5705c15ff06653c07c","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            context, instance_uuid, status)"},{"line_number":96,"context_line":"        return cls._from_db_object(context, cls(), db_migration)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    @base.remotable_classmethod"},{"line_number":99,"context_line":"    def get_by_instance_and_id(cls, context, instance_uuid, id):"},{"line_number":100,"context_line":"        db_migration \u003d db.migration_get_by_instance_and_id("},{"line_number":101,"context_line":"            context, instance_uuid, id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a7b0d38_414c2f70","line":98,"range":{"start_line":98,"start_character":0,"end_line":98,"end_character":4},"in_reply_to":"1a7b0d38_a13633e5","updated":"2015-12-24 15:18:40.000000000","message":"nova.tests.unit.objects.test_objects.TestObjectVersions.test_versions\n---------------------------------------------------------------------\n\nCaptured traceback:\n~~~~~~~~~~~~~~~~~~~\n    b\u0027Traceback (most recent call last):\u0027\n    b\u0027  File \"/home/jenkins/workspace/gate-nova-python34/nova/tests/unit/objects/test_objects.py\", line 1257, in test_versions\u0027\n    b\"    \u0027Some objects have changed; please make sure the \u0027\"\n    b\u0027  File \"/home/jenkins/workspace/gate-nova-python34/.tox/py34/lib/python3.4/site-packages/testtools/testcase.py\", line 350, in assertEqual\u0027\n    b\u0027    self.assertThat(observed, matcher, message)\u0027\n    b\u0027  File \"/home/jenkins/workspace/gate-nova-python34/.tox/py34/lib/python3.4/site-packages/testtools/testcase.py\", line 435, in assertThat\u0027\n    b\u0027    raise mismatch_error\u0027\n    b\u0027testtools.matchers._impl.MismatchError: !\u003d:\u0027\n    b\"reference \u003d {\u0027Migration\u0027: \u00271.2-8784125bedcea0a9227318511904e853\u0027,\"\n    b\" \u0027MigrationList\u0027: \u00271.2-02c0ec0c50b75ca86a2a74c5e8c911cc\u0027}\"\n    b\"actual    \u003d {\u0027Migration\u0027: \u00271.2-fda5caf5ad5206a10d5acddffdc40256\u0027,\"\n    b\" \u0027MigrationList\u0027: \u00271.2-565dee5e1111a4c08aba3ef7696dac36\u0027}\"\n    b\u0027: Some objects have changed; please make sure the versions have been bumped, and then update their hashes here.\u0027\n    b\u0027\u0027","commit_id":"bf9f7586c0da6c85139e1151eacfeb8c0004ba4c"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"816aac1c397ebc2c6314f7583eba36ba0a3e52c9","unresolved":false,"context_lines":[{"line_number":142,"context_line":"    #              Migration \u003c\u003d 1.1"},{"line_number":143,"context_line":"    # Version 1.1: Added use_slave to get_unconfirmed_by_dest_compute"},{"line_number":144,"context_line":"    # Version 1.2: Migration version 1.2"},{"line_number":145,"context_line":"    VERSION \u003d \u00271.2\u0027"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    fields \u003d {"},{"line_number":148,"context_line":"        \u0027objects\u0027: fields.ListOfObjectsField(\u0027Migration\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"dae33548_649c446a","line":145,"updated":"2016-02-14 07:14:07.000000000","message":"Wonder if you need to bump version here, but i\u0027m not sure","commit_id":"4cacf654be6af8712a8c20a6301a52bdd2e8a74e"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"d5f2dd1648dd8f6ef5522d96623fe4d761c8ffc6","unresolved":false,"context_lines":[{"line_number":142,"context_line":"    #              Migration \u003c\u003d 1.1"},{"line_number":143,"context_line":"    # Version 1.1: Added use_slave to get_unconfirmed_by_dest_compute"},{"line_number":144,"context_line":"    # Version 1.2: Migration version 1.2"},{"line_number":145,"context_line":"    VERSION \u003d \u00271.2\u0027"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    fields \u003d {"},{"line_number":148,"context_line":"        \u0027objects\u0027: fields.ListOfObjectsField(\u0027Migration\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"dae33548_bbf2e76d","line":145,"in_reply_to":"dae33548_5b547b53","updated":"2016-02-14 09:11:57.000000000","message":"also not sure which version should be bumped. 1.3 or 1.4?\n1.4 is to keep consistency with Migration object.","commit_id":"4cacf654be6af8712a8c20a6301a52bdd2e8a74e"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"50c6346179d0df4ca2c1478225655abee216dd9c","unresolved":false,"context_lines":[{"line_number":142,"context_line":"    #              Migration \u003c\u003d 1.1"},{"line_number":143,"context_line":"    # Version 1.1: Added use_slave to get_unconfirmed_by_dest_compute"},{"line_number":144,"context_line":"    # Version 1.2: Migration version 1.2"},{"line_number":145,"context_line":"    VERSION \u003d \u00271.2\u0027"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    fields \u003d {"},{"line_number":148,"context_line":"        \u0027objects\u0027: fields.ListOfObjectsField(\u0027Migration\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"dae33548_5b547b53","line":145,"in_reply_to":"dae33548_649c446a","updated":"2016-02-14 09:08:54.000000000","message":"I have touch Migration object, but not touch MigrationList.\n\nI\u0027m also not sure should need a bump version.","commit_id":"4cacf654be6af8712a8c20a6301a52bdd2e8a74e"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f037d6e4c22890d1160ef365af36e1523cc07bfe","unresolved":false,"context_lines":[{"line_number":157,"context_line":"    #              Migration \u003c\u003d 1.1"},{"line_number":158,"context_line":"    # Version 1.1: Added use_slave to get_unconfirmed_by_dest_compute"},{"line_number":159,"context_line":"    # Version 1.2: Migration version 1.2"},{"line_number":160,"context_line":"    VERSION \u003d \u00271.2\u0027"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    fields \u003d {"},{"line_number":163,"context_line":"        \u0027objects\u0027: fields.ListOfObjectsField(\u0027Migration\u0027),"}],"source_content_type":"text/x-python","patch_set":23,"id":"bae84128_1e2eb742","line":160,"updated":"2016-02-23 15:34:56.000000000","message":"You must increase the version here, as you have added a new function.","commit_id":"bf0a96936084c34df39c4e97c062adbd244cbfcf"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"da27e46ccda21e42b028d438b1e9c4c3e1738a03","unresolved":false,"context_lines":[{"line_number":157,"context_line":"    #              Migration \u003c\u003d 1.1"},{"line_number":158,"context_line":"    # Version 1.1: Added use_slave to get_unconfirmed_by_dest_compute"},{"line_number":159,"context_line":"    # Version 1.2: Migration version 1.2"},{"line_number":160,"context_line":"    VERSION \u003d \u00271.2\u0027"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    fields \u003d {"},{"line_number":163,"context_line":"        \u0027objects\u0027: fields.ListOfObjectsField(\u0027Migration\u0027),"}],"source_content_type":"text/x-python","patch_set":23,"id":"bae84128_0362bed7","line":160,"in_reply_to":"bae84128_1e2eb742","updated":"2016-02-24 06:19:31.000000000","message":"Done","commit_id":"bf0a96936084c34df39c4e97c062adbd244cbfcf"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"1f8efdc674e404c78bb2b3042fa82f8e52637c21","unresolved":false,"context_lines":[{"line_number":157,"context_line":"    #              Migration \u003c\u003d 1.1"},{"line_number":158,"context_line":"    # Version 1.1: Added use_slave to get_unconfirmed_by_dest_compute"},{"line_number":159,"context_line":"    # Version 1.2: Migration version 1.2"},{"line_number":160,"context_line":"    VERSION \u003d \u00271.2\u0027"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    fields \u003d {"},{"line_number":163,"context_line":"        \u0027objects\u0027: fields.ListOfObjectsField(\u0027Migration\u0027),"}],"source_content_type":"text/x-python","patch_set":24,"id":"bae84128_ded9ef23","line":160,"updated":"2016-02-23 15:35:45.000000000","message":"We must bump this version, please, see comments on the previous patchset.","commit_id":"4bce0ed1f83c60223f220f12776b2112ed36d8e5"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"f8292552ca969cf21c56f3c2f6593f5b60b9393b","unresolved":false,"context_lines":[{"line_number":157,"context_line":"    #              Migration \u003c\u003d 1.1"},{"line_number":158,"context_line":"    # Version 1.1: Added use_slave to get_unconfirmed_by_dest_compute"},{"line_number":159,"context_line":"    # Version 1.2: Migration version 1.2"},{"line_number":160,"context_line":"    VERSION \u003d \u00271.2\u0027"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    fields \u003d {"},{"line_number":163,"context_line":"        \u0027objects\u0027: fields.ListOfObjectsField(\u0027Migration\u0027),"}],"source_content_type":"text/x-python","patch_set":24,"id":"bae84128_2e636943","line":160,"in_reply_to":"bae84128_ded9ef23","updated":"2016-02-24 06:19:56.000000000","message":"Done","commit_id":"4bce0ed1f83c60223f220f12776b2112ed36d8e5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6a2d2084c5676caaa7f5a1b579651388b2eb92d6","unresolved":false,"context_lines":[{"line_number":197,"context_line":"    def get_in_progress_by_instance(cls, context, instance_uuid,"},{"line_number":198,"context_line":"                                    migration_type\u003dNone):"},{"line_number":199,"context_line":"        db_migrations \u003d db.migration_get_in_progress_by_instance("},{"line_number":200,"context_line":"            context, instance_uuid, migration_type)"},{"line_number":201,"context_line":"        return base.obj_make_list(context, cls(context), objects.Migration,"},{"line_number":202,"context_line":"                                  db_migrations)"}],"source_content_type":"text/x-python","patch_set":35,"id":"9aed3d3a_53fa7643","line":200,"updated":"2016-02-26 11:21:23.000000000","message":"can\u0027t you just call get_by_filters here, and pass in a list of status and the migration_type if its not None?","commit_id":"b15a9edca76c7132e8b3e3baedd7938bfe96ffd6"}],"nova/objects/service.py":[{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"45a7cc92a8c32c911aaf37b64ed37ac326714d9c","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    {\u0027compute_rpc\u0027: \u00274.6\u0027},"},{"line_number":61,"context_line":"    # Version 4: Add migration_get_by_instance_and_id and"},{"line_number":62,"context_line":"    # migration_get_in_progress_by_instance in the compute_rpc"},{"line_number":63,"context_line":"    {\u0027compute_rpc\u0027: \u00274.7\u0027},"},{"line_number":64,"context_line":")"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a7b0d38_3e07be1d","line":63,"range":{"start_line":63,"start_character":24,"end_line":63,"end_character":27},"updated":"2015-12-24 15:14:30.000000000","message":"Captured traceback:\n~~~~~~~~~~~~~~~~~~~\n    Traceback (most recent call last):\n      File \"nova/tests/unit/objects/test_service.py\", line 350, in test_version\n        \u0027Changes detected that require a SERVICE_VERSION change. Please \u0027\n      File \"/home/jenkins/workspace/gate-nova-python27/.tox/py27/local/lib/python2.7/site-packages/testtools/testcase.py\", line 350, in assertEqual\n        self.assertThat(observed, matcher, message)\n      File \"/home/jenkins/workspace/gate-nova-python27/.tox/py27/local/lib/python2.7/site-packages/testtools/testcase.py\", line 435, in assertThat\n        raise mismatch_error\n    testtools.matchers._impl.MismatchError: {\u0027compute_rpc\u0027: \u00274.7\u0027} !\u003d {\u0027compute_rpc\u0027: \u00274.6\u0027}: Changes detected that require a SERVICE_VERSION change. Please increment nova.objects.service.SERVICE_VERSION","commit_id":"bf9f7586c0da6c85139e1151eacfeb8c0004ba4c"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"65f8fd28f0efb3f1437f2d5705c15ff06653c07c","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    {\u0027compute_rpc\u0027: \u00274.6\u0027},"},{"line_number":61,"context_line":"    # Version 4: Add migration_get_by_instance_and_id and"},{"line_number":62,"context_line":"    # migration_get_in_progress_by_instance in the compute_rpc"},{"line_number":63,"context_line":"    {\u0027compute_rpc\u0027: \u00274.7\u0027},"},{"line_number":64,"context_line":")"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a7b0d38_e1719ba9","line":63,"range":{"start_line":63,"start_character":24,"end_line":63,"end_character":27},"in_reply_to":"1a7b0d38_3e07be1d","updated":"2015-12-24 15:18:40.000000000","message":"nova.tests.unit.objects.test_service.TestServiceVersion.test_version\n--------------------------------------------------------------------\n\nCaptured traceback:\n~~~~~~~~~~~~~~~~~~~\n    b\u0027Traceback (most recent call last):\u0027\n    b\u0027  File \"/home/jenkins/workspace/gate-nova-python34/nova/tests/unit/objects/test_service.py\", line 350, in test_version\u0027\n    b\"    \u0027Changes detected that require a SERVICE_VERSION change. Please \u0027\"\n    b\u0027  File \"/home/jenkins/workspace/gate-nova-python34/.tox/py34/lib/python3.4/site-packages/testtools/testcase.py\", line 350, in assertEqual\u0027\n    b\u0027    self.assertThat(observed, matcher, message)\u0027\n    b\u0027  File \"/home/jenkins/workspace/gate-nova-python34/.tox/py34/lib/python3.4/site-packages/testtools/testcase.py\", line 435, in assertThat\u0027\n    b\u0027    raise mismatch_error\u0027\n    b\"testtools.matchers._impl.MismatchError: {\u0027compute_rpc\u0027: \u00274.7\u0027} !\u003d {\u0027compute_rpc\u0027: \u00274.6\u0027}: Changes detected that require a SERVICE_VERSION change. Please increment nova.objects.service.SERVICE_VERSION\"\n    b\u0027\u0027","commit_id":"bf9f7586c0da6c85139e1151eacfeb8c0004ba4c"}],"nova/tests/functional/api_sample_tests/api_samples/os-migrations/v2.23/migrations-get.json.tpl":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"83ddd22d01933d3b92efd29b99a4ddd1c008cb0a","unresolved":false,"context_lines":[{"line_number":18,"context_line":"                }"},{"line_number":19,"context_line":"            ],"},{"line_number":20,"context_line":"            \"new_instance_type_id\": 2,"},{"line_number":21,"context_line":"            \"old_instance_type_id\": 1,"},{"line_number":22,"context_line":"            \"source_compute\": \"compute1\","},{"line_number":23,"context_line":"            \"source_node\": \"node1\","},{"line_number":24,"context_line":"            \"status\": \"migrating\","}],"source_content_type":"text/x-smarty","patch_set":30,"id":"bae84128_39a08ea5","line":21,"updated":"2016-02-25 01:34:13.000000000","message":"these should be removed","commit_id":"08acc976a248243a65c56c4202b373493ecfe116"}],"nova/tests/functional/api_sample_tests/test_migrations.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"83ddd22d01933d3b92efd29b99a4ddd1c008cb0a","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        self.migrations \u003d objects.MigrationList(objects\u003d[mig_obj1, mig_obj2])"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    @mock.patch(\u0027nova.compute.api.API.get_migrations\u0027)"},{"line_number":155,"context_line":"    def test_get_migrations_v2_23(self, m_get):"},{"line_number":156,"context_line":"        m_get.return_value \u003d self.migrations"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        response \u003d self._do_get(\u0027os-migrations\u0027)"}],"source_content_type":"text/x-python","patch_set":30,"id":"bae84128_b9f77e8b","line":155,"updated":"2016-02-25 01:34:13.000000000","message":"I actually don\u0027t understand how this passed given the template is wrong.","commit_id":"08acc976a248243a65c56c4202b373493ecfe116"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"64af1418ca7cdb07b9282462c9a36ae11e9829ab","unresolved":false,"context_lines":[{"line_number":151,"context_line":"            context\u003dfake_context, **self.fake_migrations[1])"},{"line_number":152,"context_line":"        self.migrations \u003d objects.MigrationList(objects\u003d[mig_obj1, mig_obj2])"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    @mock.patch(\u0027nova.compute.api.API.get_migrations\u0027)"},{"line_number":155,"context_line":"    def test_get_migrations_v2_23(self, m_get):"},{"line_number":156,"context_line":"        m_get.return_value \u003d self.migrations"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"9aed3d3a_54f3a00a","line":154,"updated":"2016-02-25 21:48:39.000000000","message":"don\u0027t use mock, just save those objects to the database.","commit_id":"7cddfe6e9d2b5ec38b3ba0afbe6d7283728f482e"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"e66f028f21b410be256413a253fef0b3f6075a77","unresolved":false,"context_lines":[{"line_number":151,"context_line":"            context\u003dfake_context, **self.fake_migrations[1])"},{"line_number":152,"context_line":"        self.migrations \u003d objects.MigrationList(objects\u003d[mig_obj1, mig_obj2])"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    @mock.patch(\u0027nova.compute.api.API.get_migrations\u0027)"},{"line_number":155,"context_line":"    def test_get_migrations_v2_23(self, m_get):"},{"line_number":156,"context_line":"        m_get.return_value \u003d self.migrations"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"9aed3d3a_0978c4f1","line":154,"in_reply_to":"9aed3d3a_54f3a00a","updated":"2016-02-26 10:27:14.000000000","message":"Done","commit_id":"7cddfe6e9d2b5ec38b3ba0afbe6d7283728f482e"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6a2d2084c5676caaa7f5a1b579651388b2eb92d6","unresolved":false,"context_lines":[{"line_number":151,"context_line":"            context\u003dfake_context, **self.fake_migrations[1])"},{"line_number":152,"context_line":"        self.migrations \u003d objects.MigrationList(objects\u003d[mig_obj1, mig_obj2])"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    @mock.patch(\u0027nova.compute.api.API.get_migrations\u0027)"},{"line_number":155,"context_line":"    def test_get_migrations_v2_23(self, m_get):"},{"line_number":156,"context_line":"        m_get.return_value \u003d self.migrations"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"9aed3d3a_73ab3a1e","line":154,"updated":"2016-02-26 11:21:23.000000000","message":"sdague was talking about making this more functional by instead adding things into the database, then using the API.","commit_id":"b15a9edca76c7132e8b3e3baedd7938bfe96ffd6"}],"nova/tests/functional/api_sample_tests/test_server_migrations.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6a2d2084c5676caaa7f5a1b579651388b2eb92d6","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        self.instance \u003d objects.Instance("},{"line_number":139,"context_line":"            context\u003dfake_context,"},{"line_number":140,"context_line":"            **fake_ins)"},{"line_number":141,"context_line":"        self.instance.create()"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def test_get_migration(self):"},{"line_number":144,"context_line":"        response \u003d self._do_get(\u0027servers/%s/migrations/%s\u0027 %"}],"source_content_type":"text/x-python","patch_set":35,"id":"9aed3d3a_d6467422","line":141,"updated":"2016-02-26 11:21:23.000000000","message":"spoke about creating real entries in the DB, rather than totally fake stuff.","commit_id":"b15a9edca76c7132e8b3e3baedd7938bfe96ffd6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"824d265bac574c9e44a202766a53410c9b5ff13a","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        self.instance \u003d objects.Instance("},{"line_number":139,"context_line":"            context\u003dfake_context,"},{"line_number":140,"context_line":"            **fake_ins)"},{"line_number":141,"context_line":"        self.instance.create()"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def test_get_migration(self):"},{"line_number":144,"context_line":"        response \u003d self._do_get(\u0027servers/%s/migrations/%s\u0027 %"}],"source_content_type":"text/x-python","patch_set":35,"id":"9aed3d3a_e7578400","line":141,"in_reply_to":"9aed3d3a_d6467422","updated":"2016-02-26 12:09:03.000000000","message":"sorry, ignore that comment.","commit_id":"b15a9edca76c7132e8b3e3baedd7938bfe96ffd6"}],"nova/tests/unit/api/openstack/compute/test_server_migrations.py":[{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"866379cfcf8e9adad884ac5f35c4cfc36b0f5a0a","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"class ServerMigrationsTestsV21(test.NoDBTestCase):"},{"line_number":76,"context_line":"    wsgi_api_version \u003d \u00272.22\u0027"},{"line_number":77,"context_line":"    wsgi_api_version_v23 \u003d \u00272.23\u0027"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def setUp(self):"},{"line_number":80,"context_line":"        super(ServerMigrationsTestsV21, self).setUp()"}],"source_content_type":"text/x-python","patch_set":13,"id":"dae33548_b01e3361","line":77,"range":{"start_line":77,"start_character":3,"end_line":77,"end_character":33},"updated":"2016-02-16 12:49:18.000000000","message":"This should go to new class (ServerMigrationsTestsV223) which should inherit from ServerMigrationsTestsV21","commit_id":"3a942e6c29933f3743750dfa582bd0a6b6235db2"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"866379cfcf8e9adad884ac5f35c4cfc36b0f5a0a","unresolved":false,"context_lines":[{"line_number":198,"context_line":""},{"line_number":199,"context_line":"class ServerMigrationsPolicyEnforcementV21(test.NoDBTestCase):"},{"line_number":200,"context_line":"    wsgi_api_version \u003d \u00272.22\u0027"},{"line_number":201,"context_line":"    wsgi_api_version_v23 \u003d \u00272.23\u0027"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    def setUp(self):"},{"line_number":204,"context_line":"        super(ServerMigrationsPolicyEnforcementV21, self).setUp()"}],"source_content_type":"text/x-python","patch_set":13,"id":"dae33548_90304fea","line":201,"range":{"start_line":201,"start_character":4,"end_line":201,"end_character":24},"updated":"2016-02-16 12:49:18.000000000","message":"This should go to new class too.","commit_id":"3a942e6c29933f3743750dfa582bd0a6b6235db2"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"d3ded87979a046b0873a9c4f45c3c04171de05ae","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"fake_migrations \u003d ["},{"line_number":31,"context_line":"    {"},{"line_number":32,"context_line":"        \u0027id\u0027: 1234,"},{"line_number":33,"context_line":"        \u0027source_node\u0027: \u0027node1\u0027,"},{"line_number":34,"context_line":"        \u0027dest_node\u0027: \u0027node2\u0027,"},{"line_number":35,"context_line":"        \u0027source_compute\u0027: \u0027compute1\u0027,"},{"line_number":36,"context_line":"        \u0027dest_compute\u0027: \u0027compute2\u0027,"},{"line_number":37,"context_line":"        \u0027dest_host\u0027: \u00271.2.3.4\u0027,"},{"line_number":38,"context_line":"        \u0027status\u0027: \u0027Done\u0027,"},{"line_number":39,"context_line":"        \u0027instance_uuid\u0027: SERVER_UUID,"},{"line_number":40,"context_line":"        \u0027old_instance_type_id\u0027: 1,"},{"line_number":41,"context_line":"        \u0027new_instance_type_id\u0027: 2,"},{"line_number":42,"context_line":"        \u0027migration_type\u0027: \u0027resize\u0027,"},{"line_number":43,"context_line":"        \u0027hidden\u0027: False,"},{"line_number":44,"context_line":"        \u0027created_at\u0027: datetime.datetime(2012, 10, 29, 13, 42, 2),"},{"line_number":45,"context_line":"        \u0027updated_at\u0027: datetime.datetime(2012, 10, 29, 13, 42, 2),"},{"line_number":46,"context_line":"        \u0027deleted_at\u0027: None,"},{"line_number":47,"context_line":"        \u0027deleted\u0027: False"},{"line_number":48,"context_line":"    },"},{"line_number":49,"context_line":"    {"},{"line_number":50,"context_line":"        \u0027id\u0027: 5678,"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_6a0dd63d","line":47,"range":{"start_line":32,"start_character":0,"end_line":47,"end_character":24},"updated":"2016-02-22 06:30:45.000000000","message":"the DB patches has merged. \n\nIt should add the follow fields. \n\n        \u0027memory_total\u0027: 123456,\n        \u0027memory_processed\u0027: 12345,\n        \u0027memory_remaining\u0027: 120000,\n        \u0027disk_total\u0027: 234567,\n        \u0027disk_processed\u0027: 23456,\n        \u0027disk_remaining\u0027: 230000,","commit_id":"fbabf1e530d1b3a63f4e03ce4408ddec9364f15d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f037d6e4c22890d1160ef365af36e1523cc07bfe","unresolved":false,"context_lines":[{"line_number":173,"context_line":"            self.assertEqual(migrations_in_progress, response)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        m_get_instance.side_effect \u003d exception.InstanceNotFound(instance_id\u003d\u0027\u0027)"},{"line_number":176,"context_line":"        self.assertRaises(webob.exc.HTTPNotFound,"},{"line_number":177,"context_line":"                          self.controller.index,"},{"line_number":178,"context_line":"                          self.req, SERVER_UUID)"},{"line_number":179,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"bae84128_58edf6b5","line":176,"updated":"2016-02-23 15:34:56.000000000","message":"Nit: I much prefer three separate test methods for testing all these different calls here. But you are following the local style here, so ignore me I guess.","commit_id":"bf0a96936084c34df39c4e97c062adbd244cbfcf"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"da27e46ccda21e42b028d438b1e9c4c3e1738a03","unresolved":false,"context_lines":[{"line_number":173,"context_line":"            self.assertEqual(migrations_in_progress, response)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        m_get_instance.side_effect \u003d exception.InstanceNotFound(instance_id\u003d\u0027\u0027)"},{"line_number":176,"context_line":"        self.assertRaises(webob.exc.HTTPNotFound,"},{"line_number":177,"context_line":"                          self.controller.index,"},{"line_number":178,"context_line":"                          self.req, SERVER_UUID)"},{"line_number":179,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"bae84128_034bde59","line":176,"in_reply_to":"bae84128_58edf6b5","updated":"2016-02-24 06:19:31.000000000","message":"Done\n\nsplit them.","commit_id":"bf0a96936084c34df39c4e97c062adbd244cbfcf"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"1abd245be78f78cd176d6374a36b0b224c1ac640","unresolved":false,"context_lines":[{"line_number":86,"context_line":"    fake_migrations)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"class ServerMigrationsTestsV21(test.NoDBTestCase):"},{"line_number":90,"context_line":"    wsgi_api_version \u003d \u00272.22\u0027"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":34,"id":"9aed3d3a_f3c48141","line":89,"range":{"start_line":89,"start_character":0,"end_line":89,"end_character":50},"updated":"2016-02-26 02:04:44.000000000","message":"@Sean Dague\n\nSo this should not inherit from NoDBTestCase?","commit_id":"7cddfe6e9d2b5ec38b3ba0afbe6d7283728f482e"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"4d72902938245cd666b02823f5b9285a2dd12b82","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        self.context \u003d self.req.environ[\u0027nova.context\u0027]"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    @mock.patch(\u0027nova.compute.api.API.get_migrations_in_progress_by_instance\u0027)"},{"line_number":163,"context_line":"    @mock.patch(\u0027nova.compute.api.API.get\u0027)"},{"line_number":164,"context_line":"    def test_index(self, m_get_instance, m_get_mig):"},{"line_number":165,"context_line":"        migrations \u003d [server_migrations.output(mig) for mig in migrations_obj]"},{"line_number":166,"context_line":"        migrations_in_progress \u003d {\u0027migrations\u0027: migrations}"}],"source_content_type":"text/x-python","patch_set":34,"id":"9aed3d3a_1474789a","line":163,"updated":"2016-02-25 21:46:31.000000000","message":"ok, I hate to be -1ing this code again, but in trying to fix the test fails on this patch I got into the fallout of using mock here. \n\nIt\u0027s pretty much terrible. It means the API samples aren\u0027t real. All the API examples end up being things that can\u0027t actually be returned.\n\nYou can\u0027t use mock here.\n\nThere is a real database, you can create migrations in it then select them back out:\n\n    def setUp(self):\n        super(ServerMigrationsSamplesJsonTestV2_23, self).setUp()\n        fake_context \u003d context.RequestContext(\u0027fake\u0027, \u0027fake\u0027)\n        self.mig1 \u003d objects.Migration(\n            context\u003dfake_context, **self.fake_migrations[0])\n        self.mig1.create()\n\n        self.mig2 \u003d objects.Migration(\n            context\u003dfake_context, **self.fake_migrations[1])\n        self.mig2.create()\n        self.instance \u003d objects.Instance(\n            context\u003dfake_context, **self.fake_instance)\n        self.instance.create()\n\n    def test_get_migration(self):\n        response \u003d self._do_get(\u0027servers/%s/migrations/%s\u0027 %\n                                (self.instance.uuid, self.mig1.id))\n        self.assertEqual(200, response.status_code)\n\n        self._verify_response(\u0027migrations-get\u0027,\n                              {\"server_uuid\": self.UUID_1},\n                              response, 200)\n\n    def test_list_migrations(self):\n        response \u003d self._do_get(\u0027servers/%s/migrations\u0027 % self.instance.uuid)\n        self.assertEqual(200, response.status_code)\n\n        self._verify_response(\n                \u0027migrations-index\u0027,\n                {\"server_uuid_1\": self.UUID_1, \"server_uuid_2\": self.UUID_2},\n                response, 200)\n\nAs a for instance. It will require updating the templates.","commit_id":"7cddfe6e9d2b5ec38b3ba0afbe6d7283728f482e"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"c52923033073efadc12cead846473f544d3f3f35","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        self.context \u003d self.req.environ[\u0027nova.context\u0027]"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    @mock.patch(\u0027nova.compute.api.API.get_migrations_in_progress_by_instance\u0027)"},{"line_number":163,"context_line":"    @mock.patch(\u0027nova.compute.api.API.get\u0027)"},{"line_number":164,"context_line":"    def test_index(self, m_get_instance, m_get_mig):"},{"line_number":165,"context_line":"        migrations \u003d [server_migrations.output(mig) for mig in migrations_obj]"},{"line_number":166,"context_line":"        migrations_in_progress \u003d {\u0027migrations\u0027: migrations}"}],"source_content_type":"text/x-python","patch_set":34,"id":"9aed3d3a_44d80054","line":163,"in_reply_to":"9aed3d3a_1474789a","updated":"2016-02-26 06:12:20.000000000","message":"@Sean Dague\n\nI find this setup will run twice. \n\nstill look into it. \n\nIt report: \n\nTraceback (most recent call last):\n  File \"nova/tests/functional/api_sample_tests/test_server_migrations.py\", line 130, in setUp\n    self.mig1.create()\n  File \"/usr/local/lib/python2.7/dist-packages/oslo_versionedobjects/base.py\", line 221, in wrapper\n    return fn(self, *args, **kwargs)\n  File \"nova/objects/migration.py\", line 124, in create\n    reason\u003d\u0027already created\u0027)\nnova.exception.ObjectActionError: Object action create failed because: already created","commit_id":"7cddfe6e9d2b5ec38b3ba0afbe6d7283728f482e"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"742f10f6bb4424bd2ec5d072039b10ba38095082","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        self.context \u003d self.req.environ[\u0027nova.context\u0027]"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    @mock.patch(\u0027nova.compute.api.API.get_migrations_in_progress_by_instance\u0027)"},{"line_number":163,"context_line":"    @mock.patch(\u0027nova.compute.api.API.get\u0027)"},{"line_number":164,"context_line":"    def test_index(self, m_get_instance, m_get_mig):"},{"line_number":165,"context_line":"        migrations \u003d [server_migrations.output(mig) for mig in migrations_obj]"},{"line_number":166,"context_line":"        migrations_in_progress \u003d {\u0027migrations\u0027: migrations}"}],"source_content_type":"text/x-python","patch_set":34,"id":"9aed3d3a_334a6984","line":163,"in_reply_to":"9aed3d3a_1474789a","updated":"2016-02-26 02:17:33.000000000","message":"Sean Dague.\n\nThanks for your example. \n\nGot it. You example is for fun functional/api_sample_tests/test_server_migrations.py\n\nWill update it in next version.","commit_id":"7cddfe6e9d2b5ec38b3ba0afbe6d7283728f482e"}],"nova/tests/unit/db/test_db_api.py":[{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"866379cfcf8e9adad884ac5f35c4cfc36b0f5a0a","unresolved":false,"context_lines":[{"line_number":1479,"context_line":"        results \u003d db.migration_get_in_progress_by_instance("},{"line_number":1480,"context_line":"                self.ctxt, values[\"instance_uuid\"])"},{"line_number":1481,"context_line":"        for key in values:"},{"line_number":1482,"context_line":"            self.assertEqual(values[key], results[0][key])"},{"line_number":1483,"context_line":""},{"line_number":1484,"context_line":"    def test_migration_update_not_found(self):"},{"line_number":1485,"context_line":"        self.assertRaises(exception.MigrationNotFound,"}],"source_content_type":"text/x-python","patch_set":13,"id":"dae33548_3327cd65","line":1482,"updated":"2016-02-16 12:49:18.000000000","message":"You check keys only, you should at least check that migration status is \u0027migrating\u0027 because you can get anything there and you will say that everything is all right. Even if someone changes migration_get_in_progress_by_instance method this will still pass (unless \u0027migrating\u0027 status is excluded from result).","commit_id":"3a942e6c29933f3743750dfa582bd0a6b6235db2"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f037d6e4c22890d1160ef365af36e1523cc07bfe","unresolved":false,"context_lines":[{"line_number":1478,"context_line":""},{"line_number":1479,"context_line":"    def test_migration_get_in_progress_by_instance(self):"},{"line_number":1480,"context_line":"        values \u003d self._create()"},{"line_number":1481,"context_line":"        results \u003d db.migration_get_in_progress_by_instance("},{"line_number":1482,"context_line":"                self.ctxt, values[\"instance_uuid\"])"},{"line_number":1483,"context_line":""},{"line_number":1484,"context_line":"        for key in values:"}],"source_content_type":"text/x-python","patch_set":23,"id":"bae84128_3e5a9b2a","line":1481,"updated":"2016-02-23 15:34:56.000000000","message":"Nit: feels we should also assert the length of the results.","commit_id":"bf0a96936084c34df39c4e97c062adbd244cbfcf"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"da27e46ccda21e42b028d438b1e9c4c3e1738a03","unresolved":false,"context_lines":[{"line_number":1478,"context_line":""},{"line_number":1479,"context_line":"    def test_migration_get_in_progress_by_instance(self):"},{"line_number":1480,"context_line":"        values \u003d self._create()"},{"line_number":1481,"context_line":"        results \u003d db.migration_get_in_progress_by_instance("},{"line_number":1482,"context_line":"                self.ctxt, values[\"instance_uuid\"])"},{"line_number":1483,"context_line":""},{"line_number":1484,"context_line":"        for key in values:"}],"source_content_type":"text/x-python","patch_set":23,"id":"bae84128_2e92494c","line":1481,"in_reply_to":"bae84128_3e5a9b2a","updated":"2016-02-24 06:19:31.000000000","message":"Done","commit_id":"bf0a96936084c34df39c4e97c062adbd244cbfcf"}],"nova/tests/unit/fake_policy.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f037d6e4c22890d1160ef365af36e1523cc07bfe","unresolved":false,"context_lines":[{"line_number":375,"context_line":"    \"os_compute_api:server-metadata:delete\": \"\","},{"line_number":376,"context_line":"    \"os_compute_api:server-metadata:show\": \"\","},{"line_number":377,"context_line":"    \"os_compute_api:server-metadata:index\": \"\","},{"line_number":378,"context_line":"    \"os_compute_api:servers:migrations:index\": \"\","},{"line_number":379,"context_line":"    \"os_compute_api:servers:migrations:show\": \"\","},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"    \"network:get_all\": \"\","}],"source_content_type":"text/x-python","patch_set":23,"id":"bae84128_fea153f9","line":378,"updated":"2016-02-23 15:34:56.000000000","message":"can\u0027t this be consistent with the default policy and say rule:admin_api?","commit_id":"bf0a96936084c34df39c4e97c062adbd244cbfcf"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"802b55eaba2e3b9326f5dc127256040c967b6eaf","unresolved":false,"context_lines":[{"line_number":375,"context_line":"    \"os_compute_api:server-metadata:delete\": \"\","},{"line_number":376,"context_line":"    \"os_compute_api:server-metadata:show\": \"\","},{"line_number":377,"context_line":"    \"os_compute_api:server-metadata:index\": \"\","},{"line_number":378,"context_line":"    \"os_compute_api:servers:migrations:index\": \"\","},{"line_number":379,"context_line":"    \"os_compute_api:servers:migrations:show\": \"\","},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"    \"network:get_all\": \"\","}],"source_content_type":"text/x-python","patch_set":23,"id":"bae84128_cedf5dd4","line":378,"in_reply_to":"bae84128_fea153f9","updated":"2016-02-24 07:27:42.000000000","message":"Done","commit_id":"bf0a96936084c34df39c4e97c062adbd244cbfcf"}],"nova/tests/unit/objects/test_migration.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f037d6e4c22890d1160ef365af36e1523cc07bfe","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":87,"context_line":"        fake_migration \u003d fake_db_migration()"},{"line_number":88,"context_line":"        db_migrations \u003d [fake_migration, dict(fake_migration, id\u003d456)]"},{"line_number":89,"context_line":"        with mock.patch("},{"line_number":90,"context_line":"            \u0027nova.db.migration_get_in_progress_by_instance\u0027) as fake_get:"},{"line_number":91,"context_line":"            fake_get.return_value \u003d db_migrations"},{"line_number":92,"context_line":"            migrations \u003d migration.MigrationList.get_in_progress_by_instance("}],"source_content_type":"text/x-python","patch_set":23,"id":"bae84128_3e445b19","line":89,"updated":"2016-02-23 15:34:56.000000000","message":"Nit: I prefer the decorator for these things really, but this works.","commit_id":"bf0a96936084c34df39c4e97c062adbd244cbfcf"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"da27e46ccda21e42b028d438b1e9c4c3e1738a03","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":87,"context_line":"        fake_migration \u003d fake_db_migration()"},{"line_number":88,"context_line":"        db_migrations \u003d [fake_migration, dict(fake_migration, id\u003d456)]"},{"line_number":89,"context_line":"        with mock.patch("},{"line_number":90,"context_line":"            \u0027nova.db.migration_get_in_progress_by_instance\u0027) as fake_get:"},{"line_number":91,"context_line":"            fake_get.return_value \u003d db_migrations"},{"line_number":92,"context_line":"            migrations \u003d migration.MigrationList.get_in_progress_by_instance("}],"source_content_type":"text/x-python","patch_set":23,"id":"bae84128_ee4861ce","line":89,"in_reply_to":"bae84128_3e445b19","updated":"2016-02-24 06:19:31.000000000","message":"Done","commit_id":"bf0a96936084c34df39c4e97c062adbd244cbfcf"}],"nova/tests/unit/objects/test_objects.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f037d6e4c22890d1160ef365af36e1523cc07bfe","unresolved":false,"context_lines":[{"line_number":1095,"context_line":""},{"line_number":1096,"context_line":"# NOTE(danms): The hashes in this list should only be changed if"},{"line_number":1097,"context_line":"# they come with a corresponding version bump in the affected"},{"line_number":1098,"context_line":"# objects"},{"line_number":1099,"context_line":"object_data \u003d {"},{"line_number":1100,"context_line":"    \u0027Agent\u0027: \u00271.0-c0c092abaceb6f51efe5d82175f15eba\u0027,"},{"line_number":1101,"context_line":"    \u0027AgentList\u0027: \u00271.0-5a7380d02c3aaf2a32fc8115ae7ca98c\u0027,"}],"source_content_type":"text/x-python","patch_set":23,"id":"bae84128_1ed5171b","line":1098,"updated":"2016-02-23 15:34:56.000000000","message":"please note this text.","commit_id":"bf0a96936084c34df39c4e97c062adbd244cbfcf"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"da27e46ccda21e42b028d438b1e9c4c3e1738a03","unresolved":false,"context_lines":[{"line_number":1095,"context_line":""},{"line_number":1096,"context_line":"# NOTE(danms): The hashes in this list should only be changed if"},{"line_number":1097,"context_line":"# they come with a corresponding version bump in the affected"},{"line_number":1098,"context_line":"# objects"},{"line_number":1099,"context_line":"object_data \u003d {"},{"line_number":1100,"context_line":"    \u0027Agent\u0027: \u00271.0-c0c092abaceb6f51efe5d82175f15eba\u0027,"},{"line_number":1101,"context_line":"    \u0027AgentList\u0027: \u00271.0-5a7380d02c3aaf2a32fc8115ae7ca98c\u0027,"}],"source_content_type":"text/x-python","patch_set":23,"id":"bae84128_aecdb967","line":1098,"in_reply_to":"bae84128_1ed5171b","updated":"2016-02-24 06:19:31.000000000","message":"Note it.\nThanks.","commit_id":"bf0a96936084c34df39c4e97c062adbd244cbfcf"}],"nova/tests/unit/test_policy.py":[{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"45a7cc92a8c32c911aaf37b64ed37ac326714d9c","unresolved":false,"context_lines":[{"line_number":696,"context_line":"\"os_compute_api:os-used-limits:discoverable\","},{"line_number":697,"context_line":"\"os_compute_api:os-migrations:discoverable\","},{"line_number":698,"context_line":"\"os_compute_api:servers:migrations:index\","},{"line_number":699,"context_line":"\"os_compute_api:servers:migrations:show\","},{"line_number":700,"context_line":"\"os_compute_api:os-assisted-volume-snapshots:discoverable\")"},{"line_number":701,"context_line":""},{"line_number":702,"context_line":"        self.non_admin_only_rules \u003d ("}],"source_content_type":"text/x-python","patch_set":5,"id":"1a7b0d38_fec7f60f","line":699,"range":{"start_line":699,"start_character":39,"end_line":699,"end_character":41},"updated":"2015-12-24 15:14:30.000000000","message":"nova.tests.unit.test_policy.RealRolePolicyTestCase.test_empty_rules\n-------------------------------------------------------------------\n\nCaptured traceback:\n~~~~~~~~~~~~~~~~~~~\n    Traceback (most recent call last):\n      File \"nova/tests/unit/test_policy.py\", line 736, in test_empty_rules\n        \"%s isn\u0027t empty rule\" % rule) \n      File \"/home/jenkins/workspace/gate-nova-python27/.tox/py27/local/lib/python2.7/site-packages/testtools/testcase.py\", line 350, in assertEqual\n        self.assertThat(observed, matcher, message)\n      File \"/home/jenkins/workspace/gate-nova-python27/.tox/py27/local/lib/python2.7/site-packages/testtools/testcase.py\", line 435, in assertThat\n        raise mismatch_error      \n    testtools.matchers._impl.MismatchError: \u0027@\u0027 !\u003d \u0027rule:admin_api\u0027: os_compute_api:servers:migrations:index isn\u0027t empty rule","commit_id":"bf9f7586c0da6c85139e1151eacfeb8c0004ba4c"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"65f8fd28f0efb3f1437f2d5705c15ff06653c07c","unresolved":false,"context_lines":[{"line_number":696,"context_line":"\"os_compute_api:os-used-limits:discoverable\","},{"line_number":697,"context_line":"\"os_compute_api:os-migrations:discoverable\","},{"line_number":698,"context_line":"\"os_compute_api:servers:migrations:index\","},{"line_number":699,"context_line":"\"os_compute_api:servers:migrations:show\","},{"line_number":700,"context_line":"\"os_compute_api:os-assisted-volume-snapshots:discoverable\")"},{"line_number":701,"context_line":""},{"line_number":702,"context_line":"        self.non_admin_only_rules \u003d ("}],"source_content_type":"text/x-python","patch_set":5,"id":"1a7b0d38_a1ab93d5","line":699,"range":{"start_line":699,"start_character":39,"end_line":699,"end_character":41},"in_reply_to":"1a7b0d38_fec7f60f","updated":"2015-12-24 15:18:40.000000000","message":"Captured traceback:\n~~~~~~~~~~~~~~~~~~~\n    b\u0027Traceback (most recent call last):\u0027\n    b\u0027  File \"/home/jenkins/workspace/gate-nova-python34/nova/tests/unit/test_policy.py\", line 736, in test_empty_rules\u0027\n    b\u0027    \"%s isn\\\u0027t empty rule\" % rule)\u0027\n    b\u0027  File \"/home/jenkins/workspace/gate-nova-python34/.tox/py34/lib/python3.4/site-packages/testtools/testcase.py\", line 350, in assertEqual\u0027\n    b\u0027    self.assertThat(observed, matcher, message)\u0027\n    b\u0027  File \"/home/jenkins/workspace/gate-nova-python34/.tox/py34/lib/python3.4/site-packages/testtools/testcase.py\", line 435, in assertThat\u0027\n    b\u0027    raise mismatch_error\u0027\n    b\"testtools.matchers._impl.MismatchError: \u0027@\u0027 !\u003d \u0027rule:admin_api\u0027: os_compute_api:servers:migrations:index isn\u0027t empty rule\"\n    b\u0027\u0027","commit_id":"bf9f7586c0da6c85139e1151eacfeb8c0004ba4c"}],"releasenotes/notes/server_migrations-30519b35d3ea6763.yaml":[{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"816aac1c397ebc2c6314f7583eba36ba0a3e52c9","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add two new list/show API for server-migration."},{"line_number":5,"context_line":"    The list API will return the in progress migratons"},{"line_number":6,"context_line":"    informaiton of a server. The show API will return"},{"line_number":7,"context_line":"    a specified migraiton of a server. In order to use"},{"line_number":8,"context_line":"    this new feature, user have to contain the header"},{"line_number":9,"context_line":"    of request microversion v2.23 in the API request."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"dae33548_4420204a","line":6,"range":{"start_line":6,"start_character":4,"end_line":6,"end_character":15},"updated":"2016-02-14 07:14:07.000000000","message":"information","commit_id":"4cacf654be6af8712a8c20a6301a52bdd2e8a74e"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"816aac1c397ebc2c6314f7583eba36ba0a3e52c9","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Add two new list/show API for server-migration."},{"line_number":5,"context_line":"    The list API will return the in progress migratons"},{"line_number":6,"context_line":"    informaiton of a server. The show API will return"},{"line_number":7,"context_line":"    a specified migraiton of a server. In order to use"},{"line_number":8,"context_line":"    this new feature, user have to contain the header"},{"line_number":9,"context_line":"    of request microversion v2.23 in the API request."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"dae33548_241d1c10","line":7,"range":{"start_line":7,"start_character":16,"end_line":7,"end_character":25},"updated":"2016-02-14 07:14:07.000000000","message":"migration","commit_id":"4cacf654be6af8712a8c20a6301a52bdd2e8a74e"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"816aac1c397ebc2c6314f7583eba36ba0a3e52c9","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    The list API will return the in progress migratons"},{"line_number":6,"context_line":"    informaiton of a server. The show API will return"},{"line_number":7,"context_line":"    a specified migraiton of a server. In order to use"},{"line_number":8,"context_line":"    this new feature, user have to contain the header"},{"line_number":9,"context_line":"    of request microversion v2.23 in the API request."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"dae33548_641724ee","line":9,"range":{"start_line":8,"start_character":22,"end_line":9,"end_character":52},"updated":"2016-02-14 07:14:07.000000000","message":"you can just say that this has been added in microversion 2.23, without headers thing","commit_id":"4cacf654be6af8712a8c20a6301a52bdd2e8a74e"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"8e1b38800730bb3968058aa0eb4836963dd18327","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    The list API will return the in progress migratons"},{"line_number":6,"context_line":"    information of a server. The show API will return"},{"line_number":7,"context_line":"    a specified migration of a server. This has been"},{"line_number":8,"context_line":"    added in microversion 2.23."}],"source_content_type":"text/x-yaml","patch_set":32,"id":"bae84128_a208de29","line":8,"updated":"2016-02-25 07:09:53.000000000","message":"maybe this is old. Add few text about you add ref-link to /os-migrations also?","commit_id":"61b88e3a42c0334f0b9ac5eaf1c4bd12e2b027ef"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"23e530c85e108d5ae29a605ca424559e39c28fcf","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    The list API will return the in progress migratons"},{"line_number":6,"context_line":"    information of a server. The show API will return"},{"line_number":7,"context_line":"    a specified migration of a server. This has been"},{"line_number":8,"context_line":"    added in microversion 2.23."}],"source_content_type":"text/x-yaml","patch_set":32,"id":"bae84128_22032eba","line":8,"in_reply_to":"bae84128_a208de29","updated":"2016-02-25 07:19:31.000000000","message":"/os-migrations  is another API. \n\nI have add a new RENO for it.","commit_id":"61b88e3a42c0334f0b9ac5eaf1c4bd12e2b027ef"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6a2d2084c5676caaa7f5a1b579651388b2eb92d6","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    The list API will return the in progress migratons"},{"line_number":6,"context_line":"    information of a server. The show API will return"},{"line_number":7,"context_line":"    a specified migration of a server. This has been"},{"line_number":8,"context_line":"    added in microversion 2.23."}],"source_content_type":"text/x-yaml","patch_set":35,"id":"9aed3d3a_76f208d4","line":8,"updated":"2016-02-26 11:21:23.000000000","message":"mentioning live-migration restrictions in here, is probably a good idea.","commit_id":"b15a9edca76c7132e8b3e3baedd7938bfe96ffd6"}]}
