)]}'
{"neutron/agent/linux/iptables_manager.py":[{"author":{"_account_id":107,"name":"Arvind Somya","email":"arvind.somya@gmail.com","username":"asomya"},"unresolved":false,"context_lines":[{"line_number":394,"context_line":"        new_filter.reverse()"},{"line_number":395,"context_line":"        return new_filter"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    def get_traffic_counters_by_target(self, target_chain):"},{"line_number":398,"context_line":"        acc \u003d {\u0027pkts\u0027: 0, \u0027bytes\u0027: 0}"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        cmd_tables \u003d [(\u0027iptables\u0027, \u0027filter\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2FxhY%3D","line":397,"updated":"2013-07-11 17:18:53.000000000","message":"Add docstring please.","commit_id":"3b38180959be7feeb2cb94118ad4148f6f5fa1f8"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"change_message_id":"f4c2fb7817f4ed2385e0ed7a14d897f4c1a7c5f9","unresolved":false,"context_lines":[{"line_number":394,"context_line":"        new_filter.reverse()"},{"line_number":395,"context_line":"        return new_filter"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    def get_traffic_counters_by_target(self, target_chain):"},{"line_number":398,"context_line":"        acc \u003d {\u0027pkts\u0027: 0, \u0027bytes\u0027: 0}"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        cmd_tables \u003d [(\u0027iptables\u0027, \u0027filter\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2Fp2U%3D","line":397,"in_reply_to":"AAAAP3%2F%2FxhY%3D","updated":"2013-07-15 08:22:13.000000000","message":"Done","commit_id":"3b38180959be7feeb2cb94118ad4148f6f5fa1f8"},{"author":{"_account_id":107,"name":"Arvind Somya","email":"arvind.somya@gmail.com","username":"asomya"},"unresolved":false,"context_lines":[{"line_number":436,"context_line":""},{"line_number":437,"context_line":"        return acc"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"    def get_traffic_counters(self, chain):"},{"line_number":440,"context_line":"        acc \u003d {\u0027pkts\u0027: 0, \u0027bytes\u0027: 0}"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"        cmd_tables \u003d [(\u0027iptables\u0027, \u0027filter\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2FxhU%3D","line":439,"updated":"2013-07-11 17:18:53.000000000","message":"Add docstring please.","commit_id":"3b38180959be7feeb2cb94118ad4148f6f5fa1f8"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"change_message_id":"f4c2fb7817f4ed2385e0ed7a14d897f4c1a7c5f9","unresolved":false,"context_lines":[{"line_number":436,"context_line":""},{"line_number":437,"context_line":"        return acc"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"    def get_traffic_counters(self, chain):"},{"line_number":440,"context_line":"        acc \u003d {\u0027pkts\u0027: 0, \u0027bytes\u0027: 0}"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"        cmd_tables \u003d [(\u0027iptables\u0027, \u0027filter\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2Fp2Q%3D","line":439,"in_reply_to":"AAAAP3%2F%2FxhU%3D","updated":"2013-07-15 08:22:13.000000000","message":"Done","commit_id":"3b38180959be7feeb2cb94118ad4148f6f5fa1f8"},{"author":{"_account_id":107,"name":"Arvind Somya","email":"arvind.somya@gmail.com","username":"asomya"},"unresolved":false,"context_lines":[{"line_number":446,"context_line":"                           (\u0027ip6tables\u0027, \u0027nat\u0027)]"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"        for cmd, table in cmd_tables:"},{"line_number":449,"context_line":"            args \u003d [cmd, \u0027-t\u0027, table, \u0027-L\u0027, chain, \u0027-n\u0027, \u0027-v\u0027, \u0027-x\u0027]"},{"line_number":450,"context_line":"            if self.namespace:"},{"line_number":451,"context_line":"                args \u003d [\u0027ip\u0027, \u0027netns\u0027, \u0027exec\u0027, self.namespace] + args"},{"line_number":452,"context_line":"            current_table \u003d (self.execute(args,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2Fxds%3D","line":449,"updated":"2013-07-11 17:18:53.000000000","message":"Can also do iptables -t \u003ctable\u003e -v -S \u003cchain\u003e, would be easier to parse lines.","commit_id":"3b38180959be7feeb2cb94118ad4148f6f5fa1f8"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"change_message_id":"f4c2fb7817f4ed2385e0ed7a14d897f4c1a7c5f9","unresolved":false,"context_lines":[{"line_number":446,"context_line":"                           (\u0027ip6tables\u0027, \u0027nat\u0027)]"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"        for cmd, table in cmd_tables:"},{"line_number":449,"context_line":"            args \u003d [cmd, \u0027-t\u0027, table, \u0027-L\u0027, chain, \u0027-n\u0027, \u0027-v\u0027, \u0027-x\u0027]"},{"line_number":450,"context_line":"            if self.namespace:"},{"line_number":451,"context_line":"                args \u003d [\u0027ip\u0027, \u0027netns\u0027, \u0027exec\u0027, self.namespace] + args"},{"line_number":452,"context_line":"            current_table \u003d (self.execute(args,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2Fp2E%3D","line":449,"in_reply_to":"AAAAP3%2F%2Fxds%3D","updated":"2013-07-15 08:22:13.000000000","message":"Not so easier IMHO","commit_id":"3b38180959be7feeb2cb94118ad4148f6f5fa1f8"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6410660ba8d37c8f5dd37b0b6c885ef3f8aa638b","unresolved":false,"context_lines":[{"line_number":403,"context_line":"        acc \u003d {\u0027pkts\u0027: 0, \u0027bytes\u0027: 0}"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"        cmd_tables \u003d [(\u0027iptables\u0027, \u0027filter\u0027),"},{"line_number":406,"context_line":"                      (\u0027iptables\u0027, \u0027nat\u0027)]"},{"line_number":407,"context_line":"        if self.use_ipv6:"},{"line_number":408,"context_line":"            cmd_tables +\u003d [(\u0027ip6tables\u0027, \u0027filter\u0027),"},{"line_number":409,"context_line":"                           (\u0027ip6tables\u0027, \u0027nat\u0027)]"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAP3%2F%2FfJU%3D","line":406,"updated":"2013-07-17 14:59:30.000000000","message":"Are you ever adding anything to the nat table that you\u0027d have to read?  From looking at the other related changes everything is in the filter table.","commit_id":"04699cf01bebad2b887948811526d92badd95511"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6410660ba8d37c8f5dd37b0b6c885ef3f8aa638b","unresolved":false,"context_lines":[{"line_number":409,"context_line":"                           (\u0027ip6tables\u0027, \u0027nat\u0027)]"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"        for cmd, table in cmd_tables:"},{"line_number":412,"context_line":"            args \u003d [cmd, \u0027-t\u0027, table, \u0027-L\u0027, \u0027-n\u0027, \u0027-v\u0027, \u0027-x\u0027]"},{"line_number":413,"context_line":"            if self.namespace:"},{"line_number":414,"context_line":"                args \u003d [\u0027ip\u0027, \u0027netns\u0027, \u0027exec\u0027, self.namespace] + args"},{"line_number":415,"context_line":"            current_table \u003d (self.execute(args,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAQn%2F%2F%2FYI%3D","line":412,"updated":"2013-07-17 21:58:08.000000000","message":"I think you should add the ability to pass -Z here to zero the counters, as that will allow callers to get delta\u0027s instead of absolute values.  Perhaps an optional argument that defaults to True?","commit_id":"04699cf01bebad2b887948811526d92badd95511"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6410660ba8d37c8f5dd37b0b6c885ef3f8aa638b","unresolved":false,"context_lines":[{"line_number":409,"context_line":"                           (\u0027ip6tables\u0027, \u0027nat\u0027)]"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"        for cmd, table in cmd_tables:"},{"line_number":412,"context_line":"            args \u003d [cmd, \u0027-t\u0027, table, \u0027-L\u0027, \u0027-n\u0027, \u0027-v\u0027, \u0027-x\u0027]"},{"line_number":413,"context_line":"            if self.namespace:"},{"line_number":414,"context_line":"                args \u003d [\u0027ip\u0027, \u0027netns\u0027, \u0027exec\u0027, self.namespace] + args"},{"line_number":415,"context_line":"            current_table \u003d (self.execute(args,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAQn%2F%2F9h4%3D","line":412,"in_reply_to":"AAAAQn%2F%2F%2FYI%3D","updated":"2013-07-18 13:20:37.000000000","message":"Actually, disregard the -Z comment here, as it would zero the whole table, which isn\u0027t what you want.","commit_id":"04699cf01bebad2b887948811526d92badd95511"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6410660ba8d37c8f5dd37b0b6c885ef3f8aa638b","unresolved":false,"context_lines":[{"line_number":447,"context_line":"        acc \u003d {\u0027pkts\u0027: 0, \u0027bytes\u0027: 0}"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        cmd_tables \u003d [(\u0027iptables\u0027, \u0027filter\u0027),"},{"line_number":450,"context_line":"                      (\u0027iptables\u0027, \u0027nat\u0027)]"},{"line_number":451,"context_line":"        if self.use_ipv6:"},{"line_number":452,"context_line":"            cmd_tables +\u003d [(\u0027ip6tables\u0027, \u0027filter\u0027),"},{"line_number":453,"context_line":"                           (\u0027ip6tables\u0027, \u0027nat\u0027)]"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAP3%2F%2FfJI%3D","line":450,"updated":"2013-07-17 14:59:30.000000000","message":"Same comment RE nat table.","commit_id":"04699cf01bebad2b887948811526d92badd95511"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6410660ba8d37c8f5dd37b0b6c885ef3f8aa638b","unresolved":false,"context_lines":[{"line_number":453,"context_line":"                           (\u0027ip6tables\u0027, \u0027nat\u0027)]"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        for cmd, table in cmd_tables:"},{"line_number":456,"context_line":"            args \u003d [cmd, \u0027-t\u0027, table, \u0027-L\u0027, chain, \u0027-n\u0027, \u0027-v\u0027, \u0027-x\u0027]"},{"line_number":457,"context_line":"            if self.namespace:"},{"line_number":458,"context_line":"                args \u003d [\u0027ip\u0027, \u0027netns\u0027, \u0027exec\u0027, self.namespace] + args"},{"line_number":459,"context_line":"            current_table \u003d (self.execute(args,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAQn%2F%2F%2FX8%3D","line":456,"updated":"2013-07-17 21:58:08.000000000","message":"-Z here too.","commit_id":"04699cf01bebad2b887948811526d92badd95511"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6410660ba8d37c8f5dd37b0b6c885ef3f8aa638b","unresolved":false,"context_lines":[{"line_number":453,"context_line":"                           (\u0027ip6tables\u0027, \u0027nat\u0027)]"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        for cmd, table in cmd_tables:"},{"line_number":456,"context_line":"            args \u003d [cmd, \u0027-t\u0027, table, \u0027-L\u0027, chain, \u0027-n\u0027, \u0027-v\u0027, \u0027-x\u0027]"},{"line_number":457,"context_line":"            if self.namespace:"},{"line_number":458,"context_line":"                args \u003d [\u0027ip\u0027, \u0027netns\u0027, \u0027exec\u0027, self.namespace] + args"},{"line_number":459,"context_line":"            current_table \u003d (self.execute(args,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAQn%2F%2F9hY%3D","line":456,"in_reply_to":"AAAAQn%2F%2F%2FX8%3D","updated":"2013-07-18 13:20:37.000000000","message":"Regarding -Z here, looking in your other patch it seems you\u0027re keeping the total and returning the delta.  Since it has to co-exist with the other method above I guess you can\u0027t use -Z here?","commit_id":"04699cf01bebad2b887948811526d92badd95511"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"ef4492e606b860286e6a7cb3a42e5632278a232a","unresolved":false,"context_lines":[{"line_number":561,"context_line":""},{"line_number":562,"context_line":"        return new_filter"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"    def get_traffic_counters_by_target(self, target_chain):"},{"line_number":565,"context_line":"        \"\"\"Return the counters of the rules with target_chain as target."},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"        Return the sum of all traffic counters of the rules which have the"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAQn%2F%2FhmM%3D","line":564,"updated":"2013-07-29 20:16:38.000000000","message":"would it make sense to add rootwrap filter to ensure that only allowed \u0027queries\u0027 will be executed?","commit_id":"70a7ef95787a90985a225f30570a1e670d1bce5f"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"unresolved":false,"context_lines":[{"line_number":561,"context_line":""},{"line_number":562,"context_line":"        return new_filter"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"    def get_traffic_counters_by_target(self, target_chain):"},{"line_number":565,"context_line":"        \"\"\"Return the counters of the rules with target_chain as target."},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"        Return the sum of all traffic counters of the rules which have the"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAQn%2F%2Fetc%3D","line":564,"in_reply_to":"AAAAQn%2F%2FhmM%3D","updated":"2013-07-30 14:53:32.000000000","message":"Not sure since the whole wrapper uses the same filter for iptables command","commit_id":"70a7ef95787a90985a225f30570a1e670d1bce5f"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"ef4492e606b860286e6a7cb3a42e5632278a232a","unresolved":false,"context_lines":[{"line_number":620,"context_line":"                           (\u0027ip6tables\u0027, \u0027nat\u0027)]"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"        for cmd, table in cmd_tables:"},{"line_number":623,"context_line":"            args \u003d [cmd, \u0027-t\u0027, table, \u0027-L\u0027, chain, \u0027-n\u0027, \u0027-v\u0027, \u0027-x\u0027]"},{"line_number":624,"context_line":"            if self.namespace:"},{"line_number":625,"context_line":"                args \u003d [\u0027ip\u0027, \u0027netns\u0027, \u0027exec\u0027, self.namespace] + args"},{"line_number":626,"context_line":"            current_table \u003d (self.execute(args,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAQn%2F%2FhmY%3D","line":623,"updated":"2013-07-29 20:16:38.000000000","message":"where is chain \u0027coming\u0027 from? We should probably check if it a valid chain first.","commit_id":"70a7ef95787a90985a225f30570a1e670d1bce5f"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"unresolved":false,"context_lines":[{"line_number":620,"context_line":"                           (\u0027ip6tables\u0027, \u0027nat\u0027)]"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"        for cmd, table in cmd_tables:"},{"line_number":623,"context_line":"            args \u003d [cmd, \u0027-t\u0027, table, \u0027-L\u0027, chain, \u0027-n\u0027, \u0027-v\u0027, \u0027-x\u0027]"},{"line_number":624,"context_line":"            if self.namespace:"},{"line_number":625,"context_line":"                args \u003d [\u0027ip\u0027, \u0027netns\u0027, \u0027exec\u0027, self.namespace] + args"},{"line_number":626,"context_line":"            current_table \u003d (self.execute(args,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAQn%2F%2FetY%3D","line":623,"in_reply_to":"AAAAQn%2F%2FhmY%3D","updated":"2013-07-30 14:53:32.000000000","message":"Done","commit_id":"70a7ef95787a90985a225f30570a1e670d1bce5f"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"unresolved":false,"context_lines":[{"line_number":565,"context_line":"        name \u003d get_chain_name(chain, wrap)"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"        cmd_tables \u003d []"},{"line_number":568,"context_line":"        for key, table in self.ipv4.iteritems():"},{"line_number":569,"context_line":"            if name in table._select_chain_set(wrap):"},{"line_number":570,"context_line":"                cmd_tables +\u003d [(\u0027iptables\u0027, key)]"},{"line_number":571,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAQn%2F%2B9Rk%3D","line":568,"updated":"2013-08-09 10:33:43.000000000","message":"cmd_tables \u003d [(\u0027iptables\u0027, key) for key, table in self.ipv4.items() if name in table._select_chain_set(wrap)]\n\n.items() is python3 compatible","commit_id":"6a0d903d560f0589c52359a8ce23660b6db16ac8"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"unresolved":false,"context_lines":[{"line_number":565,"context_line":"        name \u003d get_chain_name(chain, wrap)"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"        cmd_tables \u003d []"},{"line_number":568,"context_line":"        for key, table in self.ipv4.iteritems():"},{"line_number":569,"context_line":"            if name in table._select_chain_set(wrap):"},{"line_number":570,"context_line":"                cmd_tables +\u003d [(\u0027iptables\u0027, key)]"},{"line_number":571,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAQ3%2F%2F%2BHs%3D","line":568,"in_reply_to":"AAAAQn%2F%2B9Rk%3D","updated":"2013-08-12 11:02:14.000000000","message":"Done","commit_id":"6a0d903d560f0589c52359a8ce23660b6db16ac8"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"unresolved":false,"context_lines":[{"line_number":570,"context_line":"                cmd_tables +\u003d [(\u0027iptables\u0027, key)]"},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"        if self.use_ipv6:"},{"line_number":573,"context_line":"            for key, table in self.ipv6.iteritems():"},{"line_number":574,"context_line":"                if name in table._select_chain_set(wrap):"},{"line_number":575,"context_line":"                    cmd_tables +\u003d [(\u0027iptables\u0027, key)]"},{"line_number":576,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAQn%2F%2B9Rg%3D","line":573,"updated":"2013-08-09 10:33:43.000000000","message":"ditto","commit_id":"6a0d903d560f0589c52359a8ce23660b6db16ac8"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"unresolved":false,"context_lines":[{"line_number":570,"context_line":"                cmd_tables +\u003d [(\u0027iptables\u0027, key)]"},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"        if self.use_ipv6:"},{"line_number":573,"context_line":"            for key, table in self.ipv6.iteritems():"},{"line_number":574,"context_line":"                if name in table._select_chain_set(wrap):"},{"line_number":575,"context_line":"                    cmd_tables +\u003d [(\u0027iptables\u0027, key)]"},{"line_number":576,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAQ3%2F%2F%2BHk%3D","line":573,"in_reply_to":"AAAAQn%2F%2B9Rg%3D","updated":"2013-08-12 11:02:14.000000000","message":"Done","commit_id":"6a0d903d560f0589c52359a8ce23660b6db16ac8"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"unresolved":false,"context_lines":[{"line_number":597,"context_line":"                             root_helper\u003dself.root_helper))"},{"line_number":598,"context_line":"            current_lines \u003d current_table.split(\u0027\\n\u0027)"},{"line_number":599,"context_line":""},{"line_number":600,"context_line":"            for i in xrange(2, len(current_lines)):"},{"line_number":601,"context_line":"                line \u003d current_lines[i]"},{"line_number":602,"context_line":"                if len(line) \u003d\u003d 0:"},{"line_number":603,"context_line":"                    break"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAQn%2F%2B9Rs%3D","line":600,"updated":"2013-08-09 10:33:43.000000000","message":"for line in current_lines[2:]:\n  if not line:\n     break\n  ...","commit_id":"6a0d903d560f0589c52359a8ce23660b6db16ac8"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"unresolved":false,"context_lines":[{"line_number":597,"context_line":"                             root_helper\u003dself.root_helper))"},{"line_number":598,"context_line":"            current_lines \u003d current_table.split(\u0027\\n\u0027)"},{"line_number":599,"context_line":""},{"line_number":600,"context_line":"            for i in xrange(2, len(current_lines)):"},{"line_number":601,"context_line":"                line \u003d current_lines[i]"},{"line_number":602,"context_line":"                if len(line) \u003d\u003d 0:"},{"line_number":603,"context_line":"                    break"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAQ3%2F%2F%2BHA%3D","line":600,"in_reply_to":"AAAAQn%2F%2B9Rs%3D","updated":"2013-08-12 11:02:14.000000000","message":"Done","commit_id":"6a0d903d560f0589c52359a8ce23660b6db16ac8"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"a97b5716c738a5b57bb1ea5cca1852be28fa95be","unresolved":false,"context_lines":[{"line_number":596,"context_line":"            for line in current_lines[2:]:"},{"line_number":597,"context_line":"                if not line:"},{"line_number":598,"context_line":"                    break"},{"line_number":599,"context_line":"                data \u003d re.findall(r\u0027\\S+\u0027, line)"},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"                acc[\u0027pkts\u0027] +\u003d int(data[0])"},{"line_number":602,"context_line":"                acc[\u0027bytes\u0027] +\u003d int(data[1])"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAARn%2F%2F1Z4%3D","line":599,"updated":"2013-08-21 11:28:47.000000000","message":"Was there a reason split() was not used?\n\ndata \u003d line.split()\n\nIt should be equivalent and run much faster the regex will not be compiled on every loop iteration.","commit_id":"fc74c92801b01c85c21bc97069273ac33ca7acc8"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"a97b5716c738a5b57bb1ea5cca1852be28fa95be","unresolved":false,"context_lines":[{"line_number":582,"context_line":"    def get_traffic_counters(self, chain, wrap\u003dTrue, zero\u003dFalse):"},{"line_number":583,"context_line":"        \"\"\"Return the sum of the traffic counters of all rules of a chain.\"\"\""},{"line_number":584,"context_line":"        cmd_tables \u003d self._get_traffic_counters_cmd_tables(chain, wrap)"},{"line_number":585,"context_line":"        if len(cmd_tables) \u003d\u003d 0:"},{"line_number":586,"context_line":"            LOG.warn(_(\u0027Attempted to get traffic counters of chain %s which \u0027"},{"line_number":587,"context_line":"                       \u0027does not exist\u0027), chain)"},{"line_number":588,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2Fqag%3D","line":585,"updated":"2013-08-31 20:50:31.000000000","message":"if not cmd_tables:","commit_id":"0229020c8db3cab3e2e00a5d64901c8f1ad5bc0b"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"unresolved":false,"context_lines":[{"line_number":582,"context_line":"    def get_traffic_counters(self, chain, wrap\u003dTrue, zero\u003dFalse):"},{"line_number":583,"context_line":"        \"\"\"Return the sum of the traffic counters of all rules of a chain.\"\"\""},{"line_number":584,"context_line":"        cmd_tables \u003d self._get_traffic_counters_cmd_tables(chain, wrap)"},{"line_number":585,"context_line":"        if len(cmd_tables) \u003d\u003d 0:"},{"line_number":586,"context_line":"            LOG.warn(_(\u0027Attempted to get traffic counters of chain %s which \u0027"},{"line_number":587,"context_line":"                       \u0027does not exist\u0027), chain)"},{"line_number":588,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2FoR8%3D","line":585,"in_reply_to":"AAAASn%2F%2Fqag%3D","updated":"2013-09-02 08:08:06.000000000","message":"Done","commit_id":"0229020c8db3cab3e2e00a5d64901c8f1ad5bc0b"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":588,"context_line":"            return"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"        name \u003d get_chain_name(chain, wrap)"},{"line_number":591,"context_line":"        acc \u003d {\u0027pkts\u0027: 0, \u0027bytes\u0027: 0}"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"        for cmd, table in cmd_tables:"},{"line_number":594,"context_line":"            args \u003d [cmd, \u0027-t\u0027, table, \u0027-L\u0027, name, \u0027-n\u0027, \u0027-v\u0027, \u0027-x\u0027]"}],"source_content_type":"text/x-python","patch_set":27,"id":"AAAASn%2F%2FlxQ%3D","line":591,"updated":"2013-09-03 03:40:47.000000000","message":"nit:I prefer packets","commit_id":"5619bc7121879d36ceafceef8c9f76d27791ca6b"}],"neutron/tests/unit/test_iptables_manager.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":310,"context_line":"        acc \u003d self.iptables.get_traffic_counters(\u0027chain1\u0027)"},{"line_number":311,"context_line":"        self.assertIsNone(acc)"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    def test_get_traffic_counters(self):"},{"line_number":314,"context_line":"        iptables_dump \u003d (\u0027Chain OUTPUT (policy ACCEPT 400 packets, 65901 byte\u0027"},{"line_number":315,"context_line":"                         \u0027s)\\n    pkts      bytes target     prot opt in     \u0027"},{"line_number":316,"context_line":"                         \u0027out     source               destination         \\n\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAQn%2F%2B81c%3D","line":313,"updated":"2013-08-09 13:36:13.000000000","message":"You should also add a test_get_traffic_counters_zero() that is just like this except checks for -Z when zero\u003dTrue is passed.","commit_id":"6a0d903d560f0589c52359a8ce23660b6db16ac8"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"unresolved":false,"context_lines":[{"line_number":310,"context_line":"        acc \u003d self.iptables.get_traffic_counters(\u0027chain1\u0027)"},{"line_number":311,"context_line":"        self.assertIsNone(acc)"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    def test_get_traffic_counters(self):"},{"line_number":314,"context_line":"        iptables_dump \u003d (\u0027Chain OUTPUT (policy ACCEPT 400 packets, 65901 byte\u0027"},{"line_number":315,"context_line":"                         \u0027s)\\n    pkts      bytes target     prot opt in     \u0027"},{"line_number":316,"context_line":"                         \u0027out     source               destination         \\n\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAQ3%2F%2F96w%3D","line":313,"in_reply_to":"AAAAQn%2F%2B81c%3D","updated":"2013-08-12 11:02:14.000000000","message":"Done","commit_id":"6a0d903d560f0589c52359a8ce23660b6db16ac8"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":471,"context_line":"                         \u0027400    65901 chain1     all  --  *      *       0.0\u0027"},{"line_number":472,"context_line":"                         \u0027.0.0/0            0.0.0.0/0           \\n     400   \u0027"},{"line_number":473,"context_line":"                         \u002765901 chain2     all  --  *      *       0.0.0.0/0 \u0027"},{"line_number":474,"context_line":"                         \u00270.0.0.0/0           \\n\u0027)"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"        self.iptables.execute([\u0027iptables\u0027, \u0027-t\u0027, \u0027filter\u0027, \u0027-L\u0027, \u0027OUTPUT\u0027,"},{"line_number":477,"context_line":"                               \u0027-n\u0027, \u0027-v\u0027, \u0027-x\u0027],"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2F7V0%3D","line":474,"updated":"2013-08-27 21:53:12.000000000","message":"Sorry for the last-minute nit, but is it possible to format this dump output so it\u0027s easily parseable, like the output of iptables would be?  The other ones in the file are more human-readable.  I realize these could be over 80 chars wide which makes that difficult.","commit_id":"0229020c8db3cab3e2e00a5d64901c8f1ad5bc0b"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"unresolved":false,"context_lines":[{"line_number":471,"context_line":"                         \u0027400    65901 chain1     all  --  *      *       0.0\u0027"},{"line_number":472,"context_line":"                         \u0027.0.0/0            0.0.0.0/0           \\n     400   \u0027"},{"line_number":473,"context_line":"                         \u002765901 chain2     all  --  *      *       0.0.0.0/0 \u0027"},{"line_number":474,"context_line":"                         \u00270.0.0.0/0           \\n\u0027)"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"        self.iptables.execute([\u0027iptables\u0027, \u0027-t\u0027, \u0027filter\u0027, \u0027-L\u0027, \u0027OUTPUT\u0027,"},{"line_number":477,"context_line":"                               \u0027-n\u0027, \u0027-v\u0027, \u0027-x\u0027],"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2FoOk%3D","line":474,"in_reply_to":"AAAASn%2F%2F7V0%3D","updated":"2013-09-02 08:08:06.000000000","message":"I tried to address your remark, as you said not easy to get it more human-readable, however in the next patch set, it seems to be better.","commit_id":"0229020c8db3cab3e2e00a5d64901c8f1ad5bc0b"}],"quantum/agent/linux/iptables_manager.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"7137d0cbf9eabe808df0c3c32c9108e57113e75c","unresolved":false,"context_lines":[{"line_number":397,"context_line":"    def get_traffic_counters(self, chain):"},{"line_number":398,"context_line":"        acc \u003d {\u0027pkts\u0027: 0, \u0027bytes\u0027: 0}"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        s \u003d [(\u0027iptables\u0027, \u0027filter\u0027)]"},{"line_number":401,"context_line":"        if self.use_ipv6:"},{"line_number":402,"context_line":"            s +\u003d [(\u0027ip6tables\u0027, \u0027filter\u0027)]"},{"line_number":403,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2FTXg%3D","line":400,"updated":"2013-07-04 14:02:29.000000000","message":"please use more obvious var names","commit_id":"966a1f79319e9a634671620b5f727e11f059fb67"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"change_message_id":"69c36e2370163d56bc5811ec56d553403237f0a2","unresolved":false,"context_lines":[{"line_number":397,"context_line":"    def get_traffic_counters(self, chain):"},{"line_number":398,"context_line":"        acc \u003d {\u0027pkts\u0027: 0, \u0027bytes\u0027: 0}"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        s \u003d [(\u0027iptables\u0027, \u0027filter\u0027)]"},{"line_number":401,"context_line":"        if self.use_ipv6:"},{"line_number":402,"context_line":"            s +\u003d [(\u0027ip6tables\u0027, \u0027filter\u0027)]"},{"line_number":403,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2FTTQ%3D","line":400,"in_reply_to":"AAAAPn%2F%2FTXg%3D","updated":"2013-07-04 14:35:02.000000000","message":"Done","commit_id":"966a1f79319e9a634671620b5f727e11f059fb67"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"8f6921540d0de187274103ef13ea29a023e20712","unresolved":false,"context_lines":[{"line_number":404,"context_line":"                           (\u0027ip6tables\u0027, \u0027nat\u0027)]"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"        for cmd, table in cmd_tables:"},{"line_number":407,"context_line":"            args \u003d [cmd, \u0027-L\u0027, \u0027-nvx\u0027, \u0027-t\u0027, table]"},{"line_number":408,"context_line":"            if self.namespace:"},{"line_number":409,"context_line":"                args \u003d [\u0027ip\u0027, \u0027netns\u0027, \u0027exec\u0027, self.namespace] + args"},{"line_number":410,"context_line":"            current_table \u003d (self.execute(args,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2F9KI%3D","line":407,"updated":"2013-07-08 16:15:07.000000000","message":"Does this \u0027-nvx\u0027 work?  You might need to do \u0027-n\u0027, \u0027-v\u0027, \u0027-x\u0027.  Also, why can\u0027t you pass the chain name, like \u0027-L\u0027, chain,... ?\n\nAnd, just a nit, but typically \u0027-t table\u0027 is the first argument to iptables.","commit_id":"1985b74db44802d7320b2dc43ace9a0b0a9f1462"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"change_message_id":"f4c2fb7817f4ed2385e0ed7a14d897f4c1a7c5f9","unresolved":false,"context_lines":[{"line_number":404,"context_line":"                           (\u0027ip6tables\u0027, \u0027nat\u0027)]"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"        for cmd, table in cmd_tables:"},{"line_number":407,"context_line":"            args \u003d [cmd, \u0027-L\u0027, \u0027-nvx\u0027, \u0027-t\u0027, table]"},{"line_number":408,"context_line":"            if self.namespace:"},{"line_number":409,"context_line":"                args \u003d [\u0027ip\u0027, \u0027netns\u0027, \u0027exec\u0027, self.namespace] + args"},{"line_number":410,"context_line":"            current_table \u003d (self.execute(args,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2F9AA%3D","line":407,"in_reply_to":"AAAAP3%2F%2F9KI%3D","updated":"2013-07-08 17:10:31.000000000","message":"Yes -nvx works, but I\u0027ll spit into \u0027-n\u0027, \u0027-v\u0027, \u0027-x\u0027. \nFor \u0027-L\u0027, it\u0027s because I want to count the traffic of the rules with the chain as target, not the rules of the chain.","commit_id":"1985b74db44802d7320b2dc43ace9a0b0a9f1462"}],"quantum/tests/unit/test_iptables_manager.py":[{"author":{"_account_id":2583,"name":"Ante Karamatić","email":"ante.karamatic@canonical.com","username":"ivoks"},"change_message_id":"e2b8a3692584620af742640b42da0450cf6ae302","unresolved":false,"context_lines":[{"line_number":308,"context_line":"                         \u0027ll  --  *      *       0.0.0.0/0            0.0.0.0/\u0027"},{"line_number":309,"context_line":"                         \u00270           \\n\\nChain chain1 (2 references)\\n    pkt\u0027"},{"line_number":310,"context_line":"                         \u0027s      bytes target     prot opt in     out     sour\u0027"},{"line_number":311,"context_line":"                         \u0027ce               destination         \\n\\n\u0027)"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"        self.iptables.execute([\u0027iptables\u0027, \u0027-L\u0027, \u0027-nvx\u0027, \u0027-t\u0027, \u0027filter\u0027],"},{"line_number":314,"context_line":"                              root_helper\u003dself.root_helper"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FSQ0%3D","line":311,"updated":"2013-07-05 06:43:39.000000000","message":"Maybe also fake chain2 in iptables_dump, just to make sure later on get_traffic_counters() doesn\u0027t count everything, but just chain1?","commit_id":"d3052041d0d772dd3818dd4e46c80b5e692eb09d"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"change_message_id":"7d942fe68f7422194c727dc3067d1a0d463f4d9b","unresolved":false,"context_lines":[{"line_number":308,"context_line":"                         \u0027ll  --  *      *       0.0.0.0/0            0.0.0.0/\u0027"},{"line_number":309,"context_line":"                         \u00270           \\n\\nChain chain1 (2 references)\\n    pkt\u0027"},{"line_number":310,"context_line":"                         \u0027s      bytes target     prot opt in     out     sour\u0027"},{"line_number":311,"context_line":"                         \u0027ce               destination         \\n\\n\u0027)"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"        self.iptables.execute([\u0027iptables\u0027, \u0027-L\u0027, \u0027-nvx\u0027, \u0027-t\u0027, \u0027filter\u0027],"},{"line_number":314,"context_line":"                              root_helper\u003dself.root_helper"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FRuE%3D","line":311,"in_reply_to":"AAAAPn%2F%2FSQ0%3D","updated":"2013-07-05 11:37:02.000000000","message":"Done","commit_id":"d3052041d0d772dd3818dd4e46c80b5e692eb09d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"8f6921540d0de187274103ef13ea29a023e20712","unresolved":false,"context_lines":[{"line_number":313,"context_line":"                         \u0027t     source               destination         \\n\\n\u0027"},{"line_number":314,"context_line":"                         \u0027Chain chain2 (1 references)\\n    pkts      bytes ta\u0027"},{"line_number":315,"context_line":"                         \u0027rget     prot opt in     out     source            \u0027"},{"line_number":316,"context_line":"                         \u0027destination  \\n\u0027)"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"        self.iptables.execute([\u0027iptables\u0027, \u0027-L\u0027, \u0027-nvx\u0027, \u0027-t\u0027, \u0027filter\u0027],"},{"line_number":319,"context_line":"                              root_helper\u003dself.root_helper"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2F9Ig%3D","line":316,"updated":"2013-07-08 16:15:07.000000000","message":"It would be more readable if this blob was displayed as iptables outputs it, not wrapped like this, as it makes parsing it difficult, and future changes will affect the entire thing.","commit_id":"1985b74db44802d7320b2dc43ace9a0b0a9f1462"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"change_message_id":"f4c2fb7817f4ed2385e0ed7a14d897f4c1a7c5f9","unresolved":false,"context_lines":[{"line_number":313,"context_line":"                         \u0027t     source               destination         \\n\\n\u0027"},{"line_number":314,"context_line":"                         \u0027Chain chain2 (1 references)\\n    pkts      bytes ta\u0027"},{"line_number":315,"context_line":"                         \u0027rget     prot opt in     out     source            \u0027"},{"line_number":316,"context_line":"                         \u0027destination  \\n\u0027)"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"        self.iptables.execute([\u0027iptables\u0027, \u0027-L\u0027, \u0027-nvx\u0027, \u0027-t\u0027, \u0027filter\u0027],"},{"line_number":319,"context_line":"                              root_helper\u003dself.root_helper"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2F8%2Bo%3D","line":316,"in_reply_to":"AAAAP3%2F%2F9Ig%3D","updated":"2013-07-08 17:10:31.000000000","message":"I did it like the other tests, but I can try to do it more readable.","commit_id":"1985b74db44802d7320b2dc43ace9a0b0a9f1462"}]}
