)]}'
{"neutron/db/dns_db.py":[{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"e442e8324271227da86d6bab646e49187c82e14c","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    def _process_dns_floatingip_create_postcommit(self, context,"},{"line_number":116,"context_line":"                                                  floatingip_data,"},{"line_number":117,"context_line":"                                                  dns_actions_data):"},{"line_number":118,"context_line":"        if not dns_actions_data or not self.dns_driver:"},{"line_number":119,"context_line":"            return"},{"line_number":120,"context_line":"        self._add_ips_to_external_dns_service("},{"line_number":121,"context_line":"            context, dns_actions_data.current_dns_domain,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_70585357","line":118,"range":{"start_line":118,"start_character":32,"end_line":118,"end_character":54},"updated":"2017-01-10 23:48:36.000000000","message":"This method is going to do nothing and return if it gets None in dns_actions_data, which is passed by the l3 plugin here: https://github.com/openstack/neutron/blob/master/neutron/db/l3_db.py#L1346. The l3 plugin in turn gets the dns_action_data object from _process_dns_floatingip_create_precommit here: https://github.com/openstack/neutron/blob/master/neutron/db/l3_db.py#L1336. Now, as you can see in L91 above, _process_dns_floatingip_create_precommit will return None if not self.dns_driver. So why we need to add this extra check? It doesn\u0027t hurt, but we don\u0027t need it","commit_id":"c45e6ef9cc86b187c9a1420e566bef0c9b4fd529"},{"author":{"_account_id":17734,"name":"Shih-Hao Li","email":"shihli@vmware.com","username":"shli"},"change_message_id":"8fdc24edb39dbc87b0dd26a5cfc486773f83b7b7","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    def _process_dns_floatingip_create_postcommit(self, context,"},{"line_number":116,"context_line":"                                                  floatingip_data,"},{"line_number":117,"context_line":"                                                  dns_actions_data):"},{"line_number":118,"context_line":"        if not dns_actions_data or not self.dns_driver:"},{"line_number":119,"context_line":"            return"},{"line_number":120,"context_line":"        self._add_ips_to_external_dns_service("},{"line_number":121,"context_line":"            context, dns_actions_data.current_dns_domain,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_b2536316","line":118,"range":{"start_line":118,"start_character":32,"end_line":118,"end_character":54},"in_reply_to":"ba5201f7_70585357","updated":"2017-01-12 00:18:41.000000000","message":"Yes, you are correct. I added it as a safety, but it is unnecessary after reading the code again.","commit_id":"c45e6ef9cc86b187c9a1420e566bef0c9b4fd529"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"e442e8324271227da86d6bab646e49187c82e14c","unresolved":false,"context_lines":[{"line_number":168,"context_line":"    def _process_dns_floatingip_update_postcommit(self, context,"},{"line_number":169,"context_line":"                                                  floatingip_data,"},{"line_number":170,"context_line":"                                                  dns_actions_data):"},{"line_number":171,"context_line":"        if not dns_actions_data or not self.dns_driver:"},{"line_number":172,"context_line":"            return"},{"line_number":173,"context_line":"        if dns_actions_data.previous_dns_name:"},{"line_number":174,"context_line":"            self._delete_floatingip_from_external_dns_service("}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_d033bf11","line":171,"range":{"start_line":171,"start_character":32,"end_line":171,"end_character":54},"updated":"2017-01-10 23:48:36.000000000","message":"Similar comment as in L118","commit_id":"c45e6ef9cc86b187c9a1420e566bef0c9b4fd529"},{"author":{"_account_id":17734,"name":"Shih-Hao Li","email":"shihli@vmware.com","username":"shli"},"change_message_id":"8fdc24edb39dbc87b0dd26a5cfc486773f83b7b7","unresolved":false,"context_lines":[{"line_number":168,"context_line":"    def _process_dns_floatingip_update_postcommit(self, context,"},{"line_number":169,"context_line":"                                                  floatingip_data,"},{"line_number":170,"context_line":"                                                  dns_actions_data):"},{"line_number":171,"context_line":"        if not dns_actions_data or not self.dns_driver:"},{"line_number":172,"context_line":"            return"},{"line_number":173,"context_line":"        if dns_actions_data.previous_dns_name:"},{"line_number":174,"context_line":"            self._delete_floatingip_from_external_dns_service("}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_32405334","line":171,"range":{"start_line":171,"start_character":32,"end_line":171,"end_character":54},"in_reply_to":"ba5201f7_d033bf11","updated":"2017-01-12 00:18:41.000000000","message":"same as above","commit_id":"c45e6ef9cc86b187c9a1420e566bef0c9b4fd529"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"e442e8324271227da86d6bab646e49187c82e14c","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        if not utils.is_extension_supported(self._core_plugin,"},{"line_number":186,"context_line":"                                            dns.Dns.get_alias()):"},{"line_number":187,"context_line":"            return"},{"line_number":188,"context_line":"        if not self.dns_driver:"},{"line_number":189,"context_line":"            return"},{"line_number":190,"context_line":"        dns_data_db \u003d fip_obj.FloatingIPDNS.get_object(context,"},{"line_number":191,"context_line":"                floatingip_id\u003dfloatingip_data[\u0027id\u0027])"},{"line_number":192,"context_line":"        if dns_data_db:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_90013709","line":189,"range":{"start_line":188,"start_character":8,"end_line":189,"end_character":18},"updated":"2017-01-10 23:48:36.000000000","message":"The situation here is a little bit different but I still don\u0027t see why we need the extra check. In L190 the method tries to get a FloatingIPDNS object from the DB for the floating ip being deleted. But that FloatingIPDNS object is only going to exist if it was created either in L102 or L159 above, neither of which will be executed if not self.dns_driver, thanks to L91 or L131","commit_id":"c45e6ef9cc86b187c9a1420e566bef0c9b4fd529"},{"author":{"_account_id":17734,"name":"Shih-Hao Li","email":"shihli@vmware.com","username":"shli"},"change_message_id":"8fdc24edb39dbc87b0dd26a5cfc486773f83b7b7","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        if not utils.is_extension_supported(self._core_plugin,"},{"line_number":186,"context_line":"                                            dns.Dns.get_alias()):"},{"line_number":187,"context_line":"            return"},{"line_number":188,"context_line":"        if not self.dns_driver:"},{"line_number":189,"context_line":"            return"},{"line_number":190,"context_line":"        dns_data_db \u003d fip_obj.FloatingIPDNS.get_object(context,"},{"line_number":191,"context_line":"                floatingip_id\u003dfloatingip_data[\u0027id\u0027])"},{"line_number":192,"context_line":"        if dns_data_db:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_a88e962b","line":189,"range":{"start_line":188,"start_character":8,"end_line":189,"end_character":18},"in_reply_to":"ba5201f7_90013709","updated":"2017-01-12 00:18:41.000000000","message":"Yes, it makes sense.\n\nI think the problem I saw was probably a floating ip object that was created incorrectly during older test runs. For example, the stack trace I got shows\n\n2017-01-06 22:39:48.897 ERROR neutron.api.v2.resource [req-114e7c31-7ec2-4ea2-a70a-d9e5f35c3542 admin bad880b9136c4c4baa45f35505dd5e5d] delete failed: No details.\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource Traceback (most recent call last):\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource   File \"/opt/stack/neutron/neutron/api/v2/resource.py\", line 79, in resource\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource     result \u003d method(request\u003drequest, **args)\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource   File \"/opt/stack/neutron/neutron/api/v2/base.py\", line 563, in delete\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource     return self._delete(request, id, **kwargs)\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource   File \"/opt/stack/neutron/neutron/db/api.py\", line 92, in wrapped\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource     setattr(e, \u0027_RETRY_EXCEEDED\u0027, True)\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource   File \"/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py\", line 220, in __exit__\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource     self.force_reraise()\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource   File \"/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py\", line 196, in force_reraise\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource     six.reraise(self.type_, self.value, self.tb)\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource   File \"/opt/stack/neutron/neutron/db/api.py\", line 88, in wrapped\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource     return f(*args, **kwargs)\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource   File \"/usr/local/lib/python2.7/dist-packages/oslo_db/api.py\", line 151, in wrapper\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource     ectxt.value \u003d e.inner_exc\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource   File \"/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py\", line 220, in __exit__\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource     self.force_reraise()\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource   File \"/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py\", line 196, in force_reraise\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource     six.reraise(self.type_, self.value, self.tb)\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource   File \"/usr/local/lib/python2.7/dist-packages/oslo_db/api.py\", line 139, in wrapper\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource     return f(*args, **kwargs)\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource   File \"/opt/stack/neutron/neutron/db/api.py\", line 128, in wrapped\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource     traceback.format_exc())\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource   File \"/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py\", line 220, in __exit__\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource     self.force_reraise()\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource   File \"/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py\", line 196, in force_reraise\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource     six.reraise(self.type_, self.value, self.tb)\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource   File \"/opt/stack/neutron/neutron/db/api.py\", line 123, in wrapped\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource     return f(*dup_args, **dup_kwargs)\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource   File \"/opt/stack/neutron/neutron/api/v2/base.py\", line 585, in _delete\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource     obj_deleter(request.context, id, **kwargs)\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource   File \"/opt/stack/vmware-nsx/vmware_nsx/plugins/nsx_v3/plugin.py\", line 3004, in delete_floatingip\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource     super(NsxV3Plugin, self).delete_floatingip(context, fip_id)\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource   File \"/opt/stack/neutron/neutron/db/l3_db.py\", line 1889, in delete_floatingip\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource     floating_ip \u003d self._delete_floatingip(context, id)\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource   File \"/opt/stack/neutron/neutron/db/l3_db.py\", line 1398, in _delete_floatingip\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource     self._process_dns_floatingip_delete(context, floatingip_dict)\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource   File \"/opt/stack/neutron/neutron/db/dns_db.py\", line 194, in _process_dns_floatingip_delete\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource     [floatingip_data[\u0027floating_ip_address\u0027]])\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource   File \"/opt/stack/neutron/neutron/db/dns_db.py\", line 218, in _delete_floatingip_from_external_dns_service\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource     self.dns_driver.delete_record_set(context, dns_domain, dns_name,\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource AttributeError: \u0027NoneType\u0027 object has no attribute \u0027delete_record_set\u0027\n2017-01-06 22:39:48.897 TRACE neutron.api.v2.resource \n2017-01-06 22:39:48.899 INFO neutron.wsgi [req-114e7c31-7ec2-4ea2-a70a-d9e5f35c3542 admin bad880b9136c4c4baa45f35505dd5e5d] 10.160.228.6 - - [06/Jan/2017 22:39:48] \"DELETE /v2.0/floatingips/db22f4e1-185b-4cb9-ac09-b2780a062e21.json HTTP/1.1\" 500 368 0.320641\n\nBut now when I tried it again with a clean setup, I couldn\u0027t reproduce the same problem. Hence, I will cancel this patch. Thanks for your detailed reviews. It is very helpful and informative.","commit_id":"c45e6ef9cc86b187c9a1420e566bef0c9b4fd529"}]}
