)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"df18369ee6fde305721f0274323b9977ca90f673","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"In case of: add_metering_label_rule fail to update iptables rule"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In case of add_metering_label_rule arrive at metering-agent before"},{"line_number":10,"context_line":"add_metering_label, it fail to update iptables rule, as lack of"},{"line_number":11,"context_line":"depended chain. The commit will check iptables exist depended chain"},{"line_number":12,"context_line":"or not, lacking of depended chain will be create at first."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I5d4f90d7aaffc7121b389903df79bb1a9fe86469"},{"line_number":15,"context_line":"Closes-Bug: #1617248"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fa7ab95a_78684cf6","line":12,"range":{"start_line":9,"start_character":0,"end_line":12,"end_character":58},"updated":"2016-08-26 17:09:40.000000000","message":"This seems to have a few grammatical errors, how does this sound?\n\n\"This commit will change the behavior of _process_metering_rule_action when action\u003d\u0027create\u0027. It will now check if there is an existing chain rule in iptables_manager.ipv4 for the iptables_manager\u0027s label_chain when creating a new rule and if not then create and add the missing rule in iptables_manager.ipv4.\"","commit_id":"0b435b399037a73c31d8b3cb7a590deec266fe61"}],"neutron/agent/linux/iptables_manager.py":[{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"df18369ee6fde305721f0274323b9977ca90f673","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        for rule in rules:"},{"line_number":274,"context_line":"            self.rules.remove(rule)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def is_exist_chain(self, chain, wrap\u003dTrue):"},{"line_number":277,"context_line":"        if wrap:"},{"line_number":278,"context_line":"            return chain in self.chains"},{"line_number":279,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_c246c522","line":276,"range":{"start_line":276,"start_character":29,"end_line":276,"end_character":34},"updated":"2016-08-26 17:09:40.000000000","message":"It also looks like chain is added to self.chains by name. The way you\u0027re using it is correct, but as you can see from the _get_chain_rules method \"chain \u003d get_chain_name\" it can be confusing. To be safe, using get_chain_name won\u0027t effect the string if it is already the sliced size so we should do that.","commit_id":"0b435b399037a73c31d8b3cb7a590deec266fe61"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"df18369ee6fde305721f0274323b9977ca90f673","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        for rule in rules:"},{"line_number":274,"context_line":"            self.rules.remove(rule)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def is_exist_chain(self, chain, wrap\u003dTrue):"},{"line_number":277,"context_line":"        if wrap:"},{"line_number":278,"context_line":"            return chain in self.chains"},{"line_number":279,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_a90c4c95","line":276,"range":{"start_line":276,"start_character":8,"end_line":276,"end_character":22},"updated":"2016-08-26 17:09:40.000000000","message":"This name makes it sound like exist_chain is a noun, exist is a verb, I think what you want is_existing_chain. I suggest any of the following is_existing_chain, is_in_chains, contains_chain?","commit_id":"0b435b399037a73c31d8b3cb7a590deec266fe61"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7791aa0dc47f6ef2eb65c62367c1da408e376bb2","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        for rule in rules:"},{"line_number":274,"context_line":"            self.rules.remove(rule)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def is_exist_chain(self, chain, wrap\u003dTrue):"},{"line_number":277,"context_line":"        if wrap:"},{"line_number":278,"context_line":"            return chain in self.chains"},{"line_number":279,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_7ac5968c","line":276,"range":{"start_line":276,"start_character":29,"end_line":276,"end_character":34},"in_reply_to":"fa7ab95a_c246c522","updated":"2016-08-26 20:58:29.000000000","message":"I would agree with Trevor on the name, something like:\n\ndef chain_exists(self, name, wrap\u003dTrue):\n\nAnd just just duplicate what remove_chain() does:\n\nname \u003d get_chain_name(name, wrap)\nchain_set \u003d self._select_chain_set(wrap)\nreturn name in chain_set","commit_id":"0b435b399037a73c31d8b3cb7a590deec266fe61"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7567457074a02b562436d5a25d40349562867366","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        for rule in rules:"},{"line_number":274,"context_line":"            self.rules.remove(rule)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def is_existing_chain(self, name, wrap\u003dTrue):"},{"line_number":277,"context_line":"        chain_set \u003d self._select_chain_set(wrap)"},{"line_number":278,"context_line":"        return name in chain_set"},{"line_number":279,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_02dbe64f","line":276,"updated":"2016-08-29 18:36:09.000000000","message":"chain_exists please.","commit_id":"1a266d9f1b3d4d62d1efd3c46d1e525460dc7c6d"},{"author":{"_account_id":19178,"name":"Zhengwei Gao","email":"gaozhengwei1@letv.com","username":"gaozhengwei"},"change_message_id":"874ff24bb822ff7d4e49f418879b7dca521b1029","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        for rule in rules:"},{"line_number":274,"context_line":"            self.rules.remove(rule)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def is_existing_chain(self, name, wrap\u003dTrue):"},{"line_number":277,"context_line":"        chain_set \u003d self._select_chain_set(wrap)"},{"line_number":278,"context_line":"        return name in chain_set"},{"line_number":279,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_96880ac7","line":276,"in_reply_to":"fa7ab95a_02dbe64f","updated":"2016-08-30 02:34:09.000000000","message":"Done","commit_id":"1a266d9f1b3d4d62d1efd3c46d1e525460dc7c6d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7567457074a02b562436d5a25d40349562867366","unresolved":false,"context_lines":[{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def is_existing_chain(self, name, wrap\u003dTrue):"},{"line_number":277,"context_line":"        chain_set \u003d self._select_chain_set(wrap)"},{"line_number":278,"context_line":"        return name in chain_set"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"class IptablesManager(object):"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_c2d49e21","line":278,"updated":"2016-08-29 18:36:09.000000000","message":"You really need to do what remove_chain() does:\n\nname \u003d get_chain_name(name, wrap)\nchain_set \u003d self._select_chain_set(wrap)\nreturn name in chain_set\n\nSkipping that first step might not cause a match since it could truncate the chain by a few characters.","commit_id":"1a266d9f1b3d4d62d1efd3c46d1e525460dc7c6d"},{"author":{"_account_id":19178,"name":"Zhengwei Gao","email":"gaozhengwei1@letv.com","username":"gaozhengwei"},"change_message_id":"874ff24bb822ff7d4e49f418879b7dca521b1029","unresolved":false,"context_lines":[{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def is_existing_chain(self, name, wrap\u003dTrue):"},{"line_number":277,"context_line":"        chain_set \u003d self._select_chain_set(wrap)"},{"line_number":278,"context_line":"        return name in chain_set"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"class IptablesManager(object):"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_31c828a8","line":278,"in_reply_to":"fa7ab95a_c2d49e21","updated":"2016-08-30 02:34:09.000000000","message":"The parameter chain name is retrieved by get_chain_name before invoke since method invoke is_existing_chain use chain name do other thing, e.g update_iptable_rule \n\nThanks.","commit_id":"1a266d9f1b3d4d62d1efd3c46d1e525460dc7c6d"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"026102a8c2ad8dc9702f7fd43d4e68a7ce81f997","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        for rule in rules:"},{"line_number":274,"context_line":"            self.rules.remove(rule)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def chain_exists(self, chain_name, wrap\u003dTrue):"},{"line_number":277,"context_line":"        chain_set \u003d self._select_chain_set(wrap)"},{"line_number":278,"context_line":"        return chain_name in chain_set"},{"line_number":279,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa7ab95a_f046f34d","line":276,"updated":"2016-09-01 16:03:10.000000000","message":"From your previous comment \"The parameter chain name is retrieved by get_chain_name before invoke\" in this function that is not true, and this function will fail if I call the function without using get_chain_name beforehand, this can be confusing. I see you updated the parameter to chain_name which is better but most functions in this class use get_chain_name in the function and NOT before because it becomes easier to use, this way it works with both chains and chain_names. So that is why we\u0027re asking for this change.","commit_id":"d15a35352f02485a5495a1e782e51fca840286f8"},{"author":{"_account_id":19178,"name":"Zhengwei Gao","email":"gaozhengwei1@letv.com","username":"gaozhengwei"},"change_message_id":"6c9a039e5f42a8c138ffea5d12e70ecfe8a2de83","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        for rule in rules:"},{"line_number":274,"context_line":"            self.rules.remove(rule)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def chain_exists(self, chain_name, wrap\u003dTrue):"},{"line_number":277,"context_line":"        chain_set \u003d self._select_chain_set(wrap)"},{"line_number":278,"context_line":"        return chain_name in chain_set"},{"line_number":279,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a89bdaa_2e306056","line":276,"in_reply_to":"fa7ab95a_f046f34d","updated":"2016-09-05 02:13:41.000000000","message":"Ok, thanks.","commit_id":"d15a35352f02485a5495a1e782e51fca840286f8"}],"neutron/services/metering/drivers/iptables/iptables_driver.py":[{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"df18369ee6fde305721f0274323b9977ca90f673","unresolved":false,"context_lines":[{"line_number":298,"context_line":"                                                              RULE + label_id,"},{"line_number":299,"context_line":"                                                              wrap\u003dFalse)"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"                need_create \u003d (action \u003d\u003d \u0027create\u0027 and not"},{"line_number":302,"context_line":"                rm.iptables_manager.ipv4[\u0027filter\u0027].is_exist_chain(label_chain,"},{"line_number":303,"context_line":"                                                                  wrap\u003dFalse))"},{"line_number":304,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_9d26e266","line":301,"range":{"start_line":301,"start_character":16,"end_line":301,"end_character":27},"updated":"2016-08-26 17:09:40.000000000","message":"renaming to is_missing_chain_rule sounds better.","commit_id":"0b435b399037a73c31d8b3cb7a590deec266fe61"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"df18369ee6fde305721f0274323b9977ca90f673","unresolved":false,"context_lines":[{"line_number":303,"context_line":"                                                                  wrap\u003dFalse))"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"                if need_create:"},{"line_number":306,"context_line":"                    rm.iptables_manager.ipv4[\u0027filter\u0027].add_chain(label_chain)"},{"line_number":307,"context_line":"                    rm.iptables_manager.ipv4[\u0027filter\u0027].add_chain(rules_chain)"},{"line_number":308,"context_line":"                    rm.iptables_manager.ipv4[\u0027filter\u0027].add_rule(TOP_CHAIN,"},{"line_number":309,"context_line":"                                                                \u0027-j \u0027 +"},{"line_number":310,"context_line":"                                                                rules_chain,"},{"line_number":311,"context_line":"                                                                wrap\u003dFalse)"},{"line_number":312,"context_line":"                    rm.iptables_manager.ipv4[\u0027filter\u0027].add_rule(label_chain,"},{"line_number":313,"context_line":"                                                                \u0027\u0027,"},{"line_number":314,"context_line":"                                                                wrap\u003dFalse)"},{"line_number":315,"context_line":"                    rm.metering_labels[label_id] \u003d label"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"                rule \u003d label.get(\u0027rule\u0027)"},{"line_number":318,"context_line":"                if rule:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_1d4c926f","line":315,"range":{"start_line":306,"start_character":20,"end_line":315,"end_character":56},"updated":"2016-08-26 17:09:40.000000000","message":"This looks like something that can be reused and it can be better described in a function, something like \"_create_iptables_chain_rule\"","commit_id":"0b435b399037a73c31d8b3cb7a590deec266fe61"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7567457074a02b562436d5a25d40349562867366","unresolved":false,"context_lines":[{"line_number":199,"context_line":"            labels \u003d router.get(constants.METERING_LABEL_KEY, [])"},{"line_number":200,"context_line":"            for label in labels:"},{"line_number":201,"context_line":"                label_id \u003d label[\u0027id\u0027]"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"                label_chain \u003d iptables_manager.get_chain_name(WRAP_NAME +"},{"line_number":204,"context_line":"                                                              LABEL + label_id,"},{"line_number":205,"context_line":"                                                              wrap\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_e2a7e2ba","side":"PARENT","line":202,"updated":"2016-08-29 18:36:09.000000000","message":"Please don\u0027t make any extra formatting changes","commit_id":"e2f96d7b587bd552d0f02b908683ac5d4a0db559"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7567457074a02b562436d5a25d40349562867366","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                                                              RULE + label_id,"},{"line_number":208,"context_line":"                                                              wrap\u003dFalse)"},{"line_number":209,"context_line":"                self._create_metering_label_chain(rm, label_chain, rules_chain)"},{"line_number":210,"context_line":"                rm.metering_labels[label_id] \u003d label"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"                rules \u003d label.get(\u0027rules\u0027)"},{"line_number":213,"context_line":"                if rules:"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_0297663a","line":210,"updated":"2016-08-29 18:36:09.000000000","message":"Does this have to move from L228 ?","commit_id":"1a266d9f1b3d4d62d1efd3c46d1e525460dc7c6d"},{"author":{"_account_id":19178,"name":"Zhengwei Gao","email":"gaozhengwei1@letv.com","username":"gaozhengwei"},"change_message_id":"874ff24bb822ff7d4e49f418879b7dca521b1029","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                                                              RULE + label_id,"},{"line_number":208,"context_line":"                                                              wrap\u003dFalse)"},{"line_number":209,"context_line":"                self._create_metering_label_chain(rm, label_chain, rules_chain)"},{"line_number":210,"context_line":"                rm.metering_labels[label_id] \u003d label"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"                rules \u003d label.get(\u0027rules\u0027)"},{"line_number":213,"context_line":"                if rules:"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_51cdacb5","line":210,"in_reply_to":"fa7ab95a_0297663a","updated":"2016-08-30 02:34:09.000000000","message":"Done","commit_id":"1a266d9f1b3d4d62d1efd3c46d1e525460dc7c6d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7567457074a02b562436d5a25d40349562867366","unresolved":false,"context_lines":[{"line_number":299,"context_line":""},{"line_number":300,"context_line":"                filter_table \u003d rm.iptables_manager.ipv4[\u0027filter\u0027]"},{"line_number":301,"context_line":"                is_missing_chain \u003d (action \u003d\u003d \u0027create\u0027 and not"},{"line_number":302,"context_line":"                filter_table.is_existing_chain(label_chain, wrap\u003dFalse))"},{"line_number":303,"context_line":"                if is_missing_chain:"},{"line_number":304,"context_line":"                    self._create_metering_label_chain(rm,"},{"line_number":305,"context_line":"                                                      label_chain,"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_a2a87a78","line":302,"updated":"2016-08-29 18:36:09.000000000","message":"indentation looks wrong here","commit_id":"1a266d9f1b3d4d62d1efd3c46d1e525460dc7c6d"},{"author":{"_account_id":19178,"name":"Zhengwei Gao","email":"gaozhengwei1@letv.com","username":"gaozhengwei"},"change_message_id":"874ff24bb822ff7d4e49f418879b7dca521b1029","unresolved":false,"context_lines":[{"line_number":299,"context_line":""},{"line_number":300,"context_line":"                filter_table \u003d rm.iptables_manager.ipv4[\u0027filter\u0027]"},{"line_number":301,"context_line":"                is_missing_chain \u003d (action \u003d\u003d \u0027create\u0027 and not"},{"line_number":302,"context_line":"                filter_table.is_existing_chain(label_chain, wrap\u003dFalse))"},{"line_number":303,"context_line":"                if is_missing_chain:"},{"line_number":304,"context_line":"                    self._create_metering_label_chain(rm,"},{"line_number":305,"context_line":"                                                      label_chain,"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_f13880a2","line":302,"in_reply_to":"fa7ab95a_a2a87a78","updated":"2016-08-30 02:34:09.000000000","message":"Done","commit_id":"1a266d9f1b3d4d62d1efd3c46d1e525460dc7c6d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c2ba311ef2d82c6b859eda6b3f69e3887cf3a4c0","unresolved":false,"context_lines":[{"line_number":299,"context_line":"                                                              RULE + label_id,"},{"line_number":300,"context_line":"                                                              wrap\u003dFalse)"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"                filter_table \u003d rm.iptables_manager.ipv4[\u0027filter\u0027]"},{"line_number":303,"context_line":"                is_missing_chain \u003d (action \u003d\u003d \u0027create\u0027 and"},{"line_number":304,"context_line":"                                    not filter_table.chain_exists(WRAP_NAME +"},{"line_number":305,"context_line":"                                                                  LABEL +"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_4496f7f0","line":302,"updated":"2016-09-21 13:16:59.000000000","message":"This can be assigned outside the loop since it doesn\u0027t change every time like some of the other variables.","commit_id":"65a855baa470c7a1b7f84883b5606124f492ee06"},{"author":{"_account_id":19178,"name":"Zhengwei Gao","email":"gaozhengwei1@letv.com","username":"gaozhengwei"},"change_message_id":"5678a90cca7c7b43d63abab6b2960ee5f35d0262","unresolved":false,"context_lines":[{"line_number":299,"context_line":"                                                              RULE + label_id,"},{"line_number":300,"context_line":"                                                              wrap\u003dFalse)"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"                filter_table \u003d rm.iptables_manager.ipv4[\u0027filter\u0027]"},{"line_number":303,"context_line":"                is_missing_chain \u003d (action \u003d\u003d \u0027create\u0027 and"},{"line_number":304,"context_line":"                                    not filter_table.chain_exists(WRAP_NAME +"},{"line_number":305,"context_line":"                                                                  LABEL +"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a8bc5a2_820a01d1","line":302,"in_reply_to":"7a8ec9b2_4496f7f0","updated":"2016-09-23 03:49:48.000000000","message":"Done","commit_id":"65a855baa470c7a1b7f84883b5606124f492ee06"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c2ba311ef2d82c6b859eda6b3f69e3887cf3a4c0","unresolved":false,"context_lines":[{"line_number":305,"context_line":"                                                                  LABEL +"},{"line_number":306,"context_line":"                                                                  label_id,"},{"line_number":307,"context_line":"                                                                  wrap\u003dFalse))"},{"line_number":308,"context_line":"                if is_missing_chain:"},{"line_number":309,"context_line":"                    self._create_metering_label_chain(rm,"},{"line_number":310,"context_line":"                                                      label_chain,"},{"line_number":311,"context_line":"                                                      rules_chain)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_9f5a0cf1","line":308,"updated":"2016-09-21 13:16:59.000000000","message":"So do we actually have to check it exists, or can we just create it?  I know add_chain adds to a set, so we won\u0027t have duplicates, but if this code adds chains/rules, then the code on L210 does it too is there a problem with the duplicate rule?  If not then this one doesn\u0027t need the check, right?  Just trying to simplify things.","commit_id":"65a855baa470c7a1b7f84883b5606124f492ee06"},{"author":{"_account_id":19178,"name":"Zhengwei Gao","email":"gaozhengwei1@letv.com","username":"gaozhengwei"},"change_message_id":"5678a90cca7c7b43d63abab6b2960ee5f35d0262","unresolved":false,"context_lines":[{"line_number":305,"context_line":"                                                                  LABEL +"},{"line_number":306,"context_line":"                                                                  label_id,"},{"line_number":307,"context_line":"                                                                  wrap\u003dFalse))"},{"line_number":308,"context_line":"                if is_missing_chain:"},{"line_number":309,"context_line":"                    self._create_metering_label_chain(rm,"},{"line_number":310,"context_line":"                                                      label_chain,"},{"line_number":311,"context_line":"                                                      rules_chain)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a8bc5a2_224a0dc6","line":308,"in_reply_to":"7a8ec9b2_9f5a0cf1","updated":"2016-09-23 03:49:48.000000000","message":"Right, the code of L210 need the check avoid duplicate rule.","commit_id":"65a855baa470c7a1b7f84883b5606124f492ee06"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"10fa73b8c537f7d78b815cf6690f2a2af025c7b7","unresolved":false,"context_lines":[{"line_number":207,"context_line":""},{"line_number":208,"context_line":"                rules_chain \u003d iptables_manager.get_chain_name(WRAP_NAME +"},{"line_number":209,"context_line":"                                                              RULE + label_id,"},{"line_number":210,"context_line":"                                                              wrap\u003dFalse)"},{"line_number":211,"context_line":"                is_missing_chain \u003d not filter_table.chain_exists(WRAP_NAME +"},{"line_number":212,"context_line":"                                                                 LABEL +"},{"line_number":213,"context_line":"                                                                 label_id,"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa6399be_d7d3c536","line":210,"updated":"2016-10-12 13:50:42.000000000","message":"Just getting back to this review, but have a question.  If there is not a metering label with the given id here, does that also indicate things haven\u0027t been setup?  For example,\n\nexists \u003d rm.metering_labels.get(label_id)\nif not exists:\n    create it\n\nThat\u0027s quicker than calling into the iptables_manager, I just don\u0027t know if it works the same.","commit_id":"41042afc09e94c4ebfa222b9779d8aef4759259a"},{"author":{"_account_id":19178,"name":"Zhengwei Gao","email":"gaozhengwei1@letv.com","username":"gaozhengwei"},"change_message_id":"c88cfaa8e1b8941e8cd26767d5c4f4c5f8b09ead","unresolved":false,"context_lines":[{"line_number":207,"context_line":""},{"line_number":208,"context_line":"                rules_chain \u003d iptables_manager.get_chain_name(WRAP_NAME +"},{"line_number":209,"context_line":"                                                              RULE + label_id,"},{"line_number":210,"context_line":"                                                              wrap\u003dFalse)"},{"line_number":211,"context_line":"                is_missing_chain \u003d not filter_table.chain_exists(WRAP_NAME +"},{"line_number":212,"context_line":"                                                                 LABEL +"},{"line_number":213,"context_line":"                                                                 label_id,"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa6399be_db0f552c","line":210,"in_reply_to":"fa6399be_d7d3c536","updated":"2016-10-13 02:26:15.000000000","message":"Patch to fix the case: notification from create rule arrive at metering-agent before notification from create label, it may occurs for many neutron-server nodes or in one transcation create  meter-label and meter-rule.","commit_id":"41042afc09e94c4ebfa222b9779d8aef4759259a"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"dadc0abd9d7882d6384b8252c3bf448b47a8f2ec","unresolved":false,"context_lines":[{"line_number":207,"context_line":""},{"line_number":208,"context_line":"                rules_chain \u003d iptables_manager.get_chain_name(WRAP_NAME +"},{"line_number":209,"context_line":"                                                              RULE + label_id,"},{"line_number":210,"context_line":"                                                              wrap\u003dFalse)"},{"line_number":211,"context_line":"                is_missing_chain \u003d not filter_table.chain_exists(WRAP_NAME +"},{"line_number":212,"context_line":"                                                                 LABEL +"},{"line_number":213,"context_line":"                                                                 label_id,"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa6399be_e6f527ed","line":210,"in_reply_to":"fa6399be_db0f552c","updated":"2016-10-14 01:35:29.000000000","message":"Sorry, I don\u0027t understand your comment exactly.\n\nJust from seeing L219 and L319 it seems you are setting the label, so I assumed it was not previously set?","commit_id":"41042afc09e94c4ebfa222b9779d8aef4759259a"}],"neutron/tests/unit/services/metering/drivers/test_iptables.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c2ba311ef2d82c6b859eda6b3f69e3887cf3a4c0","unresolved":false,"context_lines":[{"line_number":83,"context_line":"     \u0027tenant_id\u0027: \u00276c5f5d2a1fa2441e88e35422926f48e8\u0027},"},{"line_number":84,"context_line":"]"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"TEST_NEW_ROUTERS \u003d ["},{"line_number":87,"context_line":"    {\u0027_metering_labels\u0027: ["},{"line_number":88,"context_line":"        {\u0027id\u0027: \u00270d8e1786-3f4e-4e9c-a7f3-7067607f68fa\u0027,"},{"line_number":89,"context_line":"         \u0027rule\u0027: {"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_ff68d489","line":86,"updated":"2016-09-21 13:16:59.000000000","message":"This doesn\u0027t seem to be used.","commit_id":"65a855baa470c7a1b7f84883b5606124f492ee06"},{"author":{"_account_id":19178,"name":"Zhengwei Gao","email":"gaozhengwei1@letv.com","username":"gaozhengwei"},"change_message_id":"5678a90cca7c7b43d63abab6b2960ee5f35d0262","unresolved":false,"context_lines":[{"line_number":83,"context_line":"     \u0027tenant_id\u0027: \u00276c5f5d2a1fa2441e88e35422926f48e8\u0027},"},{"line_number":84,"context_line":"]"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"TEST_NEW_ROUTERS \u003d ["},{"line_number":87,"context_line":"    {\u0027_metering_labels\u0027: ["},{"line_number":88,"context_line":"        {\u0027id\u0027: \u00270d8e1786-3f4e-4e9c-a7f3-7067607f68fa\u0027,"},{"line_number":89,"context_line":"         \u0027rule\u0027: {"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a8bc5a2_c28889ea","line":86,"in_reply_to":"7a8ec9b2_ff68d489","updated":"2016-09-23 03:49:48.000000000","message":"Done","commit_id":"65a855baa470c7a1b7f84883b5606124f492ee06"}]}
