)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"40bcc7058e73ce6108ea922d276ede3a09c30df2","unresolved":true,"context_lines":[{"line_number":16,"context_line":"This leads to port staying inaccessible forever and hence"},{"line_number":17,"context_line":"breaks corresponding DHCP or router."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Current patch suggests another approach to make sure no packets are"},{"line_number":20,"context_line":"leaked from newly plugged ports: setting their \"vlan_mode\" attribute"},{"line_number":21,"context_line":"to \"trunk\" and \"trunks\"\u003d[4095] (along with assigning dead VLAN tag)."},{"line_number":22,"context_line":"With this OVS normal pipeline will allow only packets tagged with 4095"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"93aa1857_7505e8e1","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":39},"updated":"2022-02-03 13:05:50.000000000","message":"Just for reference, we started discussing this approach here:\n\nhttps://review.opendev.org/c/openstack/neutron/+/826460","commit_id":"edaaaa8f66c5c6288c4edd9931f6de84096b9923"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"6f38b2ee88c8ce19054cf6d30c43f1e78f996ef8","unresolved":false,"context_lines":[{"line_number":16,"context_line":"This leads to port staying inaccessible forever and hence"},{"line_number":17,"context_line":"breaks corresponding DHCP or router."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Current patch suggests another approach to make sure no packets are"},{"line_number":20,"context_line":"leaked from newly plugged ports: setting their \"vlan_mode\" attribute"},{"line_number":21,"context_line":"to \"trunk\" and \"trunks\"\u003d[4095] (along with assigning dead VLAN tag)."},{"line_number":22,"context_line":"With this OVS normal pipeline will allow only packets tagged with 4095"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"95f530e1_81f07c02","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":39},"in_reply_to":"93aa1857_7505e8e1","updated":"2022-02-04 08:32:49.000000000","message":"Done","commit_id":"edaaaa8f66c5c6288c4edd9931f6de84096b9923"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":13861,"name":"yatin","email":"ykarel@redhat.com","username":"yatinkarel"},"change_message_id":"5cdbea9e6f19dc6a816f75dcbd5972bdad44da2a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"bdce9b25_077bd265","updated":"2022-02-02 12:38:43.000000000","message":"Will this patch also take care of issue seen in wallaby jobs https://bugs.launchpad.net/neutron/+bug/1959564?","commit_id":"090fe400d0295df568aa7af32d27d90241a8d282"},{"author":{"_account_id":13861,"name":"yatin","email":"ykarel@redhat.com","username":"yatinkarel"},"change_message_id":"93836c2104da55c8e5855b8bad6ad5af86412d49","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"fddcf0cd_ec8c2c17","in_reply_to":"377ddca3_aa455334","updated":"2022-02-02 13:12:10.000000000","message":"Ok i got to know that https://review.opendev.org/c/openstack/neutron/+/826460 is possible fix, and since this is alternative i thought it should resolve the mentioned bug too.","commit_id":"090fe400d0295df568aa7af32d27d90241a8d282"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"bd009e9bbd00c89bb3bdb6fd05cb299d2a6929e6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"377ddca3_aa455334","in_reply_to":"bdce9b25_077bd265","updated":"2022-02-02 12:51:47.000000000","message":"Well, this is mostly related to bug 1930414, so I doubt this could help with  ssh failures...","commit_id":"090fe400d0295df568aa7af32d27d90241a8d282"},{"author":{"_account_id":13861,"name":"yatin","email":"ykarel@redhat.com","username":"yatinkarel"},"change_message_id":"8a73f3a85a42c6ba0e48c56cd8c5ea8fb7c49c5d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"db8b70af_5c6c23fb","in_reply_to":"d742f2e9_ade44d1a","updated":"2022-02-02 13:16:46.000000000","message":"Ack Thanks for confirmation, yes issue is caused with https://review.opendev.org/c/openstack/neutron/+/820897 .","commit_id":"090fe400d0295df568aa7af32d27d90241a8d282"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"5e368ffe59bdd2a0ad3d28e9112ea7f9d9a83db1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"b7393a66_e24f0af7","in_reply_to":"db8b70af_5c6c23fb","updated":"2022-02-02 13:20:02.000000000","message":"I will add bug 1959564 to the commit message then, thanks","commit_id":"090fe400d0295df568aa7af32d27d90241a8d282"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"9cbf3506f98e1f56a877340c168fbadd30939fa4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"d742f2e9_ade44d1a","in_reply_to":"fddcf0cd_ec8c2c17","updated":"2022-02-02 13:15:13.000000000","message":"Ah, right, if those failures are caused by https://review.opendev.org/c/openstack/neutron/+/820897 (and cherry-picks) then yes - current patch should resolve it","commit_id":"090fe400d0295df568aa7af32d27d90241a8d282"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"036627c0cf69be099c9641e79b8211c5f7737518","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"5a5203d6_5b0e8ecb","updated":"2022-02-02 14:01:02.000000000","message":"I added the sleep() I used previously to raise the chance of the original dead vlan leak to ps5. After creating several networks and subnets in rapid succession with the same dhcp port address I saw no dadfailed.","commit_id":"5cb6b52156aad890e10533ad6f5e7f44d6741e98"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"40bcc7058e73ce6108ea922d276ede3a09c30df2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"7a8150f9_ec969b60","updated":"2022-02-03 13:05:50.000000000","message":"I retested ps7 manually for the original dead vlan leak bug and I could not get it to leak.","commit_id":"edaaaa8f66c5c6288c4edd9931f6de84096b9923"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"45bf2921c5521b0616693d07e1d0b281cdb61f8f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"d0bae385_115a5627","updated":"2022-02-03 08:15:40.000000000","message":"recheck https://bugs.launchpad.net/neutron/+bug/1955008","commit_id":"edaaaa8f66c5c6288c4edd9931f6de84096b9923"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"8bd8707c5b5eec60dab8b4ac24a674e21f361a56","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"93899e13_1f63914b","updated":"2022-02-03 16:23:15.000000000","message":"And I don\u0027t know why I wrote ps7 in my previous comment, but I actually tested ps10 (commit edaaaa8).","commit_id":"1d7185abdf937b1641fc4b6b70391d7f618187b0"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"0eaff4b2359a0b5b8ed8b64e2ae082f1bff7a9e9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"b056851c_214f15ac","updated":"2022-02-04 12:48:13.000000000","message":"Really hard work what all who worked on this put into this fix","commit_id":"1d7185abdf937b1641fc4b6b70391d7f618187b0"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"9dde47a751c531ee8cd52169d157242e8e3dc73b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"57ea4371_16da7a5a","updated":"2022-02-04 06:26:28.000000000","message":"recheck POST_FAILURE","commit_id":"1d7185abdf937b1641fc4b6b70391d7f618187b0"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"b8d7da88504c9d9937e928682c9beee9263b35ff","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"a389d474_da169fb1","updated":"2022-02-07 10:48:53.000000000","message":"+1 to this approach: the packet blocking setting will be done during the ovsdb txn, not a separate one with an OF txn (causing the race condition before between services).\n\nVery nice.","commit_id":"0ddca284542aed89df4a22607a2da03f193f083c"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c25c9049889df236d7c56f04ca5688212bca21e0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"2e5f6a3b_d996b2d8","updated":"2022-02-07 10:51:05.000000000","message":"Just a heads-up: we need to backport this patch\n","commit_id":"0ddca284542aed89df4a22607a2da03f193f083c"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"020ae10b0f4958b98474babc8568d198a85b617d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"cee81cce_561eac13","updated":"2022-02-05 15:31:46.000000000","message":"recheck \"Server failed to reach ACTIVE status\"","commit_id":"0ddca284542aed89df4a22607a2da03f193f083c"}],"neutron/agent/common/ovs_lib.py":[{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"036627c0cf69be099c9641e79b8211c5f7737518","unresolved":true,"context_lines":[{"line_number":393,"context_line":"        # Set vlan_mode to native-tagged so that packets are surely"},{"line_number":394,"context_line":"        # dropped by OVS normal pipeline. See lp#1930414"},{"line_number":395,"context_line":"        txn.add(self.ovsdb.db_set("},{"line_number":396,"context_line":"            \u0027Port\u0027, port_name, (\u0027vlan_mode\u0027, \u0027native-tagged\u0027)))"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"    def delete_port(self, port_name):"},{"line_number":399,"context_line":"        self.ovsdb.del_port(port_name, self.br_name).execute()"}],"source_content_type":"text/x-python","patch_set":4,"id":"2a29d647_fcae124c","line":396,"range":{"start_line":396,"start_character":46,"end_line":396,"end_character":59},"updated":"2022-02-02 14:01:02.000000000","message":"Why native-tagged?\n\nIf I set native-tagged:\n\n ovs-vsctl clear Port $iface trunks\n ovs-vsctl set Port $iface tag\u003d4095\n ovs-vsctl set Port $iface vlan_mode\u003dnative-tagged\n\nThen the normal action eventually drops the packet somewhere, but first it floods:\n\n # ovs-appctl ofproto/trace br0 in_port\u003d$ofport,dl_vlan\u003d0\n Flow:  in_port\u003d4,dl_vlan\u003d0,dl_vlan_pcp\u003d0,vlan_tci1\u003d0x0000,dl_src\u003d00:00:00:00:00:00,dl_dst\u003d00:00:00:00:00:00,dl_type\u003d0x0000\n \n bridge(\"br0\")\n -------------\n  0. priority 0\n     NORMAL\n      -\u003e no learned MAC for destination, flooding\n \n Final flow: unchanged\n Megaflow: recirc_id\u003d0,eth,in_port\u003d4,dl_vlan\u003d0,dl_vlan_pcp\u003d0,dl_src\u003d00:00:00:00:00:00,dl_dst\u003d00:00:00:00:00:00,dl_type\u003d0x0000\n Datapath actions: pop_vlan,push_vlan(vid\u003d4095,pcp\u003d0),1,3\n\nHowever if I set trunk:\n\n ovs-vsctl clear Port $iface tag\n ovs-vsctl set Port $iface vlan_mode\u003dtrunk\n ovs-vsctl set Port $iface trunks\u003d4095\n\nThen it drops the untagged packets right away:\n\n # ovs-appctl ofproto/trace br0 in_port\u003d$ofport,dl_vlan\u003d0\n Flow: in_port\u003d4,dl_vlan\u003d0,dl_vlan_pcp\u003d0,vlan_tci1\u003d0x0000,dl_src\u003d00:00:00:00:00:00,dl_dst\u003d00:00:00:00:00:00,dl_type\u003d0x0000\n \n bridge(\"br0\")\n -------------\n  0. priority 0\n     NORMAL\n      \u003e\u003e\u003e\u003e dropping VLAN 0 packet received on port vnet5 not configured for trunking VLAN 0 \u003c\u003c\u003c\u003c\n      \u003e\u003e disallowed VLAN VID for this input port, dropping\n \n Final flow: unchanged\n Megaflow: recirc_id\u003d0,eth,in_port\u003d4,dl_vlan\u003d0,dl_src\u003d00:00:00:00:00:00,dl_dst\u003d00:00:00:00:00:00,dl_type\u003d0x0000\n Datapath actions: drop","commit_id":"090fe400d0295df568aa7af32d27d90241a8d282"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"1bc3baaa89a216d2a6a5543e56c5833e7742b039","unresolved":true,"context_lines":[{"line_number":393,"context_line":"        # Set vlan_mode to native-tagged so that packets are surely"},{"line_number":394,"context_line":"        # dropped by OVS normal pipeline. See lp#1930414"},{"line_number":395,"context_line":"        txn.add(self.ovsdb.db_set("},{"line_number":396,"context_line":"            \u0027Port\u0027, port_name, (\u0027vlan_mode\u0027, \u0027native-tagged\u0027)))"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"    def delete_port(self, port_name):"},{"line_number":399,"context_line":"        self.ovsdb.del_port(port_name, self.br_name).execute()"}],"source_content_type":"text/x-python","patch_set":4,"id":"91bce074_1d77c97c","line":396,"range":{"start_line":396,"start_character":46,"end_line":396,"end_character":59},"in_reply_to":"2a29d647_fcae124c","updated":"2022-02-02 14:07:34.000000000","message":"Reading through the doc I thought it should work absolutely the same as trunk with trunks\u003d4095, now I see the difference. Thanks for checking! I will change back to trunks","commit_id":"090fe400d0295df568aa7af32d27d90241a8d282"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"0485bf48ec8254add7e8efb01d683c128254b24a","unresolved":false,"context_lines":[{"line_number":393,"context_line":"        # Set vlan_mode to native-tagged so that packets are surely"},{"line_number":394,"context_line":"        # dropped by OVS normal pipeline. See lp#1930414"},{"line_number":395,"context_line":"        txn.add(self.ovsdb.db_set("},{"line_number":396,"context_line":"            \u0027Port\u0027, port_name, (\u0027vlan_mode\u0027, \u0027native-tagged\u0027)))"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"    def delete_port(self, port_name):"},{"line_number":399,"context_line":"        self.ovsdb.del_port(port_name, self.br_name).execute()"}],"source_content_type":"text/x-python","patch_set":4,"id":"de11b643_ca44a6cd","line":396,"range":{"start_line":396,"start_character":46,"end_line":396,"end_character":59},"in_reply_to":"91bce074_1d77c97c","updated":"2022-02-02 14:28:23.000000000","message":"Done","commit_id":"090fe400d0295df568aa7af32d27d90241a8d282"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"079849b133fbf72e6422e05f780ad4c17c97e9ad","unresolved":true,"context_lines":[{"line_number":382,"context_line":"                txn.add(self.ovsdb.db_set(\u0027Interface\u0027, port_name,"},{"line_number":383,"context_line":"                                          *interface_attr_tuples))"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    def _set_port_dead(self, port_name, txn):"},{"line_number":386,"context_line":"        # NOTE(mangelajo): Port is added to dead vlan (4095) by default"},{"line_number":387,"context_line":"        # until it\u0027s handled by the neutron-openvswitch-agent. Otherwise it"},{"line_number":388,"context_line":"        # becomes a trunk port on br-int (receiving traffic for all vlans),"}],"source_content_type":"text/x-python","patch_set":7,"id":"e9fd1fe1_77bab335","line":385,"updated":"2022-02-02 17:14:58.000000000","message":"Is a separate method required? I don\u0027t see other callers and not having would simplify test changes.","commit_id":"ec545fc24277c736843fdcb48c7c871b2020f52b"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"177958d04e556f621433d3534649d07213ea5f23","unresolved":true,"context_lines":[{"line_number":382,"context_line":"                txn.add(self.ovsdb.db_set(\u0027Interface\u0027, port_name,"},{"line_number":383,"context_line":"                                          *interface_attr_tuples))"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    def _set_port_dead(self, port_name, txn):"},{"line_number":386,"context_line":"        # NOTE(mangelajo): Port is added to dead vlan (4095) by default"},{"line_number":387,"context_line":"        # until it\u0027s handled by the neutron-openvswitch-agent. Otherwise it"},{"line_number":388,"context_line":"        # becomes a trunk port on br-int (receiving traffic for all vlans),"}],"source_content_type":"text/x-python","patch_set":7,"id":"ddfdd087_17e591d4","line":385,"in_reply_to":"5bb0ebae_40354440","updated":"2022-02-03 06:26:07.000000000","message":"We need \"alive\" ports in those tests, so have to mock setting those \"dead\" - so _set_port_dead() was created for this exact purpose. Before that ports weren\u0027t actually \"dead\" so tests were fine.","commit_id":"ec545fc24277c736843fdcb48c7c871b2020f52b"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"f5d297eeba6cf4dd09d74edddf8c158c6f47fb95","unresolved":true,"context_lines":[{"line_number":382,"context_line":"                txn.add(self.ovsdb.db_set(\u0027Interface\u0027, port_name,"},{"line_number":383,"context_line":"                                          *interface_attr_tuples))"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    def _set_port_dead(self, port_name, txn):"},{"line_number":386,"context_line":"        # NOTE(mangelajo): Port is added to dead vlan (4095) by default"},{"line_number":387,"context_line":"        # until it\u0027s handled by the neutron-openvswitch-agent. Otherwise it"},{"line_number":388,"context_line":"        # becomes a trunk port on br-int (receiving traffic for all vlans),"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa763991_6c54cd7e","line":385,"in_reply_to":"e9fd1fe1_77bab335","updated":"2022-02-02 21:19:34.000000000","message":"Actually added to have an ability to mock in tests. Could you please clarify how not having could simplify?","commit_id":"ec545fc24277c736843fdcb48c7c871b2020f52b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"98f2ce5869800836d044ebd62e08708362f510a6","unresolved":true,"context_lines":[{"line_number":382,"context_line":"                txn.add(self.ovsdb.db_set(\u0027Interface\u0027, port_name,"},{"line_number":383,"context_line":"                                          *interface_attr_tuples))"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    def _set_port_dead(self, port_name, txn):"},{"line_number":386,"context_line":"        # NOTE(mangelajo): Port is added to dead vlan (4095) by default"},{"line_number":387,"context_line":"        # until it\u0027s handled by the neutron-openvswitch-agent. Otherwise it"},{"line_number":388,"context_line":"        # becomes a trunk port on br-int (receiving traffic for all vlans),"}],"source_content_type":"text/x-python","patch_set":7,"id":"5bb0ebae_40354440","line":385,"in_reply_to":"fa763991_6c54cd7e","updated":"2022-02-02 22:13:42.000000000","message":"Adding it required some tests to add this, which wouldn\u0027t be necessary otherwise, right?\n\n        mock.patch(\u0027neutron.agent.common.ovs_lib.\u0027\n                   \u0027OVSBridge._set_port_dead\u0027).start()","commit_id":"ec545fc24277c736843fdcb48c7c871b2020f52b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"079849b133fbf72e6422e05f780ad4c17c97e9ad","unresolved":true,"context_lines":[{"line_number":395,"context_line":"        txn.add(self.ovsdb.db_set("},{"line_number":396,"context_line":"            \u0027Port\u0027, port_name, (\u0027vlan_mode\u0027, \u0027trunk\u0027)))"},{"line_number":397,"context_line":"        txn.add(self.ovsdb.db_set("},{"line_number":398,"context_line":"            \u0027Port\u0027, port_name, (\u0027trunks\u0027, \u00274095\u0027)))"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    def delete_port(self, port_name):"},{"line_number":401,"context_line":"        self.ovsdb.del_port(port_name, self.br_name).execute()"}],"source_content_type":"text/x-python","patch_set":7,"id":"4b477d39_8511480a","line":398,"range":{"start_line":398,"start_character":42,"end_line":398,"end_character":48},"updated":"2022-02-02 17:14:58.000000000","message":"nit: should this be DEAD_VLAN_TAG as well? Which is 4095","commit_id":"ec545fc24277c736843fdcb48c7c871b2020f52b"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"f5d297eeba6cf4dd09d74edddf8c158c6f47fb95","unresolved":false,"context_lines":[{"line_number":395,"context_line":"        txn.add(self.ovsdb.db_set("},{"line_number":396,"context_line":"            \u0027Port\u0027, port_name, (\u0027vlan_mode\u0027, \u0027trunk\u0027)))"},{"line_number":397,"context_line":"        txn.add(self.ovsdb.db_set("},{"line_number":398,"context_line":"            \u0027Port\u0027, port_name, (\u0027trunks\u0027, \u00274095\u0027)))"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    def delete_port(self, port_name):"},{"line_number":401,"context_line":"        self.ovsdb.del_port(port_name, self.br_name).execute()"}],"source_content_type":"text/x-python","patch_set":7,"id":"c492a782_c4e5a537","line":398,"range":{"start_line":398,"start_character":42,"end_line":398,"end_character":48},"in_reply_to":"4b477d39_8511480a","updated":"2022-02-02 21:19:34.000000000","message":"Ack","commit_id":"ec545fc24277c736843fdcb48c7c871b2020f52b"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"40bcc7058e73ce6108ea922d276ede3a09c30df2","unresolved":true,"context_lines":[{"line_number":385,"context_line":"    def _set_port_dead(self, port_name, txn):"},{"line_number":386,"context_line":"        # NOTE(mangelajo): Port is added to dead vlan (4095) by default"},{"line_number":387,"context_line":"        # until it\u0027s handled by the neutron-openvswitch-agent. Otherwise it"},{"line_number":388,"context_line":"        # becomes a trunk port on br-int (receiving traffic for all vlans),"},{"line_number":389,"context_line":"        # and also triggers issues on ovs-vswitchd related to the"},{"line_number":390,"context_line":"        # datapath flow revalidator thread, see lp#1767422"},{"line_number":391,"context_line":"        txn.add(self.ovsdb.db_set("}],"source_content_type":"text/x-python","patch_set":10,"id":"d01656de_e2580d83","line":388,"range":{"start_line":388,"start_character":20,"end_line":388,"end_character":30},"updated":"2022-02-03 13:05:50.000000000","message":"This comment will be hard to understand after this change.","commit_id":"edaaaa8f66c5c6288c4edd9931f6de84096b9923"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"6f38b2ee88c8ce19054cf6d30c43f1e78f996ef8","unresolved":false,"context_lines":[{"line_number":385,"context_line":"    def _set_port_dead(self, port_name, txn):"},{"line_number":386,"context_line":"        # NOTE(mangelajo): Port is added to dead vlan (4095) by default"},{"line_number":387,"context_line":"        # until it\u0027s handled by the neutron-openvswitch-agent. Otherwise it"},{"line_number":388,"context_line":"        # becomes a trunk port on br-int (receiving traffic for all vlans),"},{"line_number":389,"context_line":"        # and also triggers issues on ovs-vswitchd related to the"},{"line_number":390,"context_line":"        # datapath flow revalidator thread, see lp#1767422"},{"line_number":391,"context_line":"        txn.add(self.ovsdb.db_set("}],"source_content_type":"text/x-python","patch_set":10,"id":"93d3a66d_42e51bdb","line":388,"range":{"start_line":388,"start_character":20,"end_line":388,"end_character":30},"in_reply_to":"50358e55_4ab03724","updated":"2022-02-04 08:32:49.000000000","message":"Done","commit_id":"edaaaa8f66c5c6288c4edd9931f6de84096b9923"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"941ae2d6c87f6d74eed163b7cfb3523c756962eb","unresolved":true,"context_lines":[{"line_number":385,"context_line":"    def _set_port_dead(self, port_name, txn):"},{"line_number":386,"context_line":"        # NOTE(mangelajo): Port is added to dead vlan (4095) by default"},{"line_number":387,"context_line":"        # until it\u0027s handled by the neutron-openvswitch-agent. Otherwise it"},{"line_number":388,"context_line":"        # becomes a trunk port on br-int (receiving traffic for all vlans),"},{"line_number":389,"context_line":"        # and also triggers issues on ovs-vswitchd related to the"},{"line_number":390,"context_line":"        # datapath flow revalidator thread, see lp#1767422"},{"line_number":391,"context_line":"        txn.add(self.ovsdb.db_set("}],"source_content_type":"text/x-python","patch_set":10,"id":"50358e55_4ab03724","line":388,"range":{"start_line":388,"start_character":20,"end_line":388,"end_character":30},"in_reply_to":"d01656de_e2580d83","updated":"2022-02-03 14:09:35.000000000","message":"Agree, I\u0027ll think how to update this","commit_id":"edaaaa8f66c5c6288c4edd9931f6de84096b9923"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"40bcc7058e73ce6108ea922d276ede3a09c30df2","unresolved":true,"context_lines":[{"line_number":388,"context_line":"        # becomes a trunk port on br-int (receiving traffic for all vlans),"},{"line_number":389,"context_line":"        # and also triggers issues on ovs-vswitchd related to the"},{"line_number":390,"context_line":"        # datapath flow revalidator thread, see lp#1767422"},{"line_number":391,"context_line":"        txn.add(self.ovsdb.db_set("},{"line_number":392,"context_line":"            \u0027Port\u0027, port_name, (\u0027tag\u0027, constants.DEAD_VLAN_TAG)))"},{"line_number":393,"context_line":"        # Set vlan_mode to trunk with only 4095 VLAN allowed so that packets"},{"line_number":394,"context_line":"        # are surely dropped by OVS normal pipeline. See lp#1930414"},{"line_number":395,"context_line":"        txn.add(self.ovsdb.db_set("},{"line_number":396,"context_line":"            \u0027Port\u0027, port_name, (\u0027vlan_mode\u0027, \u0027trunk\u0027)))"},{"line_number":397,"context_line":"        txn.add(self.ovsdb.db_set("},{"line_number":398,"context_line":"            \u0027Port\u0027, port_name, (\u0027trunks\u0027, constants.DEAD_VLAN_TAG)))"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    def delete_port(self, port_name):"},{"line_number":401,"context_line":"        self.ovsdb.del_port(port_name, self.br_name).execute()"}],"source_content_type":"text/x-python","patch_set":10,"id":"86ea9700_7c1d40bf","line":398,"range":{"start_line":391,"start_character":8,"end_line":398,"end_character":68},"updated":"2022-02-03 13:05:50.000000000","message":"I tested this combination with two libvirt vms plugged into ovs and yes, vlan 4095 is dropped by the dead vlan drop flow. All other vlans are dropped by the NORMAL action as \"disallowed VLAN VID for this input port\".","commit_id":"edaaaa8f66c5c6288c4edd9931f6de84096b9923"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"6f38b2ee88c8ce19054cf6d30c43f1e78f996ef8","unresolved":false,"context_lines":[{"line_number":388,"context_line":"        # becomes a trunk port on br-int (receiving traffic for all vlans),"},{"line_number":389,"context_line":"        # and also triggers issues on ovs-vswitchd related to the"},{"line_number":390,"context_line":"        # datapath flow revalidator thread, see lp#1767422"},{"line_number":391,"context_line":"        txn.add(self.ovsdb.db_set("},{"line_number":392,"context_line":"            \u0027Port\u0027, port_name, (\u0027tag\u0027, constants.DEAD_VLAN_TAG)))"},{"line_number":393,"context_line":"        # Set vlan_mode to trunk with only 4095 VLAN allowed so that packets"},{"line_number":394,"context_line":"        # are surely dropped by OVS normal pipeline. See lp#1930414"},{"line_number":395,"context_line":"        txn.add(self.ovsdb.db_set("},{"line_number":396,"context_line":"            \u0027Port\u0027, port_name, (\u0027vlan_mode\u0027, \u0027trunk\u0027)))"},{"line_number":397,"context_line":"        txn.add(self.ovsdb.db_set("},{"line_number":398,"context_line":"            \u0027Port\u0027, port_name, (\u0027trunks\u0027, constants.DEAD_VLAN_TAG)))"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    def delete_port(self, port_name):"},{"line_number":401,"context_line":"        self.ovsdb.del_port(port_name, self.br_name).execute()"}],"source_content_type":"text/x-python","patch_set":10,"id":"4dc43ab6_cddf966f","line":398,"range":{"start_line":391,"start_character":8,"end_line":398,"end_character":68},"in_reply_to":"22ff0e62_3006e07e","updated":"2022-02-04 08:32:49.000000000","message":"Done","commit_id":"edaaaa8f66c5c6288c4edd9931f6de84096b9923"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"941ae2d6c87f6d74eed163b7cfb3523c756962eb","unresolved":true,"context_lines":[{"line_number":388,"context_line":"        # becomes a trunk port on br-int (receiving traffic for all vlans),"},{"line_number":389,"context_line":"        # and also triggers issues on ovs-vswitchd related to the"},{"line_number":390,"context_line":"        # datapath flow revalidator thread, see lp#1767422"},{"line_number":391,"context_line":"        txn.add(self.ovsdb.db_set("},{"line_number":392,"context_line":"            \u0027Port\u0027, port_name, (\u0027tag\u0027, constants.DEAD_VLAN_TAG)))"},{"line_number":393,"context_line":"        # Set vlan_mode to trunk with only 4095 VLAN allowed so that packets"},{"line_number":394,"context_line":"        # are surely dropped by OVS normal pipeline. See lp#1930414"},{"line_number":395,"context_line":"        txn.add(self.ovsdb.db_set("},{"line_number":396,"context_line":"            \u0027Port\u0027, port_name, (\u0027vlan_mode\u0027, \u0027trunk\u0027)))"},{"line_number":397,"context_line":"        txn.add(self.ovsdb.db_set("},{"line_number":398,"context_line":"            \u0027Port\u0027, port_name, (\u0027trunks\u0027, constants.DEAD_VLAN_TAG)))"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    def delete_port(self, port_name):"},{"line_number":401,"context_line":"        self.ovsdb.del_port(port_name, self.br_name).execute()"}],"source_content_type":"text/x-python","patch_set":10,"id":"22ff0e62_3006e07e","line":398,"range":{"start_line":391,"start_character":8,"end_line":398,"end_character":68},"in_reply_to":"86ea9700_7c1d40bf","updated":"2022-02-03 14:09:35.000000000","message":"Thanks!","commit_id":"edaaaa8f66c5c6288c4edd9931f6de84096b9923"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"0eaff4b2359a0b5b8ed8b64e2ae082f1bff7a9e9","unresolved":true,"context_lines":[{"line_number":387,"context_line":"        # until it\u0027s handled by the neutron-openvswitch-agent. Otherwise it"},{"line_number":388,"context_line":"        # may trigger issues on ovs-vswitchd related to the"},{"line_number":389,"context_line":"        # datapath flow revalidator thread, see lp#1767422"},{"line_number":390,"context_line":"        txn.add(self.ovsdb.db_set("},{"line_number":391,"context_line":"            \u0027Port\u0027, port_name, (\u0027tag\u0027, constants.DEAD_VLAN_TAG)))"},{"line_number":392,"context_line":"        # Set vlan_mode to trunk with only 4095 VLAN allowed so that packets"},{"line_number":393,"context_line":"        # are surely dropped by OVS normal pipeline. See lp#1930414"}],"source_content_type":"text/x-python","patch_set":11,"id":"67b4a68b_db23c7de","line":390,"updated":"2022-02-04 12:48:13.000000000","message":"could you please add some comment here from the commit msg for example to make it clear for \"next generation developers\" why we need this 3 step dead_vlan handling?","commit_id":"1d7185abdf937b1641fc4b6b70391d7f618187b0"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"767c521036e3c4ea45e1f2136889161511fa2426","unresolved":true,"context_lines":[{"line_number":387,"context_line":"        # until it\u0027s handled by the neutron-openvswitch-agent. Otherwise it"},{"line_number":388,"context_line":"        # may trigger issues on ovs-vswitchd related to the"},{"line_number":389,"context_line":"        # datapath flow revalidator thread, see lp#1767422"},{"line_number":390,"context_line":"        txn.add(self.ovsdb.db_set("},{"line_number":391,"context_line":"            \u0027Port\u0027, port_name, (\u0027tag\u0027, constants.DEAD_VLAN_TAG)))"},{"line_number":392,"context_line":"        # Set vlan_mode to trunk with only 4095 VLAN allowed so that packets"},{"line_number":393,"context_line":"        # are surely dropped by OVS normal pipeline. See lp#1930414"}],"source_content_type":"text/x-python","patch_set":11,"id":"ce1043d5_3da48ea3","line":390,"in_reply_to":"67b4a68b_db23c7de","updated":"2022-02-04 12:52:27.000000000","message":"That\u0027s a fair point","commit_id":"1d7185abdf937b1641fc4b6b70391d7f618187b0"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"78e5ef217f89018da64e58add8149a112791626d","unresolved":false,"context_lines":[{"line_number":387,"context_line":"        # until it\u0027s handled by the neutron-openvswitch-agent. Otherwise it"},{"line_number":388,"context_line":"        # may trigger issues on ovs-vswitchd related to the"},{"line_number":389,"context_line":"        # datapath flow revalidator thread, see lp#1767422"},{"line_number":390,"context_line":"        txn.add(self.ovsdb.db_set("},{"line_number":391,"context_line":"            \u0027Port\u0027, port_name, (\u0027tag\u0027, constants.DEAD_VLAN_TAG)))"},{"line_number":392,"context_line":"        # Set vlan_mode to trunk with only 4095 VLAN allowed so that packets"},{"line_number":393,"context_line":"        # are surely dropped by OVS normal pipeline. See lp#1930414"}],"source_content_type":"text/x-python","patch_set":11,"id":"35383eed_a237ca93","line":390,"in_reply_to":"ce1043d5_3da48ea3","updated":"2022-02-04 13:45:43.000000000","message":"Done","commit_id":"1d7185abdf937b1641fc4b6b70391d7f618187b0"}],"neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py":[{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"036627c0cf69be099c9641e79b8211c5f7737518","unresolved":true,"context_lines":[{"line_number":1228,"context_line":"                self.setup_arp_spoofing_protection(self.int_br,"},{"line_number":1229,"context_line":"                                                   port, port_detail)"},{"line_number":1230,"context_line":"            if cur_tag !\u003d lvm.vlan:"},{"line_number":1231,"context_line":"                self.int_br.set_db_attribute("},{"line_number":1232,"context_line":"                    \"Port\", port.port_name, \"tag\", lvm.vlan)"},{"line_number":1233,"context_line":"                # When changing the port\u0027s tag from DEAD_VLAN_TAG to"},{"line_number":1234,"context_line":"                # something else, also clear port\u0027s vlan_mode,"},{"line_number":1235,"context_line":"                # which was set to make sure all packets are dropped."},{"line_number":1236,"context_line":"                if (cur_tag \u003d\u003d constants.DEAD_VLAN_TAG and port.ofport !\u003d -1):"},{"line_number":1237,"context_line":"                    self.int_br.clear_db_attribute("},{"line_number":1238,"context_line":"                        \"Port\", port.port_name, \"vlan_mode\")"},{"line_number":1239,"context_line":""},{"line_number":1240,"context_line":"            # update plugin about port status"},{"line_number":1241,"context_line":"            # FIXME(salv-orlando): Failures while updating device status"}],"source_content_type":"text/x-python","patch_set":4,"id":"9e02dce0_2ab67848","line":1238,"range":{"start_line":1231,"start_character":0,"end_line":1238,"end_character":60},"updated":"2022-02-02 14:01:02.000000000","message":"Shall we maybe do these in an ovsdb transaction?","commit_id":"090fe400d0295df568aa7af32d27d90241a8d282"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"1bc3baaa89a216d2a6a5543e56c5833e7742b039","unresolved":true,"context_lines":[{"line_number":1228,"context_line":"                self.setup_arp_spoofing_protection(self.int_br,"},{"line_number":1229,"context_line":"                                                   port, port_detail)"},{"line_number":1230,"context_line":"            if cur_tag !\u003d lvm.vlan:"},{"line_number":1231,"context_line":"                self.int_br.set_db_attribute("},{"line_number":1232,"context_line":"                    \"Port\", port.port_name, \"tag\", lvm.vlan)"},{"line_number":1233,"context_line":"                # When changing the port\u0027s tag from DEAD_VLAN_TAG to"},{"line_number":1234,"context_line":"                # something else, also clear port\u0027s vlan_mode,"},{"line_number":1235,"context_line":"                # which was set to make sure all packets are dropped."},{"line_number":1236,"context_line":"                if (cur_tag \u003d\u003d constants.DEAD_VLAN_TAG and port.ofport !\u003d -1):"},{"line_number":1237,"context_line":"                    self.int_br.clear_db_attribute("},{"line_number":1238,"context_line":"                        \"Port\", port.port_name, \"vlan_mode\")"},{"line_number":1239,"context_line":""},{"line_number":1240,"context_line":"            # update plugin about port status"},{"line_number":1241,"context_line":"            # FIXME(salv-orlando): Failures while updating device status"}],"source_content_type":"text/x-python","patch_set":4,"id":"dbf64ec9_0972c3d6","line":1238,"range":{"start_line":1231,"start_character":0,"end_line":1238,"end_character":60},"in_reply_to":"9e02dce0_2ab67848","updated":"2022-02-02 14:07:34.000000000","message":"Agree","commit_id":"090fe400d0295df568aa7af32d27d90241a8d282"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"0485bf48ec8254add7e8efb01d683c128254b24a","unresolved":false,"context_lines":[{"line_number":1228,"context_line":"                self.setup_arp_spoofing_protection(self.int_br,"},{"line_number":1229,"context_line":"                                                   port, port_detail)"},{"line_number":1230,"context_line":"            if cur_tag !\u003d lvm.vlan:"},{"line_number":1231,"context_line":"                self.int_br.set_db_attribute("},{"line_number":1232,"context_line":"                    \"Port\", port.port_name, \"tag\", lvm.vlan)"},{"line_number":1233,"context_line":"                # When changing the port\u0027s tag from DEAD_VLAN_TAG to"},{"line_number":1234,"context_line":"                # something else, also clear port\u0027s vlan_mode,"},{"line_number":1235,"context_line":"                # which was set to make sure all packets are dropped."},{"line_number":1236,"context_line":"                if (cur_tag \u003d\u003d constants.DEAD_VLAN_TAG and port.ofport !\u003d -1):"},{"line_number":1237,"context_line":"                    self.int_br.clear_db_attribute("},{"line_number":1238,"context_line":"                        \"Port\", port.port_name, \"vlan_mode\")"},{"line_number":1239,"context_line":""},{"line_number":1240,"context_line":"            # update plugin about port status"},{"line_number":1241,"context_line":"            # FIXME(salv-orlando): Failures while updating device status"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a626501_2a43d23d","line":1238,"range":{"start_line":1231,"start_character":0,"end_line":1238,"end_character":60},"in_reply_to":"dbf64ec9_0972c3d6","updated":"2022-02-02 14:28:23.000000000","message":"Done","commit_id":"090fe400d0295df568aa7af32d27d90241a8d282"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"079849b133fbf72e6422e05f780ad4c17c97e9ad","unresolved":true,"context_lines":[{"line_number":1236,"context_line":"                    # something else, also clear port\u0027s vlan_mode and trunks,"},{"line_number":1237,"context_line":"                    # which were set to make sure all packets are dropped."},{"line_number":1238,"context_line":"                    if (cur_tag \u003d\u003d constants.DEAD_VLAN_TAG and"},{"line_number":1239,"context_line":"                            port.ofport !\u003d -1):"},{"line_number":1240,"context_line":"                        txn.add(ovsdb.db_clear("},{"line_number":1241,"context_line":"                            \u0027Port\u0027, port.port_name, \u0027vlan_mode\u0027))"},{"line_number":1242,"context_line":"                        txn.add(ovsdb.db_clear("}],"source_content_type":"text/x-python","patch_set":7,"id":"acd30c01_d33a8214","line":1239,"range":{"start_line":1239,"start_character":43,"end_line":1239,"end_character":45},"updated":"2022-02-02 17:14:58.000000000","message":"nit: ovs_lib.INVALID_OFPORT","commit_id":"ec545fc24277c736843fdcb48c7c871b2020f52b"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"bf413af2254f13d9512d59be44a00df7a3a30499","unresolved":false,"context_lines":[{"line_number":1236,"context_line":"                    # something else, also clear port\u0027s vlan_mode and trunks,"},{"line_number":1237,"context_line":"                    # which were set to make sure all packets are dropped."},{"line_number":1238,"context_line":"                    if (cur_tag \u003d\u003d constants.DEAD_VLAN_TAG and"},{"line_number":1239,"context_line":"                            port.ofport !\u003d -1):"},{"line_number":1240,"context_line":"                        txn.add(ovsdb.db_clear("},{"line_number":1241,"context_line":"                            \u0027Port\u0027, port.port_name, \u0027vlan_mode\u0027))"},{"line_number":1242,"context_line":"                        txn.add(ovsdb.db_clear("}],"source_content_type":"text/x-python","patch_set":7,"id":"c4b79c4b_7dc1bed3","line":1239,"range":{"start_line":1239,"start_character":43,"end_line":1239,"end_character":45},"in_reply_to":"4ca3c7cb_69304c02","updated":"2022-02-02 21:22:33.000000000","message":"Done","commit_id":"ec545fc24277c736843fdcb48c7c871b2020f52b"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"f5d297eeba6cf4dd09d74edddf8c158c6f47fb95","unresolved":true,"context_lines":[{"line_number":1236,"context_line":"                    # something else, also clear port\u0027s vlan_mode and trunks,"},{"line_number":1237,"context_line":"                    # which were set to make sure all packets are dropped."},{"line_number":1238,"context_line":"                    if (cur_tag \u003d\u003d constants.DEAD_VLAN_TAG and"},{"line_number":1239,"context_line":"                            port.ofport !\u003d -1):"},{"line_number":1240,"context_line":"                        txn.add(ovsdb.db_clear("},{"line_number":1241,"context_line":"                            \u0027Port\u0027, port.port_name, \u0027vlan_mode\u0027))"},{"line_number":1242,"context_line":"                        txn.add(ovsdb.db_clear("}],"source_content_type":"text/x-python","patch_set":7,"id":"4ca3c7cb_69304c02","line":1239,"range":{"start_line":1239,"start_character":43,"end_line":1239,"end_character":45},"in_reply_to":"acd30c01_d33a8214","updated":"2022-02-02 21:19:34.000000000","message":"It was before but I agree better use const","commit_id":"ec545fc24277c736843fdcb48c7c871b2020f52b"}]}
