)]}'
{"nova/compute/manager.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1928d38df0f52773d72f7d84ddfc12381fbba0fe","unresolved":false,"context_lines":[{"line_number":7554,"context_line":"                    # Not all virt drivers support attach/detach of interfaces"},{"line_number":7555,"context_line":"                    # yet (like Ironic), so just ignore this."},{"line_number":7556,"context_line":"                    pass"},{"line_number":7557,"context_line":"                except exception.NovaException as ex:"},{"line_number":7558,"context_line":"                    # If the instance was deleted before the interface was"},{"line_number":7559,"context_line":"                    # detached, just log it at debug."},{"line_number":7560,"context_line":"                    log_level \u003d (logging.DEBUG"},{"line_number":7561,"context_line":"                                 if isinstance(ex, exception.InstanceNotFound)"},{"line_number":7562,"context_line":"                                 else logging.WARNING)"},{"line_number":7563,"context_line":"                    LOG.log(log_level,"},{"line_number":7564,"context_line":"                            \"Detach interface failed, \""},{"line_number":7565,"context_line":"                            \"port_id\u003d%(port_id)s, reason: %(msg)s\","},{"line_number":7566,"context_line":"                            {\u0027port_id\u0027: deleted_vif_id, \u0027msg\u0027: ex},"},{"line_number":7567,"context_line":"                            instance\u003dinstance)"},{"line_number":7568,"context_line":"                break"},{"line_number":7569,"context_line":""},{"line_number":7570,"context_line":"    @wrap_instance_event(prefix\u003d\u0027compute\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_54e09926","line":7567,"range":{"start_line":7557,"start_character":0,"end_line":7567,"end_character":46},"updated":"2018-04-11 10:00:56.000000000","message":"I\u0027d rather we just had a second \u0027except exception.InstanceNotFound\u0027 case and dealt with the (minimal) duplication of log messages. That\u0027s a stylistic thing though and this does work so...","commit_id":"670b83fb3c367d646e47b536cc645e7627a36d06"}],"nova/tests/unit/compute/test_compute_mgr.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3c7c0e5516a359dcb9a1f099851209c4deee46c5","unresolved":false,"context_lines":[{"line_number":2728,"context_line":"            detach_interface.assert_called_once_with("},{"line_number":2729,"context_line":"                self.context, inst_obj, vif)"},{"line_number":2730,"context_line":"            # LOG.log should have been called with a DEBUG level message."},{"line_number":2731,"context_line":"            self.assertEqual(1, log.call_count)"},{"line_number":2732,"context_line":"            self.assertEqual(logging.DEBUG, log.call_args[0][0])"},{"line_number":2733,"context_line":""},{"line_number":2734,"context_line":"        do_test()"}],"source_content_type":"text/x-python","patch_set":1,"id":"df7087c5_2df88047","line":2731,"range":{"start_line":2731,"start_character":12,"end_line":2731,"end_character":47},"updated":"2018-03-20 18:25:44.000000000","message":"py3 job failed on this:\n\nhttp://logs.openstack.org/91/554591/1/check/openstack-tox-py35/b94414e/testr_results.html.gz\n\nSo apparently there is a test race.","commit_id":"d4734cffa92d6050c6fba85d4040b18d7df3a257"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"50eb97622f267a7f3252a939b3bffc02c2f2b35c","unresolved":false,"context_lines":[{"line_number":2728,"context_line":"            detach_interface.assert_called_once_with("},{"line_number":2729,"context_line":"                self.context, inst_obj, vif)"},{"line_number":2730,"context_line":"            # LOG.log should have been called with a DEBUG level message."},{"line_number":2731,"context_line":"            self.assertEqual(1, log.call_count)"},{"line_number":2732,"context_line":"            self.assertEqual(logging.DEBUG, log.call_args[0][0])"},{"line_number":2733,"context_line":""},{"line_number":2734,"context_line":"        do_test()"}],"source_content_type":"text/x-python","patch_set":1,"id":"df7087c5_83dcfd46","line":2731,"range":{"start_line":2731,"start_character":12,"end_line":2731,"end_character":47},"in_reply_to":"df7087c5_2df88047","updated":"2018-03-20 19:30:51.000000000","message":"I guess on py3, LOG.info calls through to LOG.log, which probably makes sense, so since I didn\u0027t mock out LOG.info, which is also used in the method, this assertion fails:\n\nb\"testtools.matchers._impl.MismatchError: 1 !\u003d 2: [call(20, \u0027Neutron deleted interface %(intf)s; detaching it from the instance and deleting it from the info cache\u0027, {\u0027intf\u0027: 1}, instance\u003dInstance(access_ip_v4\u003d\u003c?\u003e,access_ip_v6\u003d\u003c?\u003e,architecture\u003d\u003c?\u003e,auto_disk_config\u003d\u003c?\u003e,availability_zone\u003d\u003c?\u003e,cell_name\u003d\u003c?\u003e,cleaned\u003d\u003c?\u003e,config_drive\u003d\u003c?\u003e,created_at\u003d\u003c?\u003e,default_ephemeral_device\u003d\u003c?\u003e,default_swap_device\u003d\u003c?\u003e,deleted\u003d\u003c?\u003e,deleted_at\u003d\u003c?\u003e,device_metadata\u003d\u003c?\u003e,disable_terminate\u003d\u003c?\u003e,display_description\u003d\u003c?\u003e,display_name\u003d\u003c?\u003e,ec2_ids\u003d\u003c?\u003e,ephemeral_gb\u003d\u003c?\u003e,ephemeral_key_uuid\u003d\u003c?\u003e,fault\u003d\u003c?\u003e,flavor\u003d\u003c?\u003e,host\u003d\u003c?\u003e,hostname\u003d\u003c?\u003e,id\u003d3,image_ref\u003d\u003c?\u003e,info_cache\u003dInstanceInfoCache,instance_type_id\u003d\u003c?\u003e,kernel_id\u003d\u003c?\u003e,key_data\u003d\u003c?\u003e,key_name\u003d\u003c?\u003e,keypairs\u003d\u003c?\u003e,launch_index\u003d\u003c?\u003e,launched_at\u003d\u003c?\u003e,launched_on\u003d\u003c?\u003e,locked\u003d\u003c?\u003e,locked_by\u003d\u003c?\u003e,memory_mb\u003d\u003c?\u003e,metadata\u003d\u003c?\u003e,migration_context\u003d\u003c?\u003e,new_flavor\u003d\u003c?\u003e,node\u003d\u003c?\u003e,numa_topology\u003d\u003c?\u003e,old_flavor\u003d\u003c?\u003e,os_type\u003d\u003c?\u003e,pci_devices\u003d\u003c?\u003e,pci_requests\u003d\u003c?\u003e,power_state\u003d\u003c?\u003e,progress\u003d\u003c?\u003e,project_id\u003d\u003c?\u003e,ramdisk_id\u003d\u003c?\u003e,reservation_id\u003d\u003c?\u003e,root_device_name\u003d\u003c?\u003e,root_gb\u003d\u003c?\u003e,security_groups\u003d\u003c?\u003e,services\u003d\u003c?\u003e,shutdown_terminate\u003d\u003c?\u003e,system_metadata\u003d\u003c?\u003e,tags\u003d\u003c?\u003e,task_state\u003d\u003c?\u003e,terminated_at\u003d\u003c?\u003e,updated_at\u003d\u003c?\u003e,user_data\u003d\u003c?\u003e,user_id\u003d\u003c?\u003e,uuid\u003d629532fd-3382-4ab6-9554-5dd1ecba668d,vcpu_model\u003d\u003c?\u003e,vcpus\u003d\u003c?\u003e,vm_mode\u003d\u003c?\u003e,vm_state\u003d\u003c?\u003e)),\"\n    b\" call(10, \u0027Detach interface failed, port_id\u003d%(port_id)s, reason: %(msg)s\u0027, {\u0027port_id\u0027: 1, \u0027msg\u0027: InstanceNotFound(\u0027Instance 629532fd-3382-4ab6-9554-5dd1ecba668d could not be found.\u0027,)}, instance\u003dInstance(access_ip_v4\u003d\u003c?\u003e,access_ip_v6\u003d\u003c?\u003e,architecture\u003d\u003c?\u003e,auto_disk_config\u003d\u003c?\u003e,availability_zone\u003d\u003c?\u003e,cell_name\u003d\u003c?\u003e,cleaned\u003d\u003c?\u003e,config_drive\u003d\u003c?\u003e,created_at\u003d\u003c?\u003e,default_ephemeral_device\u003d\u003c?\u003e,default_swap_device\u003d\u003c?\u003e,deleted\u003d\u003c?\u003e,deleted_at\u003d\u003c?\u003e,device_metadata\u003d\u003c?\u003e,disable_terminate\u003d\u003c?\u003e,display_description\u003d\u003c?\u003e,display_name\u003d\u003c?\u003e,ec2_ids\u003d\u003c?\u003e,ephemeral_gb\u003d\u003c?\u003e,ephemeral_key_uuid\u003d\u003c?\u003e,fault\u003d\u003c?\u003e,flavor\u003d\u003c?\u003e,host\u003d\u003c?\u003e,hostname\u003d\u003c?\u003e,id\u003d3,image_ref\u003d\u003c?\u003e,info_cache\u003dInstanceInfoCache,instance_type_id\u003d\u003c?\u003e,kernel_id\u003d\u003c?\u003e,key_data\u003d\u003c?\u003e,key_name\u003d\u003c?\u003e,keypairs\u003d\u003c?\u003e,launch_index\u003d\u003c?\u003e,launched_at\u003d\u003c?\u003e,launched_on\u003d\u003c?\u003e,locked\u003d\u003c?\u003e,locked_by\u003d\u003c?\u003e,memory_mb\u003d\u003c?\u003e,metadata\u003d\u003c?\u003e,migration_context\u003d\u003c?\u003e,new_flavor\u003d\u003c?\u003e,node\u003d\u003c?\u003e,numa_topology\u003d\u003c?\u003e,old_flavor\u003d\u003c?\u003e,os_type\u003d\u003c?\u003e,pci_devices\u003d\u003c?\u003e,pci_requests\u003d\u003c?\u003e,power_state\u003d\u003c?\u003e,progress\u003d\u003c?\u003e,project_id\u003d\u003c?\u003e,ramdisk_id\u003d\u003c?\u003e,reservation_id\u003d\u003c?\u003e,root_device_name\u003d\u003c?\u003e,root_gb\u003d\u003c?\u003e,security_groups\u003d\u003c?\u003e,services\u003d\u003c?\u003e,shutdown_terminate\u003d\u003c?\u003e,system_metadata\u003d\u003c?\u003e,tags\u003d\u003c?\u003e,task_state\u003d\u003c?\u003e,terminated_at\u003d\u003c?\u003e,updated_at\u003d\u003c?\u003e,user_data\u003d\u003c?\u003e,user_id\u003d\u003c?\u003e,uuid\u003d629532fd-3382-4ab6-9554-5dd1ecba668d,vcpu_model\u003d\u003c?\u003e,vcpus\u003d\u003c?\u003e,vm_mode\u003d\u003c?\u003e,vm_state\u003d\u003c?\u003e))]\"\n\n\nSo I need to mock out LOG.info also.","commit_id":"d4734cffa92d6050c6fba85d4040b18d7df3a257"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5481a3c4896fb2d3662919dcf8fa300c9d1ed64c","unresolved":false,"context_lines":[{"line_number":2703,"context_line":""},{"line_number":2704,"context_line":"        do_test()"},{"line_number":2705,"context_line":""},{"line_number":2706,"context_line":"    @mock.patch(\u0027nova.compute.manager.LOG.info\u0027)  # This is needed for py35."},{"line_number":2707,"context_line":"    @mock.patch(\u0027nova.compute.manager.LOG.log\u0027)"},{"line_number":2708,"context_line":"    def test_process_instance_vif_deleted_event_instance_not_found("},{"line_number":2709,"context_line":"            self, mock_log, mock_log_info):"}],"source_content_type":"text/x-python","patch_set":2,"id":"df7087c5_dea08ca8","line":2706,"updated":"2018-03-20 20:06:42.000000000","message":"add new\u003dmock.Mock() and you can get rid of the mock_log_info param.","commit_id":"670b83fb3c367d646e47b536cc645e7627a36d06"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5481a3c4896fb2d3662919dcf8fa300c9d1ed64c","unresolved":false,"context_lines":[{"line_number":2730,"context_line":"            detach_interface.assert_called_once_with("},{"line_number":2731,"context_line":"                self.context, inst_obj, vif)"},{"line_number":2732,"context_line":"            # LOG.log should have been called with a DEBUG level message."},{"line_number":2733,"context_line":"            self.assertEqual(1, mock_log.call_count, mock_log.mock_calls)"},{"line_number":2734,"context_line":"            self.assertEqual(logging.DEBUG, mock_log.call_args[0][0])"},{"line_number":2735,"context_line":""},{"line_number":2736,"context_line":"        do_test()"}],"source_content_type":"text/x-python","patch_set":2,"id":"df7087c5_9eaa1483","line":2733,"range":{"start_line":2733,"start_character":51,"end_line":2733,"end_character":72},"updated":"2018-03-20 20:06:42.000000000","message":"This arg is the message that gets printed out when the assertion fails, yah?  Did you mean to leave that in here?","commit_id":"670b83fb3c367d646e47b536cc645e7627a36d06"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"84bc39235d5271b167c5f588c163ec6b63a4ffcd","unresolved":false,"context_lines":[{"line_number":2730,"context_line":"            detach_interface.assert_called_once_with("},{"line_number":2731,"context_line":"                self.context, inst_obj, vif)"},{"line_number":2732,"context_line":"            # LOG.log should have been called with a DEBUG level message."},{"line_number":2733,"context_line":"            self.assertEqual(1, mock_log.call_count, mock_log.mock_calls)"},{"line_number":2734,"context_line":"            self.assertEqual(logging.DEBUG, mock_log.call_args[0][0])"},{"line_number":2735,"context_line":""},{"line_number":2736,"context_line":"        do_test()"}],"source_content_type":"text/x-python","patch_set":2,"id":"df7087c5_1eda8416","line":2733,"range":{"start_line":2733,"start_character":51,"end_line":2733,"end_character":72},"in_reply_to":"df7087c5_9eaa1483","updated":"2018-03-20 20:09:19.000000000","message":"Yes I meant to leave it in since debugging MismatchError on call counts sucks if you don\u0027t have more context.","commit_id":"670b83fb3c367d646e47b536cc645e7627a36d06"}]}
