)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"04a05a89c2b546da69adca7b1c31705097d78dbc","unresolved":false,"context_lines":[{"line_number":9,"context_line":"We have a problem with SNAT with too many connections using the"},{"line_number":10,"context_line":"same source and destination on the network nodes."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"In addition we can see in the conntrack table that the who"},{"line_number":13,"context_line":"\"instert_failed\" increases."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This might be a generic problem with conntrack and linux."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":25,"id":"5fc1f717_f12ba5e7","line":12,"updated":"2019-04-10 17:33:01.000000000","message":"nit: s/who/field/","commit_id":"f512393213d304cb277dc53e0f39bca7a4998bfe"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"4ce05e4108879a8fe49546037ee4f8cf6718bf6c","unresolved":false,"context_lines":[{"line_number":9,"context_line":"We have a problem with SNAT with too many connections using the"},{"line_number":10,"context_line":"same source and destination on the network nodes."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"In addition we can see in the conntrack table that the who"},{"line_number":13,"context_line":"\"instert_failed\" increases."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This might be a generic problem with conntrack and linux."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":25,"id":"3fce034c_2fe1a5ff","line":12,"in_reply_to":"5fc1f717_f12ba5e7","updated":"2019-04-10 20:15:07.000000000","message":"Yes will fix this.","commit_id":"f512393213d304cb277dc53e0f39bca7a4998bfe"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"34e24c4ef135376395931ae4da8592cbe4f1e92b","unresolved":false,"context_lines":[{"line_number":10,"context_line":"same source and destination on the network nodes."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"In addition we can see in the conntrack table that the who"},{"line_number":13,"context_line":"\"instert_failed\" increases."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This might be a generic problem with conntrack and linux."},{"line_number":16,"context_line":"We suspect that we encounter the following \"limitation / bug\""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":25,"id":"5fc1f717_22c241ea","line":13,"range":{"start_line":13,"start_character":1,"end_line":13,"end_character":8},"updated":"2019-04-10 14:34:02.000000000","message":"s/insert","commit_id":"f512393213d304cb277dc53e0f39bca7a4998bfe"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"4ce05e4108879a8fe49546037ee4f8cf6718bf6c","unresolved":false,"context_lines":[{"line_number":10,"context_line":"same source and destination on the network nodes."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"In addition we can see in the conntrack table that the who"},{"line_number":13,"context_line":"\"instert_failed\" increases."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This might be a generic problem with conntrack and linux."},{"line_number":16,"context_line":"We suspect that we encounter the following \"limitation / bug\""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":25,"id":"3fce034c_0fdce944","line":13,"range":{"start_line":13,"start_character":1,"end_line":13,"end_character":8},"in_reply_to":"5fc1f717_22c241ea","updated":"2019-04-10 20:15:07.000000000","message":"will fix this.","commit_id":"f512393213d304cb277dc53e0f39bca7a4998bfe"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"04a05a89c2b546da69adca7b1c31705097d78dbc","unresolved":false,"context_lines":[{"line_number":13,"context_line":"\"instert_failed\" increases."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This might be a generic problem with conntrack and linux."},{"line_number":16,"context_line":"We suspect that we encounter the following \"limitation / bug\""},{"line_number":17,"context_line":"in the kernel."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"There seems to be a workaround to alleviate this behavior by"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":25,"id":"5fc1f717_112f51f6","line":16,"updated":"2019-04-10 17:33:01.000000000","message":"nit: following?","commit_id":"f512393213d304cb277dc53e0f39bca7a4998bfe"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"4ce05e4108879a8fe49546037ee4f8cf6718bf6c","unresolved":false,"context_lines":[{"line_number":13,"context_line":"\"instert_failed\" increases."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This might be a generic problem with conntrack and linux."},{"line_number":16,"context_line":"We suspect that we encounter the following \"limitation / bug\""},{"line_number":17,"context_line":"in the kernel."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"There seems to be a workaround to alleviate this behavior by"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":25,"id":"3fce034c_4fbbd1e4","line":16,"in_reply_to":"5fc1f717_112f51f6","updated":"2019-04-10 20:15:07.000000000","message":"Ok will fix it.","commit_id":"f512393213d304cb277dc53e0f39bca7a4998bfe"}],"neutron/agent/l3/dvr_edge_router.py":[{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"fbd254b5a5363e24bbd4141b69fd04eab040a93a","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        return lib_constants.FLOATINGIP_STATUS_ACTIVE"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"    def _centralized_floating_forward_rules(self, floating_ip, fixed_ip):"},{"line_number":335,"context_line":"        if self.snat_iptables_manager.get_version() \u003e\u003d \u0027v1.6.2\u0027:"},{"line_number":336,"context_line":"            return [(\u0027PREROUTING\u0027, \u0027-d %s/32 -j DNAT --to-destination %s\u0027 %"},{"line_number":337,"context_line":"                     (floating_ip, fixed_ip)),"},{"line_number":338,"context_line":"                    (\u0027OUTPUT\u0027, \u0027-d %s/32 -j DNAT --to-destination %s\u0027 %"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_5c6af319","line":335,"range":{"start_line":335,"start_character":56,"end_line":335,"end_character":62},"updated":"2019-02-13 22:38:27.000000000","message":"Constant?","commit_id":"b4375da6f1697f2f7e848d818a330d3e24b9faab"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"bcff63cd3b8deb2c1fa7cda9939e9c70abd3b77b","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        return lib_constants.FLOATINGIP_STATUS_ACTIVE"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"    def _centralized_floating_forward_rules(self, floating_ip, fixed_ip):"},{"line_number":335,"context_line":"        if self.snat_iptables_manager.get_version() \u003e\u003d \u0027v1.6.2\u0027:"},{"line_number":336,"context_line":"            return [(\u0027PREROUTING\u0027, \u0027-d %s/32 -j DNAT --to-destination %s\u0027 %"},{"line_number":337,"context_line":"                     (floating_ip, fixed_ip)),"},{"line_number":338,"context_line":"                    (\u0027OUTPUT\u0027, \u0027-d %s/32 -j DNAT --to-destination %s\u0027 %"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_1c01cb06","line":335,"range":{"start_line":335,"start_character":56,"end_line":335,"end_character":62},"in_reply_to":"9fdfeff1_5c6af319","updated":"2019-02-13 22:51:19.000000000","message":"This is temporary, so do you think we should define a constant for this?","commit_id":"b4375da6f1697f2f7e848d818a330d3e24b9faab"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"fe646481a788e87696e04f5171a2436107932923","unresolved":false,"context_lines":[{"line_number":333,"context_line":"        return lib_constants.FLOATINGIP_STATUS_ACTIVE"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    def _centralized_floating_forward_rules(self, floating_ip, fixed_ip):"},{"line_number":336,"context_line":"        if self.snat_iptables_manager.get_version() \u003e\u003d n_const.IPTBL_VERSION:"},{"line_number":337,"context_line":"            return [(\u0027PREROUTING\u0027, \u0027-d %s/32 -j DNAT --to-destination %s\u0027 %"},{"line_number":338,"context_line":"                     (floating_ip, fixed_ip)),"},{"line_number":339,"context_line":"                    (\u0027OUTPUT\u0027, \u0027-d %s/32 -j DNAT --to-destination %s\u0027 %"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_e89a37c3","line":336,"range":{"start_line":336,"start_character":11,"end_line":336,"end_character":51},"updated":"2019-02-25 12:09:37.000000000","message":"nit: I don\u0027t know if checking a backend in execution is allowed. But as I said, this is just something I remember from past developments.\n\nBTW, I agree with this check.","commit_id":"2fb977286603ad14d5070bbfc850394218dd5af2"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"98577c80ecf65ab5c07cf69cf4e1b8ff1a4c6b1e","unresolved":false,"context_lines":[{"line_number":333,"context_line":"        return lib_constants.FLOATINGIP_STATUS_ACTIVE"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    def _centralized_floating_forward_rules(self, floating_ip, fixed_ip):"},{"line_number":336,"context_line":"        if self.snat_iptables_manager.get_version() \u003e\u003d n_const.IPTBL_VERSION:"},{"line_number":337,"context_line":"            return [(\u0027PREROUTING\u0027, \u0027-d %s/32 -j DNAT --to-destination %s\u0027 %"},{"line_number":338,"context_line":"                     (floating_ip, fixed_ip)),"},{"line_number":339,"context_line":"                    (\u0027OUTPUT\u0027, \u0027-d %s/32 -j DNAT --to-destination %s\u0027 %"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_7cc28055","line":336,"range":{"start_line":336,"start_character":11,"end_line":336,"end_character":51},"in_reply_to":"9fdfeff1_e89a37c3","updated":"2019-02-25 18:23:08.000000000","message":"This was based on the feedback I added a check.\nSince you agree with this I will proceed on it.","commit_id":"2fb977286603ad14d5070bbfc850394218dd5af2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"fe646481a788e87696e04f5171a2436107932923","unresolved":false,"context_lines":[{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    def _centralized_floating_forward_rules(self, floating_ip, fixed_ip):"},{"line_number":336,"context_line":"        if self.snat_iptables_manager.get_version() \u003e\u003d n_const.IPTBL_VERSION:"},{"line_number":337,"context_line":"            return [(\u0027PREROUTING\u0027, \u0027-d %s/32 -j DNAT --to-destination %s\u0027 %"},{"line_number":338,"context_line":"                     (floating_ip, fixed_ip)),"},{"line_number":339,"context_line":"                    (\u0027OUTPUT\u0027, \u0027-d %s/32 -j DNAT --to-destination %s\u0027 %"},{"line_number":340,"context_line":"                     (floating_ip, fixed_ip)),"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_28183f74","line":337,"updated":"2019-02-25 12:09:37.000000000","message":"Do we really want to duplicate this code? Let me suggest you something like this:\n\nrules \u003d [(\u0027PREROUTING\u0027, \u0027-d %s/32 -j DNAT --to-destination %s\u0027 %\n                     (floating_ip, fixed_ip)),\n         (\u0027OUTPUT\u0027, \u0027-d %s/32 -j DNAT --to-destination %s\u0027 %\n                     (floating_ip, fixed_ip))]\nsnat_rule \u003d (\u0027float-snat\u0027, \u0027-s %s/32 -j SNAT --to-source %s \u0027\n             % (fixed_ip, floating_ip))\nif if self.snat_iptables_manager.get_version() \u003e\u003d n_const.IPTBL_VERSION:\n  snat_rule +\u003d \u0027 --random-fully\u0027\nrules.append(snat_rule)\nreturn rules","commit_id":"2fb977286603ad14d5070bbfc850394218dd5af2"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"98577c80ecf65ab5c07cf69cf4e1b8ff1a4c6b1e","unresolved":false,"context_lines":[{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    def _centralized_floating_forward_rules(self, floating_ip, fixed_ip):"},{"line_number":336,"context_line":"        if self.snat_iptables_manager.get_version() \u003e\u003d n_const.IPTBL_VERSION:"},{"line_number":337,"context_line":"            return [(\u0027PREROUTING\u0027, \u0027-d %s/32 -j DNAT --to-destination %s\u0027 %"},{"line_number":338,"context_line":"                     (floating_ip, fixed_ip)),"},{"line_number":339,"context_line":"                    (\u0027OUTPUT\u0027, \u0027-d %s/32 -j DNAT --to-destination %s\u0027 %"},{"line_number":340,"context_line":"                     (floating_ip, fixed_ip)),"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_7c97e046","line":337,"in_reply_to":"9fdfeff1_28183f74","updated":"2019-02-25 18:23:08.000000000","message":"Good suggestion will follow your recommendation.","commit_id":"2fb977286603ad14d5070bbfc850394218dd5af2"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"57ca6201e98495505b0530ea5b032082e86e035c","unresolved":false,"context_lines":[{"line_number":351,"context_line":"        snat_rule \u003d (\u0027float-snat\u0027, \u0027-s %s/32 -j SNAT --to-source %s\u0027 %"},{"line_number":352,"context_line":"                     (fixed_ip, floating_ip))"},{"line_number":353,"context_line":"        iptable_version \u003d self.snat_iptables_manager.get_version()"},{"line_number":354,"context_line":"        if iptable_version \u003d\u003d n_const.IPTBL_VERSION:"},{"line_number":355,"context_line":"            snat_rule +\u003d \u0027 --random-fully\u0027"},{"line_number":356,"context_line":"        rules.append(snat_rule)"},{"line_number":357,"context_line":"        return rules"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_e0c5df5c","line":354,"range":{"start_line":354,"start_character":27,"end_line":354,"end_character":29},"updated":"2019-03-06 06:46:35.000000000","message":"I do not find the context from this patch thread, why only 1.6.2?\n\nAs Rodolfo mentioned in patch set 1, version 1.8.0+ does not support this?\nhttps://www.netfilter.org/projects/iptables/downloads.html#iptables-1.6.2","commit_id":"15a0c536faf9371ab4078d9297cb4ca70aa51d85"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"9db81ba3458d55f1b7d8b45b6c3ef786d521089c","unresolved":false,"context_lines":[{"line_number":351,"context_line":"        snat_rule \u003d (\u0027float-snat\u0027, \u0027-s %s/32 -j SNAT --to-source %s\u0027 %"},{"line_number":352,"context_line":"                     (fixed_ip, floating_ip))"},{"line_number":353,"context_line":"        iptable_version \u003d self.snat_iptables_manager.get_version()"},{"line_number":354,"context_line":"        if iptable_version \u003d\u003d n_const.IPTBL_VERSION:"},{"line_number":355,"context_line":"            snat_rule +\u003d \u0027 --random-fully\u0027"},{"line_number":356,"context_line":"        rules.append(snat_rule)"},{"line_number":357,"context_line":"        return rules"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_fe449fb9","line":354,"range":{"start_line":354,"start_character":27,"end_line":354,"end_character":29},"in_reply_to":"5fc1f717_5b138567","updated":"2019-03-06 09:12:44.000000000","message":"So, clould you please refactor to such style:\nhttps://github.com/openstack/neutron/blob/master/neutron/tests/common/helpers.py#L243\nsomething like this:\nversion.StrictVersion(iptable_version) \u003e\u003d version.StrictVersion(n_const.IPTBL_VERSION)\n\nand then try to see if it works?","commit_id":"15a0c536faf9371ab4078d9297cb4ca70aa51d85"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"d6b3ff8862d97544e17abf007508a98728123082","unresolved":false,"context_lines":[{"line_number":351,"context_line":"        snat_rule \u003d (\u0027float-snat\u0027, \u0027-s %s/32 -j SNAT --to-source %s\u0027 %"},{"line_number":352,"context_line":"                     (fixed_ip, floating_ip))"},{"line_number":353,"context_line":"        iptable_version \u003d self.snat_iptables_manager.get_version()"},{"line_number":354,"context_line":"        if iptable_version \u003d\u003d n_const.IPTBL_VERSION:"},{"line_number":355,"context_line":"            snat_rule +\u003d \u0027 --random-fully\u0027"},{"line_number":356,"context_line":"        rules.append(snat_rule)"},{"line_number":357,"context_line":"        return rules"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_5b138567","line":354,"range":{"start_line":354,"start_character":27,"end_line":354,"end_character":29},"in_reply_to":"5fc1f717_e0c5df5c","updated":"2019-03-06 08:34:58.000000000","message":"But here we are checking only for the iptables.\nRodolfo mentioned that in Fedora 1.8.0 the iptables 1.6.2 is still not supported.\nAm I missing something here.\n\nAlso I did see that the py35 tests were failing when I compare the \u0027iptables_version \u003e\u003d n_const.IPTBL_VERSION.","commit_id":"15a0c536faf9371ab4078d9297cb4ca70aa51d85"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"0bdacbb93286b9bf6c8a970abd93af49ecb1399a","unresolved":false,"context_lines":[{"line_number":351,"context_line":"        snat_rule \u003d (\u0027float-snat\u0027, \u0027-s %s/32 -j SNAT --to-source %s\u0027 %"},{"line_number":352,"context_line":"                     (fixed_ip, floating_ip))"},{"line_number":353,"context_line":"        iptable_version \u003d self.snat_iptables_manager.get_version()"},{"line_number":354,"context_line":"        if iptable_version \u003d\u003d n_const.IPTBL_VERSION:"},{"line_number":355,"context_line":"            snat_rule +\u003d \u0027 --random-fully\u0027"},{"line_number":356,"context_line":"        rules.append(snat_rule)"},{"line_number":357,"context_line":"        return rules"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_01c1bf80","line":354,"range":{"start_line":354,"start_character":27,"end_line":354,"end_character":29},"in_reply_to":"5fc1f717_fe449fb9","updated":"2019-03-11 17:11:14.000000000","message":"It seems the \u0027get_version\u0027 is not returning a string.\nSo need to check that out.","commit_id":"15a0c536faf9371ab4078d9297cb4ca70aa51d85"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"72da54c6b673ba22960827612c8ae6eefbba3751","unresolved":false,"context_lines":[{"line_number":351,"context_line":"        snat_rule \u003d (\u0027float-snat\u0027, \u0027-s %s/32 -j SNAT --to-source %s\u0027 %"},{"line_number":352,"context_line":"                     (fixed_ip, floating_ip))"},{"line_number":353,"context_line":"        iptable_version \u003d self.snat_iptables_manager.get_version()"},{"line_number":354,"context_line":"        if iptable_version \u003d\u003d n_const.IPTBL_VERSION:"},{"line_number":355,"context_line":"            snat_rule +\u003d \u0027 --random-fully\u0027"},{"line_number":356,"context_line":"        rules.append(snat_rule)"},{"line_number":357,"context_line":"        return rules"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_2e2428c6","line":354,"range":{"start_line":354,"start_character":27,"end_line":354,"end_character":29},"in_reply_to":"5fc1f717_fe449fb9","updated":"2019-03-06 18:47:08.000000000","message":"Sure will do it.","commit_id":"15a0c536faf9371ab4078d9297cb4ca70aa51d85"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"f3e9035f594d1ef809170f75d869a7a0b2b69aeb","unresolved":false,"context_lines":[{"line_number":351,"context_line":"        snat_rule \u003d (\u0027float-snat\u0027, \u0027-s %s/32 -j SNAT --to-source %s\u0027 %"},{"line_number":352,"context_line":"                     (fixed_ip, floating_ip))"},{"line_number":353,"context_line":"        iptable_version \u003d self.snat_iptables_manager.get_version()"},{"line_number":354,"context_line":"        if iptable_version \u003d\u003d n_const.IPTBL_VERSION:"},{"line_number":355,"context_line":"            snat_rule +\u003d \u0027 --random-fully\u0027"},{"line_number":356,"context_line":"        rules.append(snat_rule)"},{"line_number":357,"context_line":"        return rules"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_d1bc286b","line":354,"range":{"start_line":354,"start_character":27,"end_line":354,"end_character":29},"in_reply_to":"5fc1f717_fe449fb9","updated":"2019-03-06 19:48:35.000000000","message":"This is what I am seeing with StrictVersion.\nb\u0027    if (version.StrictVersion(iptable_version) \u003e\u003d\u0027\n    b\u0027  File \"/usr/lib/python3.5/distutils/version.py\", line 40, in __init__\u0027\n    b\u0027    self.parse(vstring)\u0027\n    b\u0027  File \"/usr/lib/python3.5/distutils/version.py\", line 135, in parse\u0027\n    b\u0027    match \u003d self.version_re.match(vstring)\u0027\n    b\u0027TypeError: expected string or bytes-like object\u0027","commit_id":"15a0c536faf9371ab4078d9297cb4ca70aa51d85"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"3ffa497397405b86da24c0276022d7a8243a9772","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        snat_rule \u003d (\u0027float-snat\u0027, \u0027-s %s/32 -j SNAT --to-source %s\u0027 %"},{"line_number":354,"context_line":"                     (fixed_ip, floating_ip))"},{"line_number":355,"context_line":"        iptable_version \u003d self.snat_iptables_manager.get_version()"},{"line_number":356,"context_line":"        if (version.StrictVersion(iptable_version) \u003e\u003d"},{"line_number":357,"context_line":"                version.StrictVersion(n_const.IPTBL_VERSION)):"},{"line_number":358,"context_line":"            snat_rule +\u003d \u0027 --random-fully\u0027"},{"line_number":359,"context_line":"        rules.append(snat_rule)"},{"line_number":360,"context_line":"        return rules"}],"source_content_type":"text/x-python","patch_set":7,"id":"5fc1f717_563f7324","line":357,"range":{"start_line":356,"start_character":0,"end_line":357,"end_character":62},"updated":"2019-03-11 23:57:54.000000000","message":"I am still seeing an error here as\nAttributeError: \u0027StrictVersion\u0027 object has no attribute \u0027version\u0027.\nNot sure what is wrong with this.","commit_id":"0a12e32f9b255248e289a88352c67991401d683d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"017713ff50314de741152849ae1d73f2161eeb66","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        snat_rule \u003d (\u0027float-snat\u0027, \u0027-s %s/32 -j SNAT --to-source %s\u0027 %"},{"line_number":350,"context_line":"                     (fixed_ip, floating_ip))"},{"line_number":351,"context_line":"        iptable_version \u003d self.snat_iptables_manager.get_version()"},{"line_number":352,"context_line":"        if iptable_version:"},{"line_number":353,"context_line":"            version_compare \u003d common_utils.compare_version_strings("},{"line_number":354,"context_line":"                iptable_version, n_const.IPTBL_VERSION)"},{"line_number":355,"context_line":"            if version_compare:"}],"source_content_type":"text/x-python","patch_set":10,"id":"5fc1f717_cd25890c","line":352,"updated":"2019-03-18 23:21:55.000000000","message":"This is always valid right?  Otherwise there are bigger problems.","commit_id":"a213c95f5da0a4374cae7244db075febea0f0823"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"bcb42b7861a40044ba50e73ad44a76fedec673d1","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        snat_rule \u003d (\u0027float-snat\u0027, \u0027-s %s/32 -j SNAT --to-source %s\u0027 %"},{"line_number":350,"context_line":"                     (fixed_ip, floating_ip))"},{"line_number":351,"context_line":"        iptable_version \u003d self.snat_iptables_manager.get_version()"},{"line_number":352,"context_line":"        if iptable_version:"},{"line_number":353,"context_line":"            version_compare \u003d common_utils.compare_version_strings("},{"line_number":354,"context_line":"                iptable_version, n_const.IPTBL_VERSION)"},{"line_number":355,"context_line":"            if version_compare:"}],"source_content_type":"text/x-python","patch_set":10,"id":"5fc1f717_a4bcc66c","line":352,"in_reply_to":"5fc1f717_cd25890c","updated":"2019-03-19 17:20:17.000000000","message":"Yes this is always valid, the reason I had included a check is there are nearly 50 unit tests that are failing, since we mock the \u0027execute\u0027 function.\nSo it is not returning the value of \u0027iptable version\u0027.\nEither we add a \u0027return value\u0027 to all the tests, or else we check before running the StrictVersion check.","commit_id":"a213c95f5da0a4374cae7244db075febea0f0823"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"34e24c4ef135376395931ae4da8592cbe4f1e92b","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        snat_rule \u003d (\u0027float-snat\u0027, \u0027-s %s/32 -j SNAT --to-source %s\u0027 %"},{"line_number":350,"context_line":"                     (fixed_ip, floating_ip))"},{"line_number":351,"context_line":"        iptable_version \u003d self.snat_iptables_manager.get_version()"},{"line_number":352,"context_line":"        if iptable_version:"},{"line_number":353,"context_line":"            version_compare \u003d common_utils.is_version_greater("},{"line_number":354,"context_line":"                iptable_version, n_const.IPTBL_VERSION)"},{"line_number":355,"context_line":"            if version_compare:"}],"source_content_type":"text/x-python","patch_set":25,"id":"5fc1f717_42042d18","line":352,"updated":"2019-04-10 14:34:02.000000000","message":"This check is unnecessary as get_version() always returns a string.\n\nAlso, we shouldn\u0027t need to check every time, this \"version greater\" info should be kept in the self.iptables_manager object.  For example, create some variable called _iptables_random_fully, and\n\nif self.*_iptables_manager._iptables_random_fully is:\n\nNone - not been checked, check now\nFalse - not supported\nTrue - supported","commit_id":"f512393213d304cb277dc53e0f39bca7a4998bfe"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"4ce05e4108879a8fe49546037ee4f8cf6718bf6c","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        snat_rule \u003d (\u0027float-snat\u0027, \u0027-s %s/32 -j SNAT --to-source %s\u0027 %"},{"line_number":350,"context_line":"                     (fixed_ip, floating_ip))"},{"line_number":351,"context_line":"        iptable_version \u003d self.snat_iptables_manager.get_version()"},{"line_number":352,"context_line":"        if iptable_version:"},{"line_number":353,"context_line":"            version_compare \u003d common_utils.is_version_greater("},{"line_number":354,"context_line":"                iptable_version, n_const.IPTBL_VERSION)"},{"line_number":355,"context_line":"            if version_compare:"}],"source_content_type":"text/x-python","patch_set":25,"id":"3fce034c_ef907d51","line":352,"in_reply_to":"5fc1f717_42042d18","updated":"2019-04-10 20:15:07.000000000","message":"I think I replied to this issue in my previous patch. The reason is the \u0027execute\u0027 is being mocked in all the test cases, and if I don\u0027t add the \u0027iptable_version\u0027 check here, then around 35 tests are failing in L3. \nSo to fix this I need to pass in a value to the mock in all the 35 tests.\nWhat do you suggest?","commit_id":"f512393213d304cb277dc53e0f39bca7a4998bfe"}],"neutron/agent/l3/dvr_local_router.py":[{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"fbd254b5a5363e24bbd4141b69fd04eab040a93a","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        dnat_from_floatingip_to_fixedip \u003d ("},{"line_number":76,"context_line":"            \u0027PREROUTING\u0027, \u0027-d %s/32 -i %s -j DNAT --to-destination %s\u0027 % ("},{"line_number":77,"context_line":"                floating_ip, rtr_2_fip_name, fixed_ip))"},{"line_number":78,"context_line":"        if self.iptables_manager.get_version() \u003e\u003d \u0027v1.6.2\u0027:"},{"line_number":79,"context_line":"            snat_from_fixedip_to_floatingip \u003d ("},{"line_number":80,"context_line":"                \u0027float-snat\u0027, \u0027-s %s/32 -j SNAT --to-source %s \u0027"},{"line_number":81,"context_line":"                \u0027--random-fully\u0027 % (fixed_ip, floating_ip))"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_1c70eb07","line":78,"range":{"start_line":78,"start_character":51,"end_line":78,"end_character":57},"updated":"2019-02-13 22:38:27.000000000","message":"Constant?","commit_id":"b4375da6f1697f2f7e848d818a330d3e24b9faab"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"fe646481a788e87696e04f5171a2436107932923","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            \u0027PREROUTING\u0027, \u0027-d %s/32 -i %s -j DNAT --to-destination %s\u0027 % ("},{"line_number":77,"context_line":"                floating_ip, rtr_2_fip_name, fixed_ip))"},{"line_number":78,"context_line":"        if self.iptables_manager.get_version() \u003e\u003d n_const.IPTBL_VERSION:"},{"line_number":79,"context_line":"            snat_from_fixedip_to_floatingip \u003d ("},{"line_number":80,"context_line":"                \u0027float-snat\u0027, \u0027-s %s/32 -j SNAT --to-source %s \u0027"},{"line_number":81,"context_line":"                \u0027--random-fully\u0027 % (fixed_ip, floating_ip))"},{"line_number":82,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_c822d3a3","line":79,"updated":"2019-02-25 12:09:37.000000000","message":"ditto:\n\nrule \u003d (...)\nif iptl_version:\n  rule +\u003d \u0027 --random-fully\u0027","commit_id":"2fb977286603ad14d5070bbfc850394218dd5af2"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"98577c80ecf65ab5c07cf69cf4e1b8ff1a4c6b1e","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            \u0027PREROUTING\u0027, \u0027-d %s/32 -i %s -j DNAT --to-destination %s\u0027 % ("},{"line_number":77,"context_line":"                floating_ip, rtr_2_fip_name, fixed_ip))"},{"line_number":78,"context_line":"        if self.iptables_manager.get_version() \u003e\u003d n_const.IPTBL_VERSION:"},{"line_number":79,"context_line":"            snat_from_fixedip_to_floatingip \u003d ("},{"line_number":80,"context_line":"                \u0027float-snat\u0027, \u0027-s %s/32 -j SNAT --to-source %s \u0027"},{"line_number":81,"context_line":"                \u0027--random-fully\u0027 % (fixed_ip, floating_ip))"},{"line_number":82,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_3c8f182b","line":79,"in_reply_to":"9fdfeff1_c822d3a3","updated":"2019-02-25 18:23:08.000000000","message":"Will do","commit_id":"2fb977286603ad14d5070bbfc850394218dd5af2"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"017713ff50314de741152849ae1d73f2161eeb66","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            if version_compare:"},{"line_number":87,"context_line":"                snat_from_fixedip_to_floatingip \u003d ("},{"line_number":88,"context_line":"                    \u0027float-snat\u0027, \u0027-s %s/32 -j SNAT --to-source %s \u0027"},{"line_number":89,"context_line":"                    \u0027--random-fully\u0027 % (fixed_ip, floating_ip))"},{"line_number":90,"context_line":"        return [dnat_from_floatingip_to_fixedip,"},{"line_number":91,"context_line":"                snat_from_fixedip_to_floatingip]"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5fc1f717_ad435daf","line":89,"updated":"2019-03-18 23:21:55.000000000","message":"Why can\u0027t you add --random-fully to the end like the other file?","commit_id":"a213c95f5da0a4374cae7244db075febea0f0823"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"661219aede8e3ef46c057f7cd4fa034a71c7a3ca","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            if version_compare:"},{"line_number":87,"context_line":"                snat_from_fixedip_to_floatingip \u003d ("},{"line_number":88,"context_line":"                    \u0027float-snat\u0027, \u0027-s %s/32 -j SNAT --to-source %s \u0027"},{"line_number":89,"context_line":"                    \u0027--random-fully\u0027 % (fixed_ip, floating_ip))"},{"line_number":90,"context_line":"        return [dnat_from_floatingip_to_fixedip,"},{"line_number":91,"context_line":"                snat_from_fixedip_to_floatingip]"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5fc1f717_af081fd9","line":89,"in_reply_to":"5fc1f717_ad435daf","updated":"2019-03-19 17:39:06.000000000","message":"I think the reason was it complained that I can\u0027t concatenate like a string.","commit_id":"a213c95f5da0a4374cae7244db075febea0f0823"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"bcb42b7861a40044ba50e73ad44a76fedec673d1","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            if version_compare:"},{"line_number":87,"context_line":"                snat_from_fixedip_to_floatingip \u003d ("},{"line_number":88,"context_line":"                    \u0027float-snat\u0027, \u0027-s %s/32 -j SNAT --to-source %s \u0027"},{"line_number":89,"context_line":"                    \u0027--random-fully\u0027 % (fixed_ip, floating_ip))"},{"line_number":90,"context_line":"        return [dnat_from_floatingip_to_fixedip,"},{"line_number":91,"context_line":"                snat_from_fixedip_to_floatingip]"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5fc1f717_c4c1d2e6","line":89,"in_reply_to":"5fc1f717_ad435daf","updated":"2019-03-19 17:20:17.000000000","message":"Let me check there was something that i found, that\u0027s why went back to this mode.","commit_id":"a213c95f5da0a4374cae7244db075febea0f0823"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"b79061aa18455b42db7aed6e6af1a9cd64d43793","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                iptable_version, n_const.IPTBL_VERSION)"},{"line_number":86,"context_line":"            if version_compare:"},{"line_number":87,"context_line":"                snat_from_fixedip_to_floatingip \u003d ("},{"line_number":88,"context_line":"                    \u0027float-snat\u0027, \u0027-s %s/32 -j SNAT --to-source %s \u0027"},{"line_number":89,"context_line":"                    \u0027--random-fully\u0027 % (fixed_ip, floating_ip))"},{"line_number":90,"context_line":"        return [dnat_from_floatingip_to_fixedip,"},{"line_number":91,"context_line":"                snat_from_fixedip_to_floatingip]"}],"source_content_type":"text/x-python","patch_set":18,"id":"5fc1f717_4edf26d6","line":88,"range":{"start_line":88,"start_character":20,"end_line":88,"end_character":68},"updated":"2019-04-02 07:43:56.000000000","message":"all this is the same as in L80, can\u0027t You just extend this string by add \"--random-fully\" at the end if there is sufficient iptables version available?","commit_id":"a9614ef4b546331522f1a22ef2798e8993a9af1f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"34e24c4ef135376395931ae4da8592cbe4f1e92b","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            \u0027float-snat\u0027, \u0027-s %s/32 -j SNAT --to-source %s\u0027 % ("},{"line_number":81,"context_line":"                fixed_ip, floating_ip))"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        if iptable_version:"},{"line_number":84,"context_line":"            version_compare \u003d common_utils.is_version_greater("},{"line_number":85,"context_line":"                iptable_version, n_const.IPTBL_VERSION)"},{"line_number":86,"context_line":"            if version_compare:"}],"source_content_type":"text/x-python","patch_set":25,"id":"5fc1f717_05006f00","line":83,"updated":"2019-04-10 14:34:02.000000000","message":"Same comment applies here","commit_id":"f512393213d304cb277dc53e0f39bca7a4998bfe"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"4ce05e4108879a8fe49546037ee4f8cf6718bf6c","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            \u0027float-snat\u0027, \u0027-s %s/32 -j SNAT --to-source %s\u0027 % ("},{"line_number":81,"context_line":"                fixed_ip, floating_ip))"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        if iptable_version:"},{"line_number":84,"context_line":"            version_compare \u003d common_utils.is_version_greater("},{"line_number":85,"context_line":"                iptable_version, n_const.IPTBL_VERSION)"},{"line_number":86,"context_line":"            if version_compare:"}],"source_content_type":"text/x-python","patch_set":25,"id":"3fce034c_8f9d3968","line":83,"in_reply_to":"5fc1f717_05006f00","updated":"2019-04-10 20:15:07.000000000","message":"See my reply on the previous one.","commit_id":"f512393213d304cb277dc53e0f39bca7a4998bfe"}],"neutron/agent/l3/router_info.py":[{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"fbd254b5a5363e24bbd4141b69fd04eab040a93a","unresolved":false,"context_lines":[{"line_number":173,"context_line":"    def floating_forward_rules(self, fip):"},{"line_number":174,"context_line":"        fixed_ip \u003d fip[\u0027fixed_ip_address\u0027]"},{"line_number":175,"context_line":"        floating_ip \u003d fip[\u0027floating_ip_address\u0027]"},{"line_number":176,"context_line":"        if self.iptables_manager.get_version() \u003e\u003d \u0027v1.6.2\u0027:"},{"line_number":177,"context_line":"            return [(\u0027PREROUTING\u0027, \u0027-d %s/32 -j DNAT --to-destination %s\u0027 %"},{"line_number":178,"context_line":"                     (floating_ip, fixed_ip)),"},{"line_number":179,"context_line":"                    (\u0027OUTPUT\u0027, \u0027-d %s/32 -j DNAT --to-destination %s\u0027 %"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_3c560f5e","line":176,"range":{"start_line":176,"start_character":51,"end_line":176,"end_character":57},"updated":"2019-02-13 22:38:27.000000000","message":"Constant?","commit_id":"b4375da6f1697f2f7e848d818a330d3e24b9faab"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"fe646481a788e87696e04f5171a2436107932923","unresolved":false,"context_lines":[{"line_number":173,"context_line":"    def floating_forward_rules(self, fip):"},{"line_number":174,"context_line":"        fixed_ip \u003d fip[\u0027fixed_ip_address\u0027]"},{"line_number":175,"context_line":"        floating_ip \u003d fip[\u0027floating_ip_address\u0027]"},{"line_number":176,"context_line":"        if self.iptables_manager.get_version() \u003e\u003d n_const.IPTBL_VERSION:"},{"line_number":177,"context_line":"            return [(\u0027PREROUTING\u0027, \u0027-d %s/32 -j DNAT --to-destination %s\u0027 %"},{"line_number":178,"context_line":"                     (floating_ip, fixed_ip)),"},{"line_number":179,"context_line":"                    (\u0027OUTPUT\u0027, \u0027-d %s/32 -j DNAT --to-destination %s\u0027 %"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_28311fee","line":176,"updated":"2019-02-25 12:09:37.000000000","message":"ditto","commit_id":"2fb977286603ad14d5070bbfc850394218dd5af2"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"98577c80ecf65ab5c07cf69cf4e1b8ff1a4c6b1e","unresolved":false,"context_lines":[{"line_number":173,"context_line":"    def floating_forward_rules(self, fip):"},{"line_number":174,"context_line":"        fixed_ip \u003d fip[\u0027fixed_ip_address\u0027]"},{"line_number":175,"context_line":"        floating_ip \u003d fip[\u0027floating_ip_address\u0027]"},{"line_number":176,"context_line":"        if self.iptables_manager.get_version() \u003e\u003d n_const.IPTBL_VERSION:"},{"line_number":177,"context_line":"            return [(\u0027PREROUTING\u0027, \u0027-d %s/32 -j DNAT --to-destination %s\u0027 %"},{"line_number":178,"context_line":"                     (floating_ip, fixed_ip)),"},{"line_number":179,"context_line":"                    (\u0027OUTPUT\u0027, \u0027-d %s/32 -j DNAT --to-destination %s\u0027 %"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_dc7fec14","line":176,"in_reply_to":"9fdfeff1_28311fee","updated":"2019-02-25 18:23:08.000000000","message":"will do.","commit_id":"2fb977286603ad14d5070bbfc850394218dd5af2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"fe646481a788e87696e04f5171a2436107932923","unresolved":false,"context_lines":[{"line_number":870,"context_line":"        # Makes replies come back through the router to reverse DNAT"},{"line_number":871,"context_line":"        ext_in_mark \u003d self.agent_conf.external_ingress_mark"},{"line_number":872,"context_line":"        if self.iptables_manager.get_version() \u003e\u003d n_const.IPTBL_VERSION:"},{"line_number":873,"context_line":"            snat_internal_traffic_to_floating_ip \u003d ("},{"line_number":874,"context_line":"                \u0027snat\u0027, \u0027-m mark ! --mark %s/%s \u0027"},{"line_number":875,"context_line":"                        \u0027-m conntrack --ctstate DNAT \u0027"},{"line_number":876,"context_line":"                        \u0027-j SNAT --to-source %s --random-fully\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_482ee38c","line":873,"updated":"2019-02-25 12:09:37.000000000","message":"ditto","commit_id":"2fb977286603ad14d5070bbfc850394218dd5af2"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"98577c80ecf65ab5c07cf69cf4e1b8ff1a4c6b1e","unresolved":false,"context_lines":[{"line_number":870,"context_line":"        # Makes replies come back through the router to reverse DNAT"},{"line_number":871,"context_line":"        ext_in_mark \u003d self.agent_conf.external_ingress_mark"},{"line_number":872,"context_line":"        if self.iptables_manager.get_version() \u003e\u003d n_const.IPTBL_VERSION:"},{"line_number":873,"context_line":"            snat_internal_traffic_to_floating_ip \u003d ("},{"line_number":874,"context_line":"                \u0027snat\u0027, \u0027-m mark ! --mark %s/%s \u0027"},{"line_number":875,"context_line":"                        \u0027-m conntrack --ctstate DNAT \u0027"},{"line_number":876,"context_line":"                        \u0027-j SNAT --to-source %s --random-fully\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_fc84300d","line":873,"in_reply_to":"9fdfeff1_482ee38c","updated":"2019-02-25 18:23:08.000000000","message":"will do","commit_id":"2fb977286603ad14d5070bbfc850394218dd5af2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"fe646481a788e87696e04f5171a2436107932923","unresolved":false,"context_lines":[{"line_number":886,"context_line":""},{"line_number":887,"context_line":"    def external_gateway_nat_snat_rules(self, ex_gw_ip, interface_name):"},{"line_number":888,"context_line":"        if self.iptables_manager.get_version() \u003e\u003d n_const.IPTBL_VERSION:"},{"line_number":889,"context_line":"            snat_normal_external_traffic \u003d ("},{"line_number":890,"context_line":"                \u0027snat\u0027, \u0027-o %s -j SNAT --to-source %s --random-fully\u0027 %"},{"line_number":891,"context_line":"                        (interface_name, ex_gw_ip))"},{"line_number":892,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_e84c7777","line":889,"updated":"2019-02-25 12:09:37.000000000","message":"ditto","commit_id":"2fb977286603ad14d5070bbfc850394218dd5af2"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"98577c80ecf65ab5c07cf69cf4e1b8ff1a4c6b1e","unresolved":false,"context_lines":[{"line_number":886,"context_line":""},{"line_number":887,"context_line":"    def external_gateway_nat_snat_rules(self, ex_gw_ip, interface_name):"},{"line_number":888,"context_line":"        if self.iptables_manager.get_version() \u003e\u003d n_const.IPTBL_VERSION:"},{"line_number":889,"context_line":"            snat_normal_external_traffic \u003d ("},{"line_number":890,"context_line":"                \u0027snat\u0027, \u0027-o %s -j SNAT --to-source %s --random-fully\u0027 %"},{"line_number":891,"context_line":"                        (interface_name, ex_gw_ip))"},{"line_number":892,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_9c7de41d","line":889,"in_reply_to":"9fdfeff1_e84c7777","updated":"2019-02-25 18:23:08.000000000","message":"will do","commit_id":"2fb977286603ad14d5070bbfc850394218dd5af2"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"a3aea9e2b89a6eda8638aa4d42718d2723aff40e","unresolved":false,"context_lines":[{"line_number":875,"context_line":"                        % (ext_in_mark, n_const.ROUTER_MARK_MASK, ex_gw_ip))"},{"line_number":876,"context_line":"        iptable_version \u003d self.iptables_manager.get_version()"},{"line_number":877,"context_line":"        if iptable_version \u003d\u003d n_const.IPTBL_VERSION:"},{"line_number":878,"context_line":"            snat_internal_traffic_to_floating_ip +\u003d \u0027--random-fully\u0027"},{"line_number":879,"context_line":"        return [dont_snat_traffic_to_internal_ports_if_not_to_floating_ip,"},{"line_number":880,"context_line":"                snat_internal_traffic_to_floating_ip]"},{"line_number":881,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_40eeaa22","line":878,"range":{"start_line":878,"start_character":53,"end_line":878,"end_character":67},"updated":"2019-02-26 01:58:04.000000000","message":"This seems a problem if there is no blank space.","commit_id":"8e6c7a844029bebc604bd195ce86fdb627564887"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"6f145ff5f21e3f335efe4a281731a7f2fe11179e","unresolved":false,"context_lines":[{"line_number":875,"context_line":"                        % (ext_in_mark, n_const.ROUTER_MARK_MASK, ex_gw_ip))"},{"line_number":876,"context_line":"        iptable_version \u003d self.iptables_manager.get_version()"},{"line_number":877,"context_line":"        if iptable_version \u003d\u003d n_const.IPTBL_VERSION:"},{"line_number":878,"context_line":"            snat_internal_traffic_to_floating_ip +\u003d \u0027--random-fully\u0027"},{"line_number":879,"context_line":"        return [dont_snat_traffic_to_internal_ports_if_not_to_floating_ip,"},{"line_number":880,"context_line":"                snat_internal_traffic_to_floating_ip]"},{"line_number":881,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_ab7e2916","line":878,"range":{"start_line":878,"start_character":53,"end_line":878,"end_character":67},"in_reply_to":"9fdfeff1_40eeaa22","updated":"2019-02-27 18:41:23.000000000","message":"Which blank space are you talking about?","commit_id":"8e6c7a844029bebc604bd195ce86fdb627564887"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"a4fb7fee10a28db241efceafaa66f2b1d6097247","unresolved":false,"context_lines":[{"line_number":875,"context_line":"                        % (ext_in_mark, n_const.ROUTER_MARK_MASK, ex_gw_ip))"},{"line_number":876,"context_line":"        iptable_version \u003d self.iptables_manager.get_version()"},{"line_number":877,"context_line":"        if iptable_version \u003d\u003d n_const.IPTBL_VERSION:"},{"line_number":878,"context_line":"            snat_internal_traffic_to_floating_ip +\u003d \u0027--random-fully\u0027"},{"line_number":879,"context_line":"        return [dont_snat_traffic_to_internal_ports_if_not_to_floating_ip,"},{"line_number":880,"context_line":"                snat_internal_traffic_to_floating_ip]"},{"line_number":881,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_b17e9816","line":878,"range":{"start_line":878,"start_character":53,"end_line":878,"end_character":67},"in_reply_to":"9fdfeff1_ab7e2916","updated":"2019-02-27 20:03:47.000000000","message":"snat_internal_traffic_to_floating_ip doesn\u0027t end with a blank space, so the concatenation runs ex_gw_ip together with --random-fully ie \"192.168.1.1--random-fully\".","commit_id":"8e6c7a844029bebc604bd195ce86fdb627564887"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"e1992240dc10a1abc1459dc1747788fb86abd7bb","unresolved":false,"context_lines":[{"line_number":875,"context_line":"                        % (ext_in_mark, n_const.ROUTER_MARK_MASK, ex_gw_ip))"},{"line_number":876,"context_line":"        iptable_version \u003d self.iptables_manager.get_version()"},{"line_number":877,"context_line":"        if iptable_version \u003d\u003d n_const.IPTBL_VERSION:"},{"line_number":878,"context_line":"            snat_internal_traffic_to_floating_ip +\u003d \u0027--random-fully\u0027"},{"line_number":879,"context_line":"        return [dont_snat_traffic_to_internal_ports_if_not_to_floating_ip,"},{"line_number":880,"context_line":"                snat_internal_traffic_to_floating_ip]"},{"line_number":881,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_80e1bf9d","line":878,"range":{"start_line":878,"start_character":53,"end_line":878,"end_character":67},"in_reply_to":"9fdfeff1_b17e9816","updated":"2019-02-27 21:42:38.000000000","message":"Oops! got it.","commit_id":"8e6c7a844029bebc604bd195ce86fdb627564887"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"34e24c4ef135376395931ae4da8592cbe4f1e92b","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        snat_rules \u003d (\u0027float-snat\u0027, \u0027-s %s/32 -j SNAT --to-source %s\u0027 %"},{"line_number":181,"context_line":"                      (fixed_ip, floating_ip))"},{"line_number":182,"context_line":"        iptable_version \u003d self.iptables_manager.get_version()"},{"line_number":183,"context_line":"        if iptable_version:"},{"line_number":184,"context_line":"            version_compare \u003d common_utils.is_version_greater("},{"line_number":185,"context_line":"                iptable_version, n_const.IPTBL_VERSION)"},{"line_number":186,"context_line":"            if version_compare:"}],"source_content_type":"text/x-python","patch_set":25,"id":"5fc1f717_c5058711","line":183,"updated":"2019-04-10 14:34:02.000000000","message":"And here","commit_id":"f512393213d304cb277dc53e0f39bca7a4998bfe"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"4ce05e4108879a8fe49546037ee4f8cf6718bf6c","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        snat_rules \u003d (\u0027float-snat\u0027, \u0027-s %s/32 -j SNAT --to-source %s\u0027 %"},{"line_number":181,"context_line":"                      (fixed_ip, floating_ip))"},{"line_number":182,"context_line":"        iptable_version \u003d self.iptables_manager.get_version()"},{"line_number":183,"context_line":"        if iptable_version:"},{"line_number":184,"context_line":"            version_compare \u003d common_utils.is_version_greater("},{"line_number":185,"context_line":"                iptable_version, n_const.IPTBL_VERSION)"},{"line_number":186,"context_line":"            if version_compare:"}],"source_content_type":"text/x-python","patch_set":25,"id":"3fce034c_6f8ecd2f","line":183,"in_reply_to":"5fc1f717_c5058711","updated":"2019-04-10 20:15:07.000000000","message":"See my previous comments.","commit_id":"f512393213d304cb277dc53e0f39bca7a4998bfe"}],"neutron/agent/linux/iptables_manager.py":[{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"fbd254b5a5363e24bbd4141b69fd04eab040a93a","unresolved":false,"context_lines":[{"line_number":476,"context_line":"    def get_version(self):"},{"line_number":477,"context_line":"        args \u003d [\u0027iptables\u0027, \u0027--version\u0027]"},{"line_number":478,"context_line":"        version \u003d self.execute(args, run_as_root\u003dTrue)"},{"line_number":479,"context_line":"        return version.split()[1]"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"    @property"},{"line_number":482,"context_line":"    def xlock_wait_time(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_1c1b0bca","line":479,"range":{"start_line":479,"start_character":15,"end_line":479,"end_character":33},"updated":"2019-02-13 22:38:27.000000000","message":"This returns something of the form \"v1.6.2\". Should we cut off the \"v\" so we end up with something of the form \"1.6.2\"?","commit_id":"b4375da6f1697f2f7e848d818a330d3e24b9faab"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"dc403a4cb432b9dfda115b43d9ff27da3bac2ede","unresolved":false,"context_lines":[{"line_number":476,"context_line":"    def get_version(self):"},{"line_number":477,"context_line":"        args \u003d [\u0027iptables\u0027, \u0027--version\u0027]"},{"line_number":478,"context_line":"        version \u003d self.execute(args, run_as_root\u003dTrue)"},{"line_number":479,"context_line":"        return version.split()[1]"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"    @property"},{"line_number":482,"context_line":"    def xlock_wait_time(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_a758ac30","line":479,"range":{"start_line":479,"start_character":15,"end_line":479,"end_character":33},"in_reply_to":"9fdfeff1_1c1b0bca","updated":"2019-02-13 22:57:42.000000000","message":"I think we should leave it as such since that is how the version is reported by the iptables.","commit_id":"b4375da6f1697f2f7e848d818a330d3e24b9faab"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"1f98e1db6c25065843912092a05ec227bdcbe8b4","unresolved":false,"context_lines":[{"line_number":475,"context_line":""},{"line_number":476,"context_line":"    def get_version(self):"},{"line_number":477,"context_line":"        args \u003d [\u0027iptables\u0027, \u0027--version\u0027]"},{"line_number":478,"context_line":"        version \u003d self.execute(args, run_as_root\u003dTrue).split()[1]"},{"line_number":479,"context_line":"        version_str \u003d \"\".join(chr(x) for x in version[1:])"},{"line_number":480,"context_line":"        return version_str"},{"line_number":481,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5fc1f717_2349238a","line":478,"range":{"start_line":478,"start_character":23,"end_line":478,"end_character":30},"updated":"2019-03-13 11:45:46.000000000","message":"I run some local test, this \u0027linux_utils.execute\u0027 was mocked by the test classes. So it will not return the right version str.","commit_id":"06b9d88ac543229698abde333952ad8ec802cf89"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"3ead821ee0516672d16d95a33ce4ff7b25be8aee","unresolved":false,"context_lines":[{"line_number":475,"context_line":""},{"line_number":476,"context_line":"    def get_version(self):"},{"line_number":477,"context_line":"        args \u003d [\u0027iptables\u0027, \u0027--version\u0027]"},{"line_number":478,"context_line":"        version \u003d self.execute(args, run_as_root\u003dTrue).split()[1]"},{"line_number":479,"context_line":"        version_str \u003d \"\".join(chr(x) for x in version[1:])"},{"line_number":480,"context_line":"        return version_str"},{"line_number":481,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5fc1f717_99f63a63","line":478,"range":{"start_line":478,"start_character":23,"end_line":478,"end_character":30},"in_reply_to":"5fc1f717_16969e4d","updated":"2019-03-14 00:51:58.000000000","message":"We can leave this function as it is.\nHow about adding a new util funciton that compare two version str? Return some cases like:\ndef compare_versions(version1, version2):\n(1) higher\n(2) lower\n(3) equal\n(4) unknown\n\nAnd catch the exception in this funcion. Then illegal parameters can be handled in it. Mocked empty str should work then for other test cases.","commit_id":"06b9d88ac543229698abde333952ad8ec802cf89"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"79bfef07f2cc1d997773ed9520da0146cba544a3","unresolved":false,"context_lines":[{"line_number":475,"context_line":""},{"line_number":476,"context_line":"    def get_version(self):"},{"line_number":477,"context_line":"        args \u003d [\u0027iptables\u0027, \u0027--version\u0027]"},{"line_number":478,"context_line":"        version \u003d self.execute(args, run_as_root\u003dTrue).split()[1]"},{"line_number":479,"context_line":"        version_str \u003d \"\".join(chr(x) for x in version[1:])"},{"line_number":480,"context_line":"        return version_str"},{"line_number":481,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5fc1f717_16969e4d","line":478,"range":{"start_line":478,"start_character":23,"end_line":478,"end_character":30},"in_reply_to":"5fc1f717_2349238a","updated":"2019-03-13 18:08:44.000000000","message":"So what is the best solution for this?","commit_id":"06b9d88ac543229698abde333952ad8ec802cf89"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"bcb42b7861a40044ba50e73ad44a76fedec673d1","unresolved":false,"context_lines":[{"line_number":475,"context_line":""},{"line_number":476,"context_line":"    def get_version(self):"},{"line_number":477,"context_line":"        args \u003d [\u0027iptables\u0027, \u0027--version\u0027]"},{"line_number":478,"context_line":"        version \u003d self.execute(args, run_as_root\u003dTrue).split()[1]"},{"line_number":479,"context_line":"        version_str \u003d \"\".join(chr(x) for x in version[1:])"},{"line_number":480,"context_line":"        return version_str"},{"line_number":481,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5fc1f717_10c97357","line":478,"range":{"start_line":478,"start_character":23,"end_line":478,"end_character":30},"in_reply_to":"5fc1f717_99f63a63","updated":"2019-03-19 17:20:17.000000000","message":"Ok will try to add one.","commit_id":"06b9d88ac543229698abde333952ad8ec802cf89"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"b79061aa18455b42db7aed6e6af1a9cd64d43793","unresolved":false,"context_lines":[{"line_number":478,"context_line":"        version \u003d self.execute(args, run_as_root\u003dTrue).split()[1]"},{"line_number":479,"context_line":"        version_trim \u003d version[1:]"},{"line_number":480,"context_line":"        version_numbers \u003d version_trim.split(\".\")"},{"line_number":481,"context_line":"        version_str \u003d \".\".join(version_numbers)"},{"line_number":482,"context_line":"        return version_str"},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":18,"id":"5fc1f717_8eac2e36","line":481,"updated":"2019-04-02 07:43:56.000000000","message":"maybe You can add some debug log message here with information what version was found.\nIn case that in future iptables will change format of returned data it will help us figure out why some tests are not working properly :)","commit_id":"a9614ef4b546331522f1a22ef2798e8993a9af1f"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"7d14cb145bc4a5ab1bf696419cc3e676c312ec41","unresolved":false,"context_lines":[{"line_number":478,"context_line":"        version \u003d self.execute(args, run_as_root\u003dTrue).split()[1]"},{"line_number":479,"context_line":"        version_trim \u003d version[1:]"},{"line_number":480,"context_line":"        version_numbers \u003d version_trim.split(\".\")"},{"line_number":481,"context_line":"        version_str \u003d \".\".join(version_numbers)"},{"line_number":482,"context_line":"        return version_str"},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":18,"id":"5fc1f717_1e12a2b5","line":481,"in_reply_to":"5fc1f717_8eac2e36","updated":"2019-04-02 17:24:54.000000000","message":"Sure will add a debug log.","commit_id":"a9614ef4b546331522f1a22ef2798e8993a9af1f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"b79061aa18455b42db7aed6e6af1a9cd64d43793","unresolved":false,"context_lines":[{"line_number":479,"context_line":"        version_trim \u003d version[1:]"},{"line_number":480,"context_line":"        version_numbers \u003d version_trim.split(\".\")"},{"line_number":481,"context_line":"        version_str \u003d \".\".join(version_numbers)"},{"line_number":482,"context_line":"        return version_str"},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"    @property"},{"line_number":485,"context_line":"    def xlock_wait_time(self):"}],"source_content_type":"text/x-python","patch_set":18,"id":"5fc1f717_8e83cea9","line":482,"updated":"2019-04-02 07:43:56.000000000","message":"is there any test for this?","commit_id":"a9614ef4b546331522f1a22ef2798e8993a9af1f"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"7d14cb145bc4a5ab1bf696419cc3e676c312ec41","unresolved":false,"context_lines":[{"line_number":479,"context_line":"        version_trim \u003d version[1:]"},{"line_number":480,"context_line":"        version_numbers \u003d version_trim.split(\".\")"},{"line_number":481,"context_line":"        version_str \u003d \".\".join(version_numbers)"},{"line_number":482,"context_line":"        return version_str"},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"    @property"},{"line_number":485,"context_line":"    def xlock_wait_time(self):"}],"source_content_type":"text/x-python","patch_set":18,"id":"5fc1f717_9e25320d","line":482,"in_reply_to":"5fc1f717_8e83cea9","updated":"2019-04-02 17:24:54.000000000","message":"Since the tests already call the get_version, I don\u0027t have a specific test for this function?","commit_id":"a9614ef4b546331522f1a22ef2798e8993a9af1f"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"04a05a89c2b546da69adca7b1c31705097d78dbc","unresolved":false,"context_lines":[{"line_number":478,"context_line":"        version \u003d self.execute(args, run_as_root\u003dTrue).split()[1]"},{"line_number":479,"context_line":"        version_trim \u003d version[1:]"},{"line_number":480,"context_line":"        version_numbers \u003d version_trim.split(\".\")"},{"line_number":481,"context_line":"        version_str \u003d \".\".join(version_numbers)"},{"line_number":482,"context_line":"        LOG.debug(\"IPTables version installed: %s\", version_str)"},{"line_number":483,"context_line":"        return version_str"},{"line_number":484,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"5fc1f717_b1319d5b","line":481,"updated":"2019-04-10 17:33:01.000000000","message":"In what circumstances would version_str !\u003d version_numbers?  It looks like you split on the period and then join on the period, effectively reversing the split.","commit_id":"f512393213d304cb277dc53e0f39bca7a4998bfe"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"4ce05e4108879a8fe49546037ee4f8cf6718bf6c","unresolved":false,"context_lines":[{"line_number":478,"context_line":"        version \u003d self.execute(args, run_as_root\u003dTrue).split()[1]"},{"line_number":479,"context_line":"        version_trim \u003d version[1:]"},{"line_number":480,"context_line":"        version_numbers \u003d version_trim.split(\".\")"},{"line_number":481,"context_line":"        version_str \u003d \".\".join(version_numbers)"},{"line_number":482,"context_line":"        LOG.debug(\"IPTables version installed: %s\", version_str)"},{"line_number":483,"context_line":"        return version_str"},{"line_number":484,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"3fce034c_cfa10198","line":481,"in_reply_to":"5fc1f717_b1319d5b","updated":"2019-04-10 20:15:07.000000000","message":"Yes directly passing the version string fails when comparing the version.\nSee the patch revision I have tried multiple options and this is the one that works.","commit_id":"f512393213d304cb277dc53e0f39bca7a4998bfe"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"003c5611c051cd48f56b9d3bf009374bdb45a2f1","unresolved":false,"context_lines":[{"line_number":301,"context_line":""},{"line_number":302,"context_line":"    # Flag to denote we\u0027ve already tried and used -w successfully, so don\u0027t"},{"line_number":303,"context_line":"    # run iptables-restore without it."},{"line_number":304,"context_line":"    use_table_lock \u003d False"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"    def __init__(self, _execute\u003dNone, state_less\u003dFalse, use_ipv6\u003dFalse,"},{"line_number":307,"context_line":"                 namespace\u003dNone, binary_name\u003dbinary_name):"}],"source_content_type":"text/x-python","patch_set":28,"id":"3fce034c_bb73934d","line":304,"updated":"2019-04-11 01:19:28.000000000","message":"I guess I should have done this as a class variable, let me think about it...","commit_id":"a955308d9833a35722e3dd3ad6709d6464caf22c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"80cf2999d5ffd845484d3ef8dd7e80d020d9e1e7","unresolved":false,"context_lines":[{"line_number":491,"context_line":"            return self._random_fully"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"        version \u003d self._get_version()"},{"line_number":494,"context_line":"        self.__class__.random_fully \u003d utils.is_version_greater_equal("},{"line_number":495,"context_line":"            version, n_const.IPTABLES_RANDOM_FULLY_VERSION)"},{"line_number":496,"context_line":"        return self._random_fully"},{"line_number":497,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"3fce034c_6a7d3e6d","line":494,"range":{"start_line":494,"start_character":23,"end_line":494,"end_character":35},"updated":"2019-04-12 08:01:16.000000000","message":"shouldn\u0027t here be \"_random_fully\" ?","commit_id":"1773a4484e7dc1f22624003c34611dc7be459269"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"e9c40ba2126d2f417d5a471740857fec12c4fd0a","unresolved":false,"context_lines":[{"line_number":491,"context_line":"            return self._random_fully"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"        version \u003d self._get_version()"},{"line_number":494,"context_line":"        self.__class__.random_fully \u003d utils.is_version_greater_equal("},{"line_number":495,"context_line":"            version, n_const.IPTABLES_RANDOM_FULLY_VERSION)"},{"line_number":496,"context_line":"        return self._random_fully"},{"line_number":497,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"3fce034c_ea5b672b","line":494,"range":{"start_line":494,"start_character":23,"end_line":494,"end_character":35},"in_reply_to":"3fce034c_6a7d3e6d","updated":"2019-04-12 14:12:24.000000000","message":"Done","commit_id":"1773a4484e7dc1f22624003c34611dc7be459269"}],"neutron/common/constants.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"34e24c4ef135376395931ae4da8592cbe4f1e92b","unresolved":false,"context_lines":[{"line_number":149,"context_line":"# IPtables version to support --random-fully option"},{"line_number":150,"context_line":"# Do not move this constant to neutron-lib, since it"},{"line_number":151,"context_line":"# is temporary"},{"line_number":152,"context_line":"IPTBL_VERSION \u003d \u00271.6.2\u0027"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"# Possible prefixes to partial port IDs in interface names used by the OVS,"},{"line_number":155,"context_line":"# Linux Bridge, and IVS VIF drivers in Nova and the neutron agents. See the"}],"source_content_type":"text/x-python","patch_set":25,"id":"5fc1f717_252c8b97","line":152,"updated":"2019-04-10 14:34:02.000000000","message":"nit: name should be more descriptive to random_fully","commit_id":"f512393213d304cb277dc53e0f39bca7a4998bfe"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"4ce05e4108879a8fe49546037ee4f8cf6718bf6c","unresolved":false,"context_lines":[{"line_number":149,"context_line":"# IPtables version to support --random-fully option"},{"line_number":150,"context_line":"# Do not move this constant to neutron-lib, since it"},{"line_number":151,"context_line":"# is temporary"},{"line_number":152,"context_line":"IPTBL_VERSION \u003d \u00271.6.2\u0027"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"# Possible prefixes to partial port IDs in interface names used by the OVS,"},{"line_number":155,"context_line":"# Linux Bridge, and IVS VIF drivers in Nova and the neutron agents. See the"}],"source_content_type":"text/x-python","patch_set":25,"id":"3fce034c_6fbc8dbb","line":152,"in_reply_to":"5fc1f717_252c8b97","updated":"2019-04-10 20:15:07.000000000","message":"ok will fix it.","commit_id":"f512393213d304cb277dc53e0f39bca7a4998bfe"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"137fa53dfd858840157951a1131b9667667e2ed2","unresolved":false,"context_lines":[{"line_number":149,"context_line":"# IPtables version to support --random-fully option"},{"line_number":150,"context_line":"# Do not move this constant to neutron-lib, since it"},{"line_number":151,"context_line":"# is temporary"},{"line_number":152,"context_line":"IPTABLES_RANDOM_FULLY_VERSION \u003d \u00271.6.2\u0027"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"# Possible prefixes to partial port IDs in interface names used by the OVS,"},{"line_number":155,"context_line":"# Linux Bridge, and IVS VIF drivers in Nova and the neutron agents. See the"}],"source_content_type":"text/x-python","patch_set":28,"id":"3fce034c_d5966e95","line":152,"updated":"2019-04-10 21:39:32.000000000","message":"So is this the version or is it anything after?  The check is only \"greater\"","commit_id":"a955308d9833a35722e3dd3ad6709d6464caf22c"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"ae19a5cb2038179fb10efa215175d22a96e9a2db","unresolved":false,"context_lines":[{"line_number":149,"context_line":"# IPtables version to support --random-fully option"},{"line_number":150,"context_line":"# Do not move this constant to neutron-lib, since it"},{"line_number":151,"context_line":"# is temporary"},{"line_number":152,"context_line":"IPTABLES_RANDOM_FULLY_VERSION \u003d \u00271.6.2\u0027"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"# Possible prefixes to partial port IDs in interface names used by the OVS,"},{"line_number":155,"context_line":"# Linux Bridge, and IVS VIF drivers in Nova and the neutron agents. See the"}],"source_content_type":"text/x-python","patch_set":28,"id":"3fce034c_4045de16","line":152,"in_reply_to":"3fce034c_d5966e95","updated":"2019-04-10 22:27:33.000000000","message":"It is this version and after.","commit_id":"a955308d9833a35722e3dd3ad6709d6464caf22c"}],"neutron/common/utils.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"017713ff50314de741152849ae1d73f2161eeb66","unresolved":false,"context_lines":[{"line_number":314,"context_line":"                else socket.AF_INET6))"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"def compare_version_strings(version1, version2):"},{"line_number":318,"context_line":"    \"\"\"Returns True if the version is equal or greater else False\"\"\""},{"line_number":319,"context_line":"    if (version.StrictVersion(version1) \u003e\u003d"},{"line_number":320,"context_line":"            version.StrictVersion(l_const.IPTBL_VERSION)):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5fc1f717_8d90e1ef","line":317,"updated":"2019-03-18 23:21:55.000000000","message":"Better name version_greater?","commit_id":"a213c95f5da0a4374cae7244db075febea0f0823"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"bcb42b7861a40044ba50e73ad44a76fedec673d1","unresolved":false,"context_lines":[{"line_number":314,"context_line":"                else socket.AF_INET6))"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"def compare_version_strings(version1, version2):"},{"line_number":318,"context_line":"    \"\"\"Returns True if the version is equal or greater else False\"\"\""},{"line_number":319,"context_line":"    if (version.StrictVersion(version1) \u003e\u003d"},{"line_number":320,"context_line":"            version.StrictVersion(l_const.IPTBL_VERSION)):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5fc1f717_e4a96e24","line":317,"in_reply_to":"5fc1f717_8d90e1ef","updated":"2019-03-19 17:20:17.000000000","message":"Sure","commit_id":"a213c95f5da0a4374cae7244db075febea0f0823"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"017713ff50314de741152849ae1d73f2161eeb66","unresolved":false,"context_lines":[{"line_number":317,"context_line":"def compare_version_strings(version1, version2):"},{"line_number":318,"context_line":"    \"\"\"Returns True if the version is equal or greater else False\"\"\""},{"line_number":319,"context_line":"    if (version.StrictVersion(version1) \u003e\u003d"},{"line_number":320,"context_line":"            version.StrictVersion(l_const.IPTBL_VERSION)):"},{"line_number":321,"context_line":"        return True"},{"line_number":322,"context_line":"    else:"},{"line_number":323,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":10,"id":"5fc1f717_adeefdb1","line":320,"range":{"start_line":320,"start_character":34,"end_line":320,"end_character":55},"updated":"2019-03-18 23:21:55.000000000","message":"s/version2\n\nAlso, from what I\u0027ve found, the distutils version code is undocumented, either use the one in setuptools (which is probably installed) or packaging:\n\n\u003e\u003e\u003e from pkg_resources import parse_version\n\u003e\u003e\u003e parse_version(\u00271.4\u0027) \u003e parse_version(\u00271.4-rc2\u0027)\nTrue\n\n\u003e\u003e\u003e from packaging import version\n\u003e\u003e\u003e version.parse(\"2.3.1\") \u003c version.parse(\"10.1.2\")\nTrue","commit_id":"a213c95f5da0a4374cae7244db075febea0f0823"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"bcb42b7861a40044ba50e73ad44a76fedec673d1","unresolved":false,"context_lines":[{"line_number":317,"context_line":"def compare_version_strings(version1, version2):"},{"line_number":318,"context_line":"    \"\"\"Returns True if the version is equal or greater else False\"\"\""},{"line_number":319,"context_line":"    if (version.StrictVersion(version1) \u003e\u003d"},{"line_number":320,"context_line":"            version.StrictVersion(l_const.IPTBL_VERSION)):"},{"line_number":321,"context_line":"        return True"},{"line_number":322,"context_line":"    else:"},{"line_number":323,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":10,"id":"5fc1f717_646b3ef1","line":320,"range":{"start_line":320,"start_character":34,"end_line":320,"end_character":55},"in_reply_to":"5fc1f717_adeefdb1","updated":"2019-03-19 17:20:17.000000000","message":"I tried pakaging(parse version), but it failed import. \nI used this distutils based on the comment from Liu.","commit_id":"a213c95f5da0a4374cae7244db075febea0f0823"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"017713ff50314de741152849ae1d73f2161eeb66","unresolved":false,"context_lines":[{"line_number":319,"context_line":"    if (version.StrictVersion(version1) \u003e\u003d"},{"line_number":320,"context_line":"            version.StrictVersion(l_const.IPTBL_VERSION)):"},{"line_number":321,"context_line":"        return True"},{"line_number":322,"context_line":"    else:"},{"line_number":323,"context_line":"        return False"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5fc1f717_6d2ed5fb","line":322,"updated":"2019-03-18 23:21:55.000000000","message":"nit: don\u0027t need else can just put return False at 4 spaces","commit_id":"a213c95f5da0a4374cae7244db075febea0f0823"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"b79061aa18455b42db7aed6e6af1a9cd64d43793","unresolved":false,"context_lines":[{"line_number":316,"context_line":"def is_version_greater(version1, version2):"},{"line_number":317,"context_line":"    \"\"\"Returns True if the version is equal or greater else False\"\"\""},{"line_number":318,"context_line":"    if (pkg_resources.parse_version(version1) \u003e\u003d"},{"line_number":319,"context_line":"            pkg_resources.parse_version(version2)):"},{"line_number":320,"context_line":"        return True"},{"line_number":321,"context_line":"    return False"},{"line_number":322,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"5fc1f717_ee9292fc","line":319,"updated":"2019-04-02 07:43:56.000000000","message":"You can simply do\n\n    return (pkg_resources.parse_version(version1) \u003e\u003d\n            pkg_resources.parse_version(version2))","commit_id":"a9614ef4b546331522f1a22ef2798e8993a9af1f"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"7d14cb145bc4a5ab1bf696419cc3e676c312ec41","unresolved":false,"context_lines":[{"line_number":316,"context_line":"def is_version_greater(version1, version2):"},{"line_number":317,"context_line":"    \"\"\"Returns True if the version is equal or greater else False\"\"\""},{"line_number":318,"context_line":"    if (pkg_resources.parse_version(version1) \u003e\u003d"},{"line_number":319,"context_line":"            pkg_resources.parse_version(version2)):"},{"line_number":320,"context_line":"        return True"},{"line_number":321,"context_line":"    return False"},{"line_number":322,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"5fc1f717_3e7c3eea","line":319,"in_reply_to":"5fc1f717_ee9292fc","updated":"2019-04-02 17:24:54.000000000","message":"Sure will do.","commit_id":"a9614ef4b546331522f1a22ef2798e8993a9af1f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"80cf2999d5ffd845484d3ef8dd7e80d020d9e1e7","unresolved":false,"context_lines":[{"line_number":314,"context_line":""},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"def is_version_greater_equal(version1, version2):"},{"line_number":317,"context_line":"    \"\"\"Returns True if the version is equal or greater else False\"\"\""},{"line_number":318,"context_line":"    return (pkg_resources.parse_version(version1) \u003e\u003d"},{"line_number":319,"context_line":"            pkg_resources.parse_version(version2))"},{"line_number":320,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"3fce034c_cad6b250","line":317,"range":{"start_line":317,"start_character":27,"end_line":317,"end_character":34},"updated":"2019-04-12 08:01:16.000000000","message":"which version is grater? and from what? You should probably add such info here","commit_id":"1773a4484e7dc1f22624003c34611dc7be459269"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"e9c40ba2126d2f417d5a471740857fec12c4fd0a","unresolved":false,"context_lines":[{"line_number":314,"context_line":""},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"def is_version_greater_equal(version1, version2):"},{"line_number":317,"context_line":"    \"\"\"Returns True if the version is equal or greater else False\"\"\""},{"line_number":318,"context_line":"    return (pkg_resources.parse_version(version1) \u003e\u003d"},{"line_number":319,"context_line":"            pkg_resources.parse_version(version2))"},{"line_number":320,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"3fce034c_8a4ae324","line":317,"range":{"start_line":317,"start_character":27,"end_line":317,"end_character":34},"in_reply_to":"3fce034c_cad6b250","updated":"2019-04-12 14:12:24.000000000","message":"Done","commit_id":"1773a4484e7dc1f22624003c34611dc7be459269"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"80cf2999d5ffd845484d3ef8dd7e80d020d9e1e7","unresolved":false,"context_lines":[{"line_number":316,"context_line":"def is_version_greater_equal(version1, version2):"},{"line_number":317,"context_line":"    \"\"\"Returns True if the version is equal or greater else False\"\"\""},{"line_number":318,"context_line":"    return (pkg_resources.parse_version(version1) \u003e\u003d"},{"line_number":319,"context_line":"            pkg_resources.parse_version(version2))"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"class DelayedStringRenderer(object):"}],"source_content_type":"text/x-python","patch_set":31,"id":"3fce034c_2a4ad626","line":319,"updated":"2019-04-12 08:01:16.000000000","message":"I know that this is simple method but maybe adding some simple unit test for it would be nice?","commit_id":"1773a4484e7dc1f22624003c34611dc7be459269"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"e9c40ba2126d2f417d5a471740857fec12c4fd0a","unresolved":false,"context_lines":[{"line_number":316,"context_line":"def is_version_greater_equal(version1, version2):"},{"line_number":317,"context_line":"    \"\"\"Returns True if the version is equal or greater else False\"\"\""},{"line_number":318,"context_line":"    return (pkg_resources.parse_version(version1) \u003e\u003d"},{"line_number":319,"context_line":"            pkg_resources.parse_version(version2))"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"class DelayedStringRenderer(object):"}],"source_content_type":"text/x-python","patch_set":31,"id":"3fce034c_aa479f1d","line":319,"in_reply_to":"3fce034c_2a4ad626","updated":"2019-04-12 14:12:24.000000000","message":"Done","commit_id":"1773a4484e7dc1f22624003c34611dc7be459269"}],"neutron/tests/unit/agent/l3/test_agent.py":[{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"fbd254b5a5363e24bbd4141b69fd04eab040a93a","unresolved":false,"context_lines":[{"line_number":941,"context_line":"                source_cidrs.append(source_cidr)"},{"line_number":942,"context_line":"        source_nat_ip \u003d router[\u0027gw_port\u0027][\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"},{"line_number":943,"context_line":"        interface_name \u003d (\u0027qg-%s\u0027 % router[\u0027gw_port\u0027][\u0027id\u0027])[:14]"},{"line_number":944,"context_line":"        if iptables_manager_version \u003e\u003d \u0027v1.6.2\u0027:"},{"line_number":945,"context_line":"            expected_rules \u003d ["},{"line_number":946,"context_line":"                \u0027! -i %s ! -o %s -m conntrack ! --ctstate DNAT -j ACCEPT\u0027 %"},{"line_number":947,"context_line":"                (interface_name, interface_name),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_7c7fb7de","line":944,"range":{"start_line":944,"start_character":40,"end_line":944,"end_character":46},"updated":"2019-02-13 22:38:27.000000000","message":"Make this a constant?","commit_id":"b4375da6f1697f2f7e848d818a330d3e24b9faab"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"fbd254b5a5363e24bbd4141b69fd04eab040a93a","unresolved":false,"context_lines":[{"line_number":1573,"context_line":"            r for r in orig_mangle_rules"},{"line_number":1574,"context_line":"            if r not in ri.iptables_manager.ipv4[\u0027mangle\u0027].rules]"},{"line_number":1575,"context_line":"        self.assertEqual(1, len(mangle_rules_delta))"},{"line_number":1576,"context_line":"        iptables_manager_version \u003d ri.iptables_manager.get_version()"},{"line_number":1577,"context_line":"        self._verify_snat_mangle_rules(nat_rules_delta, mangle_rules_delta,"},{"line_number":1578,"context_line":"                                       router, iptables_manager_version)"},{"line_number":1579,"context_line":"        self.assertEqual(1, self.send_adv_notif.call_count)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_7ccd772e","line":1576,"range":{"start_line":1576,"start_character":55,"end_line":1576,"end_character":68},"updated":"2019-02-13 22:38:27.000000000","message":"I\u0027m not seeing where this could return different values? Would it make sense to mock this out to get coverage on the both cases where iptables \u003e\u003d 1.6.2 and cases where iptables \u003c 1.6.2?","commit_id":"b4375da6f1697f2f7e848d818a330d3e24b9faab"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"dc403a4cb432b9dfda115b43d9ff27da3bac2ede","unresolved":false,"context_lines":[{"line_number":1573,"context_line":"            r for r in orig_mangle_rules"},{"line_number":1574,"context_line":"            if r not in ri.iptables_manager.ipv4[\u0027mangle\u0027].rules]"},{"line_number":1575,"context_line":"        self.assertEqual(1, len(mangle_rules_delta))"},{"line_number":1576,"context_line":"        iptables_manager_version \u003d ri.iptables_manager.get_version()"},{"line_number":1577,"context_line":"        self._verify_snat_mangle_rules(nat_rules_delta, mangle_rules_delta,"},{"line_number":1578,"context_line":"                                       router, iptables_manager_version)"},{"line_number":1579,"context_line":"        self.assertEqual(1, self.send_adv_notif.call_count)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_e7523413","line":1576,"range":{"start_line":1576,"start_character":55,"end_line":1576,"end_character":68},"in_reply_to":"9fdfeff1_7ccd772e","updated":"2019-02-13 22:57:42.000000000","message":"Yes we are checking for both cases, see line #2215 below.","commit_id":"b4375da6f1697f2f7e848d818a330d3e24b9faab"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"34e24c4ef135376395931ae4da8592cbe4f1e92b","unresolved":false,"context_lines":[{"line_number":1043,"context_line":"        snat_rule \u003d (\u0027-m mark ! --mark 0x2/%s -m conntrack --ctstate DNAT \u0027"},{"line_number":1044,"context_line":"                     \u0027-j SNAT --to-source %s\u0027 %"},{"line_number":1045,"context_line":"                     (n_const.ROUTER_MARK_MASK, source_nat_ip))"},{"line_number":1046,"context_line":"        if iptables_manager_version:"},{"line_number":1047,"context_line":"            version_compare \u003d common_utils.is_version_greater("},{"line_number":1048,"context_line":"                iptables_manager_version, n_const.IPTBL_VERSION)"},{"line_number":1049,"context_line":"            if version_compare:"}],"source_content_type":"text/x-python","patch_set":25,"id":"5fc1f717_853c5fc8","line":1046,"updated":"2019-04-10 14:34:02.000000000","message":"Same comment here","commit_id":"f512393213d304cb277dc53e0f39bca7a4998bfe"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"34e24c4ef135376395931ae4da8592cbe4f1e92b","unresolved":false,"context_lines":[{"line_number":2312,"context_line":"                ex_gw_port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027])"},{"line_number":2313,"context_line":""},{"line_number":2314,"context_line":"        iptables_manager_version \u003d ri.iptables_manager.get_version()"},{"line_number":2315,"context_line":"        if iptables_manager_version:"},{"line_number":2316,"context_line":"            version_compare \u003d common_utils.is_version_greater("},{"line_number":2317,"context_line":"                iptables_manager_version, n_const.IPTBL_VERSION)"},{"line_number":2318,"context_line":"            if version_compare:"}],"source_content_type":"text/x-python","patch_set":25,"id":"5fc1f717_4532f7f3","line":2315,"updated":"2019-04-10 14:34:02.000000000","message":"And here","commit_id":"f512393213d304cb277dc53e0f39bca7a4998bfe"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"307c1a85f368b5b627c4260474d8c254ec7e1197","unresolved":false,"context_lines":[{"line_number":1642,"context_line":"        router \u003d l3_test_common.prepare_router_data(enable_snat\u003dTrue)"},{"line_number":1643,"context_line":"        ri \u003d l3router.RouterInfo(agent, router[\u0027id\u0027], router, **self.ri_kwargs)"},{"line_number":1644,"context_line":"        ri.external_gateway_added \u003d mock.Mock()"},{"line_number":1645,"context_line":"        ri.iptables_manager._random_fully \u003d False"},{"line_number":1646,"context_line":"        # Process with NAT"},{"line_number":1647,"context_line":"        ri.process()"},{"line_number":1648,"context_line":"        orig_nat_rules \u003d ri.iptables_manager.ipv4[\u0027nat\u0027].rules[:]"}],"source_content_type":"text/x-python","patch_set":27,"id":"3fce034c_7503fa0e","line":1645,"updated":"2019-04-10 21:35:01.000000000","message":"This seemed like a hack when I did it, but wanted to get review out, can look later.","commit_id":"aa0a840985cb14adb3e9401307b14d4fa03c6660"}],"neutron/tests/unit/agent/l3/test_dvr_local_router.py":[{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"fbd254b5a5363e24bbd4141b69fd04eab040a93a","unresolved":false,"context_lines":[{"line_number":260,"context_line":"        dnat_from_floatingip_to_fixedip \u003d ("},{"line_number":261,"context_line":"            \u0027PREROUTING\u0027, \u0027-d %s/32 -i %s -j DNAT --to-destination %s\u0027 % ("},{"line_number":262,"context_line":"                floating_ip, rtr_2_fip_name, fixed_ip))"},{"line_number":263,"context_line":"        if ri.iptables_manager.get_version() \u003e\u003d \u0027v1.6.2\u0027:"},{"line_number":264,"context_line":"            snat_from_fixedip_to_floatingip \u003d ("},{"line_number":265,"context_line":"                \u0027float-snat\u0027, \u0027-s %s/32 -j SNAT --to-source %s \u0027"},{"line_number":266,"context_line":"                \u0027--random-fully\u0027 % (fixed_ip, floating_ip))"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_3c6daf31","line":263,"range":{"start_line":263,"start_character":49,"end_line":263,"end_character":55},"updated":"2019-02-13 22:38:27.000000000","message":"Constant?","commit_id":"b4375da6f1697f2f7e848d818a330d3e24b9faab"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"b79061aa18455b42db7aed6e6af1a9cd64d43793","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import mock"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from neutron_lib.api.definitions import portbindings"},{"line_number":18,"context_line":"from neutron_lib import constants as lib_constants"},{"line_number":19,"context_line":"from oslo_config import cfg"}],"source_content_type":"text/x-python","patch_set":18,"id":"5fc1f717_cea1d648","line":16,"updated":"2019-04-02 07:43:56.000000000","message":"nitty nit: unrelated change?","commit_id":"a9614ef4b546331522f1a22ef2798e8993a9af1f"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"7d14cb145bc4a5ab1bf696419cc3e676c312ec41","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import mock"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from neutron_lib.api.definitions import portbindings"},{"line_number":18,"context_line":"from neutron_lib import constants as lib_constants"},{"line_number":19,"context_line":"from oslo_config import cfg"}],"source_content_type":"text/x-python","patch_set":18,"id":"5fc1f717_de809ac2","line":16,"in_reply_to":"5fc1f717_cea1d648","updated":"2019-04-02 17:24:54.000000000","message":"Will fix it.","commit_id":"a9614ef4b546331522f1a22ef2798e8993a9af1f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"34e24c4ef135376395931ae4da8592cbe4f1e92b","unresolved":false,"context_lines":[{"line_number":265,"context_line":"                fixed_ip, floating_ip))"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        ipt_version \u003d ri.iptables_manager.get_version()"},{"line_number":268,"context_line":"        if ipt_version:"},{"line_number":269,"context_line":"            version_compare \u003d common_utils.is_version_greater("},{"line_number":270,"context_line":"                ipt_version, n_const.IPTBL_VERSION)"},{"line_number":271,"context_line":"            if version_compare:"}],"source_content_type":"text/x-python","patch_set":25,"id":"5fc1f717_c5534715","line":268,"updated":"2019-04-10 14:34:02.000000000","message":"And here :(","commit_id":"f512393213d304cb277dc53e0f39bca7a4998bfe"}]}
