)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"942bd50af2894749e14195dc59b5f0fcffbc603c","unresolved":false,"context_lines":[{"line_number":10,"context_line":"\u0027cold migration with target\u0027 function (*1, *2)."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"*1: https://blueprints.launchpad.net/nova/+spec/cold-migration-with-target-pike"},{"line_number":13,"context_line":"*2: https://specs.openstack.org/openstack/nova-specs/specs/pike/approved/cold-migration-with-target-pike.html"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Depends-On: Iee356c4dd097c846b6ca8617ead6a061300c83f8"},{"line_number":16,"context_line":"Change-Id: Ibd92189d168308483e193a62aa5ecc1a0f79cb0d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"5f201791_197ef018","line":13,"updated":"2017-06-23 02:46:41.000000000","message":"I feel these URLs are a bit redundant.. These are almost same as \"Implements: blueprint...\", right?","commit_id":"2f6caf9884de892b634a50df31d08559fd625102"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"841f24dd325d599698d072e633617ddbbfbe2338","unresolved":false,"context_lines":[{"line_number":10,"context_line":"\u0027cold migration with target\u0027 function (*1, *2)."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"*1: https://blueprints.launchpad.net/nova/+spec/cold-migration-with-target-pike"},{"line_number":13,"context_line":"*2: https://specs.openstack.org/openstack/nova-specs/specs/pike/approved/cold-migration-with-target-pike.html"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Depends-On: Iee356c4dd097c846b6ca8617ead6a061300c83f8"},{"line_number":16,"context_line":"Change-Id: Ibd92189d168308483e193a62aa5ecc1a0f79cb0d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"5f201791_67f751d5","line":13,"in_reply_to":"5f201791_197ef018","updated":"2017-06-26 01:27:24.000000000","message":"Done","commit_id":"2f6caf9884de892b634a50df31d08559fd625102"}],"releasenotes/notes/bp-cold-migration-with-target-pike-abbb0ff210b58650.yaml":[{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"3221d8934f7756737d402aad7dd3bc6aebd88db9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":40,"id":"df3967d1_7e3f6ad6","updated":"2017-07-31 02:53:13.000000000","message":"Seems release note is not necessary for this.\nhttps://github.com/openstack/tempest/blame/master/REVIEWING.rst#L102","commit_id":"cd738db6930a4a2b72bbf7fbfe53d6e1c0ef5fd2"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"6e68b6a93e1d85cd66a9244e2e9a39cf40f19a7c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":40,"id":"df3967d1_ad3fe1d4","in_reply_to":"df3967d1_7e3f6ad6","updated":"2017-07-31 08:22:14.000000000","message":"Done","commit_id":"cd738db6930a4a2b72bbf7fbfe53d6e1c0ef5fd2"}],"tempest/api/compute/admin/test_migrations.py":[{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"8d4b82c542fc7463a9d280503cc7a78868e672e1","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        cls.hypervisor_client \u003d cls.os_adm.hypervisor_client"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def _test_cold_migrate_server_with_host(self, force\u003dFalse):"},{"line_number":154,"context_line":"        resp \u003d self.hypervisor_client.list_hypervisors()"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        if (CONF.compute.min_compute_nodes \u003c 2 or"},{"line_number":157,"context_line":"                len(resp[\u0027hypervisors\u0027]) \u003c 2):"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_d6850ccf","line":154,"range":{"start_line":154,"start_character":8,"end_line":154,"end_character":56},"updated":"2017-02-15 04:15:28.000000000","message":"better to select only available compute nodes, otherwise in production cloud the testcase may fail unexpectedly","commit_id":"ba6bbdab75e7ae2b918c969b97a04b5958aa7bc5"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"8d4b82c542fc7463a9d280503cc7a78868e672e1","unresolved":false,"context_lines":[{"line_number":163,"context_line":"            server[\u0027id\u0027])[\u0027server\u0027][\u0027OS-EXT-SRV-ATTR:host\u0027]"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        # Get a host that is different from the source host"},{"line_number":166,"context_line":"        target_host \u003d None"},{"line_number":167,"context_line":"        for hypervisor in resp[\u0027hypervisors\u0027]:"},{"line_number":168,"context_line":"            if src_host \u003d\u003d hypervisor[\u0027hypervisor_hostname\u0027]:"},{"line_number":169,"context_line":"                continue"},{"line_number":170,"context_line":"            else:"},{"line_number":171,"context_line":"                target_host \u003d hypervisor[\u0027hypervisor_hostname\u0027]"},{"line_number":172,"context_line":"                break"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        self.admin_servers_client.migrate_server(server[\u0027id\u0027],"},{"line_number":175,"context_line":"                                                 host\u003dtarget_host,"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_5672fc11","line":172,"range":{"start_line":166,"start_character":0,"end_line":172,"end_character":21},"updated":"2017-02-15 04:15:28.000000000","message":"will it look simpler to use a list comprehension?","commit_id":"ba6bbdab75e7ae2b918c969b97a04b5958aa7bc5"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"7bdba826ebd3c3b1e9b9075b458828b5a0f7a804","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    @classmethod"},{"line_number":147,"context_line":"    def setup_clients(cls):"},{"line_number":148,"context_line":"        super(MigrationsAdminTestV243, cls).setup_clients()"},{"line_number":149,"context_line":"        cls.admin_servers_client \u003d cls.os_adm.servers_client"},{"line_number":150,"context_line":"        cls.hypervisor_client \u003d cls.os_adm.hypervisor_client"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def _test_cold_migrate_server_with_host(self, force\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":4,"id":"da36d5c6_798153fb","line":149,"range":{"start_line":149,"start_character":7,"end_line":149,"end_character":60},"updated":"2017-02-28 08:52:25.000000000","message":"this can be removed","commit_id":"32737a592087fbdda4acd3a88f994a18de8ebb34"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"610deb0c58974aad7c313a86ca59c356e68f4168","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    @classmethod"},{"line_number":147,"context_line":"    def setup_clients(cls):"},{"line_number":148,"context_line":"        super(MigrationsAdminTestV243, cls).setup_clients()"},{"line_number":149,"context_line":"        cls.admin_servers_client \u003d cls.os_adm.servers_client"},{"line_number":150,"context_line":"        cls.hypervisor_client \u003d cls.os_adm.hypervisor_client"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def _test_cold_migrate_server_with_host(self, force\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":4,"id":"da36d5c6_c4b88f2d","line":149,"range":{"start_line":149,"start_character":7,"end_line":149,"end_character":60},"in_reply_to":"da36d5c6_798153fb","updated":"2017-02-28 11:11:19.000000000","message":"Done","commit_id":"32737a592087fbdda4acd3a88f994a18de8ebb34"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"7bdba826ebd3c3b1e9b9075b458828b5a0f7a804","unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        if (CONF.compute.min_compute_nodes \u003c 2 or"},{"line_number":158,"context_line":"                len(hypervisors) \u003c 2):"},{"line_number":159,"context_line":"            msg \u003d \"Less than 2 compute nodes, skipping multinode tests.\""},{"line_number":160,"context_line":"            raise self.skipException(msg)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        server \u003d self.create_test_server(networks\u003d\u0027none\u0027, wait_until\u003d\"ACTIVE\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"da36d5c6_f9754332","line":159,"range":{"start_line":159,"start_character":46,"end_line":159,"end_character":70},"updated":"2017-02-28 08:52:25.000000000","message":"this looks a bit strange","commit_id":"32737a592087fbdda4acd3a88f994a18de8ebb34"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"610deb0c58974aad7c313a86ca59c356e68f4168","unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        if (CONF.compute.min_compute_nodes \u003c 2 or"},{"line_number":158,"context_line":"                len(hypervisors) \u003c 2):"},{"line_number":159,"context_line":"            msg \u003d \"Less than 2 compute nodes, skipping multinode tests.\""},{"line_number":160,"context_line":"            raise self.skipException(msg)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        server \u003d self.create_test_server(networks\u003d\u0027none\u0027, wait_until\u003d\"ACTIVE\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"da36d5c6_e4b59331","line":159,"range":{"start_line":159,"start_character":46,"end_line":159,"end_character":70},"in_reply_to":"da36d5c6_f9754332","updated":"2017-02-28 11:11:19.000000000","message":"Done","commit_id":"32737a592087fbdda4acd3a88f994a18de8ebb34"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"245197d88f13808277e3ab70c0228032948c1b30","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        hypervisors \u003d [hypervisor for hypervisor in resp[\u0027hypervisors\u0027]"},{"line_number":153,"context_line":"                       if hypervisor[\u0027state\u0027] \u003d\u003d \u0027up\u0027]"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        if (CONF.compute.min_compute_nodes \u003c 2 or"},{"line_number":156,"context_line":"                len(hypervisors) \u003c 2):"},{"line_number":157,"context_line":"            msg \u003d \"Less than 2 compute nodes, skipping cold migration tests.\""},{"line_number":158,"context_line":"            raise self.skipException(msg)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        server \u003d self.create_test_server(networks\u003d\u0027none\u0027, wait_until\u003d\"ACTIVE\")"},{"line_number":161,"context_line":"        src_host \u003d self.admin_servers_client.show_server("}],"source_content_type":"text/x-python","patch_set":8,"id":"ffe62b97_97fd760a","line":158,"range":{"start_line":155,"start_character":0,"end_line":158,"end_character":41},"updated":"2017-03-30 11:16:58.000000000","message":"I think you should have a check on config only in the skip_checks method.\nIf you have less then one working hypervisors either config is broken or the cloud is broken, in either case you should fail as opposed to skip.","commit_id":"9d609c96eec019e0e59dcc364363f2d8276485ba"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"ab1a4b745e7f4aa250f547438b3ca727ad8c7535","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        hypervisors \u003d [hypervisor for hypervisor in resp[\u0027hypervisors\u0027]"},{"line_number":153,"context_line":"                       if hypervisor[\u0027state\u0027] \u003d\u003d \u0027up\u0027]"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        if (CONF.compute.min_compute_nodes \u003c 2 or"},{"line_number":156,"context_line":"                len(hypervisors) \u003c 2):"},{"line_number":157,"context_line":"            msg \u003d \"Less than 2 compute nodes, skipping cold migration tests.\""},{"line_number":158,"context_line":"            raise self.skipException(msg)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        server \u003d self.create_test_server(networks\u003d\u0027none\u0027, wait_until\u003d\"ACTIVE\")"},{"line_number":161,"context_line":"        src_host \u003d self.admin_servers_client.show_server("}],"source_content_type":"text/x-python","patch_set":8,"id":"dfeb2761_65dd596f","line":158,"range":{"start_line":155,"start_character":0,"end_line":158,"end_character":41},"in_reply_to":"ffe62b97_97fd760a","updated":"2017-04-03 03:04:19.000000000","message":"Done","commit_id":"9d609c96eec019e0e59dcc364363f2d8276485ba"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"483bffcc8a9562ff3c5c5f20a8dfefcf63183744","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"class MigrationsAdminTestV243(base.BaseV2ComputeAdminTest):"},{"line_number":142,"context_line":"    min_microversion \u003d \u00272.43\u0027"},{"line_number":143,"context_line":"    max_microversion \u003d \u0027latest\u0027"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"5ff73747_624bebaf","line":142,"range":{"start_line":142,"start_character":23,"end_line":142,"end_character":29},"updated":"2017-04-26 10:08:58.000000000","message":"The nova patch uses 2.46","commit_id":"dcf86178ea5dddc4bc8e7275ea904f0b6ac23ac9"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"2ddbc3ac8a7572dc85366a6628b7ee0fdb9c3712","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"class MigrationsAdminTestV243(base.BaseV2ComputeAdminTest):"},{"line_number":142,"context_line":"    min_microversion \u003d \u00272.43\u0027"},{"line_number":143,"context_line":"    max_microversion \u003d \u0027latest\u0027"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"5ff73747_a2d693c2","line":142,"range":{"start_line":142,"start_character":23,"end_line":142,"end_character":29},"in_reply_to":"5ff73747_624bebaf","updated":"2017-04-26 10:09:53.000000000","message":"Sorry ignore this, I was looking at the wrong patchset","commit_id":"dcf86178ea5dddc4bc8e7275ea904f0b6ac23ac9"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"33a82f4bd6ba34699251af1c7559c09cc8b05136","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        super(MigrationsAdminTestV243, cls).setup_clients()"},{"line_number":148,"context_line":"        cls.hypervisor_client \u003d cls.os_adm.hypervisor_client"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def _test_cold_migrate_server_with_host(self, force\u003dFalse):"},{"line_number":151,"context_line":"        if CONF.compute.min_compute_nodes \u003c 2:"},{"line_number":152,"context_line":"            msg \u003d \"Less than 2 compute nodes, skipping cold migration tests.\""},{"line_number":153,"context_line":"            raise self.skipException(msg)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7ffa3b31_edf71cf5","line":150,"updated":"2017-04-17 16:20:36.000000000","message":"This force parameter is not actually used. I ran your tests without this parameter here, and the 2 tests just passed. It seems you don\u0027t need that flag. Tempest is not the best place to do pure API tests.","commit_id":"dcf86178ea5dddc4bc8e7275ea904f0b6ac23ac9"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"fc858aa5c08fccd9c100a1fce220e015d8632908","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        super(MigrationsAdminTestV243, cls).setup_clients()"},{"line_number":148,"context_line":"        cls.hypervisor_client \u003d cls.os_adm.hypervisor_client"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def _test_cold_migrate_server_with_host(self, force\u003dFalse):"},{"line_number":151,"context_line":"        if CONF.compute.min_compute_nodes \u003c 2:"},{"line_number":152,"context_line":"            msg \u003d \"Less than 2 compute nodes, skipping cold migration tests.\""},{"line_number":153,"context_line":"            raise self.skipException(msg)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5ff73747_6e32e4f3","line":150,"in_reply_to":"7ffa3b31_edf71cf5","updated":"2017-04-25 07:59:28.000000000","message":"The tests will succeed whether \u0027force\u0027 parameter is true or false.\nBut in the perspective of API tests, they are necessary.\nThe class that have these tests is for Nova microversion 2.43.\nIn Nova microversion 2.43, \u0027force\u0027 parameter is added.\nSo \u0027force\u0027 parameter should be tested.","commit_id":"dcf86178ea5dddc4bc8e7275ea904f0b6ac23ac9"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"350abcdd387b1af97c962498e03ceaa07afa8b00","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    def _test_cold_migrate_server_with_host(self, force\u003dFalse):"},{"line_number":151,"context_line":"        if CONF.compute.min_compute_nodes \u003c 2:"},{"line_number":152,"context_line":"            msg \u003d \"Less than 2 compute nodes, skipping cold migration tests.\""},{"line_number":153,"context_line":"            raise self.skipException(msg)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        server \u003d self.create_test_server(networks\u003d\u0027none\u0027, wait_until\u003d\"ACTIVE\")"},{"line_number":156,"context_line":"        src_host \u003d self.admin_servers_client.show_server("}],"source_content_type":"text/x-python","patch_set":12,"id":"5ff73747_4d99451d","line":153,"updated":"2017-04-26 07:58:10.000000000","message":"I agree with that this check is necessary. But I feel it should be failed not skipped in this case.","commit_id":"dcf86178ea5dddc4bc8e7275ea904f0b6ac23ac9"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"bc104a9dc37f49fd5982a51d64f3cd35a2bbf3a7","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    def _test_cold_migrate_server_with_host(self, force\u003dFalse):"},{"line_number":151,"context_line":"        if CONF.compute.min_compute_nodes \u003c 2:"},{"line_number":152,"context_line":"            msg \u003d \"Less than 2 compute nodes, skipping cold migration tests.\""},{"line_number":153,"context_line":"            raise self.skipException(msg)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        server \u003d self.create_test_server(networks\u003d\u0027none\u0027, wait_until\u003d\"ACTIVE\")"},{"line_number":156,"context_line":"        src_host \u003d self.admin_servers_client.show_server("}],"source_content_type":"text/x-python","patch_set":12,"id":"7ffa3b31_cc300d0b","line":153,"updated":"2017-04-14 10:53:59.000000000","message":"I think it should be failed in this case?","commit_id":"dcf86178ea5dddc4bc8e7275ea904f0b6ac23ac9"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"483bffcc8a9562ff3c5c5f20a8dfefcf63183744","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    def _test_cold_migrate_server_with_host(self, force\u003dFalse):"},{"line_number":151,"context_line":"        if CONF.compute.min_compute_nodes \u003c 2:"},{"line_number":152,"context_line":"            msg \u003d \"Less than 2 compute nodes, skipping cold migration tests.\""},{"line_number":153,"context_line":"            raise self.skipException(msg)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        server \u003d self.create_test_server(networks\u003d\u0027none\u0027, wait_until\u003d\"ACTIVE\")"},{"line_number":156,"context_line":"        src_host \u003d self.admin_servers_client.show_server("}],"source_content_type":"text/x-python","patch_set":12,"id":"5ff73747_220963dc","line":153,"in_reply_to":"5ff73747_4d99451d","updated":"2017-04-26 10:08:58.000000000","message":"I think skip is fine, it\u0027s not that configuration is invalid, this test cannot be executed  against the target cloud. Of course it could be that the cloud has more than 1 node, and this was a misconfiguration, but we have no way to tell.\n\nThis check however should go into skip_checks, so that no resource is allocated when the test is skipped.\nAs it is now credentials will still be created and then deleted at the end.","commit_id":"dcf86178ea5dddc4bc8e7275ea904f0b6ac23ac9"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"fc858aa5c08fccd9c100a1fce220e015d8632908","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    def _test_cold_migrate_server_with_host(self, force\u003dFalse):"},{"line_number":151,"context_line":"        if CONF.compute.min_compute_nodes \u003c 2:"},{"line_number":152,"context_line":"            msg \u003d \"Less than 2 compute nodes, skipping cold migration tests.\""},{"line_number":153,"context_line":"            raise self.skipException(msg)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        server \u003d self.create_test_server(networks\u003d\u0027none\u0027, wait_until\u003d\"ACTIVE\")"},{"line_number":156,"context_line":"        src_host \u003d self.admin_servers_client.show_server("}],"source_content_type":"text/x-python","patch_set":12,"id":"5ff73747_db765cd9","line":153,"in_reply_to":"7ffa3b31_5c049917","updated":"2017-04-25 07:59:28.000000000","message":"It cannot be performed to cold migrate a server to the same host.\nSo this check is necessary.","commit_id":"dcf86178ea5dddc4bc8e7275ea904f0b6ac23ac9"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"7d9490fcc1168d31f06d77b1f86348bf6c1f9459","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    def _test_cold_migrate_server_with_host(self, force\u003dFalse):"},{"line_number":151,"context_line":"        if CONF.compute.min_compute_nodes \u003c 2:"},{"line_number":152,"context_line":"            msg \u003d \"Less than 2 compute nodes, skipping cold migration tests.\""},{"line_number":153,"context_line":"            raise self.skipException(msg)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        server \u003d self.create_test_server(networks\u003d\u0027none\u0027, wait_until\u003d\"ACTIVE\")"},{"line_number":156,"context_line":"        src_host \u003d self.admin_servers_client.show_server("}],"source_content_type":"text/x-python","patch_set":12,"id":"7ffa3b31_5c049917","line":153,"in_reply_to":"7ffa3b31_cc300d0b","updated":"2017-04-16 14:13:42.000000000","message":"hmm, but it seems this is another topic, so I think you can leave it, so far.","commit_id":"dcf86178ea5dddc4bc8e7275ea904f0b6ac23ac9"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"483bffcc8a9562ff3c5c5f20a8dfefcf63183744","unresolved":false,"context_lines":[{"line_number":188,"context_line":"    @decorators.idempotent_id(\u0027751e4677-be4f-432b-9063-1c11a3f1ce59\u0027)"},{"line_number":189,"context_line":"    @testtools.skipUnless(CONF.compute_feature_enabled.cold_migration,"},{"line_number":190,"context_line":"                          \u0027Cold migration not available.\u0027)"},{"line_number":191,"context_line":"    def test_cold_migrate_server_with_host_force_true(self):"},{"line_number":192,"context_line":"        self._test_cold_migrate_server_with_host(force\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5ff73747_a23a1331","line":191,"range":{"start_line":191,"start_character":8,"end_line":191,"end_character":53},"updated":"2017-04-26 10:08:58.000000000","message":"The force flag is not documented yet for cold migration (the nova patch is not merged yet), but I see from spec that it will do the same as for live migration, i.e. bypass the scheduler.\n\nThe way the test is setup doesn\u0027t tell us anything about whether force was used or not, it only checks that the parameter was accepted.\n\nGiven how many resources it takes to run this as an integration scenario, I don\u0027t think this is acceptable. If force is to be used, we should create a situation where going through the scheduler would fail, and verify that force let the migration start.","commit_id":"dcf86178ea5dddc4bc8e7275ea904f0b6ac23ac9"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"f0785cdcfa9d0f73891ed985fb126c66dbd5d03c","unresolved":false,"context_lines":[{"line_number":154,"context_line":"    @classmethod"},{"line_number":155,"context_line":"    def setup_clients(cls):"},{"line_number":156,"context_line":"        super(MigrationsV248AdminTest, cls).setup_clients()"},{"line_number":157,"context_line":"        cls.hypervisor_client \u003d cls.os_admin.hypervisor_client"},{"line_number":158,"context_line":"        cls.server_groups_client \u003d cls.server_groups_client"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    @decorators.idempotent_id(\u00272a775512-6735-430c-8f92-29d11e07b052\u0027)"}],"source_content_type":"text/x-python","patch_set":19,"id":"df140735_bacd4886","line":157,"range":{"start_line":157,"start_character":8,"end_line":157,"end_character":62},"updated":"2017-06-05 07:01:42.000000000","message":"maybe you can use os_admin.hypervisor_client directly, after all, it\u0027s used only once","commit_id":"8d4f566bde1d613a60ba9862dabe722ee198b0ac"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"226a077ea4193542006114e5d23b3f71c42f9391","unresolved":false,"context_lines":[{"line_number":154,"context_line":"    @classmethod"},{"line_number":155,"context_line":"    def setup_clients(cls):"},{"line_number":156,"context_line":"        super(MigrationsV248AdminTest, cls).setup_clients()"},{"line_number":157,"context_line":"        cls.hypervisor_client \u003d cls.os_admin.hypervisor_client"},{"line_number":158,"context_line":"        cls.server_groups_client \u003d cls.server_groups_client"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    @decorators.idempotent_id(\u00272a775512-6735-430c-8f92-29d11e07b052\u0027)"}],"source_content_type":"text/x-python","patch_set":19,"id":"7f231b9d_b07aaf85","line":157,"range":{"start_line":157,"start_character":8,"end_line":157,"end_character":62},"in_reply_to":"df140735_bacd4886","updated":"2017-06-13 07:23:26.000000000","message":"Done","commit_id":"8d4f566bde1d613a60ba9862dabe722ee198b0ac"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"f0785cdcfa9d0f73891ed985fb126c66dbd5d03c","unresolved":false,"context_lines":[{"line_number":155,"context_line":"    def setup_clients(cls):"},{"line_number":156,"context_line":"        super(MigrationsV248AdminTest, cls).setup_clients()"},{"line_number":157,"context_line":"        cls.hypervisor_client \u003d cls.os_admin.hypervisor_client"},{"line_number":158,"context_line":"        cls.server_groups_client \u003d cls.server_groups_client"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    @decorators.idempotent_id(\u00272a775512-6735-430c-8f92-29d11e07b052\u0027)"},{"line_number":161,"context_line":"    def test_cold_migrate_server_with_host_force_false(self):"}],"source_content_type":"text/x-python","patch_set":19,"id":"df140735_7a1570e4","line":158,"range":{"start_line":158,"start_character":8,"end_line":158,"end_character":59},"updated":"2017-06-05 07:01:42.000000000","message":"this can be removed","commit_id":"8d4f566bde1d613a60ba9862dabe722ee198b0ac"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"226a077ea4193542006114e5d23b3f71c42f9391","unresolved":false,"context_lines":[{"line_number":155,"context_line":"    def setup_clients(cls):"},{"line_number":156,"context_line":"        super(MigrationsV248AdminTest, cls).setup_clients()"},{"line_number":157,"context_line":"        cls.hypervisor_client \u003d cls.os_admin.hypervisor_client"},{"line_number":158,"context_line":"        cls.server_groups_client \u003d cls.server_groups_client"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    @decorators.idempotent_id(\u00272a775512-6735-430c-8f92-29d11e07b052\u0027)"},{"line_number":161,"context_line":"    def test_cold_migrate_server_with_host_force_false(self):"}],"source_content_type":"text/x-python","patch_set":19,"id":"7f231b9d_906fb3c4","line":158,"range":{"start_line":158,"start_character":8,"end_line":158,"end_character":59},"in_reply_to":"df140735_7a1570e4","updated":"2017-06-13 07:23:26.000000000","message":"Done","commit_id":"8d4f566bde1d613a60ba9862dabe722ee198b0ac"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"f0785cdcfa9d0f73891ed985fb126c66dbd5d03c","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        resp \u003d self.hypervisor_client.list_hypervisors()"},{"line_number":168,"context_line":"        hypervisors \u003d [hypervisor for hypervisor in resp[\u0027hypervisors\u0027]"},{"line_number":169,"context_line":"                       if hypervisor[\u0027state\u0027] \u003d\u003d \u0027up\u0027]"},{"line_number":170,"context_line":"        target_hosts \u003d [hypervisor[\u0027hypervisor_hostname\u0027]"},{"line_number":171,"context_line":"                        for hypervisor in hypervisors"},{"line_number":172,"context_line":"                        if hypervisor[\u0027hypervisor_hostname\u0027] !\u003d src_host]"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"df140735_7aea10d8","line":170,"range":{"start_line":170,"start_character":8,"end_line":170,"end_character":20},"updated":"2017-06-05 07:01:42.000000000","message":"here target_hosts may be empty","commit_id":"8d4f566bde1d613a60ba9862dabe722ee198b0ac"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"226a077ea4193542006114e5d23b3f71c42f9391","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        resp \u003d self.hypervisor_client.list_hypervisors()"},{"line_number":168,"context_line":"        hypervisors \u003d [hypervisor for hypervisor in resp[\u0027hypervisors\u0027]"},{"line_number":169,"context_line":"                       if hypervisor[\u0027state\u0027] \u003d\u003d \u0027up\u0027]"},{"line_number":170,"context_line":"        target_hosts \u003d [hypervisor[\u0027hypervisor_hostname\u0027]"},{"line_number":171,"context_line":"                        for hypervisor in hypervisors"},{"line_number":172,"context_line":"                        if hypervisor[\u0027hypervisor_hostname\u0027] !\u003d src_host]"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"7f231b9d_195f240f","line":170,"range":{"start_line":170,"start_character":8,"end_line":170,"end_character":20},"in_reply_to":"df140735_7aea10d8","updated":"2017-06-13 07:23:26.000000000","message":"Add a check for the length of target_hosts.\nDone.","commit_id":"8d4f566bde1d613a60ba9862dabe722ee198b0ac"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"f0785cdcfa9d0f73891ed985fb126c66dbd5d03c","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        # Move server2 to the host where server1 exists."},{"line_number":203,"context_line":"        # If force\u003dFalse, a 400 Error (BadRequest) occurs"},{"line_number":204,"context_line":"        # because of \u0027anti-affinity\u0027 server group policy."},{"line_number":205,"context_line":"        with testtools.ExpectedException(exceptions.BadRequest):"},{"line_number":206,"context_line":"            self.admin_servers_client.migrate_server(server2[\u0027id\u0027],"},{"line_number":207,"context_line":"                                                     host\u003dtarget_host,"},{"line_number":208,"context_line":"                                                     force\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":19,"id":"df140735_da06bc52","line":205,"range":{"start_line":205,"start_character":8,"end_line":205,"end_character":64},"updated":"2017-06-05 07:01:42.000000000","message":"1. Why not use self.assertRaises?\n2. If ServerGroupAntiAffinityFilter is not set in nova.conf-\u003escheduler_default_filters, then this won\u0027t raise BadRequest.\n   So is there any other situation that migrating with false\u003dFalse will fail and migrating with false\u003dTrue can succeed?","commit_id":"8d4f566bde1d613a60ba9862dabe722ee198b0ac"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"226a077ea4193542006114e5d23b3f71c42f9391","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        # Move server2 to the host where server1 exists."},{"line_number":203,"context_line":"        # If force\u003dFalse, a 400 Error (BadRequest) occurs"},{"line_number":204,"context_line":"        # because of \u0027anti-affinity\u0027 server group policy."},{"line_number":205,"context_line":"        with testtools.ExpectedException(exceptions.BadRequest):"},{"line_number":206,"context_line":"            self.admin_servers_client.migrate_server(server2[\u0027id\u0027],"},{"line_number":207,"context_line":"                                                     host\u003dtarget_host,"},{"line_number":208,"context_line":"                                                     force\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":19,"id":"7f231b9d_bec136e7","line":205,"range":{"start_line":205,"start_character":8,"end_line":205,"end_character":64},"in_reply_to":"df140735_da06bc52","updated":"2017-06-13 07:23:26.000000000","message":"\u003e 1. Why not use self.assertRaises?\n\nDone.\n\n\u003e 2. If ServerGroupAntiAffinityFilter is not set in nova.conf-\u003escheduler_default_filters, then this won\u0027t raise BadRequest.\n   So is there any other situation that migrating with false\u003dFalse will fail and migrating with false\u003dTrue can succeed?\n\nAdded the skip check for the filter.","commit_id":"8d4f566bde1d613a60ba9862dabe722ee198b0ac"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"942bd50af2894749e14195dc59b5f0fcffbc603c","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        super(MigrationsV249AdminTest, cls).skip_checks()"},{"line_number":149,"context_line":"        if not CONF.compute_feature_enabled.cold_migration:"},{"line_number":150,"context_line":"            raise cls.skipException(\"Cold migration not available.\")"},{"line_number":151,"context_line":"        if CONF.compute.min_compute_nodes \u003c 2:"},{"line_number":152,"context_line":"            raise cls.skipException("},{"line_number":153,"context_line":"                \"Less than 2 compute nodes, skipping cold migration tests.\")"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"5f201791_f978d42b","line":151,"updated":"2017-06-23 02:46:41.000000000","message":"I feel this is a misconfiguration case, though..","commit_id":"2f6caf9884de892b634a50df31d08559fd625102"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"04fdfa8041ce6ec39b15707f8c93cf1710ba6fab","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        super(MigrationsV249AdminTest, cls).skip_checks()"},{"line_number":149,"context_line":"        if not CONF.compute_feature_enabled.cold_migration:"},{"line_number":150,"context_line":"            raise cls.skipException(\"Cold migration not available.\")"},{"line_number":151,"context_line":"        if CONF.compute.min_compute_nodes \u003c 2:"},{"line_number":152,"context_line":"            raise cls.skipException("},{"line_number":153,"context_line":"                \"Less than 2 compute nodes, skipping cold migration tests.\")"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"3f1d235d_5c92fc9f","line":151,"updated":"2017-07-04 05:03:40.000000000","message":"I think if the target environment is a single node, the cold_migration feature should be false. Am I correct?","commit_id":"2f6caf9884de892b634a50df31d08559fd625102"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"b11ba1ea3d6d53be3e523df34c9c32e75ce354ca","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        super(MigrationsV249AdminTest, cls).skip_checks()"},{"line_number":149,"context_line":"        if not CONF.compute_feature_enabled.cold_migration:"},{"line_number":150,"context_line":"            raise cls.skipException(\"Cold migration not available.\")"},{"line_number":151,"context_line":"        if CONF.compute.min_compute_nodes \u003c 2:"},{"line_number":152,"context_line":"            raise cls.skipException("},{"line_number":153,"context_line":"                \"Less than 2 compute nodes, skipping cold migration tests.\")"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"3f1d235d_bb80abf6","line":151,"in_reply_to":"3f1d235d_5c92fc9f","updated":"2017-07-06 06:01:29.000000000","message":"No.\nIf the Nova compute driver (e.g. VMware) supports the \u0027supports_migrate_to_same_host\u0027 feature,  the cold_migration feature can be true when the target environment is a single node.\n\nhttps://github.com/openstack/nova/blob/9261b85dbff9b1e72f51fadd3347acb149201854/nova/compute/manager.py#L3778-L3784\n\nBut in these tests, two compute nodes are required.","commit_id":"2f6caf9884de892b634a50df31d08559fd625102"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"841f24dd325d599698d072e633617ddbbfbe2338","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        super(MigrationsV249AdminTest, cls).skip_checks()"},{"line_number":149,"context_line":"        if not CONF.compute_feature_enabled.cold_migration:"},{"line_number":150,"context_line":"            raise cls.skipException(\"Cold migration not available.\")"},{"line_number":151,"context_line":"        if CONF.compute.min_compute_nodes \u003c 2:"},{"line_number":152,"context_line":"            raise cls.skipException("},{"line_number":153,"context_line":"                \"Less than 2 compute nodes, skipping cold migration tests.\")"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"5f201791_a7dfa938","line":151,"in_reply_to":"5f201791_f978d42b","updated":"2017-06-26 01:27:24.000000000","message":"In a single node environment, tests in this class should be skipped.","commit_id":"2f6caf9884de892b634a50df31d08559fd625102"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"942bd50af2894749e14195dc59b5f0fcffbc603c","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        target_hosts \u003d [hypervisor[\u0027hypervisor_hostname\u0027]"},{"line_number":166,"context_line":"                        for hypervisor in hypervisors"},{"line_number":167,"context_line":"                        if hypervisor[\u0027hypervisor_hostname\u0027] !\u003d src_host]"},{"line_number":168,"context_line":"        self.assertNotEqual(0, len(target_hosts))"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        self.admin_servers_client.migrate_server(server[\u0027id\u0027],"},{"line_number":171,"context_line":"                                                 host\u003dtarget_hosts[0],"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f201791_d977583a","line":168,"updated":"2017-06-23 02:46:41.000000000","message":"very nits: This can be\n\n  self.assertNotEmpty(target_hosts) or self.assertTrue(target_hosts)","commit_id":"2f6caf9884de892b634a50df31d08559fd625102"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"841f24dd325d599698d072e633617ddbbfbe2338","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        target_hosts \u003d [hypervisor[\u0027hypervisor_hostname\u0027]"},{"line_number":166,"context_line":"                        for hypervisor in hypervisors"},{"line_number":167,"context_line":"                        if hypervisor[\u0027hypervisor_hostname\u0027] !\u003d src_host]"},{"line_number":168,"context_line":"        self.assertNotEqual(0, len(target_hosts))"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        self.admin_servers_client.migrate_server(server[\u0027id\u0027],"},{"line_number":171,"context_line":"                                                 host\u003dtarget_hosts[0],"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f201791_2716f9f2","line":168,"in_reply_to":"5f201791_d977583a","updated":"2017-06-26 01:27:24.000000000","message":"Done","commit_id":"2f6caf9884de892b634a50df31d08559fd625102"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"d4107fd9572aa900cfd2a3c2924b065df03d4ea5","unresolved":false,"context_lines":[{"line_number":189,"context_line":"    def test_cold_migrate_server_with_host_force_true(self):"},{"line_number":190,"context_line":"        # Create two servers belongs to \u0027anti-affinity\u0027 server group policy."},{"line_number":191,"context_line":"        server_group \u003d self.create_test_server_group(policy\u003d[\u0027anti-affinity\u0027])"},{"line_number":192,"context_line":"        server1 \u003d self.create_test_server("},{"line_number":193,"context_line":"            networks\u003d\u0027none\u0027, scheduler_hints\u003d{\"group\": server_group[\u0027id\u0027]},"},{"line_number":194,"context_line":"            wait_until\u003d\"ACTIVE\")"},{"line_number":195,"context_line":"        server2 \u003d self.create_test_server("},{"line_number":196,"context_line":"            networks\u003d\u0027none\u0027, scheduler_hints\u003d{\"group\": server_group[\u0027id\u0027]},"},{"line_number":197,"context_line":"            wait_until\u003d\"ACTIVE\")"},{"line_number":198,"context_line":"        target_host \u003d self.admin_servers_client.show_server("},{"line_number":199,"context_line":"            server1[\u0027id\u0027])[\u0027server\u0027][\u0027OS-EXT-SRV-ATTR:host\u0027]"},{"line_number":200,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"1f1a1f67_b1c4ec93","line":197,"range":{"start_line":192,"start_character":8,"end_line":197,"end_character":32},"updated":"2017-07-21 00:04:38.000000000","message":"This can be shortened to:\n\nservers \u003d [self.create_test_server(networks\u003d\u0027none\u0027,\n           scheduler_hints\u003d{\"group\": server_group[\u0027id\u0027]},\n           wait_until\u003d\"ACTIVE\") for _ in range(2)]\nserver1, server2 \u003d servers","commit_id":"6b37518794968fdbb045efe34f1c37e568038e60"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"390e913f3867a8554abb6a95122ef4507e63620c","unresolved":false,"context_lines":[{"line_number":189,"context_line":"    def test_cold_migrate_server_with_host_force_true(self):"},{"line_number":190,"context_line":"        # Create two servers belongs to \u0027anti-affinity\u0027 server group policy."},{"line_number":191,"context_line":"        server_group \u003d self.create_test_server_group(policy\u003d[\u0027anti-affinity\u0027])"},{"line_number":192,"context_line":"        server1 \u003d self.create_test_server("},{"line_number":193,"context_line":"            networks\u003d\u0027none\u0027, scheduler_hints\u003d{\"group\": server_group[\u0027id\u0027]},"},{"line_number":194,"context_line":"            wait_until\u003d\"ACTIVE\")"},{"line_number":195,"context_line":"        server2 \u003d self.create_test_server("},{"line_number":196,"context_line":"            networks\u003d\u0027none\u0027, scheduler_hints\u003d{\"group\": server_group[\u0027id\u0027]},"},{"line_number":197,"context_line":"            wait_until\u003d\"ACTIVE\")"},{"line_number":198,"context_line":"        target_host \u003d self.admin_servers_client.show_server("},{"line_number":199,"context_line":"            server1[\u0027id\u0027])[\u0027server\u0027][\u0027OS-EXT-SRV-ATTR:host\u0027]"},{"line_number":200,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"ff346bd7_e82deca8","line":197,"range":{"start_line":192,"start_character":8,"end_line":197,"end_character":32},"in_reply_to":"1f1a1f67_b1c4ec93","updated":"2017-07-22 11:02:26.000000000","message":"Done","commit_id":"6b37518794968fdbb045efe34f1c37e568038e60"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"3221d8934f7756737d402aad7dd3bc6aebd88db9","unresolved":false,"context_lines":[{"line_number":153,"context_line":"                \"Less than 2 compute nodes, skipping cold migration tests.\")"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    @decorators.idempotent_id(\u00272a775512-6735-430c-8f92-29d11e07b052\u0027)"},{"line_number":156,"context_line":"    def test_cold_migrate_server_with_host_force_false(self):"},{"line_number":157,"context_line":"        server \u003d self.create_test_server(networks\u003d\u0027none\u0027, wait_until\u003d\"ACTIVE\")"},{"line_number":158,"context_line":"        src_host \u003d self.admin_servers_client.show_server("},{"line_number":159,"context_line":"            server[\u0027id\u0027])[\u0027server\u0027][\u0027OS-EXT-SRV-ATTR:host\u0027]"}],"source_content_type":"text/x-python","patch_set":40,"id":"df3967d1_215423ca","line":156,"range":{"start_line":156,"start_character":8,"end_line":156,"end_character":54},"updated":"2017-07-31 02:53:13.000000000","message":"I am not sure whether we should add this(for saving the total executing time), seems not very necessary. \nJust wait for others\u0027 opinions","commit_id":"cd738db6930a4a2b72bbf7fbfe53d6e1c0ef5fd2"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"6e68b6a93e1d85cd66a9244e2e9a39cf40f19a7c","unresolved":false,"context_lines":[{"line_number":153,"context_line":"                \"Less than 2 compute nodes, skipping cold migration tests.\")"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    @decorators.idempotent_id(\u00272a775512-6735-430c-8f92-29d11e07b052\u0027)"},{"line_number":156,"context_line":"    def test_cold_migrate_server_with_host_force_false(self):"},{"line_number":157,"context_line":"        server \u003d self.create_test_server(networks\u003d\u0027none\u0027, wait_until\u003d\"ACTIVE\")"},{"line_number":158,"context_line":"        src_host \u003d self.admin_servers_client.show_server("},{"line_number":159,"context_line":"            server[\u0027id\u0027])[\u0027server\u0027][\u0027OS-EXT-SRV-ATTR:host\u0027]"}],"source_content_type":"text/x-python","patch_set":40,"id":"df3967d1_4d07551e","line":156,"range":{"start_line":156,"start_character":8,"end_line":156,"end_character":54},"in_reply_to":"df3967d1_215423ca","updated":"2017-07-31 08:22:14.000000000","message":"It is necessary to verify API and its behavior.","commit_id":"cd738db6930a4a2b72bbf7fbfe53d6e1c0ef5fd2"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"876a9e889ac2266880177a73cd7c7133246d33bc","unresolved":false,"context_lines":[{"line_number":154,"context_line":"    @decorators.idempotent_id(\u00272a775512-6735-430c-8f92-29d11e07b052\u0027)"},{"line_number":155,"context_line":"    def test_cold_migrate_server_with_host(self):"},{"line_number":156,"context_line":"        server \u003d self.create_test_server(networks\u003d\u0027none\u0027, wait_until\u003d\"ACTIVE\")"},{"line_number":157,"context_line":"        src_host \u003d self.admin_servers_client.show_server("},{"line_number":158,"context_line":"            server[\u0027id\u0027])[\u0027server\u0027][\u0027OS-EXT-SRV-ATTR:host\u0027]"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        # Get a host that is different from the source host"},{"line_number":161,"context_line":"        resp \u003d self.os_admin.hypervisor_client.list_hypervisors()"},{"line_number":162,"context_line":"        hypervisors \u003d [hypervisor for hypervisor in resp[\u0027hypervisors\u0027]"},{"line_number":163,"context_line":"                       if hypervisor[\u0027state\u0027] \u003d\u003d \u0027up\u0027]"},{"line_number":164,"context_line":"        target_hosts \u003d [hypervisor[\u0027hypervisor_hostname\u0027]"},{"line_number":165,"context_line":"                        for hypervisor in hypervisors"},{"line_number":166,"context_line":"                        if hypervisor[\u0027hypervisor_hostname\u0027] !\u003d src_host]"},{"line_number":167,"context_line":"        self.assertTrue(target_hosts)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        self.admin_servers_client.migrate_server(server[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":42,"id":"5f2577a7_0e214cfc","line":166,"range":{"start_line":157,"start_character":0,"end_line":166,"end_character":73},"updated":"2017-09-11 06:07:53.000000000","message":"this can be replaced by calling base.get_host_other_than(server_id)","commit_id":"6a7c92470d44e4b89b955d88c0f98d688fde539f"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"04acc56fd84f04f42bc77ceed4e2ad6339ee555c","unresolved":false,"context_lines":[{"line_number":154,"context_line":"    @decorators.idempotent_id(\u00272a775512-6735-430c-8f92-29d11e07b052\u0027)"},{"line_number":155,"context_line":"    def test_cold_migrate_server_with_host(self):"},{"line_number":156,"context_line":"        server \u003d self.create_test_server(networks\u003d\u0027none\u0027, wait_until\u003d\"ACTIVE\")"},{"line_number":157,"context_line":"        src_host \u003d self.admin_servers_client.show_server("},{"line_number":158,"context_line":"            server[\u0027id\u0027])[\u0027server\u0027][\u0027OS-EXT-SRV-ATTR:host\u0027]"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        # Get a host that is different from the source host"},{"line_number":161,"context_line":"        resp \u003d self.os_admin.hypervisor_client.list_hypervisors()"},{"line_number":162,"context_line":"        hypervisors \u003d [hypervisor for hypervisor in resp[\u0027hypervisors\u0027]"},{"line_number":163,"context_line":"                       if hypervisor[\u0027state\u0027] \u003d\u003d \u0027up\u0027]"},{"line_number":164,"context_line":"        target_hosts \u003d [hypervisor[\u0027hypervisor_hostname\u0027]"},{"line_number":165,"context_line":"                        for hypervisor in hypervisors"},{"line_number":166,"context_line":"                        if hypervisor[\u0027hypervisor_hostname\u0027] !\u003d src_host]"},{"line_number":167,"context_line":"        self.assertTrue(target_hosts)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        self.admin_servers_client.migrate_server(server[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f515b1d_38067c88","line":166,"range":{"start_line":157,"start_character":0,"end_line":166,"end_character":73},"in_reply_to":"5f2577a7_0e214cfc","updated":"2017-09-25 09:34:03.000000000","message":"Done","commit_id":"6a7c92470d44e4b89b955d88c0f98d688fde539f"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"876a9e889ac2266880177a73cd7c7133246d33bc","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        waiters.wait_for_server_status(self.servers_client,"},{"line_number":176,"context_line":"                                       server[\u0027id\u0027], \u0027ACTIVE\u0027)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        dst_host \u003d self.admin_servers_client.show_server("},{"line_number":179,"context_line":"            server[\u0027id\u0027])[\u0027server\u0027][\u0027OS-EXT-SRV-ATTR:host\u0027]"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        self.assertEqual(target_hosts[0], dst_host)"}],"source_content_type":"text/x-python","patch_set":42,"id":"5f2577a7_ee1de0bd","line":179,"range":{"start_line":178,"start_character":0,"end_line":179,"end_character":59},"updated":"2017-09-11 06:07:53.000000000","message":"dst_host \u003d self.get_host_for_server(server[\u0027id\u0027])","commit_id":"6a7c92470d44e4b89b955d88c0f98d688fde539f"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"04acc56fd84f04f42bc77ceed4e2ad6339ee555c","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        waiters.wait_for_server_status(self.servers_client,"},{"line_number":176,"context_line":"                                       server[\u0027id\u0027], \u0027ACTIVE\u0027)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        dst_host \u003d self.admin_servers_client.show_server("},{"line_number":179,"context_line":"            server[\u0027id\u0027])[\u0027server\u0027][\u0027OS-EXT-SRV-ATTR:host\u0027]"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        self.assertEqual(target_hosts[0], dst_host)"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f515b1d_181980d6","line":179,"range":{"start_line":178,"start_character":0,"end_line":179,"end_character":59},"in_reply_to":"5f2577a7_ee1de0bd","updated":"2017-09-25 09:34:03.000000000","message":"Done","commit_id":"6a7c92470d44e4b89b955d88c0f98d688fde539f"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"7678e210f35360fbd1754e94f851915870fdf7ef","unresolved":false,"context_lines":[{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        # Get a host that is different from the source host"},{"line_number":160,"context_line":"        target_host \u003d self.get_host_other_than(server[\u0027id\u0027])"},{"line_number":161,"context_line":"        self.assertTrue(target_host)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        self.admin_servers_client.migrate_server(server[\u0027id\u0027],"},{"line_number":164,"context_line":"                                                 host\u003dtarget_host)"}],"source_content_type":"text/x-python","patch_set":49,"id":"3f4b6375_3e3056e8","line":161,"range":{"start_line":161,"start_character":13,"end_line":161,"end_character":23},"updated":"2017-10-24 02:45:56.000000000","message":"how about using assertIsNotNone which is a bit more readable?","commit_id":"36e293a2ba2c588710f327149cd76e857c83e656"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"bdaf6668749c0f87ca6674bfdbe4a1ef228a4afa","unresolved":false,"context_lines":[{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        # Get a host that is different from the source host"},{"line_number":160,"context_line":"        target_host \u003d self.get_host_other_than(server[\u0027id\u0027])"},{"line_number":161,"context_line":"        self.assertTrue(target_host)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        self.admin_servers_client.migrate_server(server[\u0027id\u0027],"},{"line_number":164,"context_line":"                                                 host\u003dtarget_host)"}],"source_content_type":"text/x-python","patch_set":49,"id":"3f4b6375_d2ce9158","line":161,"range":{"start_line":161,"start_character":13,"end_line":161,"end_character":23},"in_reply_to":"3f4b6375_3e3056e8","updated":"2017-10-26 01:46:27.000000000","message":"Done","commit_id":"36e293a2ba2c588710f327149cd76e857c83e656"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"7678e210f35360fbd1754e94f851915870fdf7ef","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        compute.is_scheduler_filter_enabled(\u0027ServerGroupAntiAffinityFilter\u0027),"},{"line_number":178,"context_line":"        \u0027ServerGroupAntiAffinityFilter is not available.\u0027)"},{"line_number":179,"context_line":"    def test_cold_migrate_server_with_host_in_failure(self):"},{"line_number":180,"context_line":"        # Create two servers belongs to \u0027anti-affinity\u0027 server group policy."},{"line_number":181,"context_line":"        server_group \u003d self.create_test_server_group(policy\u003d[\u0027anti-affinity\u0027])"},{"line_number":182,"context_line":"        server1, server2 \u003d [self.create_test_server("},{"line_number":183,"context_line":"            networks\u003d\u0027none\u0027, scheduler_hints\u003d{\"group\": server_group[\u0027id\u0027]},"}],"source_content_type":"text/x-python","patch_set":49,"id":"3f4b6375_5e48b25a","line":180,"range":{"start_line":180,"start_character":29,"end_line":180,"end_character":36},"updated":"2017-10-24 02:45:56.000000000","message":"belonging","commit_id":"36e293a2ba2c588710f327149cd76e857c83e656"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"bdaf6668749c0f87ca6674bfdbe4a1ef228a4afa","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        compute.is_scheduler_filter_enabled(\u0027ServerGroupAntiAffinityFilter\u0027),"},{"line_number":178,"context_line":"        \u0027ServerGroupAntiAffinityFilter is not available.\u0027)"},{"line_number":179,"context_line":"    def test_cold_migrate_server_with_host_in_failure(self):"},{"line_number":180,"context_line":"        # Create two servers belongs to \u0027anti-affinity\u0027 server group policy."},{"line_number":181,"context_line":"        server_group \u003d self.create_test_server_group(policy\u003d[\u0027anti-affinity\u0027])"},{"line_number":182,"context_line":"        server1, server2 \u003d [self.create_test_server("},{"line_number":183,"context_line":"            networks\u003d\u0027none\u0027, scheduler_hints\u003d{\"group\": server_group[\u0027id\u0027]},"}],"source_content_type":"text/x-python","patch_set":49,"id":"3f4b6375_b2d9d522","line":180,"range":{"start_line":180,"start_character":29,"end_line":180,"end_character":36},"in_reply_to":"3f4b6375_5e48b25a","updated":"2017-10-26 01:46:27.000000000","message":"Done","commit_id":"36e293a2ba2c588710f327149cd76e857c83e656"}]}
