)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"3a3a6d8ea6292c07896e3a3871dfa681f9d358b0","unresolved":false,"context_lines":[{"line_number":20,"context_line":"Closes-bug: #1353006"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: Ib46852f5b264e5ef2e2d499d3351f8974e393011"},{"line_number":23,"context_line":"Co-authored-by: Rajeev Grover \u003crajeev.grover@hp.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":24,"id":"fa98f980_62403457","line":23,"updated":"2014-09-08 21:44:48.000000000","message":"nit:  Use Co-Authored-By: ....   [1]  Otherwise, statistics engines may not pick it up if they\u0027re not configured to match case-insensitive.  Most of them probably do though.  So, this is marked as a nit.\n\n[1] https://wiki.openstack.org/wiki/GitCommitMessages","commit_id":"608003408b3aba6a8290427257460287d8a4ce96"}],"neutron/agent/l3_agent.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"00bef611cabdb38e2d37c612a7b798d463812272","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            #FIXME(danwent): use_ipv6\u003dTrue,"},{"line_number":156,"context_line":"            namespace\u003dself.ns_name)"},{"line_number":157,"context_line":"        if router[\u0027distributed\u0027]:"},{"line_number":158,"context_line":"            self.snat_iptables_manager \u003d None"},{"line_number":159,"context_line":"        self.routes \u003d []"},{"line_number":160,"context_line":"        # DVR Data"},{"line_number":161,"context_line":"        # Linklocal router to floating IP addr"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_1d0a7320","line":158,"updated":"2014-08-06 01:40:54.000000000","message":"router[\u0027distributed\u0027] is set in process_router(), which is probably why this is throwing an error now","commit_id":"76eec306ccb55e040830b2f32e373f273660e7b1"},{"author":{"_account_id":490,"name":"Sumit Naiksatam","email":"sumitnaiksatam@gmail.com","username":"snaiksat"},"change_message_id":"bdf5d435b527288c6218b2b3a35dc818edfa12de","unresolved":false,"context_lines":[{"line_number":1090,"context_line":""},{"line_number":1091,"context_line":"            if self.conf.agent_mode \u003d\u003d \u0027dvr_snat\u0027 and ("},{"line_number":1092,"context_line":"                    ri.router[\u0027gw_port_host\u0027] \u003d\u003d self.host):"},{"line_number":1093,"context_line":"                    self._create_dvr_gateway(ri, ex_gw_port,"},{"line_number":1094,"context_line":"                                             interface_name,"},{"line_number":1095,"context_line":"                                             internal_cidrs, snat_ports)"},{"line_number":1096,"context_line":"            for port in snat_ports:"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_6843af11","line":1093,"updated":"2014-08-06 02:50:14.000000000","message":"nit: is this still the right level of identation now that the if conditional block is removed?","commit_id":"85d42e34f8425007677d2ca0d8feb0f2e76660f9"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"68527a42834a2e1600f1b1d85477f676714a720c","unresolved":false,"context_lines":[{"line_number":1090,"context_line":""},{"line_number":1091,"context_line":"            if self.conf.agent_mode \u003d\u003d \u0027dvr_snat\u0027 and ("},{"line_number":1092,"context_line":"                    ri.router[\u0027gw_port_host\u0027] \u003d\u003d self.host):"},{"line_number":1093,"context_line":"                    self._create_dvr_gateway(ri, ex_gw_port,"},{"line_number":1094,"context_line":"                                             interface_name,"},{"line_number":1095,"context_line":"                                             internal_cidrs, snat_ports)"},{"line_number":1096,"context_line":"            for port in snat_ports:"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_08223354","line":1093,"in_reply_to":"baada198_6843af11","updated":"2014-08-06 02:53:30.000000000","message":"good catch","commit_id":"85d42e34f8425007677d2ca0d8feb0f2e76660f9"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"04d2d4bdce61ce7e90724fb0781702334e5213a3","unresolved":false,"context_lines":[{"line_number":1091,"context_line":"            if self.conf.agent_mode \u003d\u003d \u0027dvr_snat\u0027 and ("},{"line_number":1092,"context_line":"                    ri.router[\u0027gw_port_host\u0027] \u003d\u003d self.host):"},{"line_number":1093,"context_line":"                self._create_dvr_gateway(ri, ex_gw_port,"},{"line_number":1094,"context_line":"                                         interface_name,"},{"line_number":1095,"context_line":"                                         internal_cidrs, snat_ports)"},{"line_number":1096,"context_line":"            for port in snat_ports:"},{"line_number":1097,"context_line":"                for ip in port[\u0027fixed_ips\u0027]:"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_fa9cd372","line":1094,"updated":"2014-08-06 12:23:26.000000000","message":"The flow of this block of code is kind if strange. We should clean it up a bit before merging","commit_id":"9de04e8bd471e84a04e6904ae72f612d0b196836"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"69f915119d1ab4791dafbb2ff701f412d979033a","unresolved":false,"context_lines":[{"line_number":1091,"context_line":"            if self.conf.agent_mode \u003d\u003d \u0027dvr_snat\u0027 and ("},{"line_number":1092,"context_line":"                    ri.router[\u0027gw_port_host\u0027] \u003d\u003d self.host):"},{"line_number":1093,"context_line":"                self._create_dvr_gateway(ri, ex_gw_port,"},{"line_number":1094,"context_line":"                                         interface_name,"},{"line_number":1095,"context_line":"                                         internal_cidrs, snat_ports)"},{"line_number":1096,"context_line":"            for port in snat_ports:"},{"line_number":1097,"context_line":"                for ip in port[\u0027fixed_ips\u0027]:"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_6001eab4","line":1094,"in_reply_to":"baada198_edffbc67","updated":"2014-08-06 17:19:42.000000000","message":"I\u0027m not sure how this patch could be at fault here.  Mark, could you be more specific?  Maybe Armando could split out the cleanup in to a new patch and put that up for review?  Then, this fix could be merged?","commit_id":"9de04e8bd471e84a04e6904ae72f612d0b196836"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"9c110df45c54164e636d48c58dc222d764ae7cf9","unresolved":false,"context_lines":[{"line_number":1091,"context_line":"            if self.conf.agent_mode \u003d\u003d \u0027dvr_snat\u0027 and ("},{"line_number":1092,"context_line":"                    ri.router[\u0027gw_port_host\u0027] \u003d\u003d self.host):"},{"line_number":1093,"context_line":"                self._create_dvr_gateway(ri, ex_gw_port,"},{"line_number":1094,"context_line":"                                         interface_name,"},{"line_number":1095,"context_line":"                                         internal_cidrs, snat_ports)"},{"line_number":1096,"context_line":"            for port in snat_ports:"},{"line_number":1097,"context_line":"                for ip in port[\u0027fixed_ips\u0027]:"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_edffbc67","line":1094,"in_reply_to":"baada198_fa9cd372","updated":"2014-08-06 14:07:43.000000000","message":"Even though you don\u0027t give me enough to go by, I\u0027ll see what I can do.","commit_id":"9de04e8bd471e84a04e6904ae72f612d0b196836"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"64ea34eebf9abfd9d7e7d580f232bb7681fb2041","unresolved":false,"context_lines":[{"line_number":1102,"context_line":"                ri.router[\u0027gw_port_host\u0027] \u003d\u003d self.host):"},{"line_number":1103,"context_line":"                self._create_dvr_gateway("},{"line_number":1104,"context_line":"                    ri, ex_gw_port, interface_name, snat_ports)"},{"line_number":1105,"context_line":"                return"},{"line_number":1106,"context_line":"            for port in snat_ports:"},{"line_number":1107,"context_line":"                for ip in port[\u0027fixed_ips\u0027]:"},{"line_number":1108,"context_line":"                    self._update_arp_entry(ri, ip[\u0027ip_address\u0027],"}],"source_content_type":"text/x-python","patch_set":10,"id":"7ac7a964_6b471720","line":1105,"updated":"2014-08-14 20:01:53.000000000","message":"This \u0027return\u0027 drew my eye since there\u0027s another down on L1111.  Should you instead use an \u0027else\u0027 and put the for() loop under that?  Seems like only one or the other now where we used to do both possibly.","commit_id":"9f36364e951e3e758bc68a38af5173c78f0b2147"},{"author":{"_account_id":9077,"name":"Rajeev Grover","email":"rgrover687@gmail.com","username":"rajeev"},"change_message_id":"3cb6cc02209a99afb3a8a2af5529e783f39bcf63","unresolved":false,"context_lines":[{"line_number":1102,"context_line":"                ri.router[\u0027gw_port_host\u0027] \u003d\u003d self.host):"},{"line_number":1103,"context_line":"                self._create_dvr_gateway("},{"line_number":1104,"context_line":"                    ri, ex_gw_port, interface_name, snat_ports)"},{"line_number":1105,"context_line":"                return"},{"line_number":1106,"context_line":"            for port in snat_ports:"},{"line_number":1107,"context_line":"                for ip in port[\u0027fixed_ips\u0027]:"},{"line_number":1108,"context_line":"                    self._update_arp_entry(ri, ip[\u0027ip_address\u0027],"}],"source_content_type":"text/x-python","patch_set":10,"id":"7ac7a964_8ea3a19d","line":1105,"in_reply_to":"7ac7a964_4be97b7f","updated":"2014-08-14 20:45:38.000000000","message":"don\u0027t put else, arp updates have to be done irrespective because arp entries are needed even on the snat hosting node especially to take care of the case of single node deployment","commit_id":"9f36364e951e3e758bc68a38af5173c78f0b2147"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"cd9ef65102be67df9b77cf5072ce191415d3dfa2","unresolved":false,"context_lines":[{"line_number":1102,"context_line":"                ri.router[\u0027gw_port_host\u0027] \u003d\u003d self.host):"},{"line_number":1103,"context_line":"                self._create_dvr_gateway("},{"line_number":1104,"context_line":"                    ri, ex_gw_port, interface_name, snat_ports)"},{"line_number":1105,"context_line":"                return"},{"line_number":1106,"context_line":"            for port in snat_ports:"},{"line_number":1107,"context_line":"                for ip in port[\u0027fixed_ips\u0027]:"},{"line_number":1108,"context_line":"                    self._update_arp_entry(ri, ip[\u0027ip_address\u0027],"}],"source_content_type":"text/x-python","patch_set":10,"id":"7ac7a964_4be97b7f","line":1105,"in_reply_to":"7ac7a964_6b471720","updated":"2014-08-14 20:17:01.000000000","message":"you\u0027re right..I am just testing the waters ;)","commit_id":"9f36364e951e3e758bc68a38af5173c78f0b2147"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"5bf2fcdeac634857f4570707bf3d5e0ed4af6617","unresolved":false,"context_lines":[{"line_number":1102,"context_line":"                ri.router[\u0027gw_port_host\u0027] \u003d\u003d self.host):"},{"line_number":1103,"context_line":"                self._create_dvr_gateway("},{"line_number":1104,"context_line":"                    ri, ex_gw_port, interface_name, snat_ports)"},{"line_number":1105,"context_line":"                return"},{"line_number":1106,"context_line":"            for port in snat_ports:"},{"line_number":1107,"context_line":"                for ip in port[\u0027fixed_ips\u0027]:"},{"line_number":1108,"context_line":"                    self._update_arp_entry(ri, ip[\u0027ip_address\u0027],"}],"source_content_type":"text/x-python","patch_set":10,"id":"7ac7a964_31e3d0da","line":1105,"in_reply_to":"7ac7a964_8ea3a19d","updated":"2014-08-14 20:52:10.000000000","message":"this is still WIP, I am still figuring out why this patch make DVR regress.","commit_id":"9f36364e951e3e758bc68a38af5173c78f0b2147"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ba4fbbc68819382fe2e0b2ff37512beaf0f8661b","unresolved":false,"context_lines":[{"line_number":934,"context_line":"        # each router\u0027s SNAT rules will be in their own namespace"},{"line_number":935,"context_line":"        if not ri.router[\u0027distributed\u0027]:"},{"line_number":936,"context_line":"            iptables_manager \u003d ri.iptables_manager"},{"line_number":937,"context_line":"        elif ri.router[\u0027distributed\u0027] and ri.snat_iptables_manager:"},{"line_number":938,"context_line":"            iptables_manager \u003d ri.snat_iptables_manager"},{"line_number":939,"context_line":"        else:"},{"line_number":940,"context_line":"            LOG.debug(\"DVR router: no snat rules to be handled\")"}],"source_content_type":"text/x-python","patch_set":15,"id":"7ac7a964_56901b43","line":937,"updated":"2014-08-15 17:39:16.000000000","message":"Is the ri.router[\u0027distributed\u0027] check necessary here?  Implied by the \"not\" being false.","commit_id":"3c45f68b04fe315578a3afc4cd8b06fc23698fcb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ba4fbbc68819382fe2e0b2ff37512beaf0f8661b","unresolved":false,"context_lines":[{"line_number":1221,"context_line":"    def external_gateway_updated(self, ri, ex_gw_port, interface_name):"},{"line_number":1222,"context_line":"        preserve_ips \u003d []"},{"line_number":1223,"context_line":"        if ri.router[\u0027distributed\u0027]:"},{"line_number":1224,"context_line":"            if(self.conf.agent_mode \u003d\u003d \u0027dvr_snat\u0027 and ("},{"line_number":1225,"context_line":"                ri.router[\u0027gw_port_host\u0027] \u003d\u003d self.host)):"},{"line_number":1226,"context_line":"                ns_name \u003d self.get_snat_ns_name(ri.router[\u0027id\u0027])"},{"line_number":1227,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":15,"id":"7ac7a964_b6b40fd2","line":1224,"updated":"2014-08-15 17:39:16.000000000","message":"Surprised pep8 didn\u0027t complain about the missing space after \u0027if\u0027","commit_id":"3c45f68b04fe315578a3afc4cd8b06fc23698fcb"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"71deee2f9b8520038fe51533df9b2157d5ebeab1","unresolved":false,"context_lines":[{"line_number":1217,"context_line":"                                            [\u0027ip_address\u0027], p, id_name)"},{"line_number":1218,"context_line":""},{"line_number":1219,"context_line":"            if (self.conf.agent_mode \u003d\u003d \u0027dvr_snat\u0027 and"},{"line_number":1220,"context_line":"                ri.router[\u0027gw_port_host\u0027] \u003d\u003d self.host):"},{"line_number":1221,"context_line":"                self._create_dvr_gateway(ri, ex_gw_port, interface_name,"},{"line_number":1222,"context_line":"                                         snat_ports)"},{"line_number":1223,"context_line":"            for port in snat_ports:"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa98f980_07925af5","line":1220,"updated":"2014-09-05 17:57:20.000000000","message":"not sure but the end of the condition should be indented more to differentiate the end of the condition and the inner block?","commit_id":"fd4d793cf7f7bfa45f7c662a2a1fe484577ee0de"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"58c82c64b71af9d8c098e93cf91efbef72c439dc","unresolved":false,"context_lines":[{"line_number":1217,"context_line":"                                            [\u0027ip_address\u0027], p, id_name)"},{"line_number":1218,"context_line":""},{"line_number":1219,"context_line":"            if (self.conf.agent_mode \u003d\u003d \u0027dvr_snat\u0027 and"},{"line_number":1220,"context_line":"                ri.router[\u0027gw_port_host\u0027] \u003d\u003d self.host):"},{"line_number":1221,"context_line":"                self._create_dvr_gateway(ri, ex_gw_port, interface_name,"},{"line_number":1222,"context_line":"                                         snat_ports)"},{"line_number":1223,"context_line":"            for port in snat_ports:"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa98f980_c1acb7ef","line":1220,"in_reply_to":"fa98f980_07925af5","updated":"2014-09-05 22:23:32.000000000","message":"why? is there a PEP recommendation you know about?","commit_id":"fd4d793cf7f7bfa45f7c662a2a1fe484577ee0de"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"6e50556f51823cb33504cac248bb9c755b206046","unresolved":false,"context_lines":[{"line_number":1217,"context_line":"                                            [\u0027ip_address\u0027], p, id_name)"},{"line_number":1218,"context_line":""},{"line_number":1219,"context_line":"            if (self.conf.agent_mode \u003d\u003d \u0027dvr_snat\u0027 and"},{"line_number":1220,"context_line":"                ri.router[\u0027gw_port_host\u0027] \u003d\u003d self.host):"},{"line_number":1221,"context_line":"                self._create_dvr_gateway(ri, ex_gw_port, interface_name,"},{"line_number":1222,"context_line":"                                         snat_ports)"},{"line_number":1223,"context_line":"            for port in snat_ports:"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa98f980_a592269d","line":1220,"in_reply_to":"fa98f980_3d12df58","updated":"2014-09-08 21:43:51.000000000","message":"I don\u0027t think this paren should have moved in the first place.  This conditional is not changing.  We\u0027re just adding gratuitous changes which lead to gratuitous discussion about pep8, merge conflicts, etc.  Can\u0027t we stick to what the patch is trying to do in the first place?","commit_id":"fd4d793cf7f7bfa45f7c662a2a1fe484577ee0de"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"f3084ace30c3e69f7347558e58b47a29c76eb5d3","unresolved":false,"context_lines":[{"line_number":1217,"context_line":"                                            [\u0027ip_address\u0027], p, id_name)"},{"line_number":1218,"context_line":""},{"line_number":1219,"context_line":"            if (self.conf.agent_mode \u003d\u003d \u0027dvr_snat\u0027 and"},{"line_number":1220,"context_line":"                ri.router[\u0027gw_port_host\u0027] \u003d\u003d self.host):"},{"line_number":1221,"context_line":"                self._create_dvr_gateway(ri, ex_gw_port, interface_name,"},{"line_number":1222,"context_line":"                                         snat_ports)"},{"line_number":1223,"context_line":"            for port in snat_ports:"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa98f980_3d12df58","line":1220,"in_reply_to":"fa98f980_7ababbc1","updated":"2014-09-08 15:22:09.000000000","message":"It\u0027s difficult to keep up with this violations if we don\u0027t enforce it. I wouldn\u0027t want to spin up another PS just for this unless you feel strongly against it.","commit_id":"fd4d793cf7f7bfa45f7c662a2a1fe484577ee0de"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"f0663a35d8dbc9188b3c4e875b683b021f6df14a","unresolved":false,"context_lines":[{"line_number":1217,"context_line":"                                            [\u0027ip_address\u0027], p, id_name)"},{"line_number":1218,"context_line":""},{"line_number":1219,"context_line":"            if (self.conf.agent_mode \u003d\u003d \u0027dvr_snat\u0027 and"},{"line_number":1220,"context_line":"                ri.router[\u0027gw_port_host\u0027] \u003d\u003d self.host):"},{"line_number":1221,"context_line":"                self._create_dvr_gateway(ri, ex_gw_port, interface_name,"},{"line_number":1222,"context_line":"                                         snat_ports)"},{"line_number":1223,"context_line":"            for port in snat_ports:"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa98f980_c79e6b07","line":1220,"in_reply_to":"fa98f980_7ababbc1","updated":"2014-09-08 09:42:51.000000000","message":"Thanks Jacek, i fail to find it myself :s","commit_id":"fd4d793cf7f7bfa45f7c662a2a1fe484577ee0de"},{"author":{"_account_id":12737,"name":"Jacek Swiderski","email":"jacek.swiderski@codilime.com","username":"Altran"},"change_message_id":"5682e4757a7e6a9e379f1e3b2e4ff86af8ffb5a6","unresolved":false,"context_lines":[{"line_number":1217,"context_line":"                                            [\u0027ip_address\u0027], p, id_name)"},{"line_number":1218,"context_line":""},{"line_number":1219,"context_line":"            if (self.conf.agent_mode \u003d\u003d \u0027dvr_snat\u0027 and"},{"line_number":1220,"context_line":"                ri.router[\u0027gw_port_host\u0027] \u003d\u003d self.host):"},{"line_number":1221,"context_line":"                self._create_dvr_gateway(ri, ex_gw_port, interface_name,"},{"line_number":1222,"context_line":"                                         snat_ports)"},{"line_number":1223,"context_line":"            for port in snat_ports:"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa98f980_7ababbc1","line":1220,"in_reply_to":"fa98f980_c1acb7ef","updated":"2014-09-08 08:27:18.000000000","message":"E129 which is currently ignored in tox.ini because of many existing occurrences but I think we shouldn\u0027t introduce new ones.","commit_id":"fd4d793cf7f7bfa45f7c662a2a1fe484577ee0de"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"3a3a6d8ea6292c07896e3a3871dfa681f9d358b0","unresolved":false,"context_lines":[{"line_number":954,"context_line":"        # each router\u0027s SNAT rules will be in their own namespace"},{"line_number":955,"context_line":"        if not ri.router[\u0027distributed\u0027]:"},{"line_number":956,"context_line":"            iptables_manager \u003d ri.iptables_manager"},{"line_number":957,"context_line":"        elif ri.snat_iptables_manager:"},{"line_number":958,"context_line":"            iptables_manager \u003d ri.snat_iptables_manager"},{"line_number":959,"context_line":"        else:"},{"line_number":960,"context_line":"            LOG.debug(\"DVR router: no snat rules to be handled\")"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa98f980_45097a2b","line":957,"updated":"2014-09-08 21:44:48.000000000","message":"nit:  This changes seems a bit harder and more disruptive than it needs to be.  Less disruptive would be to insert the following code snippet before L955 in the original.\n\n  if not ri.snat_iptables_manager\n      LOG.debug(...)\n      return","commit_id":"608003408b3aba6a8290427257460287d8a4ce96"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"3a3a6d8ea6292c07896e3a3871dfa681f9d358b0","unresolved":false,"context_lines":[{"line_number":1216,"context_line":"                    self._snat_redirect_add(ri, gateway[\u0027fixed_ips\u0027][0]"},{"line_number":1217,"context_line":"                                            [\u0027ip_address\u0027], p, id_name)"},{"line_number":1218,"context_line":""},{"line_number":1219,"context_line":"            if (self.conf.agent_mode \u003d\u003d \u0027dvr_snat\u0027 and"},{"line_number":1220,"context_line":"                ri.router[\u0027gw_port_host\u0027] \u003d\u003d self.host):"},{"line_number":1221,"context_line":"                self._create_dvr_gateway(ri, ex_gw_port, interface_name,"},{"line_number":1222,"context_line":"                                         snat_ports)"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa98f980_65259eaa","line":1219,"updated":"2014-09-08 21:44:48.000000000","message":"nit:  This if condition isn\u0027t really changing so don\u0027t move the paren.  If you need to turn the patch for something else, just revert this change.","commit_id":"608003408b3aba6a8290427257460287d8a4ce96"}],"neutron/tests/unit/test_l3_agent.py":[{"author":{"_account_id":9077,"name":"Rajeev Grover","email":"rgrover687@gmail.com","username":"rajeev"},"change_message_id":"3cb6cc02209a99afb3a8a2af5529e783f39bcf63","unresolved":false,"context_lines":[{"line_number":419,"context_line":"        ri \u003d l3_agent.RouterInfo("},{"line_number":420,"context_line":"            \u0027foo_router_id\u0027, mock.ANY, True,"},{"line_number":421,"context_line":"            {\u0027distributed\u0027: True, \u0027gw_port_host\u0027: HOSTNAME})"},{"line_number":422,"context_line":"        with mock.patch.object(agent, \u0027_create_dvr_gateway\u0027) as mock_create:"},{"line_number":423,"context_line":"            agent.external_gateway_added(ri, mock.ANY, mock.ANY)"},{"line_number":424,"context_line":"        self.assertTrue(mock_create.call_count)"},{"line_number":425,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7ac7a964_710f0831","line":422,"updated":"2014-08-14 20:45:38.000000000","message":"nit: mock_create sounds like a verb","commit_id":"9f36364e951e3e758bc68a38af5173c78f0b2147"},{"author":{"_account_id":12737,"name":"Jacek Swiderski","email":"jacek.swiderski@codilime.com","username":"Altran"},"change_message_id":"6a2c49abb0d74501b5d01c8f3d3977e3a0476707","unresolved":false,"context_lines":[{"line_number":848,"context_line":"        with mock.patch.object(l3_agent.ip_lib, \u0027IPDevice\u0027) as f:"},{"line_number":849,"context_line":"            agent._update_arp_entry(ri, mock.ANY, mock.ANY,"},{"line_number":850,"context_line":"                                    \u0027foo_subnet_id\u0027, \u0027add\u0027)"},{"line_number":851,"context_line":"        self.assertFalse(f.call_count)"},{"line_number":852,"context_line":""},{"line_number":853,"context_line":"    def test_del_arp_entry(self):"},{"line_number":854,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa98f980_30116452","line":851,"updated":"2014-09-05 11:12:36.000000000","message":"nit: call_count -\u003e called","commit_id":"fd4d793cf7f7bfa45f7c662a2a1fe484577ee0de"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"58c82c64b71af9d8c098e93cf91efbef72c439dc","unresolved":false,"context_lines":[{"line_number":848,"context_line":"        with mock.patch.object(l3_agent.ip_lib, \u0027IPDevice\u0027) as f:"},{"line_number":849,"context_line":"            agent._update_arp_entry(ri, mock.ANY, mock.ANY,"},{"line_number":850,"context_line":"                                    \u0027foo_subnet_id\u0027, \u0027add\u0027)"},{"line_number":851,"context_line":"        self.assertFalse(f.call_count)"},{"line_number":852,"context_line":""},{"line_number":853,"context_line":"    def test_del_arp_entry(self):"},{"line_number":854,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa98f980_4188c770","line":851,"in_reply_to":"fa98f980_0a4a6154","updated":"2014-09-05 22:23:32.000000000","message":"Done","commit_id":"fd4d793cf7f7bfa45f7c662a2a1fe484577ee0de"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"71deee2f9b8520038fe51533df9b2157d5ebeab1","unresolved":false,"context_lines":[{"line_number":848,"context_line":"        with mock.patch.object(l3_agent.ip_lib, \u0027IPDevice\u0027) as f:"},{"line_number":849,"context_line":"            agent._update_arp_entry(ri, mock.ANY, mock.ANY,"},{"line_number":850,"context_line":"                                    \u0027foo_subnet_id\u0027, \u0027add\u0027)"},{"line_number":851,"context_line":"        self.assertFalse(f.call_count)"},{"line_number":852,"context_line":""},{"line_number":853,"context_line":"    def test_del_arp_entry(self):"},{"line_number":854,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa98f980_0a4a6154","line":851,"in_reply_to":"fa98f980_30116452","updated":"2014-09-05 17:57:20.000000000","message":"indeed f.call_count is an integer where c.called is a boolean","commit_id":"fd4d793cf7f7bfa45f7c662a2a1fe484577ee0de"},{"author":{"_account_id":12737,"name":"Jacek Swiderski","email":"jacek.swiderski@codilime.com","username":"Altran"},"change_message_id":"6a2c49abb0d74501b5d01c8f3d3977e3a0476707","unresolved":false,"context_lines":[{"line_number":1477,"context_line":"                ri, mock.ANY, mock.ANY, mock.ANY, mock.ANY)"},{"line_number":1478,"context_line":"        self.assertIsNone(ri.snat_iptables_manager)"},{"line_number":1479,"context_line":"        self.assertFalse(ri.iptables_manager.call_count)"},{"line_number":1480,"context_line":"        self.assertTrue(log_debug.call_count)"},{"line_number":1481,"context_line":""},{"line_number":1482,"context_line":"    def test_handle_router_snat_rules_add_back_jump(self):"},{"line_number":1483,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa98f980_501c286a","line":1480,"updated":"2014-09-05 11:12:36.000000000","message":"ditto","commit_id":"fd4d793cf7f7bfa45f7c662a2a1fe484577ee0de"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"71deee2f9b8520038fe51533df9b2157d5ebeab1","unresolved":false,"context_lines":[{"line_number":1477,"context_line":"                ri, mock.ANY, mock.ANY, mock.ANY, mock.ANY)"},{"line_number":1478,"context_line":"        self.assertIsNone(ri.snat_iptables_manager)"},{"line_number":1479,"context_line":"        self.assertFalse(ri.iptables_manager.call_count)"},{"line_number":1480,"context_line":"        self.assertTrue(log_debug.call_count)"},{"line_number":1481,"context_line":""},{"line_number":1482,"context_line":"    def test_handle_router_snat_rules_add_back_jump(self):"},{"line_number":1483,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa98f980_2ab3a54d","line":1480,"updated":"2014-09-05 17:57:20.000000000","message":"log_debug.assert_any_call() seems better","commit_id":"fd4d793cf7f7bfa45f7c662a2a1fe484577ee0de"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"58c82c64b71af9d8c098e93cf91efbef72c439dc","unresolved":false,"context_lines":[{"line_number":1477,"context_line":"                ri, mock.ANY, mock.ANY, mock.ANY, mock.ANY)"},{"line_number":1478,"context_line":"        self.assertIsNone(ri.snat_iptables_manager)"},{"line_number":1479,"context_line":"        self.assertFalse(ri.iptables_manager.call_count)"},{"line_number":1480,"context_line":"        self.assertTrue(log_debug.call_count)"},{"line_number":1481,"context_line":""},{"line_number":1482,"context_line":"    def test_handle_router_snat_rules_add_back_jump(self):"},{"line_number":1483,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa98f980_817e2f68","line":1480,"in_reply_to":"fa98f980_2ab3a54d","updated":"2014-09-05 22:23:32.000000000","message":"Done","commit_id":"fd4d793cf7f7bfa45f7c662a2a1fe484577ee0de"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"3e28a7363f5aef022e1e730ae5630e046cf4b738","unresolved":false,"context_lines":[{"line_number":840,"context_line":"        agent.add_arp_entry(None, payload)"},{"line_number":841,"context_line":"        self.assertFalse(agent._update_arp_entry.called)"},{"line_number":842,"context_line":""},{"line_number":843,"context_line":"    def test__update_arp_entry_with_no_subnet(self):"},{"line_number":844,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"},{"line_number":845,"context_line":"        ri \u003d l3_agent.RouterInfo("},{"line_number":846,"context_line":"            \u0027foo_router_id\u0027, mock.ANY, True,"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa98f980_a4c6af14","line":843,"updated":"2014-09-08 19:05:58.000000000","message":"why test__update?  -\u003e test_update ...","commit_id":"608003408b3aba6a8290427257460287d8a4ce96"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"f07ece1936ca3406921780cbad166fc444cfc08d","unresolved":false,"context_lines":[{"line_number":840,"context_line":"        agent.add_arp_entry(None, payload)"},{"line_number":841,"context_line":"        self.assertFalse(agent._update_arp_entry.called)"},{"line_number":842,"context_line":""},{"line_number":843,"context_line":"    def test__update_arp_entry_with_no_subnet(self):"},{"line_number":844,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"},{"line_number":845,"context_line":"        ri \u003d l3_agent.RouterInfo("},{"line_number":846,"context_line":"            \u0027foo_router_id\u0027, mock.ANY, True,"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa98f980_1c442873","line":843,"in_reply_to":"fa98f980_3f3d6cbc","updated":"2014-09-09 05:12:54.000000000","message":"i see. I\u0027d say your probably testing to low as your testing private methods directly. :P","commit_id":"608003408b3aba6a8290427257460287d8a4ce96"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"4bb1dc8c10dcda74d403c7122948fc722f05fc16","unresolved":false,"context_lines":[{"line_number":840,"context_line":"        agent.add_arp_entry(None, payload)"},{"line_number":841,"context_line":"        self.assertFalse(agent._update_arp_entry.called)"},{"line_number":842,"context_line":""},{"line_number":843,"context_line":"    def test__update_arp_entry_with_no_subnet(self):"},{"line_number":844,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"},{"line_number":845,"context_line":"        ri \u003d l3_agent.RouterInfo("},{"line_number":846,"context_line":"            \u0027foo_router_id\u0027, mock.ANY, True,"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa98f980_3f3d6cbc","line":843,"in_reply_to":"fa98f980_a4c6af14","updated":"2014-09-08 19:17:09.000000000","message":"test_ + method name","commit_id":"608003408b3aba6a8290427257460287d8a4ce96"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"e9ae0aecd44d9cc77278fdaac09d38c0ff44dbbc","unresolved":false,"context_lines":[{"line_number":848,"context_line":"        with mock.patch.object(l3_agent.ip_lib, \u0027IPDevice\u0027) as f:"},{"line_number":849,"context_line":"            agent._update_arp_entry(ri, mock.ANY, mock.ANY,"},{"line_number":850,"context_line":"                                    \u0027foo_subnet_id\u0027, \u0027add\u0027)"},{"line_number":851,"context_line":"        self.assertFalse(f.call_count)"},{"line_number":852,"context_line":""},{"line_number":853,"context_line":"    def test_del_arp_entry(self):"},{"line_number":854,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa98f980_4178bc8f","line":851,"updated":"2014-09-07 02:58:08.000000000","message":"self.assertFalse(f.called)","commit_id":"608003408b3aba6a8290427257460287d8a4ce96"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"4bb1dc8c10dcda74d403c7122948fc722f05fc16","unresolved":false,"context_lines":[{"line_number":848,"context_line":"        with mock.patch.object(l3_agent.ip_lib, \u0027IPDevice\u0027) as f:"},{"line_number":849,"context_line":"            agent._update_arp_entry(ri, mock.ANY, mock.ANY,"},{"line_number":850,"context_line":"                                    \u0027foo_subnet_id\u0027, \u0027add\u0027)"},{"line_number":851,"context_line":"        self.assertFalse(f.call_count)"},{"line_number":852,"context_line":""},{"line_number":853,"context_line":"    def test_del_arp_entry(self):"},{"line_number":854,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa98f980_7f5e1414","line":851,"in_reply_to":"fa98f980_4178bc8f","updated":"2014-09-08 19:17:09.000000000","message":"Fair enough. I\u0027ll fix it, unless you\u0027re terribly annoyed by it :)","commit_id":"608003408b3aba6a8290427257460287d8a4ce96"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"3a3a6d8ea6292c07896e3a3871dfa681f9d358b0","unresolved":false,"context_lines":[{"line_number":848,"context_line":"        with mock.patch.object(l3_agent.ip_lib, \u0027IPDevice\u0027) as f:"},{"line_number":849,"context_line":"            agent._update_arp_entry(ri, mock.ANY, mock.ANY,"},{"line_number":850,"context_line":"                                    \u0027foo_subnet_id\u0027, \u0027add\u0027)"},{"line_number":851,"context_line":"        self.assertFalse(f.call_count)"},{"line_number":852,"context_line":""},{"line_number":853,"context_line":"    def test_del_arp_entry(self):"},{"line_number":854,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa98f980_45ca5aa2","line":851,"in_reply_to":"fa98f980_7f5e1414","updated":"2014-09-08 21:44:48.000000000","message":"I\u0027m annoyed!  :P","commit_id":"608003408b3aba6a8290427257460287d8a4ce96"}]}
