)]}'
{"neutron/db/l3_db.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"0429d2859ad889e97826543309952a1688d95a14","unresolved":false,"context_lines":[{"line_number":871,"context_line":"                          {\u0027port_id\u0027: port_db[\u0027id\u0027],"},{"line_number":872,"context_line":"                           \u0027port_owner\u0027: port_db[\u0027device_owner\u0027]})"},{"line_number":873,"context_line":""},{"line_number":874,"context_line":"    def disassociate_floatingips(self, context, port_id):"},{"line_number":875,"context_line":"        \u0027\u0027\u0027"},{"line_number":876,"context_line":"        Disassociate all floating IPs linked to specific port."},{"line_number":877,"context_line":"        @param port_id: ID of the port to disassociate floating IPs."}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_ca6376af","line":874,"updated":"2014-06-18 15:13:21.000000000","message":"just a suggestion - if you add a do_notify\u003dTrue parameter here, and set it to false for the ml2 plugin and those which disassociate floating ips within the main transaction then you can probably come up with a shorter patch that does not touch as many plugins.","commit_id":"c08bccb287668bcb9f1c4fb7a24a15c13784da10"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"44d759bfaa87a5cd485e8e1907c455b30f9d8b75","unresolved":false,"context_lines":[{"line_number":871,"context_line":"                          {\u0027port_id\u0027: port_db[\u0027id\u0027],"},{"line_number":872,"context_line":"                           \u0027port_owner\u0027: port_db[\u0027device_owner\u0027]})"},{"line_number":873,"context_line":""},{"line_number":874,"context_line":"    def disassociate_floatingips(self, context, port_id):"},{"line_number":875,"context_line":"        \u0027\u0027\u0027"},{"line_number":876,"context_line":"        Disassociate all floating IPs linked to specific port."},{"line_number":877,"context_line":"        @param port_id: ID of the port to disassociate floating IPs."}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_67a35443","line":874,"in_reply_to":"1ae5cdf2_ca6376af","updated":"2014-06-19 14:31:48.000000000","message":"Not shorter one, but indeed touches a bit less plugins; that\u0027s a good idea, I\u0027ll apply that one.","commit_id":"c08bccb287668bcb9f1c4fb7a24a15c13784da10"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"72e2f304a3c7a734d15b3bdc2ec76fdf742ccbd3","unresolved":false,"context_lines":[{"line_number":873,"context_line":""},{"line_number":874,"context_line":"    def disassociate_floatingips(self, context, port_id):"},{"line_number":875,"context_line":"        \u0027\u0027\u0027"},{"line_number":876,"context_line":"        Disassociate all floating IPs linked to specific port."},{"line_number":877,"context_line":"        @param port_id: ID of the port to disassociate floating IPs."},{"line_number":878,"context_line":"        @return: list of router-ids that require notification updates."},{"line_number":879,"context_line":"        \u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_8a4ece36","line":876,"updated":"2014-06-18 15:21:12.000000000","message":"Nit: PEP8/257 multiline  docstring should have summary on the same line as quote and end with period, blank line and then rest of docstring. Use triple double quotes.","commit_id":"c08bccb287668bcb9f1c4fb7a24a15c13784da10"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"44d759bfaa87a5cd485e8e1907c455b30f9d8b75","unresolved":false,"context_lines":[{"line_number":873,"context_line":""},{"line_number":874,"context_line":"    def disassociate_floatingips(self, context, port_id):"},{"line_number":875,"context_line":"        \u0027\u0027\u0027"},{"line_number":876,"context_line":"        Disassociate all floating IPs linked to specific port."},{"line_number":877,"context_line":"        @param port_id: ID of the port to disassociate floating IPs."},{"line_number":878,"context_line":"        @return: list of router-ids that require notification updates."},{"line_number":879,"context_line":"        \u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_874a2081","line":876,"in_reply_to":"1ae5cdf2_8a4ece36","updated":"2014-06-19 14:31:48.000000000","message":"Done","commit_id":"c08bccb287668bcb9f1c4fb7a24a15c13784da10"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"e9f791e7782aa0d28683b2bbb988634b948c540b","unresolved":false,"context_lines":[{"line_number":879,"context_line":"                            \"no IP address, so it can be deleted\"),"},{"line_number":880,"context_line":"                          {\u0027port_id\u0027: port_db[\u0027id\u0027],"},{"line_number":881,"context_line":"                           \u0027port_owner\u0027: port_db[\u0027device_owner\u0027]})"},{"line_number":882,"context_line":""},{"line_number":883,"context_line":"    def disassociate_floatingips(self, context, port_id, do_notify\u003dTrue):"},{"line_number":884,"context_line":"        \"\"\"Disassociate all floating IPs linked to specific port."},{"line_number":885,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_1ede323e","line":882,"updated":"2014-06-20 11:04:52.000000000","message":"I really dislike the do_notify parameter, but, if you are going with it, then how about checking if context.session is in a transaction and do_notify is True, then throw an exception? This could replace a unit test and would have more value, imo.","commit_id":"586cf29bb1aa6bdbfadbd452cf1e9b4157824074"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4eaedc9ae1cbc17df5a40855e3f137f524d07144","unresolved":false,"context_lines":[{"line_number":879,"context_line":"                            \"no IP address, so it can be deleted\"),"},{"line_number":880,"context_line":"                          {\u0027port_id\u0027: port_db[\u0027id\u0027],"},{"line_number":881,"context_line":"                           \u0027port_owner\u0027: port_db[\u0027device_owner\u0027]})"},{"line_number":882,"context_line":""},{"line_number":883,"context_line":"    def disassociate_floatingips(self, context, port_id, do_notify\u003dTrue):"},{"line_number":884,"context_line":"        \"\"\"Disassociate all floating IPs linked to specific port."},{"line_number":885,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_0d9a8661","line":882,"in_reply_to":"1ae5cdf2_1ede323e","updated":"2014-06-20 13:44:45.000000000","message":"That\u0027s a good idea indeed.","commit_id":"586cf29bb1aa6bdbfadbd452cf1e9b4157824074"},{"author":{"_account_id":5209,"name":"Ed Bak","email":"ed.bak2@hpe.com","username":"ed-bak2"},"change_message_id":"92b65edaf75ea0e05555adafee3ccf0710d54e67","unresolved":false,"context_lines":[{"line_number":876,"context_line":"                          {\u0027port_id\u0027: port_db[\u0027id\u0027],"},{"line_number":877,"context_line":"                           \u0027port_owner\u0027: port_db[\u0027device_owner\u0027]})"},{"line_number":878,"context_line":""},{"line_number":879,"context_line":"    def disassociate_floatingips(self, context, port_id, do_notify\u003dTrue):"},{"line_number":880,"context_line":"        \"\"\"Disassociate all floating IPs linked to specific port."},{"line_number":881,"context_line":""},{"line_number":882,"context_line":"        @param port_id: ID of the port to disassociate floating IPs."}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_c64b1329","line":879,"updated":"2014-06-20 20:32:52.000000000","message":"Having a function behave multiple ways depending on a flag passed in can be a code maintenance problem.  It\u0027s generally better practice to have functions do one thing.  Can the code be restructured so that the same pattern is used everywhere?  Either always notify or never notify from within this function.  It also seems odd to have a function called \"disassociate_floatingips\" return something.","commit_id":"c0de75c1b6e961349d86fb5c355da70f82a5362c"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6f053d32a310df09be9878291050d4e0f6cc7eb5","unresolved":false,"context_lines":[{"line_number":876,"context_line":"                          {\u0027port_id\u0027: port_db[\u0027id\u0027],"},{"line_number":877,"context_line":"                           \u0027port_owner\u0027: port_db[\u0027device_owner\u0027]})"},{"line_number":878,"context_line":""},{"line_number":879,"context_line":"    def disassociate_floatingips(self, context, port_id, do_notify\u003dTrue):"},{"line_number":880,"context_line":"        \"\"\"Disassociate all floating IPs linked to specific port."},{"line_number":881,"context_line":""},{"line_number":882,"context_line":"        @param port_id: ID of the port to disassociate floating IPs."}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_33c07749","line":879,"updated":"2014-06-20 19:56:35.000000000","message":"so if doing a notification here can cause a db timeout, why is the default True?  Just to not break something that relied on the existing behavior?","commit_id":"c0de75c1b6e961349d86fb5c355da70f82a5362c"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"80ba867daf561155005dc89859c64c1fcbf1db2f","unresolved":false,"context_lines":[{"line_number":876,"context_line":"                          {\u0027port_id\u0027: port_db[\u0027id\u0027],"},{"line_number":877,"context_line":"                           \u0027port_owner\u0027: port_db[\u0027device_owner\u0027]})"},{"line_number":878,"context_line":""},{"line_number":879,"context_line":"    def disassociate_floatingips(self, context, port_id, do_notify\u003dTrue):"},{"line_number":880,"context_line":"        \"\"\"Disassociate all floating IPs linked to specific port."},{"line_number":881,"context_line":""},{"line_number":882,"context_line":"        @param port_id: ID of the port to disassociate floating IPs."}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_b87e0069","line":879,"in_reply_to":"1ae5cdf2_c64b1329","updated":"2014-06-23 12:06:55.000000000","message":"@Brian, it may result in db lock if called from inside transaction. There are lots of drivers that call it directly, with no transaction opened, so we want to avoid changes to their code.\n\n@Ed, I actually share your concerns. The first patch version didn\u0027t have do_notify\u003d argument introduced, so Salvatore asked to introduce it to avoid changing code for drivers that are not affected by this scenario of getting into db lock timeout.\n\n@Ed, it seems that there are more scenarios from where we may get to that db lock timeout failure. I\u0027d like to handle all db lock timeouts caused by improper call to notifier from inside transaction in generic way. This will require discussion in community and significant rework of existing code (probably walking along \u0027blueprint - spec - implementation\u0027 chain). So my take is two folded here:\n\n- fix particular db lock scenarios in short term;\n- introduce mechanism to avoid situations that may result in those db locks in long term.\n\nThat means I\u0027m still for merging this particular patch, though I agree we need to work on a better solution for Juno. I\u0027ll try to make sure we don\u0027t loose this second action.","commit_id":"c0de75c1b6e961349d86fb5c355da70f82a5362c"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6f053d32a310df09be9878291050d4e0f6cc7eb5","unresolved":false,"context_lines":[{"line_number":879,"context_line":"    def disassociate_floatingips(self, context, port_id, do_notify\u003dTrue):"},{"line_number":880,"context_line":"        \"\"\"Disassociate all floating IPs linked to specific port."},{"line_number":881,"context_line":""},{"line_number":882,"context_line":"        @param port_id: ID of the port to disassociate floating IPs."},{"line_number":883,"context_line":"        @return: set of router-ids that require notification updates."},{"line_number":884,"context_line":"        \"\"\""},{"line_number":885,"context_line":"        router_ids \u003d set()"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_b3b487f1","line":882,"updated":"2014-06-20 19:56:35.000000000","message":"missing @do_notify param","commit_id":"c0de75c1b6e961349d86fb5c355da70f82a5362c"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"80ba867daf561155005dc89859c64c1fcbf1db2f","unresolved":false,"context_lines":[{"line_number":879,"context_line":"    def disassociate_floatingips(self, context, port_id, do_notify\u003dTrue):"},{"line_number":880,"context_line":"        \"\"\"Disassociate all floating IPs linked to specific port."},{"line_number":881,"context_line":""},{"line_number":882,"context_line":"        @param port_id: ID of the port to disassociate floating IPs."},{"line_number":883,"context_line":"        @return: set of router-ids that require notification updates."},{"line_number":884,"context_line":"        \"\"\""},{"line_number":885,"context_line":"        router_ids \u003d set()"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_f88ec831","line":882,"in_reply_to":"1ae5cdf2_b3b487f1","updated":"2014-06-23 12:06:55.000000000","message":"Indeed, thanks.","commit_id":"c0de75c1b6e961349d86fb5c355da70f82a5362c"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"4266a25cdc1a775903197eb57b6d14042ce2b44a","unresolved":false,"context_lines":[{"line_number":883,"context_line":"        @param do_notify: whether we should notify routers right away."},{"line_number":884,"context_line":"        @return: set of router-ids that require notification updates"},{"line_number":885,"context_line":"                 (if do_notify is False)."},{"line_number":886,"context_line":"        \"\"\""},{"line_number":887,"context_line":"        router_ids \u003d set()"},{"line_number":888,"context_line":""},{"line_number":889,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_119493e6","line":886,"updated":"2014-06-26 21:32:44.000000000","message":"The router_ids are returned regardless of the value of do_notify. For the above to be correct (which is what we really want), a return should be added below. Please see my next comment.","commit_id":"0735954336f6a6f9f5c4097ccf8aeb4faf82e9e3"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"059390e0ebeaaf2378f63d51eb1fd947bee22cb1","unresolved":false,"context_lines":[{"line_number":883,"context_line":"        @param do_notify: whether we should notify routers right away."},{"line_number":884,"context_line":"        @return: set of router-ids that require notification updates"},{"line_number":885,"context_line":"                 (if do_notify is False)."},{"line_number":886,"context_line":"        \"\"\""},{"line_number":887,"context_line":"        router_ids \u003d set()"},{"line_number":888,"context_line":""},{"line_number":889,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_0f67fab8","line":886,"in_reply_to":"1ae5cdf2_119493e6","updated":"2014-07-01 11:32:07.000000000","message":"Done","commit_id":"0735954336f6a6f9f5c4097ccf8aeb4faf82e9e3"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"4266a25cdc1a775903197eb57b6d14042ce2b44a","unresolved":false,"context_lines":[{"line_number":895,"context_line":"                                    \u0027fixed_ip_address\u0027: None,"},{"line_number":896,"context_line":"                                    \u0027router_id\u0027: None})"},{"line_number":897,"context_line":"        if do_notify:"},{"line_number":898,"context_line":"            self.notify_routers_updated(context, router_ids)"},{"line_number":899,"context_line":""},{"line_number":900,"context_line":"        return router_ids"},{"line_number":901,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_31998f1f","line":898,"updated":"2014-06-26 21:32:44.000000000","message":"Need a return here in the if block. Otherwise, it would be possible for the caller to specify the do_notify as true and upon receiving the list of the router ids, notify them again. I know this will be a mistake on the caller side, but we can simply prevent this by not returning any router ids.","commit_id":"0735954336f6a6f9f5c4097ccf8aeb4faf82e9e3"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"059390e0ebeaaf2378f63d51eb1fd947bee22cb1","unresolved":false,"context_lines":[{"line_number":895,"context_line":"                                    \u0027fixed_ip_address\u0027: None,"},{"line_number":896,"context_line":"                                    \u0027router_id\u0027: None})"},{"line_number":897,"context_line":"        if do_notify:"},{"line_number":898,"context_line":"            self.notify_routers_updated(context, router_ids)"},{"line_number":899,"context_line":""},{"line_number":900,"context_line":"        return router_ids"},{"line_number":901,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_ef6d6e9a","line":898,"in_reply_to":"1ae5cdf2_31998f1f","updated":"2014-07-01 11:32:07.000000000","message":"Thanks for the comment. Indeed, I\u0027ve missed that due to (obsolete) reasoning that maybe caller will have something to do with the set not related to notifications. But since now the idea is dropped, we are better to do as you suggest.","commit_id":"0735954336f6a6f9f5c4097ccf8aeb4faf82e9e3"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"a9d95e93e86cb0eec8d56051cd527118931ab62a","unresolved":false,"context_lines":[{"line_number":899,"context_line":""},{"line_number":900,"context_line":"        return router_ids"},{"line_number":901,"context_line":""},{"line_number":902,"context_line":"    def notify_routers_updated(self, context, router_ids):"},{"line_number":903,"context_line":"        if router_ids:"},{"line_number":904,"context_line":"            self.l3_rpc_notifier.routers_updated("},{"line_number":905,"context_line":"                context, list(router_ids),"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_852c6aae","line":902,"updated":"2014-06-23 21:40:14.000000000","message":"how about asserting?\n\nassert not context.session.transaction","commit_id":"0735954336f6a6f9f5c4097ccf8aeb4faf82e9e3"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d91356afbe103c345daa3c557b304c0f35ad485d","unresolved":false,"context_lines":[{"line_number":899,"context_line":""},{"line_number":900,"context_line":"        return router_ids"},{"line_number":901,"context_line":""},{"line_number":902,"context_line":"    def notify_routers_updated(self, context, router_ids):"},{"line_number":903,"context_line":"        if router_ids:"},{"line_number":904,"context_line":"            self.l3_rpc_notifier.routers_updated("},{"line_number":905,"context_line":"                context, list(router_ids),"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_74854006","line":902,"in_reply_to":"1ae5cdf2_852c6aae","updated":"2014-06-24 07:51:11.000000000","message":"That was tried in patchset 4. It revealed more db lock scenarios, so the code is not lock free, the patch only fixes one particular code path to such a failure. See my comments for the review to see more context and how I\u0027m going to handle more db lock timeout failures globally.","commit_id":"0735954336f6a6f9f5c4097ccf8aeb4faf82e9e3"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"7dc414cdb7b99307ba73249947e48e9fd06c54d1","unresolved":false,"context_lines":[{"line_number":903,"context_line":"        if router_ids:"},{"line_number":904,"context_line":"            self.l3_rpc_notifier.routers_updated("},{"line_number":905,"context_line":"                context, list(router_ids),"},{"line_number":906,"context_line":"                \u0027disassociate_floatingips\u0027)"},{"line_number":907,"context_line":""},{"line_number":908,"context_line":"    def _build_routers_list(self, routers, gw_ports):"},{"line_number":909,"context_line":"        gw_port_id_gw_port_dict \u003d dict((gw_port[\u0027id\u0027], gw_port)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_7de43c0e","line":906,"updated":"2014-06-24 11:25:41.000000000","message":"Do you know if it would be possible to ask context.session if we\u0027re in a transaction, a dump an error message we can track in such case?.\n\nI know at some point error messages were to be considered as failures in tempest.","commit_id":"0735954336f6a6f9f5c4097ccf8aeb4faf82e9e3"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7241f381f6e3f9883205d2471076c739c4f49e86","unresolved":false,"context_lines":[{"line_number":903,"context_line":"        if router_ids:"},{"line_number":904,"context_line":"            self.l3_rpc_notifier.routers_updated("},{"line_number":905,"context_line":"                context, list(router_ids),"},{"line_number":906,"context_line":"                \u0027disassociate_floatingips\u0027)"},{"line_number":907,"context_line":""},{"line_number":908,"context_line":"    def _build_routers_list(self, routers, gw_ports):"},{"line_number":909,"context_line":"        gw_port_id_gw_port_dict \u003d dict((gw_port[\u0027id\u0027], gw_port)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_5dea20ad","line":906,"in_reply_to":"1ae5cdf2_7de43c0e","updated":"2014-06-24 11:31:15.000000000","message":"Yes, that could be possible.\n\nSee patchset 4 for similar approach, with raising exception. It turned out we have lots of code paths that may result in notification under transaction. Maybe log message would be less intrusive.\n\nBut see a blueprint link in global comments to the review for my approach to fix all notification triggered yields: https://blueprints.launchpad.net/neutron/+spec/schedule-actions-for-db-transaction-closed","commit_id":"0735954336f6a6f9f5c4097ccf8aeb4faf82e9e3"}],"neutron/plugins/embrane/base_plugin.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"72e2f304a3c7a734d15b3bdc2ec76fdf742ccbd3","unresolved":false,"context_lines":[{"line_number":368,"context_line":"                    p_con.Events.RESET_NAT_RULE, neutron_router, context,"},{"line_number":369,"context_line":"                    state_change),"},{"line_number":370,"context_line":"                args\u003d(fip_id,))"},{"line_number":371,"context_line":"        return router_ids"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_ca30d658","line":371,"updated":"2014-06-18 15:21:12.000000000","message":"Notify missing?","commit_id":"c08bccb287668bcb9f1c4fb7a24a15c13784da10"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"44d759bfaa87a5cd485e8e1907c455b30f9d8b75","unresolved":false,"context_lines":[{"line_number":368,"context_line":"                    p_con.Events.RESET_NAT_RULE, neutron_router, context,"},{"line_number":369,"context_line":"                    state_change),"},{"line_number":370,"context_line":"                args\u003d(fip_id,))"},{"line_number":371,"context_line":"        return router_ids"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_a7363c01","line":371,"in_reply_to":"1ae5cdf2_ca30d658","updated":"2014-06-19 14:31:48.000000000","message":"Now that we add do_notify\u003dTrue, it should be handled.","commit_id":"c08bccb287668bcb9f1c4fb7a24a15c13784da10"}],"neutron/plugins/midonet/plugin.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"72e2f304a3c7a734d15b3bdc2ec76fdf742ccbd3","unresolved":false,"context_lines":[{"line_number":1120,"context_line":"        except sa_exc.NoResultFound:"},{"line_number":1121,"context_line":"            pass"},{"line_number":1122,"context_line":""},{"line_number":1123,"context_line":"        return super(MidonetPluginV2, self).disassociate_floatingips(context,"},{"line_number":1124,"context_line":"                                                                     port_id)"},{"line_number":1125,"context_line":""},{"line_number":1126,"context_line":"    def create_security_group(self, context, security_group, default_sg\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_ea083282","line":1123,"updated":"2014-06-18 15:21:12.000000000","message":"notify?","commit_id":"c08bccb287668bcb9f1c4fb7a24a15c13784da10"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"44d759bfaa87a5cd485e8e1907c455b30f9d8b75","unresolved":false,"context_lines":[{"line_number":1120,"context_line":"        except sa_exc.NoResultFound:"},{"line_number":1121,"context_line":"            pass"},{"line_number":1122,"context_line":""},{"line_number":1123,"context_line":"        return super(MidonetPluginV2, self).disassociate_floatingips(context,"},{"line_number":1124,"context_line":"                                                                     port_id)"},{"line_number":1125,"context_line":""},{"line_number":1126,"context_line":"    def create_security_group(self, context, security_group, default_sg\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_072530c1","line":1123,"in_reply_to":"1ae5cdf2_ea083282","updated":"2014-06-19 14:31:48.000000000","message":"Should be handled now with do_notify.","commit_id":"c08bccb287668bcb9f1c4fb7a24a15c13784da10"}],"neutron/plugins/ml2/plugin.py":[{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"99f6743b743d2356e4c0033ad4bb14ce9d15fc54","unresolved":false,"context_lines":[{"line_number":748,"context_line":"            super(Ml2Plugin, self).delete_port(context, id)"},{"line_number":749,"context_line":""},{"line_number":750,"context_line":"        # now that we\u0027ve left db transaction, we are safe to notify"},{"line_number":751,"context_line":"        l3plugin.notify_routers_updated(context, router_ids)"},{"line_number":752,"context_line":""},{"line_number":753,"context_line":"        try:"},{"line_number":754,"context_line":"            self.mechanism_manager.delete_port_postcommit(mech_context)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_cad53644","line":751,"updated":"2014-06-18 15:13:14.000000000","message":"what if l3plugin is None?\n\nalso, notify_routers_updated doesn\u0027t return those ids.","commit_id":"c08bccb287668bcb9f1c4fb7a24a15c13784da10"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"44d759bfaa87a5cd485e8e1907c455b30f9d8b75","unresolved":false,"context_lines":[{"line_number":748,"context_line":"            super(Ml2Plugin, self).delete_port(context, id)"},{"line_number":749,"context_line":""},{"line_number":750,"context_line":"        # now that we\u0027ve left db transaction, we are safe to notify"},{"line_number":751,"context_line":"        l3plugin.notify_routers_updated(context, router_ids)"},{"line_number":752,"context_line":""},{"line_number":753,"context_line":"        try:"},{"line_number":754,"context_line":"            self.mechanism_manager.delete_port_postcommit(mech_context)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_aa044115","line":751,"in_reply_to":"1ae5cdf2_cad53644","updated":"2014-06-19 14:31:48.000000000","message":"You mean \u0027disassociate_floatingips doesn\u0027t return those ids\u0027, right? This should be fixed now.\n\nFor l3plugin, too.","commit_id":"c08bccb287668bcb9f1c4fb7a24a15c13784da10"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"c73b0701a155d2c932568622afb8724d68658732","unresolved":false,"context_lines":[{"line_number":748,"context_line":"            super(Ml2Plugin, self).delete_port(context, id)"},{"line_number":749,"context_line":""},{"line_number":750,"context_line":"        # now that we\u0027ve left db transaction, we are safe to notify"},{"line_number":751,"context_line":"        l3plugin.notify_routers_updated(context, router_ids)"},{"line_number":752,"context_line":""},{"line_number":753,"context_line":"        try:"},{"line_number":754,"context_line":"            self.mechanism_manager.delete_port_postcommit(mech_context)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_aad38a36","line":751,"in_reply_to":"1ae5cdf2_cad53644","updated":"2014-06-18 15:16:27.000000000","message":"yeah it\u0027s a check that should be done.","commit_id":"c08bccb287668bcb9f1c4fb7a24a15c13784da10"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"fd75a67864391e602734ca9b36eecfa6b3fa444c","unresolved":false,"context_lines":[{"line_number":750,"context_line":""},{"line_number":751,"context_line":"        # now that we\u0027ve left db transaction, we are safe to notify"},{"line_number":752,"context_line":"        if l3plugin:"},{"line_number":753,"context_line":"            l3plugin.notify_routers_updated(context, router_ids)"},{"line_number":754,"context_line":""},{"line_number":755,"context_line":"        try:"},{"line_number":756,"context_line":"            self.mechanism_manager.delete_port_postcommit(mech_context)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_8d36ba01","line":753,"updated":"2014-06-19 15:23:09.000000000","message":"Any exceptions to be caught? and possibly logged?","commit_id":"586cf29bb1aa6bdbfadbd452cf1e9b4157824074"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"2488e8e5c1767577c7eb6541a5d1d5eb1be64630","unresolved":false,"context_lines":[{"line_number":750,"context_line":""},{"line_number":751,"context_line":"        # now that we\u0027ve left db transaction, we are safe to notify"},{"line_number":752,"context_line":"        if l3plugin:"},{"line_number":753,"context_line":"            l3plugin.notify_routers_updated(context, router_ids)"},{"line_number":754,"context_line":""},{"line_number":755,"context_line":"        try:"},{"line_number":756,"context_line":"            self.mechanism_manager.delete_port_postcommit(mech_context)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_4a69d98a","line":753,"in_reply_to":"1ae5cdf2_8d36ba01","updated":"2014-06-20 10:33:25.000000000","message":"Not that I know. But even if there are any, catching them doesn\u0027t belong to this patch, as they are not caught without it anyway, and the intent of the patch is not to enhance exception handling.","commit_id":"586cf29bb1aa6bdbfadbd452cf1e9b4157824074"}],"neutron/plugins/nuage/plugin.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"72e2f304a3c7a734d15b3bdc2ec76fdf742ccbd3","unresolved":false,"context_lines":[{"line_number":940,"context_line":"            }"},{"line_number":941,"context_line":"            self.nuageclient.update_nuage_vm_vport(params)"},{"line_number":942,"context_line":""},{"line_number":943,"context_line":"        return router_ids"},{"line_number":944,"context_line":""},{"line_number":945,"context_line":"    def update_floatingip(self, context, id, floatingip):"},{"line_number":946,"context_line":"        fip \u003d floatingip[\u0027floatingip\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_ea56725d","line":943,"updated":"2014-06-18 15:21:12.000000000","message":"notify?","commit_id":"c08bccb287668bcb9f1c4fb7a24a15c13784da10"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"44d759bfaa87a5cd485e8e1907c455b30f9d8b75","unresolved":false,"context_lines":[{"line_number":940,"context_line":"            }"},{"line_number":941,"context_line":"            self.nuageclient.update_nuage_vm_vport(params)"},{"line_number":942,"context_line":""},{"line_number":943,"context_line":"        return router_ids"},{"line_number":944,"context_line":""},{"line_number":945,"context_line":"    def update_floatingip(self, context, id, floatingip):"},{"line_number":946,"context_line":"        fip \u003d floatingip[\u0027floatingip\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_0a13755c","line":943,"in_reply_to":"1ae5cdf2_ea56725d","updated":"2014-06-19 14:31:48.000000000","message":"Handled with do_notify.","commit_id":"c08bccb287668bcb9f1c4fb7a24a15c13784da10"}],"neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"72e2f304a3c7a734d15b3bdc2ec76fdf742ccbd3","unresolved":false,"context_lines":[{"line_number":553,"context_line":"        except Exception as err_message:"},{"line_number":554,"context_line":"            raise plum_excep.PLUMgridException(err_msg\u003derr_message)"},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"        return super(NeutronPluginPLUMgridV2,"},{"line_number":557,"context_line":"                     self).disassociate_floatingips(context, port_id)"},{"line_number":558,"context_line":""},{"line_number":559,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_eacd9231","line":556,"updated":"2014-06-18 15:21:12.000000000","message":"notify?","commit_id":"c08bccb287668bcb9f1c4fb7a24a15c13784da10"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"44d759bfaa87a5cd485e8e1907c455b30f9d8b75","unresolved":false,"context_lines":[{"line_number":553,"context_line":"        except Exception as err_message:"},{"line_number":554,"context_line":"            raise plum_excep.PLUMgridException(err_msg\u003derr_message)"},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"        return super(NeutronPluginPLUMgridV2,"},{"line_number":557,"context_line":"                     self).disassociate_floatingips(context, port_id)"},{"line_number":558,"context_line":""},{"line_number":559,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_8a26a5b8","line":556,"in_reply_to":"1ae5cdf2_eacd9231","updated":"2014-06-19 14:31:48.000000000","message":"Done","commit_id":"c08bccb287668bcb9f1c4fb7a24a15c13784da10"}],"neutron/plugins/vmware/plugins/base.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"c73b0701a155d2c932568622afb8724d68658732","unresolved":false,"context_lines":[{"line_number":1365,"context_line":"        port_delete_func(context, neutron_db_port)"},{"line_number":1366,"context_line":""},{"line_number":1367,"context_line":"        router_ids \u003d self.disassociate_floatingips(context, id)"},{"line_number":1368,"context_line":"        self.notify_routers_updated(context, router_ids)"},{"line_number":1369,"context_line":""},{"line_number":1370,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":1371,"context_line":"            queue \u003d self._get_port_queue_bindings(context, {\u0027port_id\u0027: [id]})"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_2a95ba3f","line":1368,"updated":"2014-06-18 15:16:27.000000000","message":"if you\u0027re doing this change... can you avoid sending notification for the vmware plugin? They make no sense but since db logic and rpc logic was mixed we ended up sending notifications.","commit_id":"c08bccb287668bcb9f1c4fb7a24a15c13784da10"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"44d759bfaa87a5cd485e8e1907c455b30f9d8b75","unresolved":false,"context_lines":[{"line_number":1365,"context_line":"        port_delete_func(context, neutron_db_port)"},{"line_number":1366,"context_line":""},{"line_number":1367,"context_line":"        router_ids \u003d self.disassociate_floatingips(context, id)"},{"line_number":1368,"context_line":"        self.notify_routers_updated(context, router_ids)"},{"line_number":1369,"context_line":""},{"line_number":1370,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":1371,"context_line":"            queue \u003d self._get_port_queue_bindings(context, {\u0027port_id\u0027: [id]})"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_8ae9451c","line":1368,"in_reply_to":"1ae5cdf2_2a95ba3f","updated":"2014-06-19 14:31:48.000000000","message":"I\u0027ll handle it in a separate patch on top of it.","commit_id":"c08bccb287668bcb9f1c4fb7a24a15c13784da10"}],"neutron/plugins/vmware/plugins/service.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"72e2f304a3c7a734d15b3bdc2ec76fdf742ccbd3","unresolved":false,"context_lines":[{"line_number":798,"context_line":"                self._update_interface(context, router)"},{"line_number":799,"context_line":"                self._update_nat_rules(context, router)"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"        return router_ids"},{"line_number":802,"context_line":""},{"line_number":803,"context_line":"    #"},{"line_number":804,"context_line":"    # FWaaS plugin implementation"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_0aeabe73","line":801,"updated":"2014-06-18 15:21:12.000000000","message":"notify?","commit_id":"c08bccb287668bcb9f1c4fb7a24a15c13784da10"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"44d759bfaa87a5cd485e8e1907c455b30f9d8b75","unresolved":false,"context_lines":[{"line_number":798,"context_line":"                self._update_interface(context, router)"},{"line_number":799,"context_line":"                self._update_nat_rules(context, router)"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"        return router_ids"},{"line_number":802,"context_line":""},{"line_number":803,"context_line":"    #"},{"line_number":804,"context_line":"    # FWaaS plugin implementation"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_ea100902","line":801,"in_reply_to":"1ae5cdf2_0aeabe73","updated":"2014-06-19 14:31:48.000000000","message":"Done","commit_id":"c08bccb287668bcb9f1c4fb7a24a15c13784da10"}],"neutron/tests/unit/ml2/test_ml2_plugin.py":[{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"4266a25cdc1a775903197eb57b6d14042ce2b44a","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            notify.assert_has_calls(["},{"line_number":159,"context_line":"                mock.call(ctx, disassociate_floatingips.return_value)"},{"line_number":160,"context_line":"            ])"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"class TestMl2PortBinding(Ml2PluginV2TestCase,"},{"line_number":164,"context_line":"                         test_bindings.PortBindingsTestCase):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_1149f38d","line":161,"updated":"2014-06-26 21:32:44.000000000","message":"We can have a test added to make sure when do_notify is True the return value is None.","commit_id":"0735954336f6a6f9f5c4097ccf8aeb4faf82e9e3"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"059390e0ebeaaf2378f63d51eb1fd947bee22cb1","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            notify.assert_has_calls(["},{"line_number":159,"context_line":"                mock.call(ctx, disassociate_floatingips.return_value)"},{"line_number":160,"context_line":"            ])"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"class TestMl2PortBinding(Ml2PluginV2TestCase,"},{"line_number":164,"context_line":"                         test_bindings.PortBindingsTestCase):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_4f04a2c5","line":161,"in_reply_to":"1ae5cdf2_1149f38d","updated":"2014-07-01 11:32:07.000000000","message":"Done","commit_id":"0735954336f6a6f9f5c4097ccf8aeb4faf82e9e3"}],"neutron/tests/unit/test_l3_plugin.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"059390e0ebeaaf2378f63d51eb1fd947bee22cb1","unresolved":false,"context_lines":[{"line_number":249,"context_line":"        if plugin:"},{"line_number":250,"context_line":"            if l3_port_check:"},{"line_number":251,"context_line":"                plugin.prevent_l3_port_deletion(context, id)"},{"line_number":252,"context_line":"            # FIXME(ihrachys): we need to pass do_notify\u003dFalse here to"},{"line_number":253,"context_line":"            # avoid catching exception due to attempt to notify while"},{"line_number":254,"context_line":"            # under transaction. This is because delete_port() is called"},{"line_number":255,"context_line":"            # from inside transaction created by delete_floatingip()."}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_2ffbd6be","line":252,"updated":"2014-07-01 11:32:07.000000000","message":"This change should be removed. It\u0027s just remaining from previous patchset that added an exception in case disassociate_floatingips() is called in wrong db context. Now that we dropped that exception, this is not needed anymore.","commit_id":"0735954336f6a6f9f5c4097ccf8aeb4faf82e9e3"}]}
