)]}'
{"nova/api/openstack/compute/attach_interfaces.py":[{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"dcd26b429d2455c252f25fbc066fe2cbf11167d7","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        return self.show(req, server_id, vif[\u0027id\u0027])"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    @wsgi.response(202)"},{"line_number":142,"context_line":"    @extensions.expected_errors((404, 409, 501))"},{"line_number":143,"context_line":"    def delete(self, req, server_id, id):"},{"line_number":144,"context_line":"        \"\"\"Detach an interface from an instance.\"\"\""},{"line_number":145,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":13,"id":"9abb7d3a_d04f75bb","line":142,"updated":"2016-05-30 06:41:54.000000000","message":"need to add a 400 here","commit_id":"b2bad33212541ffc2da82eeeab943a3501599938"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"cf3682f3560794f1963efd0b629e0b79ed55122c","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        except exception.InstanceIsLocked as e:"},{"line_number":156,"context_line":"            raise exc.HTTPConflict(explanation\u003de.format_message())"},{"line_number":157,"context_line":"        except NotImplementedError:"},{"line_number":158,"context_line":"            common.raise_feature_not_supported()"},{"line_number":159,"context_line":"        except exception.InstanceInvalidState as state_error:"},{"line_number":160,"context_line":"            common.raise_http_conflict_for_instance_invalid_state(state_error,"},{"line_number":161,"context_line":"                    \u0027detach_interface\u0027, server_id)"}],"source_content_type":"text/x-python","patch_set":18,"id":"9abb7d3a_f64b6d29","side":"PARENT","line":158,"range":{"start_line":158,"start_character":19,"end_line":158,"end_character":46},"updated":"2016-06-03 18:24:06.000000000","message":"you removed this ,right?","commit_id":"ced89e7b26b3cff323852e1d8a9c6db80334f4dd"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"b6e5e048f796e9f206260f9a73a4d486b1b57da3","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        return self.show(req, server_id, vif[\u0027id\u0027])"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    @wsgi.response(202)"},{"line_number":142,"context_line":"    @extensions.expected_errors((400, 404, 409, 501))"},{"line_number":143,"context_line":"    def delete(self, req, server_id, id):"},{"line_number":144,"context_line":"        \"\"\"Detach an interface from an instance.\"\"\""},{"line_number":145,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":18,"id":"9abb7d3a_0f3958d7","line":142,"range":{"start_line":142,"start_character":48,"end_line":142,"end_character":51},"updated":"2016-06-01 12:41:28.000000000","message":"remove 501","commit_id":"7679b190926c9ce15163c9a02de545fec0a8a509"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"6f31f9bbcb05fa5f3ec2e1321d21d607eea638b2","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        return self.show(req, server_id, vif[\u0027id\u0027])"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    @wsgi.response(202)"},{"line_number":142,"context_line":"    @extensions.expected_errors((400, 404, 409, 501))"},{"line_number":143,"context_line":"    def delete(self, req, server_id, id):"},{"line_number":144,"context_line":"        \"\"\"Detach an interface from an instance.\"\"\""},{"line_number":145,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":18,"id":"9abb7d3a_aa98fa1c","line":142,"range":{"start_line":142,"start_character":48,"end_line":142,"end_character":51},"in_reply_to":"9abb7d3a_0f3958d7","updated":"2016-06-01 13:11:41.000000000","message":"I think people will say that this is unrelated to this patch?","commit_id":"7679b190926c9ce15163c9a02de545fec0a8a509"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"3acce96593df649e4dcab5b4b49d205cc0acb618","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        except exception.InstanceIsLocked as e:"},{"line_number":156,"context_line":"            raise exc.HTTPConflict(explanation\u003de.format_message())"},{"line_number":157,"context_line":"        except NotImplementedError:"},{"line_number":158,"context_line":"            common.raise_feature_not_supported()"},{"line_number":159,"context_line":"        except exception.InstanceInvalidState as state_error:"},{"line_number":160,"context_line":"            common.raise_http_conflict_for_instance_invalid_state(state_error,"},{"line_number":161,"context_line":"                    \u0027detach_interface\u0027, server_id)"}],"source_content_type":"text/x-python","patch_set":19,"id":"9abb7d3a_361b351d","side":"PARENT","line":158,"range":{"start_line":158,"start_character":19,"end_line":158,"end_character":46},"updated":"2016-06-03 18:25:32.000000000","message":"see my previous comment, this remove lead to 501 will not be reported?","commit_id":"ced89e7b26b3cff323852e1d8a9c6db80334f4dd"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"7bdf8dbe9155eaa41bc8dac415b9de7e7150330f","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        except exception.InstanceIsLocked as e:"},{"line_number":156,"context_line":"            raise exc.HTTPConflict(explanation\u003de.format_message())"},{"line_number":157,"context_line":"        except exception.DetachInterfaceNotSupported as e:"},{"line_number":158,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":159,"context_line":"        except exception.InstanceInvalidState as state_error:"},{"line_number":160,"context_line":"            common.raise_http_conflict_for_instance_invalid_state(state_error,"},{"line_number":161,"context_line":"                    \u0027detach_interface\u0027, server_id)"}],"source_content_type":"text/x-python","patch_set":29,"id":"1aa78d24_f9fca7b9","line":158,"updated":"2016-07-06 23:07:09.000000000","message":"detach_interface is a async call, so this exception is never returned. I guess maybe we need change attach_interface to async also.","commit_id":"f0ba716141d49ca778bea689075f26c64be47022"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"66c6e364cd5f5ce707dc08060ebd89a16ff3d507","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        except exception.InstanceIsLocked as e:"},{"line_number":156,"context_line":"            raise exc.HTTPConflict(explanation\u003de.format_message())"},{"line_number":157,"context_line":"        except exception.DetachInterfaceNotSupported as e:"},{"line_number":158,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":159,"context_line":"        except exception.InstanceInvalidState as state_error:"},{"line_number":160,"context_line":"            common.raise_http_conflict_for_instance_invalid_state(state_error,"},{"line_number":161,"context_line":"                    \u0027detach_interface\u0027, server_id)"}],"source_content_type":"text/x-python","patch_set":29,"id":"1aa78d24_c8b3d308","line":158,"in_reply_to":"1aa78d24_c87bd379","updated":"2016-07-07 02:02:53.000000000","message":"I think we have already meet some problems with this async call, apps, for example Heat may want to do perfom actions such as detach port A from instance_1 and attach it again to instance_2, for the current implementation, we can only periodically check the port status, are there any better suggestions?","commit_id":"f0ba716141d49ca778bea689075f26c64be47022"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"90432ba3f1d413fd7286a6aa7ab453427d6fd652","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        except exception.InstanceIsLocked as e:"},{"line_number":156,"context_line":"            raise exc.HTTPConflict(explanation\u003de.format_message())"},{"line_number":157,"context_line":"        except exception.DetachInterfaceNotSupported as e:"},{"line_number":158,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":159,"context_line":"        except exception.InstanceInvalidState as state_error:"},{"line_number":160,"context_line":"            common.raise_http_conflict_for_instance_invalid_state(state_error,"},{"line_number":161,"context_line":"                    \u0027detach_interface\u0027, server_id)"}],"source_content_type":"text/x-python","patch_set":29,"id":"1aa78d24_2a64cae3","line":158,"in_reply_to":"1aa78d24_c8b3d308","updated":"2016-07-08 01:55:10.000000000","message":"For now, I think we should use instance-action as a feedback.","commit_id":"f0ba716141d49ca778bea689075f26c64be47022"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d699f1d4b9f33c71b57ca01a277e3a4e64b97bfd","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        except exception.InstanceIsLocked as e:"},{"line_number":156,"context_line":"            raise exc.HTTPConflict(explanation\u003de.format_message())"},{"line_number":157,"context_line":"        except exception.DetachInterfaceNotSupported as e:"},{"line_number":158,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":159,"context_line":"        except exception.InstanceInvalidState as state_error:"},{"line_number":160,"context_line":"            common.raise_http_conflict_for_instance_invalid_state(state_error,"},{"line_number":161,"context_line":"                    \u0027detach_interface\u0027, server_id)"}],"source_content_type":"text/x-python","patch_set":29,"id":"1aa78d24_c87bd379","line":158,"in_reply_to":"1aa78d24_f9fca7b9","updated":"2016-07-07 01:56:23.000000000","message":"Done","commit_id":"f0ba716141d49ca778bea689075f26c64be47022"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"2534ac098a98b3c0a4372970fd14c3324d6000f9","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        except exception.InstanceIsLocked as e:"},{"line_number":156,"context_line":"            raise exc.HTTPConflict(explanation\u003de.format_message())"},{"line_number":157,"context_line":"        except exception.DetachInterfaceNotSupported as e:"},{"line_number":158,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":159,"context_line":"        except exception.InstanceInvalidState as state_error:"},{"line_number":160,"context_line":"            common.raise_http_conflict_for_instance_invalid_state(state_error,"},{"line_number":161,"context_line":"                    \u0027detach_interface\u0027, server_id)"}],"source_content_type":"text/x-python","patch_set":29,"id":"dada55a8_ba4b862a","line":158,"in_reply_to":"1aa78d24_f9fca7b9","updated":"2016-07-25 22:36:35.000000000","message":"I am not sure we need to change attach_interface to async because sync is useful to get feedback soon in general.\nThat doesn\u0027t mean we need to change this to sync.\n\nAnyway, this patch seems unnecessary now, right?","commit_id":"f0ba716141d49ca778bea689075f26c64be47022"}],"nova/compute/manager.py":[{"author":{"_account_id":20076,"name":"QunyingRan","email":"ran.qunying@zte.com.cn","username":"QunyingRan"},"change_message_id":"0fe46598eddceaab7154ca38fa0f34e7b75d0cd8","unresolved":false,"context_lines":[{"line_number":4891,"context_line":"    @wrap_exception()"},{"line_number":4892,"context_line":"    @wrap_instance_fault"},{"line_number":4893,"context_line":"    def detach_interface(self, context, instance, port_id):"},{"line_number":4894,"context_line":"        \"\"\"Detach an network adapter from an instance.\"\"\""},{"line_number":4895,"context_line":"        if not self.driver.capabilities[\u0027supports_attach_detach_interface\u0027]:"},{"line_number":4896,"context_line":"            raise exception.DetachInterfaceNotSupported("},{"line_number":4897,"context_line":"                instance_id\u003dinstance.uuid)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9abb7d3a_808db633","line":4894,"range":{"start_line":4894,"start_character":18,"end_line":4894,"end_character":20},"updated":"2016-05-28 06:41:24.000000000","message":"maybe a network？？","commit_id":"7b225863448237830105f2d93bf372e0acf17b7c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"7bdf8dbe9155eaa41bc8dac415b9de7e7150330f","unresolved":false,"context_lines":[{"line_number":4950,"context_line":"    def detach_interface(self, context, instance, port_id):"},{"line_number":4951,"context_line":"        \"\"\"Detach a network adapter from an instance.\"\"\""},{"line_number":4952,"context_line":"        if not self.driver.capabilities[\u0027supports_attach_detach_interface\u0027]:"},{"line_number":4953,"context_line":"            raise exception.DetachInterfaceNotSupported("},{"line_number":4954,"context_line":"                instance_id\u003dinstance.uuid)"},{"line_number":4955,"context_line":"        network_info \u003d instance.info_cache.network_info"},{"line_number":4956,"context_line":"        condemned \u003d None"},{"line_number":4957,"context_line":"        for vif in network_info:"}],"source_content_type":"text/x-python","patch_set":29,"id":"1aa78d24_b9817ffd","line":4954,"range":{"start_line":4953,"start_character":12,"end_line":4954,"end_character":42},"updated":"2016-07-06 23:07:09.000000000","message":"For now, we only can report this error to instance action.","commit_id":"f0ba716141d49ca778bea689075f26c64be47022"}],"nova/exception.py":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"b6e5e048f796e9f206260f9a73a4d486b1b57da3","unresolved":false,"context_lines":[{"line_number":2140,"context_line":""},{"line_number":2141,"context_line":""},{"line_number":2142,"context_line":"class DetachInterfaceNotSupported(Invalid):"},{"line_number":2143,"context_line":"    msg_fmt \u003d _(\"Attaching interfaces is not supported for \""},{"line_number":2144,"context_line":"                \"instance %(instance)s.\")"}],"source_content_type":"text/x-python","patch_set":18,"id":"9abb7d3a_ef569404","line":2143,"range":{"start_line":2143,"start_character":17,"end_line":2143,"end_character":26},"updated":"2016-06-01 12:41:28.000000000","message":"Detaching","commit_id":"7679b190926c9ce15163c9a02de545fec0a8a509"}],"nova/tests/unit/api/openstack/compute/test_attach_interfaces.py":[{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"dcd26b429d2455c252f25fbc066fe2cbf11167d7","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import mock"},{"line_number":17,"context_line":"import webob"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from nova.api.openstack.compute import attach_interfaces \\"},{"line_number":20,"context_line":"        as attach_interfaces_v21"}],"source_content_type":"text/x-python","patch_set":13,"id":"9abb7d3a_56c0a27c","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":12},"updated":"2016-05-30 06:41:54.000000000","message":"why need to import webob ? if you just want to use \"webob.exc\", there is a \"from webob import exc\" in L29","commit_id":"b2bad33212541ffc2da82eeeab943a3501599938"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"dcd26b429d2455c252f25fbc066fe2cbf11167d7","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from nova.tests.unit.api.openstack import fakes"},{"line_number":27,"context_line":"from nova.tests.unit import fake_network_cache_model"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from webob import exc"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"FAKE_UUID1 \u003d \u0027aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"9abb7d3a_f63716ae","line":29,"range":{"start_line":29,"start_character":0,"end_line":29,"end_character":21},"updated":"2016-05-30 06:41:54.000000000","message":"here","commit_id":"b2bad33212541ffc2da82eeeab943a3501599938"}]}
