)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"455c5bda43daa4bd79ffe32754f3d0c19c94ff9f","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Added support for live migration on non-shared storage"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added unit tests."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Closes-bug: #1549307"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"9aed3d3a_a78f3c22","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":5},"updated":"2016-02-26 12:24:59.000000000","message":"I\u0027m not sure if this description of change is valid. Please describe change with little bit more details","commit_id":"b36850164992e6c585eebba44e77d4102dbe09ed"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"40c736b99839ef167c8df394144fc0328f7480f1","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2016-02-29 16:23:51 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Added support for live migration on non-shared storage"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added unit tests."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Closes-bug: #1549307"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"9aed3d3a_e66425ba","line":8,"updated":"2016-02-29 21:07:58.000000000","message":"Please write littlebit more details about Your change in commit message and I will add +1 for it :)","commit_id":"6a6f996eb68a6ea6dcf601c25eff93dcbc48de74"}],"watcher/applier/actions/migration.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"fbe2ee91569d44db57de0329997f3ff3e5c65797","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                LOG.debug(\"Instance %s propably is not on shared storage. \""},{"line_number":87,"context_line":"                          \"Trying to migrate using block migrate\""},{"line_number":88,"context_line":"                          % self.instance_uuid)"},{"line_number":89,"context_line":"                return nova.live_migrate_instance("},{"line_number":90,"context_line":"                    instance_id\u003dself.instance_uuid,"},{"line_number":91,"context_line":"                    dest_hostname\u003ddestination,"},{"line_number":92,"context_line":"                    block_migration\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bae84128_d69a2b61","line":89,"range":{"start_line":89,"start_character":16,"end_line":89,"end_character":22},"updated":"2016-02-24 16:38:23.000000000","message":"IMHO, you should create a variable at the beginning which you can try to set at both places before return\u0027ing at the end of the routine instead of having multiple return statements.","commit_id":"19b808a290b9784cea77eedcc2707a2b80fa3874"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"fbe2ee91569d44db57de0329997f3ff3e5c65797","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                          \"instance %s.Exception: %s\" %"},{"line_number":96,"context_line":"                          (self.instance_uuid, e))"},{"line_number":97,"context_line":"        except Exception:"},{"line_number":98,"context_line":"            LOG.critical(\"Unexpected error occured. Migration failed for\""},{"line_number":99,"context_line":"                         \"instance %s.\" % self.instance_uuid)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def migrate(self, destination):"}],"source_content_type":"text/x-python","patch_set":3,"id":"bae84128_368c37d9","line":98,"range":{"start_line":98,"start_character":24,"end_line":98,"end_character":36},"updated":"2016-02-24 16:38:23.000000000","message":"Can you wrap the exception message with _LC() for i18n please ?\n\nfrom watcher._i18n import _LC","commit_id":"19b808a290b9784cea77eedcc2707a2b80fa3874"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"fbe2ee91569d44db57de0329997f3ff3e5c65797","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                          \"instance %s.Exception: %s\" %"},{"line_number":96,"context_line":"                          (self.instance_uuid, e))"},{"line_number":97,"context_line":"        except Exception:"},{"line_number":98,"context_line":"            LOG.critical(\"Unexpected error occured. Migration failed for\""},{"line_number":99,"context_line":"                         \"instance %s.\" % self.instance_uuid)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def migrate(self, destination):"}],"source_content_type":"text/x-python","patch_set":3,"id":"bae84128_16f773d3","line":98,"updated":"2016-02-24 16:38:23.000000000","message":"If both fail, I think we need to raise an exception to fail the action plan but also to trigger the revert()","commit_id":"19b808a290b9784cea77eedcc2707a2b80fa3874"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"455c5bda43daa4bd79ffe32754f3d0c19c94ff9f","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                                                dest_hostname\u003ddestination)"},{"line_number":84,"context_line":"        except nova_helper.nvexceptions.ClientException as e:"},{"line_number":85,"context_line":"            if e.code \u003d\u003d 400:"},{"line_number":86,"context_line":"                LOG.debug(\"Instance %s propably is not on shared storage. \""},{"line_number":87,"context_line":"                          \"Trying to migrate using block migrate\""},{"line_number":88,"context_line":"                          % self.instance_uuid)"},{"line_number":89,"context_line":"                result \u003d nova.live_migrate_instance("}],"source_content_type":"text/x-python","patch_set":7,"id":"9aed3d3a_674ff4bd","line":86,"updated":"2016-02-26 12:24:59.000000000","message":"Can\u0027t You check also error message to be maybe sure that error is because instance is not on shared storage? Then You will not have message with \"probably\" :)","commit_id":"b36850164992e6c585eebba44e77d4102dbe09ed"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"b03b90d2521d62ddc59531c5246ccf112fbdd148","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                                                dest_hostname\u003ddestination)"},{"line_number":84,"context_line":"        except nova_helper.nvexceptions.ClientException as e:"},{"line_number":85,"context_line":"            if e.code \u003d\u003d 400:"},{"line_number":86,"context_line":"                LOG.debug(\"Instance %s propably is not on shared storage. \""},{"line_number":87,"context_line":"                          \"Trying to migrate using block migrate\""},{"line_number":88,"context_line":"                          % self.instance_uuid)"},{"line_number":89,"context_line":"                result \u003d nova.live_migrate_instance("}],"source_content_type":"text/x-python","patch_set":7,"id":"9aed3d3a_cb61413b","line":86,"in_reply_to":"9aed3d3a_61966840","updated":"2016-02-29 15:05:32.000000000","message":"Ok, but maybe message could be different. Maybe something like: \"Live migration of instance %(id)s failed. Trying live block migration\" or something like that.","commit_id":"b36850164992e6c585eebba44e77d4102dbe09ed"},{"author":{"_account_id":20676,"name":"daniel.pawlik","display_name":"Daniel Pawlik","email":"dpawlik@redhat.com","username":"daniel.pawlik"},"change_message_id":"411ca57013776cd6d927a11d5066ce55de42e7b3","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                                                dest_hostname\u003ddestination)"},{"line_number":84,"context_line":"        except nova_helper.nvexceptions.ClientException as e:"},{"line_number":85,"context_line":"            if e.code \u003d\u003d 400:"},{"line_number":86,"context_line":"                LOG.debug(\"Instance %s propably is not on shared storage. \""},{"line_number":87,"context_line":"                          \"Trying to migrate using block migrate\""},{"line_number":88,"context_line":"                          % self.instance_uuid)"},{"line_number":89,"context_line":"                result \u003d nova.live_migrate_instance("}],"source_content_type":"text/x-python","patch_set":7,"id":"9aed3d3a_61966840","line":86,"in_reply_to":"9aed3d3a_674ff4bd","updated":"2016-02-29 11:12:45.000000000","message":"I think, that compare error message with some text/regex will be not good idea. If instance is not on shared storage you will get only message from nova client with error 400. \nI use word \"probably\" because for example: if you want to migrate instance to host, that has not enough space, you will get message error 400.","commit_id":"b36850164992e6c585eebba44e77d4102dbe09ed"},{"author":{"_account_id":20676,"name":"daniel.pawlik","display_name":"Daniel Pawlik","email":"dpawlik@redhat.com","username":"daniel.pawlik"},"change_message_id":"ad876110db000e8a38cfe4a9b88480d7f52cfde1","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                                                dest_hostname\u003ddestination)"},{"line_number":84,"context_line":"        except nova_helper.nvexceptions.ClientException as e:"},{"line_number":85,"context_line":"            if e.code \u003d\u003d 400:"},{"line_number":86,"context_line":"                LOG.debug(\"Instance %s propably is not on shared storage. \""},{"line_number":87,"context_line":"                          \"Trying to migrate using block migrate\""},{"line_number":88,"context_line":"                          % self.instance_uuid)"},{"line_number":89,"context_line":"                result \u003d nova.live_migrate_instance("}],"source_content_type":"text/x-python","patch_set":7,"id":"9aed3d3a_d900c904","line":86,"in_reply_to":"9aed3d3a_cb61413b","updated":"2016-03-01 08:34:09.000000000","message":"Changed ;)","commit_id":"b36850164992e6c585eebba44e77d4102dbe09ed"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"455c5bda43daa4bd79ffe32754f3d0c19c94ff9f","unresolved":false,"context_lines":[{"line_number":89,"context_line":"                result \u003d nova.live_migrate_instance("},{"line_number":90,"context_line":"                    instance_id\u003dself.instance_uuid,"},{"line_number":91,"context_line":"                    dest_hostname\u003ddestination,"},{"line_number":92,"context_line":"                    block_migration\u003dTrue)"},{"line_number":93,"context_line":"            else:"},{"line_number":94,"context_line":"                LOG.debug(\"Nova client exception occured while live migrating \""},{"line_number":95,"context_line":"                          \"instance %s.Exception: %s\" %"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aed3d3a_07cf0857","line":92,"updated":"2016-02-26 12:24:59.000000000","message":"If in future it will be splitted to two different actions (live_migration and block_live_migration) then maybe better idea would be to move this code to separate method and call it from here?","commit_id":"b36850164992e6c585eebba44e77d4102dbe09ed"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"6121d8da39c5191b6c13c5976ab8aab1a9402161","unresolved":false,"context_lines":[{"line_number":89,"context_line":"                result \u003d nova.live_migrate_instance("},{"line_number":90,"context_line":"                    instance_id\u003dself.instance_uuid,"},{"line_number":91,"context_line":"                    dest_hostname\u003ddestination,"},{"line_number":92,"context_line":"                    block_migration\u003dTrue)"},{"line_number":93,"context_line":"            else:"},{"line_number":94,"context_line":"                LOG.debug(\"Nova client exception occured while live migrating \""},{"line_number":95,"context_line":"                          \"instance %s.Exception: %s\" %"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aed3d3a_6cccf435","line":92,"in_reply_to":"9aed3d3a_07cf0857","updated":"2016-02-26 13:26:29.000000000","message":"+1 on splitting this.\nFYI, in the future, we will probably still have a single migration action but it will have the \u0027block_migration\u0027 flag parametrized as exposed in blueprint action-infrastructure-parameters. Later on, this parameter will then probably accept the None value (new default?) in addition to an initial True/False whenever blueprint making-live-migration-api-friendly from Nova gets implemented so that it will compute itself the right value.","commit_id":"b36850164992e6c585eebba44e77d4102dbe09ed"},{"author":{"_account_id":20676,"name":"daniel.pawlik","display_name":"Daniel Pawlik","email":"dpawlik@redhat.com","username":"daniel.pawlik"},"change_message_id":"411ca57013776cd6d927a11d5066ce55de42e7b3","unresolved":false,"context_lines":[{"line_number":89,"context_line":"                result \u003d nova.live_migrate_instance("},{"line_number":90,"context_line":"                    instance_id\u003dself.instance_uuid,"},{"line_number":91,"context_line":"                    dest_hostname\u003ddestination,"},{"line_number":92,"context_line":"                    block_migration\u003dTrue)"},{"line_number":93,"context_line":"            else:"},{"line_number":94,"context_line":"                LOG.debug(\"Nova client exception occured while live migrating \""},{"line_number":95,"context_line":"                          \"instance %s.Exception: %s\" %"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aed3d3a_c2f817c6","line":92,"in_reply_to":"9aed3d3a_07cf0857","updated":"2016-02-29 11:12:45.000000000","message":"I don\u0027t think thats a good idea. This patch is temporary. If nova live-migration will be more user friendly, probably this method will be changed.","commit_id":"b36850164992e6c585eebba44e77d4102dbe09ed"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"87c4807b19c069d105c57c20addc93dfa65c1e64","unresolved":false,"context_lines":[{"line_number":89,"context_line":"                result \u003d nova.live_migrate_instance("},{"line_number":90,"context_line":"                    instance_id\u003dself.instance_uuid,"},{"line_number":91,"context_line":"                    dest_hostname\u003ddestination,"},{"line_number":92,"context_line":"                    block_migration\u003dTrue)"},{"line_number":93,"context_line":"            else:"},{"line_number":94,"context_line":"                LOG.debug(\"Nova client exception occured while live migrating \""},{"line_number":95,"context_line":"                          \"instance %s.Exception: %s\" %"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aed3d3a_267f2d67","line":92,"in_reply_to":"9aed3d3a_2024445e","updated":"2016-03-01 08:28:44.000000000","message":"Ok","commit_id":"b36850164992e6c585eebba44e77d4102dbe09ed"},{"author":{"_account_id":20676,"name":"daniel.pawlik","display_name":"Daniel Pawlik","email":"dpawlik@redhat.com","username":"daniel.pawlik"},"change_message_id":"b9381ef8ee057cc54c62049efad6a4547bf79c4a","unresolved":false,"context_lines":[{"line_number":89,"context_line":"                result \u003d nova.live_migrate_instance("},{"line_number":90,"context_line":"                    instance_id\u003dself.instance_uuid,"},{"line_number":91,"context_line":"                    dest_hostname\u003ddestination,"},{"line_number":92,"context_line":"                    block_migration\u003dTrue)"},{"line_number":93,"context_line":"            else:"},{"line_number":94,"context_line":"                LOG.debug(\"Nova client exception occured while live migrating \""},{"line_number":95,"context_line":"                          \"instance %s.Exception: %s\" %"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aed3d3a_2024445e","line":92,"in_reply_to":"9aed3d3a_8bfa9941","updated":"2016-02-29 16:34:31.000000000","message":"I think create separate method to run for example \"do_live_migration\" will be useless. If we create new method, we can save 4 lines of code and IMHO will be used only here, nowhere else.","commit_id":"b36850164992e6c585eebba44e77d4102dbe09ed"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"d5d40026ee2c28d286d080229240f93fde4c99a1","unresolved":false,"context_lines":[{"line_number":89,"context_line":"                result \u003d nova.live_migrate_instance("},{"line_number":90,"context_line":"                    instance_id\u003dself.instance_uuid,"},{"line_number":91,"context_line":"                    dest_hostname\u003ddestination,"},{"line_number":92,"context_line":"                    block_migration\u003dTrue)"},{"line_number":93,"context_line":"            else:"},{"line_number":94,"context_line":"                LOG.debug(\"Nova client exception occured while live migrating \""},{"line_number":95,"context_line":"                          \"instance %s.Exception: %s\" %"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aed3d3a_f6dd14e1","line":92,"in_reply_to":"9aed3d3a_c2f817c6","updated":"2016-02-29 12:58:43.000000000","message":"Not sure this method will change any time soon because that would mean that they introduce some compatibility issues. If you take a look at https://review.openstack.org/#/c/275585/6/nova/virt/libvirt/driver.py line 5494, they are only adding the None value for the block_migration flag. That being said, if you don\u0027t think splitting this is useful, we can postpone the split since this PS is temporary.","commit_id":"b36850164992e6c585eebba44e77d4102dbe09ed"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"b03b90d2521d62ddc59531c5246ccf112fbdd148","unresolved":false,"context_lines":[{"line_number":89,"context_line":"                result \u003d nova.live_migrate_instance("},{"line_number":90,"context_line":"                    instance_id\u003dself.instance_uuid,"},{"line_number":91,"context_line":"                    dest_hostname\u003ddestination,"},{"line_number":92,"context_line":"                    block_migration\u003dTrue)"},{"line_number":93,"context_line":"            else:"},{"line_number":94,"context_line":"                LOG.debug(\"Nova client exception occured while live migrating \""},{"line_number":95,"context_line":"                          \"instance %s.Exception: %s\" %"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aed3d3a_8bfa9941","line":92,"in_reply_to":"9aed3d3a_f6dd14e1","updated":"2016-02-29 15:05:32.000000000","message":"Still I think that splitting it to another method can make this code more readable and new method could be reused if it is necessary.\nBut it\u0027s only my opinion and I will no be too stubborn on that :)","commit_id":"b36850164992e6c585eebba44e77d4102dbe09ed"}],"watcher/tests/applier/actions/test_migration.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"1ef5ec03c68744981c496c9d06cb8a03ad71cafb","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        self.m_helper.live_migrate_instance.assert_called_once_with("},{"line_number":163,"context_line":"            instance_id\u003dself.INSTANCE_UUID,"},{"line_number":164,"context_line":"            dest_hostname\u003d\"hypervisor2-hostname\")"},{"line_number":165,"context_line":"        self.assertTrue(result)"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def test_revert_live_migration(self):"},{"line_number":168,"context_line":"        self.m_helper.find_instance.return_value \u003d self.INSTANCE_UUID"}],"source_content_type":"text/x-python","patch_set":5,"id":"9aed3d3a_cdf8a7e8","line":165,"updated":"2016-02-26 10:34:05.000000000","message":"See comment below","commit_id":"f7de848d503c19e82c3a9212e9ae6dd8bf395119"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"1ef5ec03c68744981c496c9d06cb8a03ad71cafb","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        self.m_helper.live_migrate_instance.side_effect \u003d ["},{"line_number":192,"context_line":"            nova_helper.nvexceptions.ClientException(400, \"BadRequest\"), True]"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        result \u003d self.action.execute()"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        self.m_helper.live_migrate_instance.assert_has_calls(["},{"line_number":197,"context_line":"            mock.call(instance_id\u003dself.INSTANCE_UUID,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9aed3d3a_6917d051","line":194,"range":{"start_line":194,"start_character":8,"end_line":194,"end_character":38},"updated":"2016-02-26 10:34:05.000000000","message":"If you look at the todo comment https://github.com/openstack/watcher/blob/master/watcher/applier/workflow_engine/default.py#L118, you can see that checking the return value of the execute() method is not the best solution here. So I would do it like this:\n\ntry:\n    self.action.execute()\nexcept Exception as exc:\n    self.fail(exc)\n# ... (other assertions)","commit_id":"f7de848d503c19e82c3a9212e9ae6dd8bf395119"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"1ef5ec03c68744981c496c9d06cb8a03ad71cafb","unresolved":false,"context_lines":[{"line_number":209,"context_line":"                    ]"},{"line_number":210,"context_line":"        self.m_helper.live_migrate_instance.mock_calls \u003d\u003d expected"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        self.assertTrue(result)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9aed3d3a_ed576b00","line":212,"updated":"2016-02-26 10:34:05.000000000","message":"See previous comment","commit_id":"f7de848d503c19e82c3a9212e9ae6dd8bf395119"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"455c5bda43daa4bd79ffe32754f3d0c19c94ff9f","unresolved":false,"context_lines":[{"line_number":187,"context_line":"            self.action.execute()"},{"line_number":188,"context_line":"        except Exception as exc:"},{"line_number":189,"context_line":"            self.fail(exc)"},{"line_number":190,"context_line":"        self.m_helper.live_migrate_instance.call_count \u003d\u003d 2"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    def test_live_migrate_non_shared_storage_instance(self):"},{"line_number":193,"context_line":"        self.m_helper.find_instance.return_value \u003d self.INSTANCE_UUID"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aed3d3a_072388be","line":190,"updated":"2016-02-26 12:24:59.000000000","message":"it should probably be something like:\n\nself.assertEqual(2, self.m_helper.live_migrate_instance.call_count)","commit_id":"b36850164992e6c585eebba44e77d4102dbe09ed"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"455c5bda43daa4bd79ffe32754f3d0c19c94ff9f","unresolved":false,"context_lines":[{"line_number":189,"context_line":"            self.fail(exc)"},{"line_number":190,"context_line":"        self.m_helper.live_migrate_instance.call_count \u003d\u003d 2"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    def test_live_migrate_non_shared_storage_instance(self):"},{"line_number":193,"context_line":"        self.m_helper.find_instance.return_value \u003d self.INSTANCE_UUID"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        self.m_helper.live_migrate_instance.side_effect \u003d ["}],"source_content_type":"text/x-python","patch_set":7,"id":"9aed3d3a_0249b631","line":192,"updated":"2016-02-26 12:24:59.000000000","message":"Why You create two tests? Can\u0027t it be tested in one test?","commit_id":"b36850164992e6c585eebba44e77d4102dbe09ed"}]}
