)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7ad81af0cbf451ee65d9ef5c52fbca8f5a658ea0","unresolved":true,"context_lines":[{"line_number":16,"context_line":"integration bridge during the initial transient period."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: Ie2e4441f766947a2164dec2d1555c7049428903f"},{"line_number":19,"context_line":"Related-Bug: #1934917"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"dceba339_180e02c0","line":19,"updated":"2021-08-18 07:54:17.000000000","message":"Why just \"Related-Bug\" and not \"Close-Bug\"?","commit_id":"ad0531c376f553fbb1f970956780d276051a4f78"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"28a0b298d02d1d6fdb3a0b0c8d0433b35f3ae8d2","unresolved":true,"context_lines":[{"line_number":16,"context_line":"integration bridge during the initial transient period."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: Ie2e4441f766947a2164dec2d1555c7049428903f"},{"line_number":19,"context_line":"Related-Bug: #1934917"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"7fec4eb5_bc8b9e85","line":19,"in_reply_to":"dceba339_180e02c0","updated":"2021-08-18 13:34:58.000000000","message":"Good question. Please check [1]. There I present two actions to be taken (two patches to be implemented). This is the first one.\n\n[1]https://bugs.launchpad.net/neutron/+bug/1934917/comments/5","commit_id":"ad0531c376f553fbb1f970956780d276051a4f78"}],"neutron/agent/linux/openvswitch_firewall/firewall.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7ad81af0cbf451ee65d9ef5c52fbca8f5a658ea0","unresolved":true,"context_lines":[{"line_number":297,"context_line":"            except ValueError:"},{"line_number":298,"context_line":"                conj_ids_max \u003d 0"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        self._max_id \u003d conj_ids_max - conj_ids_max % self.CONJ_ID_BLOCK_SIZE"},{"line_number":301,"context_line":"        return self._next_max_id()"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"    def _next_max_id(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3047e3dd_bafc6b41","line":300,"updated":"2021-08-18 07:54:17.000000000","message":"why You are using self._max_id, the same value is then used and returned by self._next_max_id and it is assigned to the same variable in L282. It\u0027s a bit confusing IMO.\nCouldn\u0027t You just do something like:\n\n    _max_id \u003d conj_ids_max - conj_ids_max % self.CONJ_ID_BLOCK_SIZE\n    return self._next_max_id(_max_id)\n\n    def _next_max_id(self, max_id):\n        ...","commit_id":"ad0531c376f553fbb1f970956780d276051a4f78"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"28a0b298d02d1d6fdb3a0b0c8d0433b35f3ae8d2","unresolved":true,"context_lines":[{"line_number":297,"context_line":"            except ValueError:"},{"line_number":298,"context_line":"                conj_ids_max \u003d 0"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        self._max_id \u003d conj_ids_max - conj_ids_max % self.CONJ_ID_BLOCK_SIZE"},{"line_number":301,"context_line":"        return self._next_max_id()"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"    def _next_max_id(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f866ae1_b9c7fea5","line":300,"in_reply_to":"3047e3dd_bafc6b41","updated":"2021-08-18 13:34:58.000000000","message":"It is indeed and we should avoid it. Fixed in next PS.","commit_id":"ad0531c376f553fbb1f970956780d276051a4f78"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"586d20430ba7a9a849f9dda015c5db3862b49fa0","unresolved":true,"context_lines":[{"line_number":285,"context_line":"        conj_ids_max \u003d 0"},{"line_number":286,"context_line":"        try:"},{"line_number":287,"context_line":"            for flow in int_br.dump_flows():"},{"line_number":288,"context_line":"                for match in flow.match._fields2:"},{"line_number":289,"context_line":"                    if match[0] \u003d\u003d \u0027conj_id\u0027 and match[1] \u003e conj_ids_max:"},{"line_number":290,"context_line":"                        conj_ids_max \u003d match[1]"},{"line_number":291,"context_line":"        except AttributeError:"}],"source_content_type":"text/x-python","patch_set":6,"id":"d6b15d56_510d173c","line":288,"range":{"start_line":288,"start_character":40,"end_line":288,"end_character":48},"updated":"2021-08-23 07:35:42.000000000","message":"Is there a way to avoid relying on internal implementation details?","commit_id":"2a1213c21b81de910c05a11a6bb92de29b84471b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"ce8c5f52337656be13061a5764257ff8b71d4922","unresolved":true,"context_lines":[{"line_number":285,"context_line":"        conj_ids_max \u003d 0"},{"line_number":286,"context_line":"        try:"},{"line_number":287,"context_line":"            for flow in int_br.dump_flows():"},{"line_number":288,"context_line":"                for match in flow.match._fields2:"},{"line_number":289,"context_line":"                    if match[0] \u003d\u003d \u0027conj_id\u0027 and match[1] \u003e conj_ids_max:"},{"line_number":290,"context_line":"                        conj_ids_max \u003d match[1]"},{"line_number":291,"context_line":"        except AttributeError:"}],"source_content_type":"text/x-python","patch_set":6,"id":"4f04abe3_9e0938cb","line":288,"range":{"start_line":288,"start_character":40,"end_line":288,"end_character":48},"in_reply_to":"d6b15d56_510d173c","updated":"2021-08-24 08:11:45.000000000","message":"Yes, I\u0027ve checked the code [1] and we can use \"get\". I was a bit lazy when I implemented this...\n\n[1]https://github.com/openstack/os-ken/blob/f78a0ecdd4e6c219fe247002de2efa498d4fae1e/os_ken/ofproto/ofproto_v1_3_parser.py#L916-L917","commit_id":"2a1213c21b81de910c05a11a6bb92de29b84471b"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"586d20430ba7a9a849f9dda015c5db3862b49fa0","unresolved":true,"context_lines":[{"line_number":289,"context_line":"                    if match[0] \u003d\u003d \u0027conj_id\u0027 and match[1] \u003e conj_ids_max:"},{"line_number":290,"context_line":"                        conj_ids_max \u003d match[1]"},{"line_number":291,"context_line":"        except AttributeError:"},{"line_number":292,"context_line":"            # br_int is not an OVSAgentBridge (using os-ken)"},{"line_number":293,"context_line":"            flows \u003d int_br.dump_all_flows()"},{"line_number":294,"context_line":"            conj_ids \u003d CONJ_ID_REGEX.findall(\" | \".join(flows))"},{"line_number":295,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"a69a9c03_af057c6a","line":292,"range":{"start_line":292,"start_character":12,"end_line":292,"end_character":60},"updated":"2021-08-23 07:35:42.000000000","message":"maybe move to method doc?","commit_id":"2a1213c21b81de910c05a11a6bb92de29b84471b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"ce8c5f52337656be13061a5764257ff8b71d4922","unresolved":false,"context_lines":[{"line_number":289,"context_line":"                    if match[0] \u003d\u003d \u0027conj_id\u0027 and match[1] \u003e conj_ids_max:"},{"line_number":290,"context_line":"                        conj_ids_max \u003d match[1]"},{"line_number":291,"context_line":"        except AttributeError:"},{"line_number":292,"context_line":"            # br_int is not an OVSAgentBridge (using os-ken)"},{"line_number":293,"context_line":"            flows \u003d int_br.dump_all_flows()"},{"line_number":294,"context_line":"            conj_ids \u003d CONJ_ID_REGEX.findall(\" | \".join(flows))"},{"line_number":295,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"66c46598_0e2385bb","line":292,"range":{"start_line":292,"start_character":12,"end_line":292,"end_character":60},"in_reply_to":"a69a9c03_af057c6a","updated":"2021-08-24 08:11:45.000000000","message":"Done","commit_id":"2a1213c21b81de910c05a11a6bb92de29b84471b"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"9541d1c39e1cb3a57150336eddabf82a68fe57df","unresolved":true,"context_lines":[{"line_number":299,"context_line":"            for flow in int_br.dump_flows():"},{"line_number":300,"context_line":"                conj_id_max \u003d max(conj_id_max, flow.match.get(\u0027conj_id\u0027, 0))"},{"line_number":301,"context_line":"        except AttributeError:  # br_int is a ``OVSBridge`` instance."},{"line_number":302,"context_line":"            flows \u003d int_br.dump_all_flows()"},{"line_number":303,"context_line":"            conj_ids \u003d CONJ_ID_REGEX.findall(\" | \".join(flows))"},{"line_number":304,"context_line":"            try:"},{"line_number":305,"context_line":"                conj_id_max \u003d max([int(conj_id) for conj_id in conj_ids])"}],"source_content_type":"text/x-python","patch_set":7,"id":"bc96f276_07ce8bfe","line":302,"range":{"start_line":302,"start_character":12,"end_line":302,"end_character":43},"updated":"2021-08-31 05:54:37.000000000","message":"Clould we only dump the flows from the tables which have the \u0027conj_id\u0027 settings? I don\u0027t think table 0, 60, and 94 etc. have conjunction ID related flows. But all flows seems to be too much to handle during the agent restart. This action sometimes cases agent restart failure due to the OF related action timeout.","commit_id":"429a62ba45e227ae4bbb557ef16de4e2b97e70b6"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"feb2d41088439bd7c2261c2c41c35f4c6a641a6f","unresolved":true,"context_lines":[{"line_number":299,"context_line":"            for flow in int_br.dump_flows():"},{"line_number":300,"context_line":"                conj_id_max \u003d max(conj_id_max, flow.match.get(\u0027conj_id\u0027, 0))"},{"line_number":301,"context_line":"        except AttributeError:  # br_int is a ``OVSBridge`` instance."},{"line_number":302,"context_line":"            flows \u003d int_br.dump_all_flows()"},{"line_number":303,"context_line":"            conj_ids \u003d CONJ_ID_REGEX.findall(\" | \".join(flows))"},{"line_number":304,"context_line":"            try:"},{"line_number":305,"context_line":"                conj_id_max \u003d max([int(conj_id) for conj_id in conj_ids])"}],"source_content_type":"text/x-python","patch_set":7,"id":"67845baf_cd581534","line":302,"range":{"start_line":302,"start_character":12,"end_line":302,"end_character":43},"in_reply_to":"bc96f276_07ce8bfe","updated":"2021-09-10 09:37:43.000000000","message":"This is for OVSBridge using vsctl interface. I need to change L299 too.\n\nI\u0027ll try to implement this retrieving only OVS_FIREWALL_TABLES","commit_id":"429a62ba45e227ae4bbb557ef16de4e2b97e70b6"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"9541d1c39e1cb3a57150336eddabf82a68fe57df","unresolved":true,"context_lines":[{"line_number":377,"context_line":"    \"\"\""},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"    def __init__(self, driver, int_br):"},{"line_number":380,"context_line":"        self.conj_id_map \u003d ConjIdMap(int_br)"},{"line_number":381,"context_line":"        self.driver \u003d driver"},{"line_number":382,"context_line":"        # The following two are dict of dicts and are indexed like:"},{"line_number":383,"context_line":"        #     self.x[vlan_tag][(direction, ethertype)]"}],"source_content_type":"text/x-python","patch_set":7,"id":"a8942ad5_b525e0b1","line":380,"range":{"start_line":380,"start_character":37,"end_line":380,"end_character":43},"updated":"2021-08-31 05:54:37.000000000","message":"driver.int_br.br?","commit_id":"429a62ba45e227ae4bbb557ef16de4e2b97e70b6"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"feb2d41088439bd7c2261c2c41c35f4c6a641a6f","unresolved":true,"context_lines":[{"line_number":377,"context_line":"    \"\"\""},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"    def __init__(self, driver, int_br):"},{"line_number":380,"context_line":"        self.conj_id_map \u003d ConjIdMap(int_br)"},{"line_number":381,"context_line":"        self.driver \u003d driver"},{"line_number":382,"context_line":"        # The following two are dict of dicts and are indexed like:"},{"line_number":383,"context_line":"        #     self.x[vlan_tag][(direction, ethertype)]"}],"source_content_type":"text/x-python","patch_set":7,"id":"3e801411_7e21ab33","line":380,"range":{"start_line":380,"start_character":37,"end_line":380,"end_character":43},"in_reply_to":"a8942ad5_b525e0b1","updated":"2021-09-10 09:37:43.000000000","message":"It is, indeed","commit_id":"429a62ba45e227ae4bbb557ef16de4e2b97e70b6"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"9541d1c39e1cb3a57150336eddabf82a68fe57df","unresolved":true,"context_lines":[{"line_number":561,"context_line":""},{"line_number":562,"context_line":"    def _initialize_sg(self, int_br):"},{"line_number":563,"context_line":"        self.sg_port_map \u003d SGPortMap()"},{"line_number":564,"context_line":"        self.conj_ip_manager \u003d ConjIPFlowManager(self, int_br)"},{"line_number":565,"context_line":"        self.sg_to_delete \u003d set()"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"    def _initialize_firewall(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"575fb144_15345071","line":564,"range":{"start_line":564,"start_character":55,"end_line":564,"end_character":61},"updated":"2021-08-31 05:54:37.000000000","message":"This \"int_br\" can be set as \"self.int_br.br\" or directly use attribute from \"self\" instance, since this class ConjIPFlowManager was only used in neutron. Then line 544, 559, 562 and here 564 will not need to be changed.\n\nhttps://codesearch.openstack.org/?q\u003dConjIPFlowManager\u0026i\u003dnope\u0026literal\u003dnope\u0026files\u003d\u0026excludeFiles\u003d\u0026repos\u003d","commit_id":"429a62ba45e227ae4bbb557ef16de4e2b97e70b6"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"9541d1c39e1cb3a57150336eddabf82a68fe57df","unresolved":true,"context_lines":[{"line_number":561,"context_line":""},{"line_number":562,"context_line":"    def _initialize_sg(self, int_br):"},{"line_number":563,"context_line":"        self.sg_port_map \u003d SGPortMap()"},{"line_number":564,"context_line":"        self.conj_ip_manager \u003d ConjIPFlowManager(self, int_br)"},{"line_number":565,"context_line":"        self.sg_to_delete \u003d set()"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"    def _initialize_firewall(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fd793acd_98caf6c6","line":564,"range":{"start_line":564,"start_character":49,"end_line":564,"end_character":53},"updated":"2021-08-31 05:54:37.000000000","message":"why this \"self\" instance can not be used in the class ConjIPFlowManager?","commit_id":"429a62ba45e227ae4bbb557ef16de4e2b97e70b6"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"feb2d41088439bd7c2261c2c41c35f4c6a641a6f","unresolved":false,"context_lines":[{"line_number":561,"context_line":""},{"line_number":562,"context_line":"    def _initialize_sg(self, int_br):"},{"line_number":563,"context_line":"        self.sg_port_map \u003d SGPortMap()"},{"line_number":564,"context_line":"        self.conj_ip_manager \u003d ConjIPFlowManager(self, int_br)"},{"line_number":565,"context_line":"        self.sg_to_delete \u003d set()"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"    def _initialize_firewall(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"e7e8bca2_bc7c1794","line":564,"range":{"start_line":564,"start_character":55,"end_line":564,"end_character":61},"in_reply_to":"575fb144_15345071","updated":"2021-09-10 09:37:43.000000000","message":"Done","commit_id":"429a62ba45e227ae4bbb557ef16de4e2b97e70b6"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"feb2d41088439bd7c2261c2c41c35f4c6a641a6f","unresolved":false,"context_lines":[{"line_number":561,"context_line":""},{"line_number":562,"context_line":"    def _initialize_sg(self, int_br):"},{"line_number":563,"context_line":"        self.sg_port_map \u003d SGPortMap()"},{"line_number":564,"context_line":"        self.conj_ip_manager \u003d ConjIPFlowManager(self, int_br)"},{"line_number":565,"context_line":"        self.sg_to_delete \u003d set()"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"    def _initialize_firewall(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"b171bf24_811215ad","line":564,"range":{"start_line":564,"start_character":49,"end_line":564,"end_character":53},"in_reply_to":"fd793acd_98caf6c6","updated":"2021-09-10 09:37:43.000000000","message":"Done","commit_id":"429a62ba45e227ae4bbb557ef16de4e2b97e70b6"}]}
