)]}'
{"nova/exception.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"46c4b7c15a599ac66160539276e63923ff57b3b3","unresolved":false,"context_lines":[{"line_number":1247,"context_line":""},{"line_number":1248,"context_line":""},{"line_number":1249,"context_line":"class MaintenanceModeException(NovaException):"},{"line_number":1250,"context_line":"    msg_fmt \u003d _(\"%(reason)s\")"},{"line_number":1251,"context_line":""},{"line_number":1252,"context_line":""},{"line_number":1253,"context_line":"class NoValidHost(NovaException):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_011801d2","line":1250,"updated":"2015-07-28 15:42:39.000000000","message":"You could add more details here, like:\n\n    msg_fmt \u003d _(\"Setting the host into the maintenance mode failed. %(reason)s\")","commit_id":"be3dae44b587c207409924afa6a60b837433564e"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"356fd82df7bcf0d05bfdc3e0a97911738cb0f336","unresolved":false,"context_lines":[{"line_number":1247,"context_line":""},{"line_number":1248,"context_line":""},{"line_number":1249,"context_line":"class MaintenanceModeException(NovaException):"},{"line_number":1250,"context_line":"    msg_fmt \u003d _(\"%(reason)s\")"},{"line_number":1251,"context_line":""},{"line_number":1252,"context_line":""},{"line_number":1253,"context_line":"class NoValidHost(NovaException):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_db177aa1","line":1250,"in_reply_to":"3a50d1a3_011801d2","updated":"2015-08-04 19:40:02.000000000","message":"Done","commit_id":"be3dae44b587c207409924afa6a60b837433564e"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"7ec6749a46b923824f9591b69b55b9a68265d2ab","unresolved":false,"context_lines":[{"line_number":1246,"context_line":"    msg_fmt \u003d _(\"Insufficient free memory on compute node to start %(uuid)s.\")"},{"line_number":1247,"context_line":""},{"line_number":1248,"context_line":""},{"line_number":1249,"context_line":"class MaintenanceModeException(NovaException):"},{"line_number":1250,"context_line":"    msg_fmt \u003d _(\"Setting the host into maintenance mode failed. %(reason)s\")"},{"line_number":1251,"context_line":""},{"line_number":1252,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_cab89be8","line":1249,"updated":"2015-08-03 14:59:24.000000000","message":"could you add this exception to doc for nova.virt.driver.host_maintenance_mode method description?","commit_id":"22214b54451295cd483bbeaf435eec9a547d9e96"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"d7032815016e79666b4c9d209219c738995c3106","unresolved":false,"context_lines":[{"line_number":1246,"context_line":"    msg_fmt \u003d _(\"Insufficient free memory on compute node to start %(uuid)s.\")"},{"line_number":1247,"context_line":""},{"line_number":1248,"context_line":""},{"line_number":1249,"context_line":"class MaintenanceModeException(NovaException):"},{"line_number":1250,"context_line":"    msg_fmt \u003d _(\"Setting the host into maintenance mode failed. %(reason)s\")"},{"line_number":1251,"context_line":""},{"line_number":1252,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_cb037841","line":1249,"in_reply_to":"1a4dcd0f_cab89be8","updated":"2015-08-04 19:40:45.000000000","message":"Done","commit_id":"22214b54451295cd483bbeaf435eec9a547d9e96"}],"nova/tests/unit/virt/hyperv/test_hostops.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"46c4b7c15a599ac66160539276e63923ff57b3b3","unresolved":false,"context_lines":[{"line_number":193,"context_line":"    @mock.patch.object(hostops.HostOps, \u0027_set_service_state\u0027)"},{"line_number":194,"context_line":"    @mock.patch.object(nova_context, \u0027get_admin_context\u0027)"},{"line_number":195,"context_line":"    def _test_host_maintenance_mode(self, mock_get_admin_context,"},{"line_number":196,"context_line":"                                    mock_set_service_status, mock_get_by_uuid,"},{"line_number":197,"context_line":"                                    mock_sleep,"},{"line_number":198,"context_line":"                                    vm_counter):"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_e2a15495","line":196,"updated":"2015-07-28 15:42:39.000000000","message":"mock_set_service_state?","commit_id":"be3dae44b587c207409924afa6a60b837433564e"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"356fd82df7bcf0d05bfdc3e0a97911738cb0f336","unresolved":false,"context_lines":[{"line_number":193,"context_line":"    @mock.patch.object(hostops.HostOps, \u0027_set_service_state\u0027)"},{"line_number":194,"context_line":"    @mock.patch.object(nova_context, \u0027get_admin_context\u0027)"},{"line_number":195,"context_line":"    def _test_host_maintenance_mode(self, mock_get_admin_context,"},{"line_number":196,"context_line":"                                    mock_set_service_status, mock_get_by_uuid,"},{"line_number":197,"context_line":"                                    mock_sleep,"},{"line_number":198,"context_line":"                                    vm_counter):"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_7eef341d","line":196,"in_reply_to":"3a50d1a3_e2a15495","updated":"2015-08-04 19:40:02.000000000","message":"Done","commit_id":"be3dae44b587c207409924afa6a60b837433564e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"46c4b7c15a599ac66160539276e63923ff57b3b3","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        else:"},{"line_number":213,"context_line":"            self.assertRaises(exception.MaintenanceModeException,"},{"line_number":214,"context_line":"            self._hostops.host_maintenance_mode, host\u003dmock.sentinel.HOST,"},{"line_number":215,"context_line":"                mode\u003dTrue)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        self._hostops._vmutils.get_instance_uuid.assert_called_once_with("},{"line_number":218,"context_line":"            mock.sentinel.VM_NAME)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_e1639518","line":215,"updated":"2015-07-28 15:42:39.000000000","message":"identation doesn\u0027t really match properly here. You could do something like this:\n\n    self.assertRaises(exception.MaintenanceModeException,\n                      self._hostops.host_maintenance_mode,\n                      host\u003dmock.sentinel.HOST, mode\u003dTrue)","commit_id":"be3dae44b587c207409924afa6a60b837433564e"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"356fd82df7bcf0d05bfdc3e0a97911738cb0f336","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        else:"},{"line_number":213,"context_line":"            self.assertRaises(exception.MaintenanceModeException,"},{"line_number":214,"context_line":"            self._hostops.host_maintenance_mode, host\u003dmock.sentinel.HOST,"},{"line_number":215,"context_line":"                mode\u003dTrue)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        self._hostops._vmutils.get_instance_uuid.assert_called_once_with("},{"line_number":218,"context_line":"            mock.sentinel.VM_NAME)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_feba640a","line":215,"in_reply_to":"3a50d1a3_e1639518","updated":"2015-08-04 19:40:02.000000000","message":"Done","commit_id":"be3dae44b587c207409924afa6a60b837433564e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"4f6290d7718c18c7c83b07d9edcc0972b0778c8e","unresolved":false,"context_lines":[{"line_number":195,"context_line":"                                    vm_counter):"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        context \u003d mock_get_admin_context.return_value"},{"line_number":198,"context_line":"        self._hostops._migrate_vm \u003d mock.MagicMock()"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        self._hostops._vmutils.list_instances.return_value \u003d ["},{"line_number":201,"context_line":"            mock.sentinel.VM_NAME]"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_fea7a208","line":198,"updated":"2015-08-06 14:02:06.000000000","message":"mock it the same way you mock _set_service_state","commit_id":"538c72f6436bfa01f0ab33ab920d00ed2eb26672"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"4f6290d7718c18c7c83b07d9edcc0972b0778c8e","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        mock_set_service_state.assert_called_once_with("},{"line_number":215,"context_line":"            host\u003dmock.sentinel.HOST, binary\u003d\u0027nova-compute\u0027, is_disabled\u003dTrue)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        self._hostops._migrate_vm.assert_called_once_with(context,"},{"line_number":218,"context_line":"            mock.sentinel.VM_NAME, mock.sentinel.HOST)"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    @mock.patch.object(hostops.HostOps, \u0027_set_service_state\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_a30ee738","line":217,"updated":"2015-08-06 14:02:06.000000000","message":"put context on the next line, with the rest of the arguments.","commit_id":"538c72f6436bfa01f0ab33ab920d00ed2eb26672"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"4f6290d7718c18c7c83b07d9edcc0972b0778c8e","unresolved":false,"context_lines":[{"line_number":241,"context_line":"        instance \u003d mock_get_by_uuid.return_value"},{"line_number":242,"context_line":"        type(instance).task_state \u003d mock.PropertyMock("},{"line_number":243,"context_line":"            side_effect\u003d[\u0027MIGRATING\u0027, \u0027ACTIVE\u0027])"},{"line_number":244,"context_line":"        result \u003d self._hostops._migrate_vm(ctxt\u003dmock.sentinel.CONTEXT,"},{"line_number":245,"context_line":"                                           vm_name\u003dmock.sentinel.VM_NAME,"},{"line_number":246,"context_line":"                                           host\u003dmock.sentinel.HOST)"},{"line_number":247,"context_line":"        if instance_uuid is None:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_433843ef","line":244,"updated":"2015-08-06 14:02:06.000000000","message":"no need for result, since there is no result.","commit_id":"538c72f6436bfa01f0ab33ab920d00ed2eb26672"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"4f6290d7718c18c7c83b07d9edcc0972b0778c8e","unresolved":false,"context_lines":[{"line_number":245,"context_line":"                                           vm_name\u003dmock.sentinel.VM_NAME,"},{"line_number":246,"context_line":"                                           host\u003dmock.sentinel.HOST)"},{"line_number":247,"context_line":"        if instance_uuid is None:"},{"line_number":248,"context_line":"            self.assertIsNone(result)"},{"line_number":249,"context_line":"        else:"},{"line_number":250,"context_line":"            self._hostops._api.live_migrate.assert_called_once_with("},{"line_number":251,"context_line":"                mock.sentinel.CONTEXT, instance, block_migration\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_837c0bb6","line":248,"updated":"2015-08-06 14:02:06.000000000","message":"None is \"returned\" in all the code branches. I think what you want to assert is this:\n\n    self.assertFalse(self._hostops._api.live_migrate.called)","commit_id":"538c72f6436bfa01f0ab33ab920d00ed2eb26672"}],"nova/virt/hyperv/hostops.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"46c4b7c15a599ac66160539276e63923ff57b3b3","unresolved":false,"context_lines":[{"line_number":197,"context_line":"                   str(datetime.timedelta(milliseconds\u003dlong(tick_count64))))"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def host_maintenance_mode(self, host, mode):"},{"line_number":200,"context_line":"        \"\"\"Start/Stop host maintenance window. On start, it triggers"},{"line_number":201,"context_line":"        guest VMs evacuation."},{"line_number":202,"context_line":"        \"\"\""},{"line_number":203,"context_line":"        ctxt \u003d context.get_admin_context(read_deleted\u003d\"no\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_3cfd22b1","line":200,"updated":"2015-07-28 15:42:39.000000000","message":"How about: \"Starts / Stops host maintenance. On start....\"","commit_id":"be3dae44b587c207409924afa6a60b837433564e"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"356fd82df7bcf0d05bfdc3e0a97911738cb0f336","unresolved":false,"context_lines":[{"line_number":197,"context_line":"                   str(datetime.timedelta(milliseconds\u003dlong(tick_count64))))"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def host_maintenance_mode(self, host, mode):"},{"line_number":200,"context_line":"        \"\"\"Start/Stop host maintenance window. On start, it triggers"},{"line_number":201,"context_line":"        guest VMs evacuation."},{"line_number":202,"context_line":"        \"\"\""},{"line_number":203,"context_line":"        ctxt \u003d context.get_admin_context(read_deleted\u003d\"no\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_140e618c","line":200,"in_reply_to":"3a50d1a3_3cfd22b1","updated":"2015-08-04 19:40:02.000000000","message":"Done","commit_id":"be3dae44b587c207409924afa6a60b837433564e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"46c4b7c15a599ac66160539276e63923ff57b3b3","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                                    inactive\u003dFalse)"},{"line_number":208,"context_line":"            LOG.info(_LI(\u0027Host is off maintenance\u0027))"},{"line_number":209,"context_line":"            return \u0027off_maintenance\u0027"},{"line_number":210,"context_line":"        if mode:"},{"line_number":211,"context_line":"            self._set_service_state(host\u003dhost, binary\u003d\u0027nova-compute\u0027,"},{"line_number":212,"context_line":"                                    inactive\u003dTrue)"},{"line_number":213,"context_line":"            vms \u003d self._vmutils.list_instances()"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_bce852b4","line":210,"updated":"2015-07-28 15:42:39.000000000","message":"well, having ``if mode`` is pointless, since you already check ``if not mode`` above and have a return in that code block. Meaning that checking ``if mode:`` doesn\u0027t really help with anything. You can just remove it and unindent everything in the block once. It will also look better. :)","commit_id":"be3dae44b587c207409924afa6a60b837433564e"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"356fd82df7bcf0d05bfdc3e0a97911738cb0f336","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                                    inactive\u003dFalse)"},{"line_number":208,"context_line":"            LOG.info(_LI(\u0027Host is off maintenance\u0027))"},{"line_number":209,"context_line":"            return \u0027off_maintenance\u0027"},{"line_number":210,"context_line":"        if mode:"},{"line_number":211,"context_line":"            self._set_service_state(host\u003dhost, binary\u003d\u0027nova-compute\u0027,"},{"line_number":212,"context_line":"                                    inactive\u003dTrue)"},{"line_number":213,"context_line":"            vms \u003d self._vmutils.list_instances()"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_f48175c4","line":210,"in_reply_to":"3a50d1a3_bce852b4","updated":"2015-08-04 19:40:02.000000000","message":"Done","commit_id":"be3dae44b587c207409924afa6a60b837433564e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"46c4b7c15a599ac66160539276e63923ff57b3b3","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        if mode:"},{"line_number":211,"context_line":"            self._set_service_state(host\u003dhost, binary\u003d\u0027nova-compute\u0027,"},{"line_number":212,"context_line":"                                    inactive\u003dTrue)"},{"line_number":213,"context_line":"            vms \u003d self._vmutils.list_instances()"},{"line_number":214,"context_line":"            for vm in vms:"},{"line_number":215,"context_line":"                try:"},{"line_number":216,"context_line":"                    instance_uuid \u003d self._vmutils.get_instance_uuid(vm)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_220bbc25","line":213,"updated":"2015-07-28 15:42:39.000000000","message":"I think a better name would be vm_names, so it is clear they are just VM names, and not VMs.","commit_id":"be3dae44b587c207409924afa6a60b837433564e"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"356fd82df7bcf0d05bfdc3e0a97911738cb0f336","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        if mode:"},{"line_number":211,"context_line":"            self._set_service_state(host\u003dhost, binary\u003d\u0027nova-compute\u0027,"},{"line_number":212,"context_line":"                                    inactive\u003dTrue)"},{"line_number":213,"context_line":"            vms \u003d self._vmutils.list_instances()"},{"line_number":214,"context_line":"            for vm in vms:"},{"line_number":215,"context_line":"                try:"},{"line_number":216,"context_line":"                    instance_uuid \u003d self._vmutils.get_instance_uuid(vm)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_f49df50a","line":213,"in_reply_to":"3a50d1a3_220bbc25","updated":"2015-08-04 19:40:02.000000000","message":"Done","commit_id":"be3dae44b587c207409924afa6a60b837433564e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"46c4b7c15a599ac66160539276e63923ff57b3b3","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            self._set_service_state(host\u003dhost, binary\u003d\u0027nova-compute\u0027,"},{"line_number":212,"context_line":"                                    inactive\u003dTrue)"},{"line_number":213,"context_line":"            vms \u003d self._vmutils.list_instances()"},{"line_number":214,"context_line":"            for vm in vms:"},{"line_number":215,"context_line":"                try:"},{"line_number":216,"context_line":"                    instance_uuid \u003d self._vmutils.get_instance_uuid(vm)"},{"line_number":217,"context_line":"                    if not instance_uuid:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_4227e8b5","line":214,"updated":"2015-07-28 15:42:39.000000000","message":"vm_name, same reason.","commit_id":"be3dae44b587c207409924afa6a60b837433564e"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"356fd82df7bcf0d05bfdc3e0a97911738cb0f336","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            self._set_service_state(host\u003dhost, binary\u003d\u0027nova-compute\u0027,"},{"line_number":212,"context_line":"                                    inactive\u003dTrue)"},{"line_number":213,"context_line":"            vms \u003d self._vmutils.list_instances()"},{"line_number":214,"context_line":"            for vm in vms:"},{"line_number":215,"context_line":"                try:"},{"line_number":216,"context_line":"                    instance_uuid \u003d self._vmutils.get_instance_uuid(vm)"},{"line_number":217,"context_line":"                    if not instance_uuid:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_d48319a8","line":214,"in_reply_to":"3a50d1a3_4227e8b5","updated":"2015-08-04 19:40:02.000000000","message":"Done","commit_id":"be3dae44b587c207409924afa6a60b837433564e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"46c4b7c15a599ac66160539276e63923ff57b3b3","unresolved":false,"context_lines":[{"line_number":226,"context_line":"                                           block_migration\u003dTrue,"},{"line_number":227,"context_line":"                                           disk_over_commit\u003dFalse,"},{"line_number":228,"context_line":"                                           host_name\u003dNone)"},{"line_number":229,"context_line":"                    LOG.info(_LI(\u0027VM %(name)s is being migrated\u0027),"},{"line_number":230,"context_line":"                             {\u0027name\u0027: vm})"},{"line_number":231,"context_line":"                    while True:"},{"line_number":232,"context_line":"                        instance \u003d objects.Instance.get_by_uuid(ctxt,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_3c71a20c","line":229,"updated":"2015-07-28 15:42:39.000000000","message":"I think it\u0027s worth noting that live migration is being performed, just to be clear it is not a cold migration.","commit_id":"be3dae44b587c207409924afa6a60b837433564e"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"356fd82df7bcf0d05bfdc3e0a97911738cb0f336","unresolved":false,"context_lines":[{"line_number":226,"context_line":"                                           block_migration\u003dTrue,"},{"line_number":227,"context_line":"                                           disk_over_commit\u003dFalse,"},{"line_number":228,"context_line":"                                           host_name\u003dNone)"},{"line_number":229,"context_line":"                    LOG.info(_LI(\u0027VM %(name)s is being migrated\u0027),"},{"line_number":230,"context_line":"                             {\u0027name\u0027: vm})"},{"line_number":231,"context_line":"                    while True:"},{"line_number":232,"context_line":"                        instance \u003d objects.Instance.get_by_uuid(ctxt,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_1efdd0b0","line":229,"in_reply_to":"3a50d1a3_3c71a20c","updated":"2015-08-04 19:40:02.000000000","message":"Done","commit_id":"be3dae44b587c207409924afa6a60b837433564e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"46c4b7c15a599ac66160539276e63923ff57b3b3","unresolved":false,"context_lines":[{"line_number":236,"context_line":"                            continue"},{"line_number":237,"context_line":"                        break"},{"line_number":238,"context_line":"                except Exception:"},{"line_number":239,"context_line":"                    LOG.exception(_LE(\u0027Unable to migrate %(vm)s\u0027), {\u0027vm\u0027: vm})"},{"line_number":240,"context_line":"                    instance.host \u003d host"},{"line_number":241,"context_line":"                    instance.vm_state \u003d vm_states.ACTIVE"},{"line_number":242,"context_line":"                    instance.save()"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_02232059","line":239,"updated":"2015-07-28 15:42:39.000000000","message":"It could be useful to also log the exception message.","commit_id":"be3dae44b587c207409924afa6a60b837433564e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"46c4b7c15a599ac66160539276e63923ff57b3b3","unresolved":false,"context_lines":[{"line_number":239,"context_line":"                    LOG.exception(_LE(\u0027Unable to migrate %(vm)s\u0027), {\u0027vm\u0027: vm})"},{"line_number":240,"context_line":"                    instance.host \u003d host"},{"line_number":241,"context_line":"                    instance.vm_state \u003d vm_states.ACTIVE"},{"line_number":242,"context_line":"                    instance.save()"},{"line_number":243,"context_line":"            vms_uuid_after_migration \u003d self._vmops.list_instance_uuids()"},{"line_number":244,"context_line":"            remaining_vms \u003d len(vms_uuid_after_migration)"},{"line_number":245,"context_line":"        if remaining_vms \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_620b04d7","line":242,"updated":"2015-07-28 15:42:39.000000000","message":"I would kind of like to have this section of the code a separate method (the block inside the for-loop). You could add a method like:\n\n    def _migrate_and_check_vm(self, ctxt, vm_name):\n        try:\n            ...\n        except Exception:\n            ...","commit_id":"be3dae44b587c207409924afa6a60b837433564e"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"356fd82df7bcf0d05bfdc3e0a97911738cb0f336","unresolved":false,"context_lines":[{"line_number":239,"context_line":"                    LOG.exception(_LE(\u0027Unable to migrate %(vm)s\u0027), {\u0027vm\u0027: vm})"},{"line_number":240,"context_line":"                    instance.host \u003d host"},{"line_number":241,"context_line":"                    instance.vm_state \u003d vm_states.ACTIVE"},{"line_number":242,"context_line":"                    instance.save()"},{"line_number":243,"context_line":"            vms_uuid_after_migration \u003d self._vmops.list_instance_uuids()"},{"line_number":244,"context_line":"            remaining_vms \u003d len(vms_uuid_after_migration)"},{"line_number":245,"context_line":"        if remaining_vms \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_de31a8a3","line":242,"in_reply_to":"3a50d1a3_620b04d7","updated":"2015-08-04 19:40:02.000000000","message":"Done","commit_id":"be3dae44b587c207409924afa6a60b837433564e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"46c4b7c15a599ac66160539276e63923ff57b3b3","unresolved":false,"context_lines":[{"line_number":250,"context_line":"            raise exception.MaintenanceModeException(reason\u003d\u0027Not all vms have \u0027"},{"line_number":251,"context_line":"                \u0027been migrated: %s remaining instances\u0027 % remaining_vms)"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    def _set_service_state(self, host, binary, inactive):"},{"line_number":254,"context_line":"        \"Enable/Disable service on host\""},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"        ctxt \u003d context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_fc3c9a94","line":253,"updated":"2015-07-28 15:42:39.000000000","message":"the argument ``inactive`` has a confusing name. Basically, it is meant to enable / disable the service, and having the name ``inactive`` implies that it is only for disabling. How about naming it.. is_disabled? Or something similar? Since it is a boolean argument.","commit_id":"be3dae44b587c207409924afa6a60b837433564e"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"356fd82df7bcf0d05bfdc3e0a97911738cb0f336","unresolved":false,"context_lines":[{"line_number":250,"context_line":"            raise exception.MaintenanceModeException(reason\u003d\u0027Not all vms have \u0027"},{"line_number":251,"context_line":"                \u0027been migrated: %s remaining instances\u0027 % remaining_vms)"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    def _set_service_state(self, host, binary, inactive):"},{"line_number":254,"context_line":"        \"Enable/Disable service on host\""},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"        ctxt \u003d context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_7e22d455","line":253,"in_reply_to":"3a50d1a3_fc3c9a94","updated":"2015-08-04 19:40:02.000000000","message":"Done","commit_id":"be3dae44b587c207409924afa6a60b837433564e"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"7ec6749a46b923824f9591b69b55b9a68265d2ab","unresolved":false,"context_lines":[{"line_number":246,"context_line":"            while True:"},{"line_number":247,"context_line":"                instance \u003d objects.Instance.get_by_uuid(ctxt,"},{"line_number":248,"context_line":"                                                        instance_uuid)"},{"line_number":249,"context_line":"                if instance.task_state \u003d\u003d task_states.MIGRATING:"},{"line_number":250,"context_line":"                    time.sleep(1)"},{"line_number":251,"context_line":"                    continue"},{"line_number":252,"context_line":"                break"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_6af947c8","line":249,"updated":"2015-08-03 14:59:24.000000000","message":"is it possible to live-migrate instances from host simultaneously?","commit_id":"22214b54451295cd483bbeaf435eec9a547d9e96"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"d7032815016e79666b4c9d209219c738995c3106","unresolved":false,"context_lines":[{"line_number":246,"context_line":"            while True:"},{"line_number":247,"context_line":"                instance \u003d objects.Instance.get_by_uuid(ctxt,"},{"line_number":248,"context_line":"                                                        instance_uuid)"},{"line_number":249,"context_line":"                if instance.task_state \u003d\u003d task_states.MIGRATING:"},{"line_number":250,"context_line":"                    time.sleep(1)"},{"line_number":251,"context_line":"                    continue"},{"line_number":252,"context_line":"                break"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_ab02ac09","line":249,"in_reply_to":"1a4dcd0f_6af947c8","updated":"2015-08-04 19:40:45.000000000","message":"It is possible, but you are restricted to the number of simultaneous live-migrations allowed by the hyper-v on the node.","commit_id":"22214b54451295cd483bbeaf435eec9a547d9e96"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"ee4647dbb3eb829716ba07eaf227b102dc73e5d1","unresolved":false,"context_lines":[{"line_number":246,"context_line":"            while True:"},{"line_number":247,"context_line":"                instance \u003d objects.Instance.get_by_uuid(ctxt,"},{"line_number":248,"context_line":"                                                        instance_uuid)"},{"line_number":249,"context_line":"                if instance.task_state \u003d\u003d task_states.MIGRATING:"},{"line_number":250,"context_line":"                    time.sleep(1)"},{"line_number":251,"context_line":"                    continue"},{"line_number":252,"context_line":"                break"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_44dc2d12","line":249,"in_reply_to":"1a4dcd0f_ab02ac09","updated":"2015-08-04 21:34:38.000000000","message":"Anyway it would be better. if you got lot of instances on node it could be really slow to implement it this way. You could also add amount of parallel l-m in config to hyper-v - it will allign nova and underlying hypervisor confuration","commit_id":"22214b54451295cd483bbeaf435eec9a547d9e96"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"4f6290d7718c18c7c83b07d9edcc0972b0778c8e","unresolved":false,"context_lines":[{"line_number":209,"context_line":"            return \u0027off_maintenance\u0027"},{"line_number":210,"context_line":"        self._set_service_state(host\u003dhost, binary\u003d\u0027nova-compute\u0027,"},{"line_number":211,"context_line":"                                is_disabled\u003dTrue)"},{"line_number":212,"context_line":"        vm_names \u003d self._vmutils.list_instances()"},{"line_number":213,"context_line":"        for vm_name in vm_names:"},{"line_number":214,"context_line":"            self._migrate_vm(ctxt, vm_name, host)"},{"line_number":215,"context_line":"        vms_uuid_after_migration \u003d self._vmops.list_instance_uuids()"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_e354effe","line":212,"updated":"2015-08-06 14:02:06.000000000","message":"I\u0027m wondering if list_instances() will return non-nova VMs as well. Trying to migrate them will result in errors and they should be skipped, IMO.","commit_id":"538c72f6436bfa01f0ab33ab920d00ed2eb26672"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"4f6290d7718c18c7c83b07d9edcc0972b0778c8e","unresolved":false,"context_lines":[{"line_number":211,"context_line":"                                is_disabled\u003dTrue)"},{"line_number":212,"context_line":"        vm_names \u003d self._vmutils.list_instances()"},{"line_number":213,"context_line":"        for vm_name in vm_names:"},{"line_number":214,"context_line":"            self._migrate_vm(ctxt, vm_name, host)"},{"line_number":215,"context_line":"        vms_uuid_after_migration \u003d self._vmops.list_instance_uuids()"},{"line_number":216,"context_line":"        remaining_vms \u003d len(vms_uuid_after_migration)"},{"line_number":217,"context_line":"        if remaining_vms \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_8372cb0f","line":214,"updated":"2015-08-06 14:02:06.000000000","message":"_migrate_vm raises an exception.MigrationException that is unhandled.","commit_id":"538c72f6436bfa01f0ab33ab920d00ed2eb26672"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"4f6290d7718c18c7c83b07d9edcc0972b0778c8e","unresolved":false,"context_lines":[{"line_number":237,"context_line":"                LOG.info(_LI(\u0027Instance %(name)s running on %(host)s \u0027"},{"line_number":238,"context_line":"                             \u0027could not be found in database. Skip \u0027"},{"line_number":239,"context_line":"                             \u0027migrating this vm to a new host\u0027),"},{"line_number":240,"context_line":"                             {\u0027name\u0027: vm_name, \u0027host\u0027: host})"},{"line_number":241,"context_line":"                return"},{"line_number":242,"context_line":"            instance \u003d objects.Instance.get_by_uuid(ctxt,"},{"line_number":243,"context_line":"                                                    instance_uuid)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_201acd7d","line":240,"updated":"2015-08-06 14:02:06.000000000","message":"overindented, it should match _LI","commit_id":"538c72f6436bfa01f0ab33ab920d00ed2eb26672"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"4f6290d7718c18c7c83b07d9edcc0972b0778c8e","unresolved":false,"context_lines":[{"line_number":253,"context_line":"            LOG.info(_LI(\u0027VM %(name)s has been migrated\u0027), {\u0027name\u0027: vm_name})"},{"line_number":254,"context_line":"        except Exception:"},{"line_number":255,"context_line":"            raise exception.MigrationError(reason\u003d\u0027Unable to migrate %s.\u0027"},{"line_number":256,"context_line":"                                                  % vm_name)"},{"line_number":257,"context_line":"            instance.host \u003d host"},{"line_number":258,"context_line":"            instance.vm_state \u003d vm_states.ACTIVE"},{"line_number":259,"context_line":"            instance.save()"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_a027bdc8","line":256,"updated":"2015-08-06 14:02:06.000000000","message":"overindented. It should match the same indentation as reason.","commit_id":"538c72f6436bfa01f0ab33ab920d00ed2eb26672"}]}
