)]}'
{"neutron/agent/linux/ip_conntrack.py":[{"author":{"_account_id":20686,"name":"Sarath Chandra Mekala","username":"SarathMekala","inactive":true},"change_message_id":"7727cbad3c3efa3b2e5b0793ba0de0ee083c70de","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    if namespace is None:"},{"line_number":34,"context_line":"        namespace \u003d \u0027default\u0027"},{"line_number":35,"context_line":"    try:"},{"line_number":36,"context_line":"        return CONTRACK_MGRS[namespace]"},{"line_number":37,"context_line":"    except KeyError:"},{"line_number":38,"context_line":"        ipconntrack \u003d IpConntrackManager(get_rules_for_table_func,"},{"line_number":39,"context_line":"                                         execute, namespace)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3aaa91ec_56dd2f6f","line":36,"updated":"2016-06-28 18:54:44.000000000","message":"Its better to avoid try-catch blocks for condition checks. We can instead use \n\nif namespace in CONTRACK_MGRS e.t.c","commit_id":"d31377d7b97f3eda32e0ca699eb93450cbb247e3"},{"author":{"_account_id":4656,"name":"Sean M. Collins","email":"sean@coreitpro.com","username":"scollins"},"change_message_id":"9d406de539d48e16ce36fbd922e74673b350a2a8","unresolved":false,"context_lines":[{"line_number":44,"context_line":"class IpConntrackManager(object):"},{"line_number":45,"context_line":"    \"\"\"Smart wrapper for ip conntrack.\"\"\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def __init__(self, get_rules_for_table_func, execute\u003dNone, namespace\u003dNone):"},{"line_number":48,"context_line":"        self.get_rules_for_table_func \u003d get_rules_for_table_func"},{"line_number":49,"context_line":"        self.execute \u003d execute or linux_utils.execute"},{"line_number":50,"context_line":"        self.namespace \u003d namespace"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac06dbe_63076c18","line":47,"updated":"2016-08-23 13:14:40.000000000","message":"Why is this arg renamed? You introduce a number of new functions with the word \"zone\" in them, and yet you renamed it?","commit_id":"d31377d7b97f3eda32e0ca699eb93450cbb247e3"},{"author":{"_account_id":5109,"name":"chandanc","email":"chandan.dutta.chowdhury@gmail.com","username":"chandanc"},"change_message_id":"dd2f57d1caef719c6a43d12734ad8634955b29bb","unresolved":false,"context_lines":[{"line_number":44,"context_line":"class IpConntrackManager(object):"},{"line_number":45,"context_line":"    \"\"\"Smart wrapper for ip conntrack.\"\"\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def __init__(self, get_rules_for_table_func, execute\u003dNone, namespace\u003dNone):"},{"line_number":48,"context_line":"        self.get_rules_for_table_func \u003d get_rules_for_table_func"},{"line_number":49,"context_line":"        self.execute \u003d execute or linux_utils.execute"},{"line_number":50,"context_line":"        self.namespace \u003d namespace"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac06dbe_0bf04a66","line":47,"in_reply_to":"1ac06dbe_63076c18","updated":"2016-08-23 14:34:13.000000000","message":"Hello Sean,\n\nThe argument is not renamed, we are now passing a different function. \n\nThe zone_lookup_func is now part of this class, but we still need to get access to a function that can collect rules in a table, which is part of the iptable manager instance.","commit_id":"d31377d7b97f3eda32e0ca699eb93450cbb247e3"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"d0e04c144bf9feb1cdf1b21d3120541a47aacd0f","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        \"\"\"Setup the map between devices and zones based on current rules.\"\"\""},{"line_number":122,"context_line":"        self._device_zone_map \u003d {}"},{"line_number":123,"context_line":"        rules \u003d self.get_rules_for_table_func(\u0027raw\u0027)"},{"line_number":124,"context_line":"        for rule in rules:"},{"line_number":125,"context_line":"            match \u003d re.match(r\u0027.* --physdev-in (?P\u003cdev\u003e[a-zA-Z0-9\\-]+)\u0027"},{"line_number":126,"context_line":"                             r\u0027.* -j CT --zone (?P\u003czone\u003e\\d+).*\u0027, rule)"},{"line_number":127,"context_line":"            if match:"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_131653a7","line":124,"updated":"2016-08-24 22:09:18.000000000","message":"In neutron/tests/unit/agent/linux/test_ip_conntrack.py, the _zone_lookup method is passed as the get_rules_for_table_func argument to ip_conntrack.IpConntrackManager.   The _zone_lookup method just returns a 100, but since that 100 is now the value of \"rules\" here, we end up with the \"TypeError: \u0027int\u0027 object is not iterable\" error.\n\nI\u0027m not sure what the function passed as get_rules_for_table_func should return, but it definitely should be an array of strings.","commit_id":"37ce3fda459a76d7a21cf5e5f9cd069c00fb5e89"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"740c2573146acd5cf3f5f9fc7987af12679da44e","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"@lockutils.synchronized(\u0027conntrack\u0027)"},{"line_number":32,"context_line":"def get_conntrack(get_rules_for_table_func, filtered_ports, unfiltered_ports,"},{"line_number":33,"context_line":"                  execute\u003dNone, namespace\u003dNone, singleton\u003dTrue):"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    if not singleton:"},{"line_number":36,"context_line":"        return IpConntrackManager(get_rules_for_table_func,"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa6399be_a0186176","line":33,"updated":"2016-10-14 12:15:24.000000000","message":"Is this singleton option entirely for tests? If so, I would rather get rid of this option and add a cleanup method to this module that removes the instance from that map that the tests call on setup and/or teardown.","commit_id":"d19fe7d6db1875ba1b17439145cc5d3bd9ce1d4a"},{"author":{"_account_id":5109,"name":"chandanc","email":"chandan.dutta.chowdhury@gmail.com","username":"chandanc"},"change_message_id":"9a885ab6ea3f7b114d0f4e8bc175694f79cd2469","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"@lockutils.synchronized(\u0027conntrack\u0027)"},{"line_number":32,"context_line":"def get_conntrack(get_rules_for_table_func, filtered_ports, unfiltered_ports,"},{"line_number":33,"context_line":"                  execute\u003dNone, namespace\u003dNone, singleton\u003dTrue):"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    if not singleton:"},{"line_number":36,"context_line":"        return IpConntrackManager(get_rules_for_table_func,"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa6399be_213450dc","line":33,"in_reply_to":"fa6399be_a0186176","updated":"2016-10-14 15:40:48.000000000","message":"Hello Kevin, \n\nYou are right, the singleton option is only used for testing. I tried to cleanup the state of the conntrack object in each UT but as the UTs run in parallel threads, they keep interfering with each others test results \n\nThis was the only option that worked. \n\nThanks\nChandan","commit_id":"d19fe7d6db1875ba1b17439145cc5d3bd9ce1d4a"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"740c2573146acd5cf3f5f9fc7987af12679da44e","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        ethertype \u003d rule.get(\u0027ethertype\u0027)"},{"line_number":83,"context_line":"        for device_info in device_info_list:"},{"line_number":84,"context_line":"            zone_id \u003d self.get_device_zone(device_info[\u0027device\u0027])"},{"line_number":85,"context_line":"            if zone_id is None:"},{"line_number":86,"context_line":"                return set()"},{"line_number":87,"context_line":"            ips \u003d device_info.get(\u0027fixed_ips\u0027, [])"},{"line_number":88,"context_line":"            for ip in ips:"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa6399be_e07a5987","line":85,"updated":"2016-10-14 12:15:24.000000000","message":"how does this happen? If there is a good reason, \u0027get_device_zone\u0027 should be commented on why None may be returned.","commit_id":"d19fe7d6db1875ba1b17439145cc5d3bd9ce1d4a"},{"author":{"_account_id":5109,"name":"chandanc","email":"chandan.dutta.chowdhury@gmail.com","username":"chandanc"},"change_message_id":"9a885ab6ea3f7b114d0f4e8bc175694f79cd2469","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        ethertype \u003d rule.get(\u0027ethertype\u0027)"},{"line_number":83,"context_line":"        for device_info in device_info_list:"},{"line_number":84,"context_line":"            zone_id \u003d self.get_device_zone(device_info[\u0027device\u0027])"},{"line_number":85,"context_line":"            if zone_id is None:"},{"line_number":86,"context_line":"                return set()"},{"line_number":87,"context_line":"            ips \u003d device_info.get(\u0027fixed_ips\u0027, [])"},{"line_number":88,"context_line":"            for ip in ips:"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa6399be_e70fc834","line":85,"in_reply_to":"fa6399be_e07a5987","updated":"2016-10-14 15:40:48.000000000","message":"I am not able to recollect the exact reason i had added this case. I can remove this for now till i can reproduce the exact condition for this change.","commit_id":"d19fe7d6db1875ba1b17439145cc5d3bd9ce1d4a"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"21e7c1af0de7426e973a414e9da07c372e3aedfb","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"@lockutils.synchronized(\u0027conntrack\u0027)"},{"line_number":32,"context_line":"def get_conntrack(get_rules_for_table_func, filtered_ports, unfiltered_ports,"},{"line_number":33,"context_line":"                  execute\u003dNone, namespace\u003dNone, singleton\u003dTrue):"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    if not singleton:"},{"line_number":36,"context_line":"        return IpConntrackManager(get_rules_for_table_func,"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa6399be_3f1bfd1d","line":33,"updated":"2016-10-19 08:48:38.000000000","message":"Since the tests are the only thing that need this singleton, can you instead remove that logic from this \u0027get_conntrack\u0027 method and just have them construct IpConntrackManager instances directly?\n\nThis entire method is basically for getting a singleton, so it\u0027s just extra cruft to maintain an option that defeats the purpose.","commit_id":"ab6423a77551f94ff62dae39eedc502397d50442"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"1774344215f207e3af9009317b1292db2effd9cc","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"@lockutils.synchronized(\u0027conntrack\u0027)"},{"line_number":32,"context_line":"def get_conntrack(get_rules_for_table_func, filtered_ports, unfiltered_ports,"},{"line_number":33,"context_line":"                  execute\u003dNone, namespace\u003dNone):"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    ns_key \u003d namespace if namespace else \u0027default\u0027"},{"line_number":36,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":16,"id":"da6895a0_2d63fc1b","line":33,"updated":"2016-10-21 20:21:25.000000000","message":"sorry, one more quick change. string literals are safe to put in default values for the args so if you just set namespace\u003d\u0027default\u0027 here you can get rid of the ns_key variable and line 35","commit_id":"cffaac962bb2f8aab92d680100ca1e1f51678349"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"08adc3429e38cc93c78fe187d877e09ee3572f0e","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"@lockutils.synchronized(\u0027conntrack\u0027)"},{"line_number":32,"context_line":"def get_conntrack(get_rules_for_table_func, filtered_ports, unfiltered_ports,"},{"line_number":33,"context_line":"                  execute\u003dNone, namespace\u003dNone):"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    ns_key \u003d namespace if namespace else \u0027default\u0027"},{"line_number":36,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":17,"id":"da6895a0_a6948a37","line":33,"updated":"2016-10-21 23:48:36.000000000","message":"see comments on PS16. sorry i commented on the wrong one","commit_id":"d3bab7e93f3846fe3d0a5a72fdd9cf6b849f9ce0"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"36323c3f49a0bd05f0d2360238f24e7aa957e8e3","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"@lockutils.synchronized(\u0027conntrack\u0027)"},{"line_number":32,"context_line":"def get_conntrack(get_rules_for_table_func, filtered_ports, unfiltered_ports,"},{"line_number":33,"context_line":"                  execute\u003dNone, namespace\u003d\u0027default\u0027):"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    try:"},{"line_number":36,"context_line":"        return CONTRACK_MGRS[namespace]"}],"source_content_type":"text/x-python","patch_set":18,"id":"da6895a0_ea8f0eca","line":33,"updated":"2016-10-24 08:52:48.000000000","message":"Sorry, one more question. Shouldn\u0027t we just have the namespace be \u0027None\u0027 by default? Everything else is defaulting to None for the namespace.\n\nNone can be a key in a dictionary so you don\u0027t need to worry about that messing with the singleton dictionary here.","commit_id":"954c943b2d2c1e9278f9ad3cabb1bac13886c7de"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a09b8423d3d30f92fbd02a91e183ee545f983216","unresolved":false,"context_lines":[{"line_number":24,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":25,"context_line":"CONTRACK_MGRS \u003d {}"},{"line_number":26,"context_line":"LINUX_DEV_PREFIX_LEN \u003d 3"},{"line_number":27,"context_line":"LINUX_DEV_LEN \u003d 14"},{"line_number":28,"context_line":"MAX_CONNTRACK_ZONES \u003d 65535"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5da102_2b018a38","line":27,"updated":"2016-11-03 03:05:29.000000000","message":"See my comment in the other file, but it seems like this should move to the constants file if we\u0027re using it in two places.  Assuming we can\u0027t just use the neutron-lib value.","commit_id":"e36b207bda73e31770fbaadd27efa79b3ede55ba"}],"neutron/agent/linux/iptables_firewall.py":[{"author":{"_account_id":20079,"name":"Ha Van Tu","email":"tuhv@vn.fujitsu.com","username":"tuhv"},"change_message_id":"f9c8012c7220612c55360b987882870df60f7a52","unresolved":false,"context_lines":[{"line_number":41,"context_line":"IPSET_DIRECTION \u003d {firewall.INGRESS_DIRECTION: \u0027src\u0027,"},{"line_number":42,"context_line":"                   firewall.EGRESS_DIRECTION: \u0027dst\u0027}"},{"line_number":43,"context_line":"# length of all device prefixes (e.g. qvo, tap, qvb)"},{"line_number":44,"context_line":"LINUX_DEV_PREFIX_LEN \u003d 3"},{"line_number":45,"context_line":"LINUX_DEV_LEN \u003d 14"},{"line_number":46,"context_line":"MAX_CONNTRACK_ZONES \u003d 65535"},{"line_number":47,"context_line":"comment_rule \u003d iptables_manager.comment_rule"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_06f5a6eb","line":44,"range":{"start_line":44,"start_character":0,"end_line":44,"end_character":24},"updated":"2016-08-24 09:26:54.000000000","message":"nit: We don\u0027t use it anymore","commit_id":"8a8b5fecac2f324b70aa9c22c27169937196b284"},{"author":{"_account_id":20079,"name":"Ha Van Tu","email":"tuhv@vn.fujitsu.com","username":"tuhv"},"change_message_id":"f9c8012c7220612c55360b987882870df60f7a52","unresolved":false,"context_lines":[{"line_number":43,"context_line":"# length of all device prefixes (e.g. qvo, tap, qvb)"},{"line_number":44,"context_line":"LINUX_DEV_PREFIX_LEN \u003d 3"},{"line_number":45,"context_line":"LINUX_DEV_LEN \u003d 14"},{"line_number":46,"context_line":"MAX_CONNTRACK_ZONES \u003d 65535"},{"line_number":47,"context_line":"comment_rule \u003d iptables_manager.comment_rule"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_06cc86b9","line":46,"range":{"start_line":46,"start_character":0,"end_line":46,"end_character":27},"updated":"2016-08-24 09:26:54.000000000","message":"nit: We don\u0027t use it anymore","commit_id":"8a8b5fecac2f324b70aa9c22c27169937196b284"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"d0e04c144bf9feb1cdf1b21d3120541a47aacd0f","unresolved":false,"context_lines":[{"line_number":838,"context_line":"            self._pre_defer_filtered_ports \u003d None"},{"line_number":839,"context_line":"            self._pre_defer_unfiltered_ports \u003d None"},{"line_number":840,"context_line":""},{"line_number":841,"context_line":"    def _populate_initial_zone_map(self):"},{"line_number":842,"context_line":"        \"\"\"Setup the map between devices and zones based on current rules.\"\"\""},{"line_number":843,"context_line":"        self._device_zone_map \u003d {}"},{"line_number":844,"context_line":"        rules \u003d self.iptables.get_rules_for_table(\u0027raw\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_863683e5","side":"PARENT","line":841,"updated":"2016-08-24 22:09:18.000000000","message":"This is still referenced in \"neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/test_ovs_neutron_agent.py\", line 1038, in test_hybrid_plug_flag_based_on_firewall().","commit_id":"385d9c3f58f63d7e29653388b1163d7aa0999afd"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"d0e04c144bf9feb1cdf1b21d3120541a47aacd0f","unresolved":false,"context_lines":[{"line_number":840,"context_line":""},{"line_number":841,"context_line":"    def _populate_initial_zone_map(self):"},{"line_number":842,"context_line":"        \"\"\"Setup the map between devices and zones based on current rules.\"\"\""},{"line_number":843,"context_line":"        self._device_zone_map \u003d {}"},{"line_number":844,"context_line":"        rules \u003d self.iptables.get_rules_for_table(\u0027raw\u0027)"},{"line_number":845,"context_line":"        for rule in rules:"},{"line_number":846,"context_line":"            match \u003d re.match(r\u0027.* --physdev-in (?P\u003cdev\u003e[a-zA-Z0-9\\-]+)\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_9321a3b7","side":"PARENT","line":843,"updated":"2016-08-24 22:09:18.000000000","message":"This is still referenced in \"neutron/tests/unit/agent/linux/test_iptables_firewall.py\", line 1925, in test__populate_initial_zone_map","commit_id":"385d9c3f58f63d7e29653388b1163d7aa0999afd"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"d0e04c144bf9feb1cdf1b21d3120541a47aacd0f","unresolved":false,"context_lines":[{"line_number":851,"context_line":"                self._device_zone_map[short_port_id] \u003d int(match.group(\u0027zone\u0027))"},{"line_number":852,"context_line":"        LOG.debug(\"Populated conntrack zone map: %s\", self._device_zone_map)"},{"line_number":853,"context_line":""},{"line_number":854,"context_line":"    def get_device_zone(self, port_id):"},{"line_number":855,"context_line":"        # we have to key the device_zone_map based on the fragment of the port"},{"line_number":856,"context_line":"        # UUID that shows up in the interface name. This is because the initial"},{"line_number":857,"context_line":"        # map is populated strictly based on interface names that we don\u0027t know"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_736ce708","side":"PARENT","line":854,"updated":"2016-08-24 22:09:18.000000000","message":"This is still referenced in \"neutron/tests/unit/agent/linux/test_iptables_firewall.py\", line 1958, in test_get_device_zone().","commit_id":"385d9c3f58f63d7e29653388b1163d7aa0999afd"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"d0e04c144bf9feb1cdf1b21d3120541a47aacd0f","unresolved":false,"context_lines":[{"line_number":873,"context_line":"        for dev in removed:"},{"line_number":874,"context_line":"            self._device_zone_map.pop(dev, None)"},{"line_number":875,"context_line":""},{"line_number":876,"context_line":"    def _generate_device_zone(self, short_port_id):"},{"line_number":877,"context_line":"        \"\"\"Generates a unique conntrack zone for the passed in ID.\"\"\""},{"line_number":878,"context_line":"        try:"},{"line_number":879,"context_line":"            zone \u003d self._find_open_zone()"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_7343476d","side":"PARENT","line":876,"updated":"2016-08-24 22:09:18.000000000","message":"This is still referenced in \"neutron/tests/unit/agent/linux/test_iptables_firewall.py\", line 1930, in test__generate_device_zone().","commit_id":"385d9c3f58f63d7e29653388b1163d7aa0999afd"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a09b8423d3d30f92fbd02a91e183ee545f983216","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                     SPOOF_FILTER: \u0027s\u0027}"},{"line_number":43,"context_line":"IPSET_DIRECTION \u003d {firewall.INGRESS_DIRECTION: \u0027src\u0027,"},{"line_number":44,"context_line":"                   firewall.EGRESS_DIRECTION: \u0027dst\u0027}"},{"line_number":45,"context_line":"# length of all device prefixes (e.g. qvo, tap, qvb)"},{"line_number":46,"context_line":"LINUX_DEV_LEN \u003d 14"},{"line_number":47,"context_line":"comment_rule \u003d iptables_manager.comment_rule"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5da102_6b1b82ca","line":45,"updated":"2016-11-03 03:05:29.000000000","message":"This comment needs to follow LINUX_DEV_PREFIX_LEN otherwise it\u0027s unclear why it\u0027s 3.  Really the only reason for the -1.","commit_id":"e36b207bda73e31770fbaadd27efa79b3ede55ba"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a09b8423d3d30f92fbd02a91e183ee545f983216","unresolved":false,"context_lines":[{"line_number":43,"context_line":"IPSET_DIRECTION \u003d {firewall.INGRESS_DIRECTION: \u0027src\u0027,"},{"line_number":44,"context_line":"                   firewall.EGRESS_DIRECTION: \u0027dst\u0027}"},{"line_number":45,"context_line":"# length of all device prefixes (e.g. qvo, tap, qvb)"},{"line_number":46,"context_line":"LINUX_DEV_LEN \u003d 14"},{"line_number":47,"context_line":"comment_rule \u003d iptables_manager.comment_rule"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5da102_eb5cf27e","line":46,"updated":"2016-11-03 03:05:29.000000000","message":"Why did we do this?  neutron-lib constants has this as 15, maybe that\u0027s a follow-up ?","commit_id":"e36b207bda73e31770fbaadd27efa79b3ede55ba"}]}
