)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"40cba1945851be2ffdd02a94abcf67d767ce89b0","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Radomir Dopieralski \u003copenstack@sheep.art.pl\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-09-15 09:40:25 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Gracefully handle 404 responses from neutron when polling for floating IPs"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Neutron may respond with a 404 error when polled for floating IPs when there"},{"line_number":10,"context_line":"is no L3 agent running on a node. This was handled in get_floating_ip method,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"ba15a1d1_064b1b5a","line":7,"updated":"2015-09-17 16:45:47.000000000","message":"Well not that gracefully - we just re-raise a different ex :)","commit_id":"4da626e3a031bdf79b6d5286df4eafa2c4678389"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"00706c35cdb4adf61ddbe1b5f12451a2ee75f1d7","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Radomir Dopieralski \u003copenstack@sheep.art.pl\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-09-15 09:40:25 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Gracefully handle 404 responses from neutron when polling for floating IPs"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Neutron may respond with a 404 error when polled for floating IPs when there"},{"line_number":10,"context_line":"is no L3 agent running on a node. This was handled in get_floating_ip method,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"ba15a1d1_06a46205","line":7,"in_reply_to":"ba15a1d1_064b1b5a","updated":"2015-09-18 09:16:39.000000000","message":"Gracefuller than error 500 :)","commit_id":"4da626e3a031bdf79b6d5286df4eafa2c4678389"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"5e78916c99dfd62a4a21457c39e86c28f2a8254b","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Handle 404 responses from neutron when polling for floating IPs"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Neutron may respond with a 404 error when polled for floating IPs when there"},{"line_number":10,"context_line":"is no L3 agent running on a node. This was handled in get_floating_ip method,"},{"line_number":11,"context_line":"but not in the other methods. This patch adds code to handle it also inside"},{"line_number":12,"context_line":"get_floating_ips_by_address and get_floating_ips_by_project."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"9a1a9d01_244d5f3e","line":10,"updated":"2015-09-28 12:32:53.000000000","message":"That is not correct.\n\nThe floating IPs API is not available (404) when the L3 service plugin is not installed in /etc/neutron/neutron.conf / service_plugins.\n\nWhen enabled it will accept requests, regardless of the agent status.","commit_id":"d50593afa2ecdf43a9c1a4f0f9e85f4f10a68a58"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"7fc33efc8345512073715be8de3d616fa9f6c3fa","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Handle 404 responses from neutron when polling for floating IPs"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Neutron may respond with a 404 error when polled for floating IPs when there"},{"line_number":10,"context_line":"is no L3 agent running on a node. This was handled in get_floating_ip method,"},{"line_number":11,"context_line":"but not in the other methods. This patch adds code to handle it also inside"},{"line_number":12,"context_line":"get_floating_ips_by_address and get_floating_ips_by_project."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"9a1a9d01_c44ee395","line":10,"in_reply_to":"9a1a9d01_244d5f3e","updated":"2015-09-28 12:41:23.000000000","message":"Done","commit_id":"d50593afa2ecdf43a9c1a4f0f9e85f4f10a68a58"}],"nova/api/openstack/compute/floating_ips.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3835b29b1620ea8c6ec6a177d472c7aaed7d19b5","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        return _translate_floating_ip_view(floating_ip)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    @extensions.expected_errors((404,))"},{"line_number":114,"context_line":"    def index(self, req):"},{"line_number":115,"context_line":"        \"\"\"Return a list of floating ips allocated to a project.\"\"\""},{"line_number":116,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_296936f9","line":113,"updated":"2015-09-18 12:12:28.000000000","message":"Actually we support @extensions.expected_errors(404), but it\u0027s fine, I don\u0027t want to block this patch.","commit_id":"4da626e3a031bdf79b6d5286df4eafa2c4678389"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"7b6930496bc3455c76840fa1753c5bb53dc53d39","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            floating_ips \u003d ("},{"line_number":121,"context_line":"                self.network_api.get_floating_ips_by_project(context))"},{"line_number":122,"context_line":"        except exception.FloatingIpNotFoundForProject as e:"},{"line_number":123,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        return _translate_floating_ips_view(floating_ips)"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_3a16e6a7","line":123,"updated":"2015-09-28 04:27:51.000000000","message":"When resources don\u0027t exist, the corresponding *index* API returns the empty dict in most APIs.\n\nSo from the viewpoint of API consistency, this exception seems a little odd.\n\nIn addition, is the situation that neutron L3 agent is disable common?\nIf cloud operators need to fix this problem with changing server side, current HTTP500 is not so bad because that is not client side problem(HTTP40X).\n\nI tried to reproduce this problem on my local env, but I could not do it with the following localrc:\n\n disable_service n-net\n enable_service q-svc q-agt q-dhcp\n disable_service q-l3\n\nNova returns empty dict like:\n\n $ nova floating-ip-list\n +----+----+-----------+----------+------+\n | Id | IP | Server Id | Fixed IP | Pool |\n +----+----+-----------+----------+------+\n +----+----+-----------+----------+------+\n\nNeutron also doesn\u0027t return exception like:\n\n $ neutron --debug floatingip-list\n [..]\n DEBUG: keystoneclient.session RESP: [200] date: Mon, 28 Sep 2015 04:24:19 GMT connection: keep-alive content-type: application/json; charset\u003dUTF-8 content-length: 19 x-openstack-request-id: req-10b02f54-7569-44fb-8e83-236c805c7ae3\n RESP BODY: {\"floatingips\": []}","commit_id":"d50593afa2ecdf43a9c1a4f0f9e85f4f10a68a58"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"da3bb1056571b6165ec02931c7bb8e22421e8f4a","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            floating_ips \u003d ("},{"line_number":121,"context_line":"                self.network_api.get_floating_ips_by_project(context))"},{"line_number":122,"context_line":"        except exception.FloatingIpNotFoundForProject as e:"},{"line_number":123,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        return _translate_floating_ips_view(floating_ips)"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_536385dc","line":123,"in_reply_to":"9a1a9d01_3a16e6a7","updated":"2015-09-28 07:00:06.000000000","message":"yea, I have same question on previous patchset, but I didn\u0027t get answer, better have hint tell us neutron will return that exception.","commit_id":"d50593afa2ecdf43a9c1a4f0f9e85f4f10a68a58"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"eb80948ac8fdca0bd9267631593c6705688545c0","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            floating_ips \u003d ("},{"line_number":121,"context_line":"                self.network_api.get_floating_ips_by_project(context))"},{"line_number":122,"context_line":"        except exception.FloatingIpNotFoundForProject as e:"},{"line_number":123,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        return _translate_floating_ips_view(floating_ips)"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_b071aae2","line":123,"in_reply_to":"9a1a9d01_536385dc","updated":"2015-09-28 12:25:25.000000000","message":"If you look at the bug that this patch tries to fix, you will see the description of this case. Quoting people from #neutron: \"it\u0027s expected to return 404 if L3 services are not installed\". My understanding is that the whole /floatingips endpoint doesn\u0027t exist then.","commit_id":"d50593afa2ecdf43a9c1a4f0f9e85f4f10a68a58"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"5e78916c99dfd62a4a21457c39e86c28f2a8254b","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            floating_ips \u003d ("},{"line_number":121,"context_line":"                self.network_api.get_floating_ips_by_project(context))"},{"line_number":122,"context_line":"        except exception.FloatingIpNotFoundForProject as e:"},{"line_number":123,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        return _translate_floating_ips_view(floating_ips)"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_64b597ec","line":123,"in_reply_to":"9a1a9d01_b071aae2","updated":"2015-09-28 12:32:53.000000000","message":"It\u0027s not an empty floating list what triggers this from neutron, see my commit message comments.\n\nIt\u0027s that the L3 service is not installed, thus, there is no support for floating IPs or routers in such case, and it\u0027s a totally valid use case: for example VMs connected to the external \u0026 internal network, some other VMs only in the internal, etc..","commit_id":"d50593afa2ecdf43a9c1a4f0f9e85f4f10a68a58"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"d3584304ca547d80f3ce9b1d8d4fc7e7a2249c05","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        return _translate_floating_ip_view(floating_ip)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    @extensions.expected_errors(404)"},{"line_number":114,"context_line":"    def index(self, req):"},{"line_number":115,"context_line":"        \"\"\"Return a list of floating ips allocated to a project.\"\"\""},{"line_number":116,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a1a9d01_9ada5c4b","line":113,"updated":"2015-09-29 07:00:29.000000000","message":"humm, it is new error code so need microversion? :(","commit_id":"104ae2b54506945625ff8855353dc9dd6c4b190f"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"1855b4b618f5d13896596c8911a98893b4352f5e","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        return _translate_floating_ip_view(floating_ip)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    @extensions.expected_errors(404)"},{"line_number":114,"context_line":"    def index(self, req):"},{"line_number":115,"context_line":"        \"\"\"Return a list of floating ips allocated to a project.\"\"\""},{"line_number":116,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a1a9d01_f5412baa","line":113,"in_reply_to":"9a1a9d01_9ada5c4b","updated":"2015-09-29 07:35:20.000000000","message":"What do you mean? Can you explain what is a microversion and how I add it?","commit_id":"104ae2b54506945625ff8855353dc9dd6c4b190f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0831067d37ef0e85af84074eb03f1741151b4de2","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        return _translate_floating_ip_view(floating_ip)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    @extensions.expected_errors(404)"},{"line_number":114,"context_line":"    def index(self, req):"},{"line_number":115,"context_line":"        \"\"\"Return a list of floating ips allocated to a project.\"\"\""},{"line_number":116,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a1a9d01_c594d8e9","line":113,"in_reply_to":"9a1a9d01_a192f9f4","updated":"2015-10-02 11:05:22.000000000","message":"so we go through the current policy:\nhttp://docs.openstack.org/developer/nova/api_microversion_dev.html#f1\n\nI think that says we might want to return a 400 error in this case, but that honestly seems misleading.\n\nThis feels more like a bug fixes, as API users would always assume 404 is possible here, even if it wasn\u0027t for a small amount of time.","commit_id":"104ae2b54506945625ff8855353dc9dd6c4b190f"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"d43a0f40b25c5e1ed3ac9820850a9813a7455f2f","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        return _translate_floating_ip_view(floating_ip)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    @extensions.expected_errors(404)"},{"line_number":114,"context_line":"    def index(self, req):"},{"line_number":115,"context_line":"        \"\"\"Return a list of floating ips allocated to a project.\"\"\""},{"line_number":116,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a1a9d01_a192f9f4","line":113,"in_reply_to":"9a1a9d01_b51e53b9","updated":"2015-10-02 10:59:26.000000000","message":"We don\u0027t need a microversion for this kind of fix","commit_id":"104ae2b54506945625ff8855353dc9dd6c4b190f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"e11f2e574d202663d028114662bd85b996f1c63b","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        return _translate_floating_ip_view(floating_ip)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    @extensions.expected_errors(404)"},{"line_number":114,"context_line":"    def index(self, req):"},{"line_number":115,"context_line":"        \"\"\"Return a list of floating ips allocated to a project.\"\"\""},{"line_number":116,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a1a9d01_0890a594","line":113,"in_reply_to":"9a1a9d01_c594d8e9","updated":"2015-10-02 11:20:19.000000000","message":"Yea that sounds fine. 404 is always one of the return one for url non-exist case. I will update the microversion doc also.","commit_id":"104ae2b54506945625ff8855353dc9dd6c4b190f"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"b973145a27edf4fb626bc118762101f27888d376","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        return _translate_floating_ip_view(floating_ip)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    @extensions.expected_errors(404)"},{"line_number":114,"context_line":"    def index(self, req):"},{"line_number":115,"context_line":"        \"\"\"Return a list of floating ips allocated to a project.\"\"\""},{"line_number":116,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a1a9d01_b51e53b9","line":113,"in_reply_to":"9a1a9d01_f5412baa","updated":"2015-09-29 07:36:59.000000000","message":"It\u0027s fixing a bug that returned error 500 by a programming error, where it should have returned 404.","commit_id":"104ae2b54506945625ff8855353dc9dd6c4b190f"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"99288dee943ec6dad8b8fa5a7aab0d3ba368ea45","unresolved":false,"context_lines":[{"line_number":184,"context_line":"            msg \u003d _(\u0027Cannot disassociate auto assigned floating ip\u0027)"},{"line_number":185,"context_line":"            raise webob.exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":186,"context_line":"        except exception.FloatingIpNotFoundForAddress as ex:"},{"line_number":187,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dex.format_message())"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"class FloatingIPActionController(wsgi.Controller):"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_814fbd91","line":187,"updated":"2015-10-06 10:34:18.000000000","message":"This one is actually spurious, the error is being caught and transformed into a 404 earlier: https://github.com/openstack/nova/blob/master/nova/api/openstack/compute/legacy_v2/contrib/floating_ips.py#L268","commit_id":"104ae2b54506945625ff8855353dc9dd6c4b190f"},{"author":{"_account_id":14358,"name":"Marian Horban","email":"m.horban@gmail.com","username":"mhorban"},"change_message_id":"e611d26860c0c9c54bc03f03eef44e4bb84b8b1e","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            floating_ips \u003d ("},{"line_number":121,"context_line":"                self.network_api.get_floating_ips_by_project(context))"},{"line_number":122,"context_line":"        except exception.FloatingIpNotFoundForProject as e:"},{"line_number":123,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        return _translate_floating_ips_view(floating_ips)"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1a26ad4f_5255151b","line":123,"updated":"2015-10-27 13:51:53.000000000","message":"If we want to get a list of floating ips allocated to a project and there is no allocated floating ips... why don\u0027t we return empty list?","commit_id":"baea5efda4c4fabf7164c76da663e00f3a201138"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"02e020c910e6a4f5e3338b1b1e50e34e7ca7fc62","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            floating_ips \u003d ("},{"line_number":121,"context_line":"                self.network_api.get_floating_ips_by_project(context))"},{"line_number":122,"context_line":"        except exception.FloatingIpNotFoundForProject as e:"},{"line_number":123,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        return _translate_floating_ips_view(floating_ips)"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1a26ad4f_0118a983","line":123,"in_reply_to":"1a26ad4f_5255151b","updated":"2015-10-27 15:50:46.000000000","message":"I\u0027m not trying to chnage the behavior, I\u0027m merely trying to gracefully react to an error. If you think this behavior should be changed, I suppose that would require a blueprint and a larger discussion. In the mean time, I think it\u0027s still better to throw 404 than 500.","commit_id":"baea5efda4c4fabf7164c76da663e00f3a201138"},{"author":{"_account_id":14358,"name":"Marian Horban","email":"m.horban@gmail.com","username":"mhorban"},"change_message_id":"e611d26860c0c9c54bc03f03eef44e4bb84b8b1e","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        except exception.FloatingIpBadRequest as e:"},{"line_number":153,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":154,"context_line":"        except exception.FloatingIpNotFoundForAddress as e:"},{"line_number":155,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        return _translate_floating_ip_view(ip)"},{"line_number":158,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1a26ad4f_f5d20b34","line":155,"updated":"2015-10-27 13:51:53.000000000","message":"To my mind it is a little bit confusing for user when he trys to \u0027create\u0027 something and gets HTTPNotFound.\nIt looks to me that we can get HTTPNotFound exception here because of races among DB requests . In this case appropriate exception/message should be returned.","commit_id":"baea5efda4c4fabf7164c76da663e00f3a201138"},{"author":{"_account_id":14358,"name":"Marian Horban","email":"m.horban@gmail.com","username":"mhorban"},"change_message_id":"1c5e38b0ce98c54b13156ac2082011310919a267","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        except exception.FloatingIpBadRequest as e:"},{"line_number":153,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":154,"context_line":"        except exception.FloatingIpNotFoundForAddress as e:"},{"line_number":155,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        return _translate_floating_ip_view(ip)"},{"line_number":158,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1a26ad4f_2044a772","line":155,"in_reply_to":"1a26ad4f_a15bf553","updated":"2015-10-28 10:31:55.000000000","message":"It looks to me that this exception could appear occasionally(because of races of DB requests). So I would add some \u0027retry\u0027 logic or at least tell user that he can try again one more time :)","commit_id":"baea5efda4c4fabf7164c76da663e00f3a201138"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"02e020c910e6a4f5e3338b1b1e50e34e7ca7fc62","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        except exception.FloatingIpBadRequest as e:"},{"line_number":153,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":154,"context_line":"        except exception.FloatingIpNotFoundForAddress as e:"},{"line_number":155,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        return _translate_floating_ip_view(ip)"},{"line_number":158,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1a26ad4f_a15bf553","line":155,"in_reply_to":"1a26ad4f_f5d20b34","updated":"2015-10-27 15:50:46.000000000","message":"And what would be the apropriate exception/message in your opinion?","commit_id":"baea5efda4c4fabf7164c76da663e00f3a201138"}],"nova/api/openstack/compute/legacy_v2/contrib/floating_ips.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"d3584304ca547d80f3ce9b1d8d4fc7e7a2249c05","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            floating_ips \u003d ("},{"line_number":105,"context_line":"                self.network_api.get_floating_ips_by_project(context))"},{"line_number":106,"context_line":"        except exception.FloatingIpNotFoundForProject as e:"},{"line_number":107,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        return _translate_floating_ips_view(floating_ips)"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a1a9d01_9a325c5e","line":107,"updated":"2015-09-29 07:00:29.000000000","message":"if fixing this for legacy v2 then, how about others?","commit_id":"104ae2b54506945625ff8855353dc9dd6c4b190f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"e11f2e574d202663d028114662bd85b996f1c63b","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            floating_ips \u003d ("},{"line_number":105,"context_line":"                self.network_api.get_floating_ips_by_project(context))"},{"line_number":106,"context_line":"        except exception.FloatingIpNotFoundForProject as e:"},{"line_number":107,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        return _translate_floating_ips_view(floating_ips)"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a1a9d01_e8d45148","line":107,"in_reply_to":"9a1a9d01_95322f5e","updated":"2015-10-02 11:20:19.000000000","message":"I meant for  create and delete request like you fixed on compute/floating_ips.py.","commit_id":"104ae2b54506945625ff8855353dc9dd6c4b190f"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"1855b4b618f5d13896596c8911a98893b4352f5e","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            floating_ips \u003d ("},{"line_number":105,"context_line":"                self.network_api.get_floating_ips_by_project(context))"},{"line_number":106,"context_line":"        except exception.FloatingIpNotFoundForProject as e:"},{"line_number":107,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        return _translate_floating_ips_view(floating_ips)"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a1a9d01_95322f5e","line":107,"in_reply_to":"9a1a9d01_9a325c5e","updated":"2015-09-29 07:35:20.000000000","message":"What do you mean? It\u0027s also fixed for the current version.","commit_id":"104ae2b54506945625ff8855353dc9dd6c4b190f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"1f0e8a7f76822fddb799f9b307dc216aed14cc99","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        except exception.FloatingIpPoolNotFound as e:"},{"line_number":134,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":135,"context_line":"        except exception.FloatingIpBadRequest as e:"},{"line_number":136,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        return _translate_floating_ip_view(ip)"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a1a9d01_68f5a181","line":136,"updated":"2015-10-02 11:30:31.000000000","message":"good point, need to hand FloatingIpNotFoundForAddress here, I assume?","commit_id":"104ae2b54506945625ff8855353dc9dd6c4b190f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"043c33be9ecd8b626abe1e1a268eed49fecd4e52","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    except exception.Forbidden:"},{"line_number":71,"context_line":"        raise webob.exc.HTTPForbidden()"},{"line_number":72,"context_line":"    except exception.CannotDisassociateAutoAssignedFloatingIP:"},{"line_number":73,"context_line":"        msg \u003d _(\u0027Cannot disassociate auto assigned floating ip\u0027)"},{"line_number":74,"context_line":"        raise webob.exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_2f407d33","line":73,"updated":"2015-10-22 04:57:41.000000000","message":"Here too.  need to catch FloatingIpNotFoundForAddress","commit_id":"7a026d7ea100bedfa1ec4bd4dcb9e0c075ee74c3"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"e1c8fea578bfa8a21034b814fd9522511168de94","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    except exception.Forbidden:"},{"line_number":71,"context_line":"        raise webob.exc.HTTPForbidden()"},{"line_number":72,"context_line":"    except exception.CannotDisassociateAutoAssignedFloatingIP:"},{"line_number":73,"context_line":"        msg \u003d _(\u0027Cannot disassociate auto assigned floating ip\u0027)"},{"line_number":74,"context_line":"        raise webob.exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_77985478","line":73,"in_reply_to":"3a29b11f_2f407d33","updated":"2015-10-23 09:55:44.000000000","message":"That is already being caught in self.network_api.disassociate_floating_ip","commit_id":"7a026d7ea100bedfa1ec4bd4dcb9e0c075ee74c3"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"0ee3a79559d11aa9a9b10431dece27912c646da1","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    except exception.Forbidden:"},{"line_number":71,"context_line":"        raise webob.exc.HTTPForbidden()"},{"line_number":72,"context_line":"    except exception.CannotDisassociateAutoAssignedFloatingIP:"},{"line_number":73,"context_line":"        msg \u003d _(\u0027Cannot disassociate auto assigned floating ip\u0027)"},{"line_number":74,"context_line":"        raise webob.exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_89f6388d","line":73,"in_reply_to":"3a29b11f_49b3404d","updated":"2015-10-23 10:28:14.000000000","message":"Done","commit_id":"7a026d7ea100bedfa1ec4bd4dcb9e0c075ee74c3"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"fb4bf021a5cecb20dbe93bf5dadfca606624805f","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    except exception.Forbidden:"},{"line_number":71,"context_line":"        raise webob.exc.HTTPForbidden()"},{"line_number":72,"context_line":"    except exception.CannotDisassociateAutoAssignedFloatingIP:"},{"line_number":73,"context_line":"        msg \u003d _(\u0027Cannot disassociate auto assigned floating ip\u0027)"},{"line_number":74,"context_line":"        raise webob.exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_49b3404d","line":73,"in_reply_to":"3a29b11f_77985478","updated":"2015-10-23 10:12:56.000000000","message":"Argh, sorry, you are right.","commit_id":"7a026d7ea100bedfa1ec4bd4dcb9e0c075ee74c3"}],"nova/network/neutronv2/api.py":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"5dfef6bbf5694a338618d23466c42b564ad26889","unresolved":false,"context_lines":[{"line_number":1336,"context_line":"        try:"},{"line_number":1337,"context_line":"            fip \u003d self._get_floating_ip_by_address(client, address)"},{"line_number":1338,"context_line":"        except neutron_client_exc.NeutronClientException as e:"},{"line_number":1339,"context_line":"            if e.status_code \u003d\u003d 404:"},{"line_number":1340,"context_line":"                raise exception.FloatingIpNotFoundForAddress(address\u003daddress)"},{"line_number":1341,"context_line":"            else:"},{"line_number":1342,"context_line":"                with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_f1a4e7a6","line":1339,"updated":"2015-08-25 15:47:29.000000000","message":"just a question , are we able to create this exception in neutron client and catch it here ? I know neutron client can do it but not sure it can do all support like ?\n\nexcept (neutron_client_exc.IpAddressGenerationFailureClient,\n1398                 neutron_client_exc.ExternalIpAddressExhaustedClient) as e:","commit_id":"475b366c6cac52c690d5055a5b471e338cf991e8"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"a98af4deb8a1bce99d7f2b068abfa4a3c3bff43f","unresolved":false,"context_lines":[{"line_number":1336,"context_line":"        try:"},{"line_number":1337,"context_line":"            fip \u003d self._get_floating_ip_by_address(client, address)"},{"line_number":1338,"context_line":"        except neutron_client_exc.NeutronClientException as e:"},{"line_number":1339,"context_line":"            if e.status_code \u003d\u003d 404:"},{"line_number":1340,"context_line":"                raise exception.FloatingIpNotFoundForAddress(address\u003daddress)"},{"line_number":1341,"context_line":"            else:"},{"line_number":1342,"context_line":"                with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_948eb92c","line":1339,"in_reply_to":"fa1b9901_f1a4e7a6","updated":"2015-08-25 16:02:17.000000000","message":"I wouldn\u0027t know, but considering that similar code is at lines 1285 and 1449, I would wager that there is a reason for it.","commit_id":"475b366c6cac52c690d5055a5b471e338cf991e8"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"fd7b2b046a90d7f152f6bd0ffa0fe9000df8a6d8","unresolved":false,"context_lines":[{"line_number":1367,"context_line":"            result[\u0027instance\u0027] \u003d None"},{"line_number":1368,"context_line":"        return result"},{"line_number":1369,"context_line":""},{"line_number":1370,"context_line":"    def get_floating_ip_by_address(self, context, address):"},{"line_number":1371,"context_line":"        \"\"\"Return a floating ip given an address.\"\"\""},{"line_number":1372,"context_line":"        client \u003d get_client(context)"},{"line_number":1373,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_1629ed89","line":1370,"updated":"2015-09-18 10:34:32.000000000","message":"This does not seem to get called anywhere where we are not handling the new exception now.","commit_id":"4da626e3a031bdf79b6d5286df4eafa2c4678389"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"40cba1945851be2ffdd02a94abcf67d767ce89b0","unresolved":false,"context_lines":[{"line_number":1372,"context_line":"        client \u003d get_client(context)"},{"line_number":1373,"context_line":"        try:"},{"line_number":1374,"context_line":"            fip \u003d self._get_floating_ip_by_address(client, address)"},{"line_number":1375,"context_line":"        except neutron_client_exc.NeutronClientException as e:"},{"line_number":1376,"context_line":"            if e.status_code \u003d\u003d 404:"},{"line_number":1377,"context_line":"                raise exception.FloatingIpNotFoundForAddress(address\u003daddress)"},{"line_number":1378,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_661f7708","line":1375,"updated":"2015-09-17 16:45:47.000000000","message":"this screams for a decorator/context manager of some sort - a lot of repetition here.","commit_id":"4da626e3a031bdf79b6d5286df4eafa2c4678389"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3835b29b1620ea8c6ec6a177d472c7aaed7d19b5","unresolved":false,"context_lines":[{"line_number":1372,"context_line":"        client \u003d get_client(context)"},{"line_number":1373,"context_line":"        try:"},{"line_number":1374,"context_line":"            fip \u003d self._get_floating_ip_by_address(client, address)"},{"line_number":1375,"context_line":"        except neutron_client_exc.NeutronClientException as e:"},{"line_number":1376,"context_line":"            if e.status_code \u003d\u003d 404:"},{"line_number":1377,"context_line":"                raise exception.FloatingIpNotFoundForAddress(address\u003daddress)"},{"line_number":1378,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_cc5688cd","line":1375,"updated":"2015-09-18 12:12:28.000000000","message":"you already catch the 404 case in _get_floating_ip_by_address at line 1467","commit_id":"4da626e3a031bdf79b6d5286df4eafa2c4678389"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"00706c35cdb4adf61ddbe1b5f12451a2ee75f1d7","unresolved":false,"context_lines":[{"line_number":1372,"context_line":"        client \u003d get_client(context)"},{"line_number":1373,"context_line":"        try:"},{"line_number":1374,"context_line":"            fip \u003d self._get_floating_ip_by_address(client, address)"},{"line_number":1375,"context_line":"        except neutron_client_exc.NeutronClientException as e:"},{"line_number":1376,"context_line":"            if e.status_code \u003d\u003d 404:"},{"line_number":1377,"context_line":"                raise exception.FloatingIpNotFoundForAddress(address\u003daddress)"},{"line_number":1378,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_c6750a64","line":1375,"in_reply_to":"ba15a1d1_661f7708","updated":"2015-09-18 09:16:39.000000000","message":"I would still need to pass the exception to throw, the parameter for it and the message to display, because they are different in every case, albeit similar.\nSo it would be something like\n\n    with catch_neutron_404(exception.FloatingIpNotFoundForAddress, _LE(\u0027Unable to access floating IP for address {address}\u0027), address\u003daddress):\n        fip \u003d self._get_floating_ip_by_address(client, address)\n\nNot sure if it so much better, and readability suffers, as you now have to check what that does.","commit_id":"4da626e3a031bdf79b6d5286df4eafa2c4678389"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"fd7b2b046a90d7f152f6bd0ffa0fe9000df8a6d8","unresolved":false,"context_lines":[{"line_number":1372,"context_line":"        client \u003d get_client(context)"},{"line_number":1373,"context_line":"        try:"},{"line_number":1374,"context_line":"            fip \u003d self._get_floating_ip_by_address(client, address)"},{"line_number":1375,"context_line":"        except neutron_client_exc.NeutronClientException as e:"},{"line_number":1376,"context_line":"            if e.status_code \u003d\u003d 404:"},{"line_number":1377,"context_line":"                raise exception.FloatingIpNotFoundForAddress(address\u003daddress)"},{"line_number":1378,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_f327ab60","line":1375,"in_reply_to":"ba15a1d1_c6750a64","updated":"2015-09-18 10:34:32.000000000","message":"Ok fair enough","commit_id":"4da626e3a031bdf79b6d5286df4eafa2c4678389"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"83a88b1fe876b25b4ef2de29cbfe72f1da86b831","unresolved":false,"context_lines":[{"line_number":1372,"context_line":"        client \u003d get_client(context)"},{"line_number":1373,"context_line":"        try:"},{"line_number":1374,"context_line":"            fip \u003d self._get_floating_ip_by_address(client, address)"},{"line_number":1375,"context_line":"        except neutron_client_exc.NeutronClientException as e:"},{"line_number":1376,"context_line":"            if e.status_code \u003d\u003d 404:"},{"line_number":1377,"context_line":"                raise exception.FloatingIpNotFoundForAddress(address\u003daddress)"},{"line_number":1378,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_fdb534ec","line":1375,"in_reply_to":"ba15a1d1_cc5688cd","updated":"2015-09-18 13:18:04.000000000","message":"You are right, I added that second one later on, and forgot this one.","commit_id":"4da626e3a031bdf79b6d5286df4eafa2c4678389"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"fd7b2b046a90d7f152f6bd0ffa0fe9000df8a6d8","unresolved":false,"context_lines":[{"line_number":1386,"context_line":"        port_dict \u003d self._setup_port_dict(context, client, fip[\u0027port_id\u0027])"},{"line_number":1387,"context_line":"        return self._format_floating_ip_model(fip, pool_dict, port_dict)"},{"line_number":1388,"context_line":""},{"line_number":1389,"context_line":"    def get_floating_ips_by_project(self, context):"},{"line_number":1390,"context_line":"        client \u003d get_client(context)"},{"line_number":1391,"context_line":"        project_id \u003d context.project_id"},{"line_number":1392,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_33668351","line":1389,"updated":"2015-09-18 10:34:32.000000000","message":"TBH - I can\u0027t figure out if this is ever called anymore. Might be worth removing actually","commit_id":"4da626e3a031bdf79b6d5286df4eafa2c4678389"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"fafe8e36831ea69295f36665f0ae20172ffd74c4","unresolved":false,"context_lines":[{"line_number":1386,"context_line":"        port_dict \u003d self._setup_port_dict(context, client, fip[\u0027port_id\u0027])"},{"line_number":1387,"context_line":"        return self._format_floating_ip_model(fip, pool_dict, port_dict)"},{"line_number":1388,"context_line":""},{"line_number":1389,"context_line":"    def get_floating_ips_by_project(self, context):"},{"line_number":1390,"context_line":"        client \u003d get_client(context)"},{"line_number":1391,"context_line":"        project_id \u003d context.project_id"},{"line_number":1392,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_76eb89dc","line":1389,"in_reply_to":"ba15a1d1_33668351","updated":"2015-09-18 10:50:00.000000000","message":"That\u0027s the function where the exception from the original bug was raised, so I think it\u0027s being used.\n\n     Traceback (most recent call last):\n       File \"/usr/lib/python2.7/site-packages/nova/api/openstack/__init__.py\", line 125, in __call__\n         return req.get_response(self.application)\n       File \"/usr/lib/python2.7/site-packages/webob/request.py\", line 1296, in send\n         application, catch_exc_info\u003dFalse)\n       File \"/usr/lib/python2.7/site-packages/webob/request.py\", line 1260, in call_application\n         app_iter \u003d application(self.environ, start_response)\n       File \"/usr/lib/python2.7/site-packages/webob/dec.py\", line 144, in __call__\n         return resp(environ, start_response)\n       File \"/usr/lib/python2.7/site-packages/keystonemiddleware/auth_token/__init__.py\", line 634, in __call__\n         return self._call_app(env, start_response)\n       File \"/usr/lib/python2.7/site-packages/keystonemiddleware/auth_token/__init__.py\", line 554, in _call_app\n         return self._app(env, _fake_start_response)\n       File \"/usr/lib/python2.7/site-packages/webob/dec.py\", line 144, in __call__\n         return resp(environ, start_response)\n       File \"/usr/lib/python2.7/site-packages/webob/dec.py\", line 144, in __call__\n         return resp(environ, start_response)\n       File \"/usr/lib/python2.7/site-packages/routes/middleware.py\", line 131, in __call__\n         response \u003d self.app(environ, start_response)\n       File \"/usr/lib/python2.7/site-packages/webob/dec.py\", line 144, in __call__\n         return resp(environ, start_response)\n       File \"/usr/lib/python2.7/site-packages/webob/dec.py\", line 130, in __call__\n         resp \u003d self.call_func(req, *args, **self.kwargs)\n       File \"/usr/lib/python2.7/site-packages/webob/dec.py\", line 195, in call_func\n         return self.func(req, *args, **kwargs)\n       File \"/usr/lib/python2.7/site-packages/nova/api/openstack/wsgi.py\", line 756, in __call__\n         content_type, body, accept)\n       File \"/usr/lib/python2.7/site-packages/nova/api/openstack/wsgi.py\", line 821, in _process_stack\n         action_result \u003d self.dispatch(meth, request, action_args)\n       File \"/usr/lib/python2.7/site-packages/nova/api/openstack/wsgi.py\", line 911, in dispatch\n         return method(req\u003drequest, **action_args)\n       File \"/usr/lib/python2.7/site-packages/nova/api/openstack/compute/contrib/floating_ips.py\", line 102, in index\n         floating_ips \u003d self.network_api.get_floating_ips_by_project(context)\n       File \"/usr/lib/python2.7/site-packages/nova/network/neutronv2/api.py\", line 1252, in get_floating_ips_by_project\n         fips \u003d client.list_floatingips(tenant_id\u003dproject_id)[\u0027floatingips\u0027]\n       File \"/usr/lib/python2.7/site-packages/neutronclient/v2_0/client.py\", line 102, in with_params\n         ret \u003d self.function(instance, *args, **kwargs)\n       File \"/usr/lib/python2.7/site-packages/neutronclient/v2_0/client.py\", line 691, in list_floatingips\n         **_params)\n       File \"/usr/lib/python2.7/site-packages/neutronclient/v2_0/client.py\", line 307, in list\n         for r in self._pagination(collection, path, **params):\n       File \"/usr/lib/python2.7/site-packages/neutronclient/v2_0/client.py\", line 320, in _pagination\n         res \u003d self.get(path, params\u003dparams)\n       File \"/usr/lib/python2.7/site-packages/neutronclient/v2_0/client.py\", line 293, in get\n         headers\u003dheaders, params\u003dparams)\n       File \"/usr/lib/python2.7/site-packages/neutronclient/v2_0/client.py\", line 270, in retry_request\n         headers\u003dheaders, params\u003dparams)\n       File \"/usr/lib/python2.7/site-packages/neutronclient/v2_0/client.py\", line 211, in do_request\n         self._handle_fault_response(status_code, replybody)\n       File \"/usr/lib/python2.7/site-packages/neutronclient/v2_0/client.py\", line 185, in _handle_fault_response\n         exception_handler_v20(status_code, des_error_body)\n       File \"/usr/lib/python2.7/site-packages/neutronclient/v2_0/client.py\", line 83, in exception_handler_v20\n         message\u003dmessage)\n     NeutronClientException: 404 Not Found","commit_id":"4da626e3a031bdf79b6d5286df4eafa2c4678389"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3835b29b1620ea8c6ec6a177d472c7aaed7d19b5","unresolved":false,"context_lines":[{"line_number":1390,"context_line":"        client \u003d get_client(context)"},{"line_number":1391,"context_line":"        project_id \u003d context.project_id"},{"line_number":1392,"context_line":"        try:"},{"line_number":1393,"context_line":"            fips \u003d client.list_floatingips(tenant_id\u003dproject_id)[\u0027floatingips\u0027]"},{"line_number":1394,"context_line":"        except neutron_client_exc.NeutronClientException as e:"},{"line_number":1395,"context_line":"            if e.status_code \u003d\u003d 404:"},{"line_number":1396,"context_line":"                raise exception.FloatingIpNotFoundForProject("}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_acc23483","line":1393,"updated":"2015-09-18 12:12:28.000000000","message":"Emm...I may not familar with Neutron code. But looks like neutron only return empty list when there isn\u0027t floating match the filters, looks like just some db operations, do you know where it return 404 in neutron. I didn\u0027t find any clue from the API doc.","commit_id":"4da626e3a031bdf79b6d5286df4eafa2c4678389"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"83a88b1fe876b25b4ef2de29cbfe72f1da86b831","unresolved":false,"context_lines":[{"line_number":1390,"context_line":"        client \u003d get_client(context)"},{"line_number":1391,"context_line":"        project_id \u003d context.project_id"},{"line_number":1392,"context_line":"        try:"},{"line_number":1393,"context_line":"            fips \u003d client.list_floatingips(tenant_id\u003dproject_id)[\u0027floatingips\u0027]"},{"line_number":1394,"context_line":"        except neutron_client_exc.NeutronClientException as e:"},{"line_number":1395,"context_line":"            if e.status_code \u003d\u003d 404:"},{"line_number":1396,"context_line":"                raise exception.FloatingIpNotFoundForProject("}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_bdf6dc8c","line":1393,"in_reply_to":"ba15a1d1_acc23483","updated":"2015-09-18 13:18:04.000000000","message":"The particular bug that was reported made that happen when a particular node didn\u0027t have a neutron agent installed. You can see the exception in my response to Nikola\u0027s comment four lines earlier.","commit_id":"4da626e3a031bdf79b6d5286df4eafa2c4678389"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"fd7b2b046a90d7f152f6bd0ffa0fe9000df8a6d8","unresolved":false,"context_lines":[{"line_number":1458,"context_line":""},{"line_number":1459,"context_line":"        return fip[\u0027floatingip\u0027][\u0027floating_ip_address\u0027]"},{"line_number":1460,"context_line":""},{"line_number":1461,"context_line":"    def _get_floating_ip_by_address(self, client, address):"},{"line_number":1462,"context_line":"        \"\"\"Get floatingip from floating ip address.\"\"\""},{"line_number":1463,"context_line":"        if not address:"},{"line_number":1464,"context_line":"            raise exception.FloatingIpNotFoundForAddress(address\u003daddress)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_13349ff9","line":1461,"updated":"2015-09-18 10:34:32.000000000","message":"This does not seem to get called anywhere where we are not handling the new exception now.","commit_id":"4da626e3a031bdf79b6d5286df4eafa2c4678389"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"a9d6238a8bea11e73ff7d0c22c32f193757594a1","unresolved":false,"context_lines":[{"line_number":1372,"context_line":"        client \u003d get_client(context)"},{"line_number":1373,"context_line":"        fip \u003d self._get_floating_ip_by_address(client, address)"},{"line_number":1374,"context_line":"        pool_dict \u003d self._setup_net_dict(client,"},{"line_number":1375,"context_line":"                                         fip[\u0027floating_network_id\u0027])"},{"line_number":1376,"context_line":"        port_dict \u003d self._setup_port_dict(context, client, fip[\u0027port_id\u0027])"},{"line_number":1377,"context_line":"        return self._format_floating_ip_model(fip, pool_dict, port_dict)"},{"line_number":1378,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_4d20f99b","side":"PARENT","line":1375,"updated":"2015-09-25 17:27:41.000000000","message":"this does not seem to be related to the patch really?!","commit_id":"e70ff282f8ed92133942f4d878c2b5f8564f83a8"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"eb80948ac8fdca0bd9267631593c6705688545c0","unresolved":false,"context_lines":[{"line_number":1372,"context_line":"        client \u003d get_client(context)"},{"line_number":1373,"context_line":"        fip \u003d self._get_floating_ip_by_address(client, address)"},{"line_number":1374,"context_line":"        pool_dict \u003d self._setup_net_dict(client,"},{"line_number":1375,"context_line":"                                         fip[\u0027floating_network_id\u0027])"},{"line_number":1376,"context_line":"        port_dict \u003d self._setup_port_dict(context, client, fip[\u0027port_id\u0027])"},{"line_number":1377,"context_line":"        return self._format_floating_ip_model(fip, pool_dict, port_dict)"},{"line_number":1378,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_50ddaede","side":"PARENT","line":1375,"in_reply_to":"9a1a9d01_4d20f99b","updated":"2015-09-28 12:25:25.000000000","message":"yeah, autoformatting, sorry","commit_id":"e70ff282f8ed92133942f4d878c2b5f8564f83a8"}],"nova/tests/unit/api/openstack/compute/test_floating_ips.py":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"546eeb130fbba503aaab137e5a44daf1b944c184","unresolved":false,"context_lines":[{"line_number":729,"context_line":"                            \u0027removeFloatingIp\u0027: {"},{"line_number":730,"context_line":"                                \u0027address\u0027: \u002710.10.10.10\u0027,"},{"line_number":731,"context_line":"                            },"},{"line_number":732,"context_line":"                          })"},{"line_number":733,"context_line":""},{"line_number":734,"context_line":"# these are a few bad param tests"},{"line_number":735,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba15a1d1_6f004735","line":732,"updated":"2015-09-14 20:03:03.000000000","message":"I would think split these test cases into 3 cases \nto test index, create and delete respectively to make logic more clear\n\nAlso, new cases are preferred to use mock instead of stub\n\nseems pep8 fail is valid.. need update to fix it","commit_id":"dbda68d74740a79c2c751313789348874ad24baf"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"4c8eb036819ac7b3374bf5a197c79d5d5c94356d","unresolved":false,"context_lines":[{"line_number":729,"context_line":"                            \u0027removeFloatingIp\u0027: {"},{"line_number":730,"context_line":"                                \u0027address\u0027: \u002710.10.10.10\u0027,"},{"line_number":731,"context_line":"                            },"},{"line_number":732,"context_line":"                          })"},{"line_number":733,"context_line":""},{"line_number":734,"context_line":"# these are a few bad param tests"},{"line_number":735,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba15a1d1_14af4c95","line":732,"in_reply_to":"ba15a1d1_6f004735","updated":"2015-09-15 07:42:30.000000000","message":"Thanks. I split the tests and rewrote them to use mock.","commit_id":"dbda68d74740a79c2c751313789348874ad24baf"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"bba63a5da3a1dc6d7d458d5e111160ae53abae30","unresolved":false,"context_lines":[{"line_number":713,"context_line":"                project\u003dcontext.project_id)"},{"line_number":714,"context_line":""},{"line_number":715,"context_line":"        with mock.patch.object(network.api.API, \"get_floating_ips_by_project\","},{"line_number":716,"context_line":"                               fake_get_floating_ips_by_project):"},{"line_number":717,"context_line":"            self.assertRaises(webob.exc.HTTPNotFound, self.controller.index,"},{"line_number":718,"context_line":"                              self.fake_req)"},{"line_number":719,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_60a72350","line":716,"range":{"start_line":716,"start_character":31,"end_line":716,"end_character":63},"updated":"2015-09-24 16:07:32.000000000","message":"Instead of making a fake method, you can just do side_effect\u003dmy_exception.\n\nGiven that, I\u0027d prefer this mock was applied as a decorator.","commit_id":"d50593afa2ecdf43a9c1a4f0f9e85f4f10a68a58"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"d81f4c33830c492cdd0917e44a92f687adcefc28","unresolved":false,"context_lines":[{"line_number":713,"context_line":"                project\u003dcontext.project_id)"},{"line_number":714,"context_line":""},{"line_number":715,"context_line":"        with mock.patch.object(network.api.API, \"get_floating_ips_by_project\","},{"line_number":716,"context_line":"                               fake_get_floating_ips_by_project):"},{"line_number":717,"context_line":"            self.assertRaises(webob.exc.HTTPNotFound, self.controller.index,"},{"line_number":718,"context_line":"                              self.fake_req)"},{"line_number":719,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_44dc1d12","line":716,"in_reply_to":"9a1a9d01_0d42013f","updated":"2015-09-28 08:56:04.000000000","message":"Ah fair enough - then apply the mock as a decorator and set the side-effect later:\n\n  @mock.patch.object(network.api.API, \"get_floating_ips_by_project\")\n  def test_floating_ip_client_404_index(self, mock_floating):\n    mock_floating.side_effect \u003d exception.FloatingIpNotFoundForProject(\n                project\u003dcontext.project_id)","commit_id":"d50593afa2ecdf43a9c1a4f0f9e85f4f10a68a58"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"eb80948ac8fdca0bd9267631593c6705688545c0","unresolved":false,"context_lines":[{"line_number":713,"context_line":"                project\u003dcontext.project_id)"},{"line_number":714,"context_line":""},{"line_number":715,"context_line":"        with mock.patch.object(network.api.API, \"get_floating_ips_by_project\","},{"line_number":716,"context_line":"                               fake_get_floating_ips_by_project):"},{"line_number":717,"context_line":"            self.assertRaises(webob.exc.HTTPNotFound, self.controller.index,"},{"line_number":718,"context_line":"                              self.fake_req)"},{"line_number":719,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_705b1255","line":716,"in_reply_to":"9a1a9d01_44dc1d12","updated":"2015-09-28 12:25:25.000000000","message":"thanks, I will try that","commit_id":"d50593afa2ecdf43a9c1a4f0f9e85f4f10a68a58"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"a9d6238a8bea11e73ff7d0c22c32f193757594a1","unresolved":false,"context_lines":[{"line_number":713,"context_line":"                project\u003dcontext.project_id)"},{"line_number":714,"context_line":""},{"line_number":715,"context_line":"        with mock.patch.object(network.api.API, \"get_floating_ips_by_project\","},{"line_number":716,"context_line":"                               fake_get_floating_ips_by_project):"},{"line_number":717,"context_line":"            self.assertRaises(webob.exc.HTTPNotFound, self.controller.index,"},{"line_number":718,"context_line":"                              self.fake_req)"},{"line_number":719,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_0d42013f","line":716,"in_reply_to":"9a1a9d01_60a72350","updated":"2015-09-25 17:27:41.000000000","message":"I don\u0027t think you can apply it as a decorator because message will blow up since you won\u0027t pass it the project kwarg needed.","commit_id":"d50593afa2ecdf43a9c1a4f0f9e85f4f10a68a58"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"bba63a5da3a1dc6d7d458d5e111160ae53abae30","unresolved":false,"context_lines":[{"line_number":735,"context_line":"                               fake_get_floating_ip_by_address):"},{"line_number":736,"context_line":"            self.assertRaises(webob.exc.HTTPNotFound,"},{"line_number":737,"context_line":"                              self.manager._remove_floating_ip,"},{"line_number":738,"context_line":"                              self.fake_req, TEST_INST, body\u003d{"},{"line_number":739,"context_line":"                                \u0027removeFloatingIp\u0027: {"},{"line_number":740,"context_line":"                                    \u0027address\u0027: \u002710.10.10.10\u0027,"},{"line_number":741,"context_line":"                                },"},{"line_number":742,"context_line":"                              })"},{"line_number":743,"context_line":""},{"line_number":744,"context_line":"# these are a few bad param tests"},{"line_number":745,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_402f7fa1","line":742,"range":{"start_line":738,"start_character":61,"end_line":742,"end_character":31},"updated":"2015-09-24 16:07:32.000000000","message":"it\u0027d be nice to pull this out into a local var, this call is quite complex","commit_id":"d50593afa2ecdf43a9c1a4f0f9e85f4f10a68a58"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"a9d6238a8bea11e73ff7d0c22c32f193757594a1","unresolved":false,"context_lines":[{"line_number":739,"context_line":"                                \u0027removeFloatingIp\u0027: {"},{"line_number":740,"context_line":"                                    \u0027address\u0027: \u002710.10.10.10\u0027,"},{"line_number":741,"context_line":"                                },"},{"line_number":742,"context_line":"                              })"},{"line_number":743,"context_line":""},{"line_number":744,"context_line":"# these are a few bad param tests"},{"line_number":745,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_4da55902","line":742,"in_reply_to":"9a1a9d01_402f7fa1","updated":"2015-09-25 17:27:41.000000000","message":"+1 wouldn\u0027t hurt","commit_id":"d50593afa2ecdf43a9c1a4f0f9e85f4f10a68a58"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"d81f4c33830c492cdd0917e44a92f687adcefc28","unresolved":false,"context_lines":[{"line_number":735,"context_line":"                               fake_get_floating_ip_by_address):"},{"line_number":736,"context_line":"            self.assertRaises(webob.exc.HTTPNotFound,"},{"line_number":737,"context_line":"                              self.manager._remove_floating_ip,"},{"line_number":738,"context_line":"                              self.fake_req, TEST_INST, body\u003d{"},{"line_number":739,"context_line":"                                \u0027removeFloatingIp\u0027: {"},{"line_number":740,"context_line":"                                    \u0027address\u0027: \u002710.10.10.10\u0027,"},{"line_number":741,"context_line":"                                },"},{"line_number":742,"context_line":"                              })"},{"line_number":743,"context_line":""},{"line_number":744,"context_line":"# these are a few bad param tests"},{"line_number":745,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_c4feed6a","line":742,"range":{"start_line":738,"start_character":61,"end_line":742,"end_character":31},"in_reply_to":"9a1a9d01_402f7fa1","updated":"2015-09-28 08:56:04.000000000","message":"in case you\u0027re using the old gerrit view - I mean the body","commit_id":"d50593afa2ecdf43a9c1a4f0f9e85f4f10a68a58"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"eb80948ac8fdca0bd9267631593c6705688545c0","unresolved":false,"context_lines":[{"line_number":739,"context_line":"                                \u0027removeFloatingIp\u0027: {"},{"line_number":740,"context_line":"                                    \u0027address\u0027: \u002710.10.10.10\u0027,"},{"line_number":741,"context_line":"                                },"},{"line_number":742,"context_line":"                              })"},{"line_number":743,"context_line":""},{"line_number":744,"context_line":"# these are a few bad param tests"},{"line_number":745,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_d0321e10","line":742,"in_reply_to":"9a1a9d01_c4feed6a","updated":"2015-09-28 12:25:25.000000000","message":"yes, agreed it will look better","commit_id":"d50593afa2ecdf43a9c1a4f0f9e85f4f10a68a58"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"4eb338d8d6d572b08f6c609cf9a67efe0524e86f","unresolved":false,"context_lines":[{"line_number":715,"context_line":"            self.fake_req)"},{"line_number":716,"context_line":""},{"line_number":717,"context_line":"    @mock.patch.object(network.api.API, \"get_floating_ip_by_address\")"},{"line_number":718,"context_line":"    def test_floating_ip_client_404_create(self, mock_floating):"},{"line_number":719,"context_line":"        mock_floating.side_effect \u003d exception.FloatingIpNotFoundForAddress("},{"line_number":720,"context_line":"            address\u003d\u00271\u0027)"},{"line_number":721,"context_line":"        self.assertRaises(webob.exc.HTTPNotFound, self.controller.create,"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a1a9d01_8b9eef05","line":718,"updated":"2015-10-02 11:58:40.000000000","message":"here we should mock network_api.allocate_floating_ip also to return pass etc so that we can actually test exception.FloatingIpNotFoundForAddress case.\n\nSame test can be done for delete method also.","commit_id":"104ae2b54506945625ff8855353dc9dd6c4b190f"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"99288dee943ec6dad8b8fa5a7aab0d3ba368ea45","unresolved":false,"context_lines":[{"line_number":715,"context_line":"            self.fake_req)"},{"line_number":716,"context_line":""},{"line_number":717,"context_line":"    @mock.patch.object(network.api.API, \"get_floating_ip_by_address\")"},{"line_number":718,"context_line":"    def test_floating_ip_client_404_create(self, mock_floating):"},{"line_number":719,"context_line":"        mock_floating.side_effect \u003d exception.FloatingIpNotFoundForAddress("},{"line_number":720,"context_line":"            address\u003d\u00271\u0027)"},{"line_number":721,"context_line":"        self.assertRaises(webob.exc.HTTPNotFound, self.controller.create,"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_81c1fde6","line":718,"in_reply_to":"9a1a9d01_8b9eef05","updated":"2015-10-06 10:34:18.000000000","message":"Done","commit_id":"104ae2b54506945625ff8855353dc9dd6c4b190f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"493f74eb8893077eb35c8be2ff552000a89dbff5","unresolved":false,"context_lines":[{"line_number":758,"context_line":"                          TEST_INST, body\u003dbody)"},{"line_number":759,"context_line":""},{"line_number":760,"context_line":""},{"line_number":761,"context_line":"class FloatingIpTestV2(FloatingIpTestV21):"},{"line_number":762,"context_line":"    floating_ips \u003d fips_v2"},{"line_number":763,"context_line":"    validation_error \u003d webob.exc.HTTPBadRequest"},{"line_number":764,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a1a9d01_ab0df338","line":761,"updated":"2015-10-02 11:36:05.000000000","message":"hmm, it does seem like we should see failures on this test given the code, and the above tests... confusing.","commit_id":"104ae2b54506945625ff8855353dc9dd6c4b190f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"4eb338d8d6d572b08f6c609cf9a67efe0524e86f","unresolved":false,"context_lines":[{"line_number":758,"context_line":"                          TEST_INST, body\u003dbody)"},{"line_number":759,"context_line":""},{"line_number":760,"context_line":""},{"line_number":761,"context_line":"class FloatingIpTestV2(FloatingIpTestV21):"},{"line_number":762,"context_line":"    floating_ips \u003d fips_v2"},{"line_number":763,"context_line":"    validation_error \u003d webob.exc.HTTPBadRequest"},{"line_number":764,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a1a9d01_4b021740","line":761,"in_reply_to":"9a1a9d01_ab0df338","updated":"2015-10-02 11:58:40.000000000","message":"actually we did not mock properly to test  exception.FloatingIpNotFoundForAddress.\n\nIn those test exception.FloatingIpPoolNotFound is thrown even before going to mocked  \"get_floating_ip_by_address\" method.\n\nby self.network_api.allocate_floating_ip call - (https://github.com/openstack/nova/blob/master/nova/api/openstack/compute/legacy_v2/contrib/floating_ips.py#L115)","commit_id":"104ae2b54506945625ff8855353dc9dd6c4b190f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"043c33be9ecd8b626abe1e1a268eed49fecd4e52","unresolved":false,"context_lines":[{"line_number":732,"context_line":"        self.assertRaises(webob.exc.HTTPNotFound,"},{"line_number":733,"context_line":"            self.manager._remove_floating_ip, self.fake_req, TEST_INST,"},{"line_number":734,"context_line":"            body\u003dbody)"},{"line_number":735,"context_line":""},{"line_number":736,"context_line":"# these are a few bad param tests"},{"line_number":737,"context_line":""},{"line_number":738,"context_line":"    def test_bad_address_param_in_remove_floating_ip(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_cf61c9d4","line":735,"updated":"2015-10-22 04:57:41.000000000","message":"Also please add tests for disassociate_floating_ip() too.","commit_id":"7a026d7ea100bedfa1ec4bd4dcb9e0c075ee74c3"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"0ee3a79559d11aa9a9b10431dece27912c646da1","unresolved":false,"context_lines":[{"line_number":732,"context_line":"        self.assertRaises(webob.exc.HTTPNotFound,"},{"line_number":733,"context_line":"            self.manager._remove_floating_ip, self.fake_req, TEST_INST,"},{"line_number":734,"context_line":"            body\u003dbody)"},{"line_number":735,"context_line":""},{"line_number":736,"context_line":"# these are a few bad param tests"},{"line_number":737,"context_line":""},{"line_number":738,"context_line":"    def test_bad_address_param_in_remove_floating_ip(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_49eca0ba","line":735,"in_reply_to":"3a29b11f_178ec02d","updated":"2015-10-23 10:28:14.000000000","message":"Done","commit_id":"7a026d7ea100bedfa1ec4bd4dcb9e0c075ee74c3"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"e1c8fea578bfa8a21034b814fd9522511168de94","unresolved":false,"context_lines":[{"line_number":732,"context_line":"        self.assertRaises(webob.exc.HTTPNotFound,"},{"line_number":733,"context_line":"            self.manager._remove_floating_ip, self.fake_req, TEST_INST,"},{"line_number":734,"context_line":"            body\u003dbody)"},{"line_number":735,"context_line":""},{"line_number":736,"context_line":"# these are a few bad param tests"},{"line_number":737,"context_line":""},{"line_number":738,"context_line":"    def test_bad_address_param_in_remove_floating_ip(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_178ec02d","line":735,"in_reply_to":"3a29b11f_cf61c9d4","updated":"2015-10-23 09:55:44.000000000","message":"But I\u0027m not adding anything there.","commit_id":"7a026d7ea100bedfa1ec4bd4dcb9e0c075ee74c3"}]}
