)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"e5ef7cbc952523f13e0a46f0a71039db9f8095f9","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Handle binding_failed vif plug errors on compute restart"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Like change Ia584dba66affb86787e3069df19bd17b89cb5c49 which"},{"line_number":10,"context_line":"came before, is port binding fails and we have a \"binding_failed\""},{"line_number":11,"context_line":"vif type in the info cache, we\u0027ll fail to plug vifs for an"},{"line_number":12,"context_line":"instance on compute restart which will prevent the service"},{"line_number":13,"context_line":"from restarting. Before the os-vif conversion code, this was"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5f7c97a3_a5850155","line":10,"range":{"start_line":10,"start_character":13,"end_line":10,"end_character":15},"updated":"2018-07-31 16:36:37.000000000","message":"if","commit_id":"1fbb3a43d2115f3eb976c273cbf259aeb5fbcf7e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"4124d90ad9ccac297cd611c6c901edaa8ee25f87","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Handle binding_failed vif plug errors on compute restart"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Like change Ia584dba66affb86787e3069df19bd17b89cb5c49 which"},{"line_number":10,"context_line":"came before, is port binding fails and we have a \"binding_failed\""},{"line_number":11,"context_line":"vif type in the info cache, we\u0027ll fail to plug vifs for an"},{"line_number":12,"context_line":"instance on compute restart which will prevent the service"},{"line_number":13,"context_line":"from restarting. Before the os-vif conversion code, this was"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f79a3b5_84112b55","line":10,"range":{"start_line":10,"start_character":13,"end_line":10,"end_character":15},"updated":"2018-08-10 13:45:46.000000000","message":"if","commit_id":"cdf8ba5acb7f65042af9c21fcbe1a126bd857ad0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b2edb429604328ece0e5920219981db4c0f93586","unresolved":false,"context_lines":[{"line_number":32,"context_line":"invasive."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Change-Id: Ia963a093a1b26d90b4de2e8fc623031cf175aece"},{"line_number":35,"context_line":"Closes-Bug: #1784579"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f79a3b5_eea240ae","line":35,"range":{"start_line":35,"start_character":0,"end_line":35,"end_character":10},"updated":"2018-08-10 12:41:03.000000000","message":"nit: im not sure if this should be closes-bug or partial-bug\ngiven that yes this is the minium change to resovle the bug but on the other hand we could also do the the healing/recovery reworks. in the lather case they would be the thing that closes the bug and this is jsut a workaround.\n\nthat said im fine with this as is also hence \"nit\" as we could just tag those with related-bug to get a similar effert of showing this bug was the one that highlighted the need for the changes.","commit_id":"cdf8ba5acb7f65042af9c21fcbe1a126bd857ad0"}],"nova/compute/manager.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"faf1dbcda3700570caec2c00bec4f6214e562c3a","unresolved":false,"context_lines":[{"line_number":953,"context_line":"                LOG.exception(\u0027Failed to start instance\u0027, instance\u003dinstance)"},{"line_number":954,"context_line":"            return"},{"line_number":955,"context_line":""},{"line_number":956,"context_line":"        net_info \u003d instance.get_network_info()"},{"line_number":957,"context_line":"        try:"},{"line_number":958,"context_line":"            self.driver.plug_vifs(instance, net_info)"},{"line_number":959,"context_line":"        except NotImplementedError as e:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_8fd824ed","line":956,"range":{"start_line":956,"start_character":8,"end_line":956,"end_character":46},"updated":"2018-07-31 15:35:12.000000000","message":"This is the bad cache data with the binding_failed vif type - so would getting the fresh data directly from neutron help us here? If we\u0027re getting binding_failed from neutron already and stored that in our cache, why would neutron start sending us something that\u0027s not \"binding_failed\" here?","commit_id":"1fbb3a43d2115f3eb976c273cbf259aeb5fbcf7e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"34adfead5a16ab90782e1682445f84a0b24d678e","unresolved":false,"context_lines":[{"line_number":953,"context_line":"                LOG.exception(\u0027Failed to start instance\u0027, instance\u003dinstance)"},{"line_number":954,"context_line":"            return"},{"line_number":955,"context_line":""},{"line_number":956,"context_line":"        net_info \u003d instance.get_network_info()"},{"line_number":957,"context_line":"        try:"},{"line_number":958,"context_line":"            self.driver.plug_vifs(instance, net_info)"},{"line_number":959,"context_line":"        except NotImplementedError as e:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_85ec85bc","line":956,"range":{"start_line":956,"start_character":8,"end_line":956,"end_character":46},"in_reply_to":"5f7c97a3_4a875a13","updated":"2018-07-31 16:58:07.000000000","message":"Hmm, not sure if we should do that here or in a periodic (_heal_instance_info_cache?) or something else. I think it should be a separate change though.","commit_id":"1fbb3a43d2115f3eb976c273cbf259aeb5fbcf7e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9887628ca93e611ca6374f19c9b98aabc8411377","unresolved":false,"context_lines":[{"line_number":953,"context_line":"                LOG.exception(\u0027Failed to start instance\u0027, instance\u003dinstance)"},{"line_number":954,"context_line":"            return"},{"line_number":955,"context_line":""},{"line_number":956,"context_line":"        net_info \u003d instance.get_network_info()"},{"line_number":957,"context_line":"        try:"},{"line_number":958,"context_line":"            self.driver.plug_vifs(instance, net_info)"},{"line_number":959,"context_line":"        except NotImplementedError as e:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_9993e6a3","line":956,"range":{"start_line":956,"start_character":8,"end_line":956,"end_character":46},"in_reply_to":"5f7c97a3_6b4d61c3","updated":"2018-08-09 20:25:11.000000000","message":"Done","commit_id":"1fbb3a43d2115f3eb976c273cbf259aeb5fbcf7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"70e4532180558a94bf74fc6879e4a3c5d7c7946a","unresolved":false,"context_lines":[{"line_number":953,"context_line":"                LOG.exception(\u0027Failed to start instance\u0027, instance\u003dinstance)"},{"line_number":954,"context_line":"            return"},{"line_number":955,"context_line":""},{"line_number":956,"context_line":"        net_info \u003d instance.get_network_info()"},{"line_number":957,"context_line":"        try:"},{"line_number":958,"context_line":"            self.driver.plug_vifs(instance, net_info)"},{"line_number":959,"context_line":"        except NotImplementedError as e:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_6b4d61c3","line":956,"range":{"start_line":956,"start_character":8,"end_line":956,"end_character":46},"in_reply_to":"5f7c97a3_85ec85bc","updated":"2018-08-01 15:01:27.000000000","message":"ya a sperate change makes sense to me.\n\nthere are pros and cons to both i guess. i mean if we do it in the  periodic task then we may be healing port that are associated with instance in the error state because of line 969 below. if we do it here we are complicating this code, slowinging down the agent start up time when it need to heal and we have more things to account form .e.g the request could timeout or throw an exception ...\n\nthe periodic task would likely be less invasive and catch most of the cases where we want it to run.","commit_id":"1fbb3a43d2115f3eb976c273cbf259aeb5fbcf7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3a938611bfe1dcbf5ca6f1a9c6bdb87883047141","unresolved":false,"context_lines":[{"line_number":953,"context_line":"                LOG.exception(\u0027Failed to start instance\u0027, instance\u003dinstance)"},{"line_number":954,"context_line":"            return"},{"line_number":955,"context_line":""},{"line_number":956,"context_line":"        net_info \u003d instance.get_network_info()"},{"line_number":957,"context_line":"        try:"},{"line_number":958,"context_line":"            self.driver.plug_vifs(instance, net_info)"},{"line_number":959,"context_line":"        except NotImplementedError as e:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_aaf62ed4","line":956,"range":{"start_line":956,"start_character":8,"end_line":956,"end_character":46},"in_reply_to":"5f7c97a3_8fd824ed","updated":"2018-07-31 15:57:18.000000000","message":"if we want to potentially prevent the instance going into error state and require admin intervention then we could loop over the vif for this instance in the info cache and then try to bind them again. if that binding failed then we would log an error and set the instance to error as we do below.","commit_id":"1fbb3a43d2115f3eb976c273cbf259aeb5fbcf7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0ba2700e3278d29e69c9f7296ceb55c7126c31cb","unresolved":false,"context_lines":[{"line_number":953,"context_line":"                LOG.exception(\u0027Failed to start instance\u0027, instance\u003dinstance)"},{"line_number":954,"context_line":"            return"},{"line_number":955,"context_line":""},{"line_number":956,"context_line":"        net_info \u003d instance.get_network_info()"},{"line_number":957,"context_line":"        try:"},{"line_number":958,"context_line":"            self.driver.plug_vifs(instance, net_info)"},{"line_number":959,"context_line":"        except NotImplementedError as e:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_4a875a13","line":956,"range":{"start_line":956,"start_character":8,"end_line":956,"end_character":46},"in_reply_to":"5f7c97a3_aaf62ed4","updated":"2018-07-31 16:02:51.000000000","message":"i ment to say we would only bind them again if the vif type of the vifs were binding_failed or binding_unbound that said if its binding_unbound something strange is going on.","commit_id":"1fbb3a43d2115f3eb976c273cbf259aeb5fbcf7e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"34adfead5a16ab90782e1682445f84a0b24d678e","unresolved":false,"context_lines":[{"line_number":964,"context_line":"            # which may require a hard reboot. Don\u0027t let it kill the"},{"line_number":965,"context_line":"            # nova-compute start."},{"line_number":966,"context_line":"            LOG.exception(\u0027Virtual interface plugging failed for instance. \u0027"},{"line_number":967,"context_line":"                          \u0027The instance may require a hard reboot.\u0027,"},{"line_number":968,"context_line":"                          instance\u003dinstance)"},{"line_number":969,"context_line":"            self._set_instance_obj_error_state(context, instance)"},{"line_number":970,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_052e35f8","line":967,"range":{"start_line":967,"start_character":27,"end_line":967,"end_character":66},"updated":"2018-07-31 16:58:07.000000000","message":"This won\u0027t be enough since we don\u0027t re-bind on hard reboot. So likely the admin would have to update the port\u0027s host binding and then hard-reboot the instance to re-plug the vifs on this host.","commit_id":"1fbb3a43d2115f3eb976c273cbf259aeb5fbcf7e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9887628ca93e611ca6374f19c9b98aabc8411377","unresolved":false,"context_lines":[{"line_number":964,"context_line":"            # which may require a hard reboot. Don\u0027t let it kill the"},{"line_number":965,"context_line":"            # nova-compute start."},{"line_number":966,"context_line":"            LOG.exception(\u0027Virtual interface plugging failed for instance. \u0027"},{"line_number":967,"context_line":"                          \u0027The instance may require a hard reboot.\u0027,"},{"line_number":968,"context_line":"                          instance\u003dinstance)"},{"line_number":969,"context_line":"            self._set_instance_obj_error_state(context, instance)"},{"line_number":970,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_79984abf","line":967,"range":{"start_line":967,"start_character":27,"end_line":967,"end_character":66},"in_reply_to":"5f7c97a3_052e35f8","updated":"2018-08-09 20:25:11.000000000","message":"Done","commit_id":"1fbb3a43d2115f3eb976c273cbf259aeb5fbcf7e"}],"nova/exception.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"e5ef7cbc952523f13e0a46f0a71039db9f8095f9","unresolved":false,"context_lines":[{"line_number":837,"context_line":""},{"line_number":838,"context_line":""},{"line_number":839,"context_line":"class UnsupportedVifTypeConversion(NovaException):"},{"line_number":840,"context_line":"    msg_fmt \u003d _(\"Unsupported VIF type %(type)s convert \u0027%(func)s\u0027\")"},{"line_number":841,"context_line":""},{"line_number":842,"context_line":""},{"line_number":843,"context_line":"class OvsConfigurationFailure(NovaException):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_a5ac21eb","line":840,"range":{"start_line":840,"start_character":16,"end_line":840,"end_character":66},"updated":"2018-07-31 16:36:37.000000000","message":"This is awkward wording. Are we required to keep it for compatibility or can we fix it?","commit_id":"1fbb3a43d2115f3eb976c273cbf259aeb5fbcf7e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9887628ca93e611ca6374f19c9b98aabc8411377","unresolved":false,"context_lines":[{"line_number":837,"context_line":""},{"line_number":838,"context_line":""},{"line_number":839,"context_line":"class UnsupportedVifTypeConversion(NovaException):"},{"line_number":840,"context_line":"    msg_fmt \u003d _(\"Unsupported VIF type %(type)s convert \u0027%(func)s\u0027\")"},{"line_number":841,"context_line":""},{"line_number":842,"context_line":""},{"line_number":843,"context_line":"class OvsConfigurationFailure(NovaException):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_b9f3420a","line":840,"range":{"start_line":840,"start_character":16,"end_line":840,"end_character":66},"in_reply_to":"5f7c97a3_6bd241d1","updated":"2018-08-09 20:25:11.000000000","message":"Removed this since we won\u0027t use it now.","commit_id":"1fbb3a43d2115f3eb976c273cbf259aeb5fbcf7e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9ff431eed84fdef8405cf0ab47b264ae008ccaad","unresolved":false,"context_lines":[{"line_number":837,"context_line":""},{"line_number":838,"context_line":""},{"line_number":839,"context_line":"class UnsupportedVifTypeConversion(NovaException):"},{"line_number":840,"context_line":"    msg_fmt \u003d _(\"Unsupported VIF type %(type)s convert \u0027%(func)s\u0027\")"},{"line_number":841,"context_line":""},{"line_number":842,"context_line":""},{"line_number":843,"context_line":"class OvsConfigurationFailure(NovaException):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_8ad5691c","line":840,"range":{"start_line":840,"start_character":16,"end_line":840,"end_character":66},"in_reply_to":"5f7c97a3_8541e5a9","updated":"2018-07-31 22:13:35.000000000","message":"\"Unsupported VIF type \u0027%(type)s\u0027: No such conversion function \u0027%(func)s\u0027.\"","commit_id":"1fbb3a43d2115f3eb976c273cbf259aeb5fbcf7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"70e4532180558a94bf74fc6879e4a3c5d7c7946a","unresolved":false,"context_lines":[{"line_number":837,"context_line":""},{"line_number":838,"context_line":""},{"line_number":839,"context_line":"class UnsupportedVifTypeConversion(NovaException):"},{"line_number":840,"context_line":"    msg_fmt \u003d _(\"Unsupported VIF type %(type)s convert \u0027%(func)s\u0027\")"},{"line_number":841,"context_line":""},{"line_number":842,"context_line":""},{"line_number":843,"context_line":"class OvsConfigurationFailure(NovaException):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_6bd241d1","line":840,"range":{"start_line":840,"start_character":16,"end_line":840,"end_character":66},"in_reply_to":"5f7c97a3_8ad5691c","updated":"2018-08-01 15:01:27.000000000","message":"i like Eric\u0027s suggestion.","commit_id":"1fbb3a43d2115f3eb976c273cbf259aeb5fbcf7e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"34adfead5a16ab90782e1682445f84a0b24d678e","unresolved":false,"context_lines":[{"line_number":837,"context_line":""},{"line_number":838,"context_line":""},{"line_number":839,"context_line":"class UnsupportedVifTypeConversion(NovaException):"},{"line_number":840,"context_line":"    msg_fmt \u003d _(\"Unsupported VIF type %(type)s convert \u0027%(func)s\u0027\")"},{"line_number":841,"context_line":""},{"line_number":842,"context_line":""},{"line_number":843,"context_line":"class OvsConfigurationFailure(NovaException):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_8541e5a9","line":840,"range":{"start_line":840,"start_character":16,"end_line":840,"end_character":66},"in_reply_to":"5f7c97a3_a5ac21eb","updated":"2018-07-31 16:58:07.000000000","message":"We could fix it...but to what?\n\n\"Unsupported VIF type \u0027%(type)s\u0027 for os-vif conversion\" ? The os-vif conversion doesn\u0027t likely mean anything, and we don\u0027t have context on whether or not we\u0027re plugging or unplugging.","commit_id":"1fbb3a43d2115f3eb976c273cbf259aeb5fbcf7e"}],"nova/network/os_vif_util.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"e5ef7cbc952523f13e0a46f0a71039db9f8095f9","unresolved":false,"context_lines":[{"line_number":497,"context_line":"    LOG.debug(\"Converting VIF %s\", vif)"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"    funcname \u003d \"_nova_to_osvif_vif_\" + vif[\u0027type\u0027].replace(\".\", \"_\")"},{"line_number":500,"context_line":"    func \u003d getattr(sys.modules[__name__], funcname, None)"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    if not func:"},{"line_number":503,"context_line":"        raise exception.UnsupportedVifTypeConversion("}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_455d0dea","line":500,"updated":"2018-07-31 16:36:37.000000000","message":"Would it be \"smarter\" to either check for binding_failed or define a _nova_to_osvif_vif_binding_failed method that raises NotImplementedError, and make this method return None so that the plug method raises VirtualInterfacePlugException?","commit_id":"1fbb3a43d2115f3eb976c273cbf259aeb5fbcf7e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d92c55e06006be8ab041ad451ebf416511d49c6f","unresolved":false,"context_lines":[{"line_number":497,"context_line":"    LOG.debug(\"Converting VIF %s\", vif)"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"    funcname \u003d \"_nova_to_osvif_vif_\" + vif[\u0027type\u0027].replace(\".\", \"_\")"},{"line_number":500,"context_line":"    func \u003d getattr(sys.modules[__name__], funcname, None)"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    if not func:"},{"line_number":503,"context_line":"        raise exception.UnsupportedVifTypeConversion("}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_25b9dac3","line":500,"in_reply_to":"5f7c97a3_0a2719ca","updated":"2018-08-01 13:39:06.000000000","message":"Don\u0027t know, but it\u0027s likely not as much of an issue as plug because if you can\u0027t plug then you won\u0027t be unplugging.","commit_id":"1fbb3a43d2115f3eb976c273cbf259aeb5fbcf7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"70e4532180558a94bf74fc6879e4a3c5d7c7946a","unresolved":false,"context_lines":[{"line_number":497,"context_line":"    LOG.debug(\"Converting VIF %s\", vif)"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"    funcname \u003d \"_nova_to_osvif_vif_\" + vif[\u0027type\u0027].replace(\".\", \"_\")"},{"line_number":500,"context_line":"    func \u003d getattr(sys.modules[__name__], funcname, None)"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    if not func:"},{"line_number":503,"context_line":"        raise exception.UnsupportedVifTypeConversion("}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_ab413964","line":500,"in_reply_to":"5f7c97a3_25b9dac3","updated":"2018-08-01 15:01:27.000000000","message":"we should not be getting to plug with a port of vif_type\u003dbinding failed so i would be fine with handeling it expcitly above. we should proably do that in a follow up change. code may be catching the internal error but noone should be depending on it so we should be able to change it.","commit_id":"1fbb3a43d2115f3eb976c273cbf259aeb5fbcf7e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"34adfead5a16ab90782e1682445f84a0b24d678e","unresolved":false,"context_lines":[{"line_number":497,"context_line":"    LOG.debug(\"Converting VIF %s\", vif)"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"    funcname \u003d \"_nova_to_osvif_vif_\" + vif[\u0027type\u0027].replace(\".\", \"_\")"},{"line_number":500,"context_line":"    func \u003d getattr(sys.modules[__name__], funcname, None)"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    if not func:"},{"line_number":503,"context_line":"        raise exception.UnsupportedVifTypeConversion("}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_a5150197","line":500,"in_reply_to":"5f7c97a3_455d0dea","updated":"2018-07-31 16:58:07.000000000","message":"I thought about defining a _nova_to_osvif_vif_binding_failed method to handle this like you said, and yeah it would translate to VirtualInterfacePlugException here:\n\nhttps://github.com/openstack/nova/blob/7b3a90f54551fcd2f6598a36ac527c56031f14f5/nova/virt/libvirt/vif.py#L810\n\nUnfortunately it\u0027s not the same thing for unplug...\n\nhttps://github.com/openstack/nova/blob/7b3a90f54551fcd2f6598a36ac527c56031f14f5/nova/virt/libvirt/vif.py#L938","commit_id":"1fbb3a43d2115f3eb976c273cbf259aeb5fbcf7e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9ff431eed84fdef8405cf0ab47b264ae008ccaad","unresolved":false,"context_lines":[{"line_number":497,"context_line":"    LOG.debug(\"Converting VIF %s\", vif)"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"    funcname \u003d \"_nova_to_osvif_vif_\" + vif[\u0027type\u0027].replace(\".\", \"_\")"},{"line_number":500,"context_line":"    func \u003d getattr(sys.modules[__name__], funcname, None)"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    if not func:"},{"line_number":503,"context_line":"        raise exception.UnsupportedVifTypeConversion("}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_0a2719ca","line":500,"in_reply_to":"5f7c97a3_a5150197","updated":"2018-07-31 22:13:35.000000000","message":"And would it be unreasonable to *make* it the same thing for unplug? Is someone relying on InternalError?","commit_id":"1fbb3a43d2115f3eb976c273cbf259aeb5fbcf7e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"12d12145f5d1a9a1b0e65eb9eff7b4f367fafb08","unresolved":false,"context_lines":[{"line_number":497,"context_line":"    LOG.debug(\"Converting VIF %s\", vif)"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"    funcname \u003d \"_nova_to_osvif_vif_\" + vif[\u0027type\u0027].replace(\".\", \"_\")"},{"line_number":500,"context_line":"    func \u003d getattr(sys.modules[__name__], funcname, None)"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    if not func:"},{"line_number":503,"context_line":"        raise exception.UnsupportedVifTypeConversion("}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_0985d052","line":500,"in_reply_to":"5f7c97a3_ab413964","updated":"2018-08-01 19:25:38.000000000","message":"We could add a VirtualInterfaceUnplugException(InternalError) so anything expecting InternalError would still work.","commit_id":"1fbb3a43d2115f3eb976c273cbf259aeb5fbcf7e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"4124d90ad9ccac297cd611c6c901edaa8ee25f87","unresolved":false,"context_lines":[{"line_number":491,"context_line":"    NotImplementedError to indicate to the caller that we cannot handle"},{"line_number":492,"context_line":"    this type of vif rather than the generic \"Unsupported VIF type\" error"},{"line_number":493,"context_line":"    in nova_to_osvif_vif."},{"line_number":494,"context_line":"    \"\"\""},{"line_number":495,"context_line":"    raise NotImplementedError()"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_44455342","line":494,"updated":"2018-08-10 13:45:46.000000000","message":"\"...Unlike other the other methods, NotImplementedError doesn\u0027t mean you should go and implement it. Leave it alone. Hands off.\"\n\nI wonder if we should subclass NotImplementedError for this.  IntentionallyNotImplementedError. You know, like \"this page intentionally left blank\"?","commit_id":"cdf8ba5acb7f65042af9c21fcbe1a126bd857ad0"}],"nova/tests/unit/network/test_os_vif_util.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"4124d90ad9ccac297cd611c6c901edaa8ee25f87","unresolved":false,"context_lines":[{"line_number":1021,"context_line":"    def test_nova_to_osvif_vif_binding_failed(self):"},{"line_number":1022,"context_line":"        vif \u003d model.VIF("},{"line_number":1023,"context_line":"            id\u003d\"dc065497-3c8d-4f44-8fb4-e1d33c16a536\","},{"line_number":1024,"context_line":"            type\u003d\"binding_failed\","},{"line_number":1025,"context_line":"            address\u003d\"22:52:25:62:e2:aa\","},{"line_number":1026,"context_line":"            network\u003dmodel.Network("},{"line_number":1027,"context_line":"                id\u003d\"b82c1929-051e-481d-8110-4669916c7915\","}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_04a2fbfd","line":1024,"range":{"start_line":1024,"start_character":25,"end_line":1024,"end_character":26},"updated":"2018-08-10 13:45:46.000000000","message":"is this an underscore or a space irl?","commit_id":"cdf8ba5acb7f65042af9c21fcbe1a126bd857ad0"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"bf14a563a65da461ea7d110b8c11b86cfabac6e7","unresolved":false,"context_lines":[{"line_number":1021,"context_line":"    def test_nova_to_osvif_vif_binding_failed(self):"},{"line_number":1022,"context_line":"        vif \u003d model.VIF("},{"line_number":1023,"context_line":"            id\u003d\"dc065497-3c8d-4f44-8fb4-e1d33c16a536\","},{"line_number":1024,"context_line":"            type\u003d\"binding_failed\","},{"line_number":1025,"context_line":"            address\u003d\"22:52:25:62:e2:aa\","},{"line_number":1026,"context_line":"            network\u003dmodel.Network("},{"line_number":1027,"context_line":"                id\u003d\"b82c1929-051e-481d-8110-4669916c7915\","}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_38fe9aae","line":1024,"range":{"start_line":1024,"start_character":25,"end_line":1024,"end_character":26},"in_reply_to":"3f79a3b5_04a2fbfd","updated":"2018-08-18 01:20:24.000000000","message":"According to the bug report, it\u0027s an underscore IRL. I also found this in docs that mentions vif_type \u0027binding_failed\u0027:\n\nhttps://docs.openstack.org/neutron/latest/contributor/internals/live_migration.html?highlight\u003dbinding_failed#id2","commit_id":"cdf8ba5acb7f65042af9c21fcbe1a126bd857ad0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"512a62db80b2b24a4655ffa2514bb672e6526627","unresolved":false,"context_lines":[{"line_number":1021,"context_line":"    def test_nova_to_osvif_vif_binding_failed(self):"},{"line_number":1022,"context_line":"        vif \u003d model.VIF("},{"line_number":1023,"context_line":"            id\u003d\"dc065497-3c8d-4f44-8fb4-e1d33c16a536\","},{"line_number":1024,"context_line":"            type\u003d\"binding_failed\","},{"line_number":1025,"context_line":"            address\u003d\"22:52:25:62:e2:aa\","},{"line_number":1026,"context_line":"            network\u003dmodel.Network("},{"line_number":1027,"context_line":"                id\u003d\"b82c1929-051e-481d-8110-4669916c7915\","}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_60c186e4","line":1024,"range":{"start_line":1024,"start_character":25,"end_line":1024,"end_character":26},"in_reply_to":"3f79a3b5_38fe9aae","updated":"2018-08-21 15:04:47.000000000","message":"Yes underscore:\n\nhttps://github.com/openstack/nova/blob/722d5b477219f0a2435a9f4ad4d54c61b83219f1/nova/network/model.py#L46","commit_id":"cdf8ba5acb7f65042af9c21fcbe1a126bd857ad0"}]}
