<div dir="ltr">Hi guys,<div><br></div><div>Nova-api makes extensive use of python-neutronclient. But the only exception from neutronclient that nova-api catches is the generic QuantumClientException (defined in quantumclient/common/exceptions.py).</div>
<div><br></div><div>neutronclient has some more specific exceptions like PortInUseClient, NetworkNotFoundClient. But they are never raised because I believe there is a bug either in neutron server or in neutronclient, related to exceptions.</div>
<div><br></div><div>In neutronclient, all exceptions are handled in neutronclient/v2_0/client.py::exception_handler_v20(). The code is supposed to catch a Neutron(Server)Exception and raise the corresponding specific NeutronClientException. In order to do that, NeutronClient expects the deserialized Neutron(Server)Exception to be a dictionnary which has the keys "type","message" and "detail". But, these keys are never found in any Neutron(Server)Exceptions so, instead the generic NeutronClientException is raised.</div>
<div><br></div><div>If you look at how Neutron(Server) exceptions are defined (quantum/quantum/common/exceptions.py), indeed there's no mention of 'type' or 'detail' (though 'message' is defined). So its "logic" that neutronclient always raises the generic NeutronClientException.</div>
<div><br></div><div>Also see this bug reports : </div><div><a href="https://bugs.launchpad.net/python-neutronclient/+bug/1178734">https://bugs.launchpad.net/python-neutronclient/+bug/1178734</a><br></div><div><a href="https://bugs.launchpad.net/python-neutronclient/+bug/1187698">https://bugs.launchpad.net/python-neutronclient/+bug/1187698</a><br>
</div><div><br></div><div><br></div><div>What should we do about this ? :</div><div>1) Pretty much nothing. Nova-api still catches only the generic NeutronClientException, and based the further processing of the exception on the correct status_code reported by neutronclient. In that case, we should clean the code of neutronclient::exception_handler_v20() because it has a lot of dead code. </div>
<div>2) Enrich/enhance the NeutronServer exceptions with a type and detail properties. This way, when a NeutronServer exception is serialized and sent to python-neutronclient, the specific NeutronClient exception can be raised (and then sent to nova-api).</div>
<div>3) You tell me :) !</div><div><br></div><div>Thanks a lot</div><div>Jordan</div><div><br></div><div><br></div><div><br></div></div>