)]}'
{"nova/virt/hyperv/driver.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"30a1aa377b95e6b23932a0d3051eaa2e647ad0f6","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def init_host(self, host):"},{"line_number":51,"context_line":"        self._vmops.restart_vm_log_writers()"},{"line_number":52,"context_line":"        event_handler \u003d eventhandler.InstanceEventHandler("},{"line_number":53,"context_line":"            state_change_callback\u003dself.emit_event,"},{"line_number":54,"context_line":"            running_state_callback\u003dself._vmops.log_vm_serial_output)"},{"line_number":55,"context_line":"        event_handler.start_listener()"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a016987_7ae52507","line":52,"updated":"2015-05-29 10:32:26.000000000","message":"suggestion: Could be interesting to have it has member of the class. Currently you do not have public method to stop the handler or to add new events but in the future.","commit_id":"345f34b6255f1aa4624bbbb27e952c6df058bd49"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"3e1ec387ebf055c1aca28461360fe641fc05486c","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def init_host(self, host):"},{"line_number":51,"context_line":"        self._vmops.restart_vm_log_writers()"},{"line_number":52,"context_line":"        event_handler \u003d eventhandler.InstanceEventHandler("},{"line_number":53,"context_line":"            state_change_callback\u003dself.emit_event,"},{"line_number":54,"context_line":"            running_state_callback\u003dself._vmops.log_vm_serial_output)"},{"line_number":55,"context_line":"        event_handler.start_listener()"}],"source_content_type":"text/x-python","patch_set":10,"id":"5afe65bd_c4a805de","line":52,"in_reply_to":"7a016987_7ae52507","updated":"2015-06-03 11:39:43.000000000","message":"That could easily be added later if we ever want to stop the event handler, but I don\u0027t see why we would need to do that.","commit_id":"345f34b6255f1aa4624bbbb27e952c6df058bd49"}],"nova/virt/hyperv/eventhandler.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b7d70ad4ec802ed360bbdae0afa12235d4a28f71","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    cfg.IntOpt(\u0027event_check_interval\u0027,"},{"line_number":36,"context_line":"                default\u003d60,"},{"line_number":37,"context_line":"                help\u003d\u0027The time interval to be checked for instance power \u0027"},{"line_number":38,"context_line":"                     \u0027state changes.\u0027),"},{"line_number":39,"context_line":"    cfg.IntOpt(\u0027polling_interval\u0027,"},{"line_number":40,"context_line":"                default\u003d2,"},{"line_number":41,"context_line":"                help\u003d\u0027Instance power state polling frequency.\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"3acd31a7_0e60bf34","line":38,"updated":"2015-04-29 17:21:52.000000000","message":"Is there a reason to have two interval configuration options? I guess I don\u0027t see a reason to do separate polling intervals... could you explain the thinking on that?\n\nSpecifically, you are creating a watch_for() listener, with a delay of 60 seconds, and then in _poll_events(), you are checking to see what changed within 2 seconds. It doesn\u0027t make sense to me.","commit_id":"cae7efb40c167606dd09e86ea81291f62a9e7bf3"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"1b8986d83f50089233f6c372ad25797aa8e04386","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    cfg.IntOpt(\u0027event_check_interval\u0027,"},{"line_number":36,"context_line":"                default\u003d60,"},{"line_number":37,"context_line":"                help\u003d\u0027The time interval to be checked for instance power \u0027"},{"line_number":38,"context_line":"                     \u0027state changes.\u0027),"},{"line_number":39,"context_line":"    cfg.IntOpt(\u0027polling_interval\u0027,"},{"line_number":40,"context_line":"                default\u003d2,"},{"line_number":41,"context_line":"                help\u003d\u0027Instance power state polling frequency.\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"3acd31a7_07f6448f","line":38,"in_reply_to":"3acd31a7_0e60bf34","updated":"2015-04-30 10:13:04.000000000","message":"Actually, it waits at least 2 seconds before checking for events that occurred in the last 60 seconds. The delay mentioned in the watch_for method just specifies the timeframe checked for events, but that returns immediately to avoid blocking the thread.\n\nThe reason I put it this way is that it\u0027s not known how long the greenthread actually sleeps, it might take more if there\u0027s something blocking. This way, we may prevent the situation when there are unhandled instance power change events.","commit_id":"cae7efb40c167606dd09e86ea81291f62a9e7bf3"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b7d70ad4ec802ed360bbdae0afa12235d4a28f71","unresolved":false,"context_lines":[{"line_number":36,"context_line":"                default\u003d60,"},{"line_number":37,"context_line":"                help\u003d\u0027The time interval to be checked for instance power \u0027"},{"line_number":38,"context_line":"                     \u0027state changes.\u0027),"},{"line_number":39,"context_line":"    cfg.IntOpt(\u0027polling_interval\u0027,"},{"line_number":40,"context_line":"                default\u003d2,"},{"line_number":41,"context_line":"                help\u003d\u0027Instance power state polling frequency.\u0027),"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3acd31a7_cefd2770","line":39,"updated":"2015-04-29 17:21:52.000000000","message":"This configuration name seems quite generic. How about power_state_polling_interval instead? Otherwise, if you decide to add some other polling interval in the future, you will have some issues :)","commit_id":"cae7efb40c167606dd09e86ea81291f62a9e7bf3"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"1b8986d83f50089233f6c372ad25797aa8e04386","unresolved":false,"context_lines":[{"line_number":36,"context_line":"                default\u003d60,"},{"line_number":37,"context_line":"                help\u003d\u0027The time interval to be checked for instance power \u0027"},{"line_number":38,"context_line":"                     \u0027state changes.\u0027),"},{"line_number":39,"context_line":"    cfg.IntOpt(\u0027polling_interval\u0027,"},{"line_number":40,"context_line":"                default\u003d2,"},{"line_number":41,"context_line":"                help\u003d\u0027Instance power state polling frequency.\u0027),"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3acd31a7_073d242b","line":39,"in_reply_to":"3acd31a7_cefd2770","updated":"2015-04-30 10:13:04.000000000","message":"I agree, I\u0027ll change this.","commit_id":"cae7efb40c167606dd09e86ea81291f62a9e7bf3"},{"author":{"_account_id":642,"name":"Matt Dietz","email":"matthew.dietz@gmail.com","username":"cerberus"},"change_message_id":"9e7ea9a59febff7d9c416d60eaef87855772ac03","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                event \u003d self._listener(self._WAIT_TIMEOUT)"},{"line_number":85,"context_line":"                self._dispatch_event(event)"},{"line_number":86,"context_line":"                continue"},{"line_number":87,"context_line":"            except wmi.x_wmi_timed_out:"},{"line_number":88,"context_line":"                # If no events were triggered in the checked interval,"},{"line_number":89,"context_line":"                # a timeout exception is raised. We\u0027ll just ignore it."},{"line_number":90,"context_line":"                pass"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_6a8c5a35","line":87,"updated":"2015-05-18 16:06:11.000000000","message":"If the system isn\u0027t win32 and this raises, it will raise an exception rather than passing","commit_id":"06905a13da2ae18869fdd59606ecca0ba5ab5ac6"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"8bd78c0f9ac03e6a709ddd39cee70a9d38ed9012","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                event \u003d self._listener(self._WAIT_TIMEOUT)"},{"line_number":85,"context_line":"                self._dispatch_event(event)"},{"line_number":86,"context_line":"                continue"},{"line_number":87,"context_line":"            except wmi.x_wmi_timed_out:"},{"line_number":88,"context_line":"                # If no events were triggered in the checked interval,"},{"line_number":89,"context_line":"                # a timeout exception is raised. We\u0027ll just ignore it."},{"line_number":90,"context_line":"                pass"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_40a05d43","line":87,"in_reply_to":"7a016987_6a8c5a35","updated":"2015-05-18 18:58:05.000000000","message":"This is part of the Hyper-V driver so it\u0027s not supposed to run on platforms other than Win32 (except for the unit tests, in which case the exception is mocked and the method is properly tested).","commit_id":"06905a13da2ae18869fdd59606ecca0ba5ab5ac6"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"c83ed5e10fadd6baebb7eb7fce4fa1e658496666","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        eventlet.spawn_n(self._state_change_callback, virt_event)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        if instance_state \u003d\u003d constants.HYPERV_VM_STATE_ENABLED:"},{"line_number":105,"context_line":"            eventlet.spawn_n(self._running_state_callback,"},{"line_number":106,"context_line":"                             instance_name, instance_uuid)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def _get_instance_uuid(self, instance_name):"}],"source_content_type":"text/x-python","patch_set":11,"id":"5afe65bd_c2543500","line":105,"range":{"start_line":105,"start_character":34,"end_line":105,"end_character":57},"updated":"2015-06-04 17:37:06.000000000","message":"question: so, when a VM is started, 2 callbacks are called? Should it be this way?","commit_id":"7dcb34c45894553cc90b2ab5de2633e927d7fabe"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"fef465eae4be9cb4447f461ee5ef8c13bd4a427b","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        eventlet.spawn_n(self._state_change_callback, virt_event)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        if instance_state \u003d\u003d constants.HYPERV_VM_STATE_ENABLED:"},{"line_number":105,"context_line":"            eventlet.spawn_n(self._running_state_callback,"},{"line_number":106,"context_line":"                             instance_name, instance_uuid)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def _get_instance_uuid(self, instance_name):"}],"source_content_type":"text/x-python","patch_set":11,"id":"5afe65bd_820f5d87","line":105,"in_reply_to":"5afe65bd_c2543500","updated":"2015-06-04 17:55:29.000000000","message":"One is the callback set by the manager, one is the hyper-v specific one, meant to handle instance serial console operations.","commit_id":"7dcb34c45894553cc90b2ab5de2633e927d7fabe"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"c83ed5e10fadd6baebb7eb7fce4fa1e658496666","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    def _get_instance_uuid(self, instance_name):"},{"line_number":109,"context_line":"        try:"},{"line_number":110,"context_line":"            instance_uuid \u003d self._vmutils.get_instance_uuid(instance_name)"},{"line_number":111,"context_line":"            if not instance_uuid:"},{"line_number":112,"context_line":"                LOG.warn(_LW(\"Instance uuid could not be retrieved for \""},{"line_number":113,"context_line":"                             \"instance %s. Instance state change event \""},{"line_number":114,"context_line":"                             \"will be ignored.\"),"}],"source_content_type":"text/x-python","patch_set":11,"id":"5afe65bd_a297f938","line":111,"range":{"start_line":111,"start_character":19,"end_line":111,"end_character":32},"updated":"2015-06-04 17:37:06.000000000","message":"how can you have instances without instance uuid?","commit_id":"7dcb34c45894553cc90b2ab5de2633e927d7fabe"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"fef465eae4be9cb4447f461ee5ef8c13bd4a427b","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    def _get_instance_uuid(self, instance_name):"},{"line_number":109,"context_line":"        try:"},{"line_number":110,"context_line":"            instance_uuid \u003d self._vmutils.get_instance_uuid(instance_name)"},{"line_number":111,"context_line":"            if not instance_uuid:"},{"line_number":112,"context_line":"                LOG.warn(_LW(\"Instance uuid could not be retrieved for \""},{"line_number":113,"context_line":"                             \"instance %s. Instance state change event \""},{"line_number":114,"context_line":"                             \"will be ignored.\"),"}],"source_content_type":"text/x-python","patch_set":11,"id":"5afe65bd_42dba5ec","line":111,"in_reply_to":"5afe65bd_a297f938","updated":"2015-06-04 17:55:29.000000000","message":"The uuid is retrieved by using the instance notes. There might be instances that are not created by Nova, in which case this will be mising. Check out the comment from line 93.","commit_id":"7dcb34c45894553cc90b2ab5de2633e927d7fabe"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"c83ed5e10fadd6baebb7eb7fce4fa1e658496666","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        if filtered_states:"},{"line_number":148,"context_line":"            checks \u003d []"},{"line_number":149,"context_line":"            for state in filtered_states:"},{"line_number":150,"context_line":"                check \u003d \"%s \u003d \u0027%s\u0027\" % (\"TargetInstance.%s\" % field,"},{"line_number":151,"context_line":"                                       state)"},{"line_number":152,"context_line":"                checks.append(check)"},{"line_number":153,"context_line":"            query +\u003d \" AND (%s)\" % \" OR \".join(checks)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5afe65bd_4fb06e8a","line":150,"range":{"start_line":150,"start_character":61,"end_line":150,"end_character":66},"updated":"2015-06-04 17:37:06.000000000","message":"well, you can simplify this a bit:\n\n    check \u003d \"TargetInstance.%s \u003d \u0027%s\u0027\" % (field, state)","commit_id":"7dcb34c45894553cc90b2ab5de2633e927d7fabe"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"fef465eae4be9cb4447f461ee5ef8c13bd4a427b","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        if filtered_states:"},{"line_number":148,"context_line":"            checks \u003d []"},{"line_number":149,"context_line":"            for state in filtered_states:"},{"line_number":150,"context_line":"                check \u003d \"%s \u003d \u0027%s\u0027\" % (\"TargetInstance.%s\" % field,"},{"line_number":151,"context_line":"                                       state)"},{"line_number":152,"context_line":"                checks.append(check)"},{"line_number":153,"context_line":"            query +\u003d \" AND (%s)\" % \" OR \".join(checks)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5afe65bd_855ac728","line":150,"in_reply_to":"5afe65bd_4fb06e8a","updated":"2015-06-04 17:55:29.000000000","message":"Good point.","commit_id":"7dcb34c45894553cc90b2ab5de2633e927d7fabe"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"c83ed5e10fadd6baebb7eb7fce4fa1e658496666","unresolved":false,"context_lines":[{"line_number":149,"context_line":"            for state in filtered_states:"},{"line_number":150,"context_line":"                check \u003d \"%s \u003d \u0027%s\u0027\" % (\"TargetInstance.%s\" % field,"},{"line_number":151,"context_line":"                                       state)"},{"line_number":152,"context_line":"                checks.append(check)"},{"line_number":153,"context_line":"            query +\u003d \" AND (%s)\" % \" OR \".join(checks)"},{"line_number":154,"context_line":"        return query"},{"line_number":155,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5afe65bd_cf38def1","line":152,"range":{"start_line":152,"start_character":23,"end_line":152,"end_character":29},"updated":"2015-06-04 17:37:06.000000000","message":"Just a suggestion, but this can also be done as:\n\n    checks \u003d [\"TargetInstance.%s \u003d \u0027%s\u0027\" % (field, state)\n              for state in filtered_states]","commit_id":"7dcb34c45894553cc90b2ab5de2633e927d7fabe"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"fef465eae4be9cb4447f461ee5ef8c13bd4a427b","unresolved":false,"context_lines":[{"line_number":149,"context_line":"            for state in filtered_states:"},{"line_number":150,"context_line":"                check \u003d \"%s \u003d \u0027%s\u0027\" % (\"TargetInstance.%s\" % field,"},{"line_number":151,"context_line":"                                       state)"},{"line_number":152,"context_line":"                checks.append(check)"},{"line_number":153,"context_line":"            query +\u003d \" AND (%s)\" % \" OR \".join(checks)"},{"line_number":154,"context_line":"        return query"},{"line_number":155,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5afe65bd_c5a2fffc","line":152,"in_reply_to":"5afe65bd_cf38def1","updated":"2015-06-04 17:55:29.000000000","message":"Even better. I wrote this quite in a hurry so my bad for not improving this kind of stuff. Thanks for the suggestions!","commit_id":"7dcb34c45894553cc90b2ab5de2633e927d7fabe"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"64ee6afe916d557c1b85688d756e3d6d627a628d","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    def _emit_event(self, instance_name, instance_uuid, instance_state):"},{"line_number":102,"context_line":"        virt_event \u003d self._get_virt_event(instance_uuid,"},{"line_number":103,"context_line":"                                          instance_state)"},{"line_number":104,"context_line":"        eventlet.spawn_n(self._state_change_callback, virt_event)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        if instance_state \u003d\u003d constants.HYPERV_VM_STATE_ENABLED:"},{"line_number":107,"context_line":"            eventlet.spawn_n(self._running_state_callback,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a50d1a3_bd30d4e9","line":104,"updated":"2015-07-27 09:56:44.000000000","message":"if self._state_change_callback is None, I am not sure you should call this, but I figure I am missing something.","commit_id":"e075897a46cf16f10bd70d4a39969e823cf64141"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"b39e5d921f23e3644ec701b48613f0989c1f556f","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    def _emit_event(self, instance_name, instance_uuid, instance_state):"},{"line_number":102,"context_line":"        virt_event \u003d self._get_virt_event(instance_uuid,"},{"line_number":103,"context_line":"                                          instance_state)"},{"line_number":104,"context_line":"        eventlet.spawn_n(self._state_change_callback, virt_event)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        if instance_state \u003d\u003d constants.HYPERV_VM_STATE_ENABLED:"},{"line_number":107,"context_line":"            eventlet.spawn_n(self._running_state_callback,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a50d1a3_8cf3330a","line":104,"in_reply_to":"3a50d1a3_bd30d4e9","updated":"2015-07-27 10:02:46.000000000","message":"You are right about this. I\u0027ll add a check afterwards. Thanks for feedback!","commit_id":"e075897a46cf16f10bd70d4a39969e823cf64141"}],"nova/virt/hyperv/vmops.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b7d70ad4ec802ed360bbdae0afa12235d4a28f71","unresolved":false,"context_lines":[{"line_number":636,"context_line":"                vm_log_writer.start()"},{"line_number":637,"context_line":"                self._vm_log_writers[instance_uuid] \u003d vm_log_writer"},{"line_number":638,"context_line":""},{"line_number":639,"context_line":"        log_serial_output()"},{"line_number":640,"context_line":""},{"line_number":641,"context_line":"    def get_console_output(self, instance):"},{"line_number":642,"context_line":"        console_log_paths \u003d ("}],"source_content_type":"text/x-python","patch_set":4,"id":"3acd31a7_a9454518","line":639,"updated":"2015-04-29 17:21:52.000000000","message":"Unless I\u0027m mistaken, this particular change is actually unrelated to the event processing in this patch. I\u0027d ask that you pull this (and any related unit tests) out into a separate patch on which this patch is a dependent.","commit_id":"cae7efb40c167606dd09e86ea81291f62a9e7bf3"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"1b8986d83f50089233f6c372ad25797aa8e04386","unresolved":false,"context_lines":[{"line_number":636,"context_line":"                vm_log_writer.start()"},{"line_number":637,"context_line":"                self._vm_log_writers[instance_uuid] \u003d vm_log_writer"},{"line_number":638,"context_line":""},{"line_number":639,"context_line":"        log_serial_output()"},{"line_number":640,"context_line":""},{"line_number":641,"context_line":"    def get_console_output(self, instance):"},{"line_number":642,"context_line":"        console_log_paths \u003d ("}],"source_content_type":"text/x-python","patch_set":4,"id":"3acd31a7_a7ee7089","line":639,"in_reply_to":"3acd31a7_a9454518","updated":"2015-04-30 10:13:04.000000000","message":"Sure, I can move this to a separate patch.\n\nThe idea is that having the event handler in place, this method could be called even if the according worker is already active.","commit_id":"cae7efb40c167606dd09e86ea81291f62a9e7bf3"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"30a1aa377b95e6b23932a0d3051eaa2e647ad0f6","unresolved":false,"context_lines":[{"line_number":538,"context_line":"        if retry_interval \u003c\u003d 0:"},{"line_number":539,"context_line":"            retry_interval \u003d SHUTDOWN_TIME_INCREMENT"},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"        try:"},{"line_number":542,"context_line":"            if timeout and self._soft_shutdown(instance,"},{"line_number":543,"context_line":"                                               timeout,"},{"line_number":544,"context_line":"                                               retry_interval):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a016987_fa8d9531","line":541,"updated":"2015-05-29 10:32:26.000000000","message":"This seems to be not related to your change? I cannot see where you introduce a new exception on this method.","commit_id":"345f34b6255f1aa4624bbbb27e952c6df058bd49"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"1bad7c8b5f543318b68ecc6e73e17002882b403a","unresolved":false,"context_lines":[{"line_number":538,"context_line":"        if retry_interval \u003c\u003d 0:"},{"line_number":539,"context_line":"            retry_interval \u003d SHUTDOWN_TIME_INCREMENT"},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"        try:"},{"line_number":542,"context_line":"            if timeout and self._soft_shutdown(instance,"},{"line_number":543,"context_line":"                                               timeout,"},{"line_number":544,"context_line":"                                               retry_interval):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5afe65bd_478c177f","line":541,"in_reply_to":"5afe65bd_4419b578","updated":"2015-06-03 12:00:38.000000000","message":"Thanks for the explanation. A comment about this case can probably be useful.","commit_id":"345f34b6255f1aa4624bbbb27e952c6df058bd49"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"3e1ec387ebf055c1aca28461360fe641fc05486c","unresolved":false,"context_lines":[{"line_number":538,"context_line":"        if retry_interval \u003c\u003d 0:"},{"line_number":539,"context_line":"            retry_interval \u003d SHUTDOWN_TIME_INCREMENT"},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"        try:"},{"line_number":542,"context_line":"            if timeout and self._soft_shutdown(instance,"},{"line_number":543,"context_line":"                                               timeout,"},{"line_number":544,"context_line":"                                               retry_interval):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5afe65bd_4419b578","line":541,"in_reply_to":"7a016987_fa8d9531","updated":"2015-06-03 11:39:43.000000000","message":"I added this check because when an instance is deleted, it is first powered off. The event listener will emit the power off event, so the manager will call the stop API. By the time this is executed, the instance might already be deleted, in which case this would raise an exception.","commit_id":"345f34b6255f1aa4624bbbb27e952c6df058bd49"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"c83ed5e10fadd6baebb7eb7fce4fa1e658496666","unresolved":false,"context_lines":[{"line_number":546,"context_line":""},{"line_number":547,"context_line":"            self._set_vm_state(instance,"},{"line_number":548,"context_line":"                               constants.HYPERV_VM_STATE_DISABLED)"},{"line_number":549,"context_line":"        except exception.NotFound:"},{"line_number":550,"context_line":"            pass"},{"line_number":551,"context_line":""},{"line_number":552,"context_line":"    def power_on(self, instance, block_device_info\u003dNone):"}],"source_content_type":"text/x-python","patch_set":11,"id":"5afe65bd_e2b851ca","line":549,"range":{"start_line":549,"start_character":15,"end_line":549,"end_character":24},"updated":"2015-06-04 17:37:06.000000000","message":"this could use a unit test.","commit_id":"7dcb34c45894553cc90b2ab5de2633e927d7fabe"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"fef465eae4be9cb4447f461ee5ef8c13bd4a427b","unresolved":false,"context_lines":[{"line_number":546,"context_line":""},{"line_number":547,"context_line":"            self._set_vm_state(instance,"},{"line_number":548,"context_line":"                               constants.HYPERV_VM_STATE_DISABLED)"},{"line_number":549,"context_line":"        except exception.NotFound:"},{"line_number":550,"context_line":"            pass"},{"line_number":551,"context_line":""},{"line_number":552,"context_line":"    def power_on(self, instance, block_device_info\u003dNone):"}],"source_content_type":"text/x-python","patch_set":11,"id":"5afe65bd_25b8b329","line":549,"in_reply_to":"5afe65bd_e2b851ca","updated":"2015-06-04 17:55:29.000000000","message":"Done. Forgot to add a comment explaining why this is needed but I\u0027ll add it in the next patch set.","commit_id":"7dcb34c45894553cc90b2ab5de2633e927d7fabe"}]}
