)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"6c68190cd02723ece18fbc327887d1c08ff3070d","unresolved":true,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2022-04-11 13:04:57 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Allow to process FW OF rules belonging to a port in a single operation"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds two new configuration variables to control the OVS"},{"line_number":10,"context_line":"OpenFlow rule processing operations:"},{"line_number":11,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"99a998b4_62b8eca2","line":8,"updated":"2022-04-21 12:16:54.000000000","message":"this is in sync with what we discussed during the PTG:\nhttps://etherpad.opendev.org/p/neutron-zed-ptg#L263","commit_id":"81d8ca617e0cf53bd68ddfd09c9f0aba685c7148"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"7516e9ab36f42f0e9237546ae24f81dee6fce64e","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2022-04-11 13:04:57 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Allow to process FW OF rules belonging to a port in a single operation"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds two new configuration variables to control the OVS"},{"line_number":10,"context_line":"OpenFlow rule processing operations:"},{"line_number":11,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"63494085_8c5fcb28","line":8,"in_reply_to":"99a998b4_62b8eca2","updated":"2022-05-03 14:50:41.000000000","message":"Done","commit_id":"81d8ca617e0cf53bd68ddfd09c9f0aba685c7148"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4df2d79a0fc5190e623029c3940b1201874736df","unresolved":true,"context_lines":[{"line_number":18,"context_line":"  in batches of \"openflow_number_processing_step\" number of OpenFlow"},{"line_number":19,"context_line":"  rules."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"With ``openflow_number_processing_step`` enabled, all Firewall"},{"line_number":22,"context_line":"OpenFlow rules related to a port are processed in one transaction"},{"line_number":23,"context_line":"(executed in one single command). That ensures the rules are written"},{"line_number":24,"context_line":"atomically and apply all of them at the same time."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"469882eb_084c49ab","line":21,"range":{"start_line":21,"start_character":7,"end_line":21,"end_character":38},"updated":"2022-05-05 07:37:46.000000000","message":"openflow_processed_per_port","commit_id":"e25a858e129ffe9bf33c551b9ab81d0bc1bc0992"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6a82fb0ebf5df077e155ec4ef6cfa1abf1c05f09","unresolved":false,"context_lines":[{"line_number":18,"context_line":"  in batches of \"openflow_number_processing_step\" number of OpenFlow"},{"line_number":19,"context_line":"  rules."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"With ``openflow_number_processing_step`` enabled, all Firewall"},{"line_number":22,"context_line":"OpenFlow rules related to a port are processed in one transaction"},{"line_number":23,"context_line":"(executed in one single command). That ensures the rules are written"},{"line_number":24,"context_line":"atomically and apply all of them at the same time."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"89221a91_0d6890d5","line":21,"range":{"start_line":21,"start_character":7,"end_line":21,"end_character":38},"in_reply_to":"469882eb_084c49ab","updated":"2022-05-05 08:58:05.000000000","message":"Done","commit_id":"e25a858e129ffe9bf33c551b9ab81d0bc1bc0992"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4df2d79a0fc5190e623029c3940b1201874736df","unresolved":true,"context_lines":[{"line_number":30,"context_line":"during the OVS agent restart."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"That will override, if needed, the hard limit of"},{"line_number":33,"context_line":"``openflow_processed_per_port`` OpenFlow rules that could be processed"},{"line_number":34,"context_line":"in OVS at once."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"If the default configuration values are not modified, the behaviour of"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"649e01d0_939260c6","line":33,"range":{"start_line":33,"start_character":2,"end_line":33,"end_character":29},"updated":"2022-05-05 07:37:46.000000000","message":"openflow_number_processing_step","commit_id":"e25a858e129ffe9bf33c551b9ab81d0bc1bc0992"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6a82fb0ebf5df077e155ec4ef6cfa1abf1c05f09","unresolved":false,"context_lines":[{"line_number":30,"context_line":"during the OVS agent restart."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"That will override, if needed, the hard limit of"},{"line_number":33,"context_line":"``openflow_processed_per_port`` OpenFlow rules that could be processed"},{"line_number":34,"context_line":"in OVS at once."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"If the default configuration values are not modified, the behaviour of"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"f8378f24_05aeadda","line":33,"range":{"start_line":33,"start_character":2,"end_line":33,"end_character":29},"in_reply_to":"649e01d0_939260c6","updated":"2022-05-05 08:58:05.000000000","message":"Done","commit_id":"e25a858e129ffe9bf33c551b9ab81d0bc1bc0992"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"6c68190cd02723ece18fbc327887d1c08ff3070d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"9e210dc1_ca83eadb","updated":"2022-04-21 12:16:54.000000000","message":"Could you please have a test run with openflow_processed_per_port\u003dTrue in zuul.yaml for i.e.: neutron-tempest-plugin-scenario-openvswitch","commit_id":"81d8ca617e0cf53bd68ddfd09c9f0aba685c7148"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a17fe361c348accb991ccfc14c790785a91c0b4c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"e3fa26e0_1aac6a71","in_reply_to":"03c75a54_2ed9adc0","updated":"2022-05-03 14:54:33.000000000","message":"--\u003e https://review.opendev.org/c/openstack/neutron-tempest-plugin/+/840319","commit_id":"81d8ca617e0cf53bd68ddfd09c9f0aba685c7148"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"7516e9ab36f42f0e9237546ae24f81dee6fce64e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"03c75a54_2ed9adc0","in_reply_to":"9e210dc1_ca83eadb","updated":"2022-05-03 14:50:41.000000000","message":"Right, this could be a good idea. We already test the default option in other jobs. Thanks!","commit_id":"81d8ca617e0cf53bd68ddfd09c9f0aba685c7148"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4df2d79a0fc5190e623029c3940b1201874736df","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"7afcc8d7_5b3ab94b","updated":"2022-05-05 07:37:46.000000000","message":"Commit message to be fixed, otherwise LGTM","commit_id":"e25a858e129ffe9bf33c551b9ab81d0bc1bc0992"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"18fce733a85ce4aa9b6b492f773d677cb04b6a3d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"3405cb7a_31b45e90","updated":"2022-05-04 12:45:16.000000000","message":"recheck","commit_id":"e25a858e129ffe9bf33c551b9ab81d0bc1bc0992"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"ea043cb156d7fc8463ace2813038e53cb4e0e036","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"3c3b13ea_9d8cb33a","updated":"2022-05-05 10:28:27.000000000","message":"-1 just to get reply for my questions. Other than that LGTM for me.","commit_id":"40dd12d4e864e7dada2b476ec6329cda838d294d"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"e10e49b89b225f8052eb2f017606579de91e9ac0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"dadde92e_e4269b27","updated":"2022-05-05 22:55:59.000000000","message":"LGTM. Just a few nits in the release note","commit_id":"8974906d2fc6d6b19183d720190a2180271be200"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"422c773b108a4e1e2950d77cd81ceb3080e8fa79","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"c9151403_a2983328","updated":"2022-05-07 04:26:28.000000000","message":"Seems this not only did the work of processing flow by group_id, but also refactor the resource processing step related code. It\u0027s better to split, IMO. Maybe these works can be named as:\n\"Allow processing flows by group_id\", aka this patch.\n\nAnd, \"Make flow installation trunk size automatic adjustment\"\nhttps://review.opendev.org/c/openstack/neutron/+/765072/","commit_id":"3f06353191a9a06b67e96b10c46fd2afb7f5ff0d"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"ef5ecb9a422eba536af5666b8ddd9043911b49d3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"b8da63a0_4384eb92","in_reply_to":"c9151403_a2983328","updated":"2022-05-09 16:46:40.000000000","message":"No, I didn\u0027t touch this section. The code, with the default configuration values is behaving the same. What you are suggesting is to remove \"openflow_number_processing_step\" config option. I see this irrelevant but I prefer to have this patch merged.","commit_id":"3f06353191a9a06b67e96b10c46fd2afb7f5ff0d"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"8de2faf04646b7fadcfc0c115d698c663fe809bb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"0d67afa8_86e769c9","updated":"2022-05-10 01:04:59.000000000","message":"Thanks. Let\u0027s go for this.\n\nJust one note, if a port\u0027s security group has a large set of ports/rules and remote security groups, the flows amount for one port can be large again, this may cause ovs-agent meet the OF action timeout to vswitchd. But anyway, it is configurable, let users make choices.","commit_id":"ab84b7fb2b6febc9dfd9b0767be90fcb3277c192"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"3e2a0f98d7884158f6c918882aa268e801f0e717","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"6e4f7ee9_3adda70e","updated":"2022-05-10 08:56:56.000000000","message":"recheck","commit_id":"ab84b7fb2b6febc9dfd9b0767be90fcb3277c192"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c36edefbb021b9f103f275c68b35fd82027b61bf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"e5723635_a5698894","updated":"2022-05-10 13:30:10.000000000","message":"recheck\nrouter state change recurrent errors in CI","commit_id":"ab84b7fb2b6febc9dfd9b0767be90fcb3277c192"}],"neutron/agent/common/ovs_lib.py":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"c42576c53f275ba4e3a232279e6a47474c86ca80","unresolved":true,"context_lines":[{"line_number":480,"context_line":"            if flow_group_id:"},{"line_number":481,"context_line":"                # NOTE(ralonsoh): all flows belonging to a port will be written"},{"line_number":482,"context_line":"                # atomically in the same command."},{"line_number":483,"context_line":"                step \u003d len(flow_strs)"},{"line_number":484,"context_line":"            else:"},{"line_number":485,"context_line":"                step \u003d common_constants.AGENT_RES_PROCESSING_STEP"},{"line_number":486,"context_line":"            for i in range(0, len(flow_strs), step):"}],"source_content_type":"text/x-python","patch_set":4,"id":"c02cf57a_55964ec4","line":483,"range":{"start_line":483,"start_character":16,"end_line":483,"end_character":37},"updated":"2021-08-31 06:10:37.000000000","message":"Not sure if this is a rollback of batch flow installtion, since one port can produce a large sets of flows as well. The flows are generated based on the ports number of the group, number of security group rules and remote security group. The OF flow installation timeout is the main pain point here. Too many flows may cause the ovs-agent failed to restart forever. Too long timeout of the OF action may cause the ovs-agent failed to process new resource. The operators need to estimate the scale of their cloud, and set a timeout value. And remember to adjust it at the right time according to the scale.\n\nSomething out of the scope here, the scale can be:\n1. Maximum resource capacity of one host\n2. Maximum resource capacity of one network\n3. Maximum resource capacity of one security group\n4. How long they can bear that the resource action is \"Unable to respond\"\n5. How many hosts the cloud have","commit_id":"630d6e6ddc98493ec333b5f66f59d192e8240831"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f6cb3da76cfd6513616ca89bb0bcb0bbeb7886c5","unresolved":false,"context_lines":[{"line_number":480,"context_line":"            if flow_group_id:"},{"line_number":481,"context_line":"                # NOTE(ralonsoh): all flows belonging to a port will be written"},{"line_number":482,"context_line":"                # atomically in the same command."},{"line_number":483,"context_line":"                step \u003d len(flow_strs)"},{"line_number":484,"context_line":"            else:"},{"line_number":485,"context_line":"                step \u003d common_constants.AGENT_RES_PROCESSING_STEP"},{"line_number":486,"context_line":"            for i in range(0, len(flow_strs), step):"}],"source_content_type":"text/x-python","patch_set":4,"id":"a8984209_8d8a2381","line":483,"range":{"start_line":483,"start_character":16,"end_line":483,"end_character":37},"in_reply_to":"015e7fff_bf3a3802","updated":"2022-04-08 08:11:47.000000000","message":"Done","commit_id":"630d6e6ddc98493ec333b5f66f59d192e8240831"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f7b6aafee50f0e0e68792fe504d7022cb8290b91","unresolved":true,"context_lines":[{"line_number":480,"context_line":"            if flow_group_id:"},{"line_number":481,"context_line":"                # NOTE(ralonsoh): all flows belonging to a port will be written"},{"line_number":482,"context_line":"                # atomically in the same command."},{"line_number":483,"context_line":"                step \u003d len(flow_strs)"},{"line_number":484,"context_line":"            else:"},{"line_number":485,"context_line":"                step \u003d common_constants.AGENT_RES_PROCESSING_STEP"},{"line_number":486,"context_line":"            for i in range(0, len(flow_strs), step):"}],"source_content_type":"text/x-python","patch_set":4,"id":"015e7fff_bf3a3802","line":483,"range":{"start_line":483,"start_character":16,"end_line":483,"end_character":37},"in_reply_to":"c02cf57a_55964ec4","updated":"2021-09-24 10:47:04.000000000","message":"I\u0027m aware this is a kind of revert of [1]. However this patch is not submitting all processed rules at once but only one port related flows.\n\nOf course, as you commented, depending on the number of rules per port, the number of flows could be considerable. However, adding 1000 or 2000 flows could take 1 or 2 seconds.\n\nFurthermore, according to the bugs related to [1], I don\u0027t see any reference to any problem when adding large sets of flows:\n- https://bugs.launchpad.net/neutron/+bug/1813703: with several related bugs. Some of them related to timeouts when dumping flows or RPC timeouts, but nothing related to flow insertion.\n- https://bugs.launchpad.net/neutron/+bug/1813704: same RPC timeout problem, already addressed.\n- https://bugs.launchpad.net/neutron/+bug/1813707: almost a duplicate bug.\n\nSo I see no reason not to include this patch. If we have timeouts inserting one port flows, we\u0027ll have for sure when dumping all table flows. I would also like to remark that the port flow insertion uses ovs-vsctl, not as dump-flows or other flow insertions (that use native implementation).\n\n[1]https://review.opendev.org/c/openstack/neutron/+/638642","commit_id":"630d6e6ddc98493ec333b5f66f59d192e8240831"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"422c773b108a4e1e2950d77cd81ceb3080e8fa79","unresolved":true,"context_lines":[{"line_number":486,"context_line":"                     for item in _list]"},{"line_number":487,"context_line":"            self.do_action_flows(action, flows, use_bundle\u003duse_bundle)"},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"    def do_action_flows(self, action, kwargs_list, flow_group_id\u003dNone,"},{"line_number":490,"context_line":"                        use_bundle\u003dFalse):"},{"line_number":491,"context_line":"        # we can\u0027t mix strict and non-strict, so we\u0027ll use the first kw"},{"line_number":492,"context_line":"        # and check against other kw being different"}],"source_content_type":"text/x-python","patch_set":11,"id":"565ae6a8_baf94cca","line":489,"range":{"start_line":489,"start_character":51,"end_line":489,"end_character":70},"updated":"2022-05-07 04:26:28.000000000","message":"Nit: new param should be added to the tail to avoid some unexpected call failed.","commit_id":"3f06353191a9a06b67e96b10c46fd2afb7f5ff0d"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"ef5ecb9a422eba536af5666b8ddd9043911b49d3","unresolved":false,"context_lines":[{"line_number":486,"context_line":"                     for item in _list]"},{"line_number":487,"context_line":"            self.do_action_flows(action, flows, use_bundle\u003duse_bundle)"},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"    def do_action_flows(self, action, kwargs_list, flow_group_id\u003dNone,"},{"line_number":490,"context_line":"                        use_bundle\u003dFalse):"},{"line_number":491,"context_line":"        # we can\u0027t mix strict and non-strict, so we\u0027ll use the first kw"},{"line_number":492,"context_line":"        # and check against other kw being different"}],"source_content_type":"text/x-python","patch_set":11,"id":"d31631bd_14621c38","line":489,"range":{"start_line":489,"start_character":51,"end_line":489,"end_character":70},"in_reply_to":"565ae6a8_baf94cca","updated":"2022-05-09 16:46:40.000000000","message":"Done","commit_id":"3f06353191a9a06b67e96b10c46fd2afb7f5ff0d"}],"neutron/agent/linux/openvswitch_firewall/firewall.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"ea043cb156d7fc8463ace2813038e53cb4e0e036","unresolved":true,"context_lines":[{"line_number":607,"context_line":"        \"\"\""},{"line_number":608,"context_line":"        flow_group_id \u003d (flow_group_id or"},{"line_number":609,"context_line":"                         kwargs.get(\u0027in_port\u0027) or"},{"line_number":610,"context_line":"                         kwargs.get(\u0027reg_port\u0027))"},{"line_number":611,"context_line":"        dl_type \u003d kwargs.get(\u0027dl_type\u0027)"},{"line_number":612,"context_line":"        create_reg_numbers(kwargs)"},{"line_number":613,"context_line":"        if isinstance(dl_type, int):"}],"source_content_type":"text/x-python","patch_set":9,"id":"e6e166a3_1fab334f","line":610,"updated":"2022-05-05 10:28:27.000000000","message":"I\u0027m not sure if I understand that comment above correctly: You says there that first in_port or reg_port will be used and if those aren\u0027t available, flow_group_id will be used. But this expression makes opposite: if there is flow_group_id set, this will be used in first place. Which is correct comment or code?","commit_id":"40dd12d4e864e7dada2b476ec6329cda838d294d"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"4db670a82781b1d1f4d5d680c6368a3e9267d359","unresolved":false,"context_lines":[{"line_number":607,"context_line":"        \"\"\""},{"line_number":608,"context_line":"        flow_group_id \u003d (flow_group_id or"},{"line_number":609,"context_line":"                         kwargs.get(\u0027in_port\u0027) or"},{"line_number":610,"context_line":"                         kwargs.get(\u0027reg_port\u0027))"},{"line_number":611,"context_line":"        dl_type \u003d kwargs.get(\u0027dl_type\u0027)"},{"line_number":612,"context_line":"        create_reg_numbers(kwargs)"},{"line_number":613,"context_line":"        if isinstance(dl_type, int):"}],"source_content_type":"text/x-python","patch_set":9,"id":"55a858e9_83ddcd46","line":610,"in_reply_to":"e6e166a3_1fab334f","updated":"2022-05-05 10:40:30.000000000","message":"Right, the code is correct. If \"flow_group_id\" is present, we use this value. If not, then we retrieve the in_port or reg_port.","commit_id":"40dd12d4e864e7dada2b476ec6329cda838d294d"}],"neutron/conf/agent/ovs_conf.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"61ab04602889b48bc9cb5c132c773dfd984ed4bc","unresolved":true,"context_lines":[{"line_number":53,"context_line":"                      \u0027issue. We have tested the value of 1000, 500, 200,\u0027"},{"line_number":54,"context_line":"                      \u0027100. But for 100, the OVS agent will have a lower \u0027"},{"line_number":55,"context_line":"                      \u0027timeout probability. And according to the testing \u0027"},{"line_number":56,"context_line":"                      \u0027result, step size 100 can indeed cost about 10% much \u0027"},{"line_number":57,"context_line":"                      \u0027more time than 500/1000. But such extra time looks \u0027"},{"line_number":58,"context_line":"                      \u0027inevitably needed to be sacrificed for the restart \u0027"},{"line_number":59,"context_line":"                      \u0027success rate. \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"22226a88_eb2f12cd","line":56,"range":{"start_line":56,"start_character":71,"end_line":56,"end_character":75},"updated":"2022-05-03 15:56:17.000000000","message":"I think \u0027much\u0027 can be deleted here.","commit_id":"81d8ca617e0cf53bd68ddfd09c9f0aba685c7148"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1d3ea306444863d464b2f31d895ecb6322d8c89d","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                      \u0027issue. We have tested the value of 1000, 500, 200,\u0027"},{"line_number":54,"context_line":"                      \u0027100. But for 100, the OVS agent will have a lower \u0027"},{"line_number":55,"context_line":"                      \u0027timeout probability. And according to the testing \u0027"},{"line_number":56,"context_line":"                      \u0027result, step size 100 can indeed cost about 10% much \u0027"},{"line_number":57,"context_line":"                      \u0027more time than 500/1000. But such extra time looks \u0027"},{"line_number":58,"context_line":"                      \u0027inevitably needed to be sacrificed for the restart \u0027"},{"line_number":59,"context_line":"                      \u0027success rate. \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"9527ed81_61c33a70","line":56,"range":{"start_line":56,"start_character":71,"end_line":56,"end_character":75},"in_reply_to":"22226a88_eb2f12cd","updated":"2022-05-04 10:51:35.000000000","message":"I just copy-pasted the description in \"openflow_number_processing_step\". I\u0027ll remove it.\n\nhttps://review.opendev.org/c/openstack/neutron/+/806246/7/neutron/common/_constants.py","commit_id":"81d8ca617e0cf53bd68ddfd09c9f0aba685c7148"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"61ab04602889b48bc9cb5c132c773dfd984ed4bc","unresolved":true,"context_lines":[{"line_number":57,"context_line":"                      \u0027more time than 500/1000. But such extra time looks \u0027"},{"line_number":58,"context_line":"                      \u0027inevitably needed to be sacrificed for the restart \u0027"},{"line_number":59,"context_line":"                      \u0027success rate. \u0027"},{"line_number":60,"context_line":"                      \u0027[1] http://paste.openstack.org/show/745685/\u0027)),"},{"line_number":61,"context_line":"    cfg.BoolOpt(\u0027openflow_processed_per_port\u0027,"},{"line_number":62,"context_line":"                default\u003dFalse,"},{"line_number":63,"context_line":"                help\u003d_(\u0027If enabled, all OpenFlow rules associated to a port \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"b28b6d3d_7f7e0808","line":60,"updated":"2022-05-03 15:56:17.000000000","message":"I guess I would like this better if the info was just added to our docs, even if this pastebin says things don\u0027t expire. There is also at least one typo, \"neutron port_list\" and it uses the old-style neutron client.","commit_id":"81d8ca617e0cf53bd68ddfd09c9f0aba685c7148"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"62c0b015138334f5e516c875c6762280ccc74f47","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                      \u0027more time than 500/1000. But such extra time looks \u0027"},{"line_number":58,"context_line":"                      \u0027inevitably needed to be sacrificed for the restart \u0027"},{"line_number":59,"context_line":"                      \u0027success rate. \u0027"},{"line_number":60,"context_line":"                      \u0027[1] http://paste.openstack.org/show/745685/\u0027)),"},{"line_number":61,"context_line":"    cfg.BoolOpt(\u0027openflow_processed_per_port\u0027,"},{"line_number":62,"context_line":"                default\u003dFalse,"},{"line_number":63,"context_line":"                help\u003d_(\u0027If enabled, all OpenFlow rules associated to a port \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"d668add6_dd7616b8","line":60,"in_reply_to":"30c5d743_eacb35be","updated":"2022-05-04 11:32:52.000000000","message":"--\u003e https://review.opendev.org/c/openstack/neutron/+/840442","commit_id":"81d8ca617e0cf53bd68ddfd09c9f0aba685c7148"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1d3ea306444863d464b2f31d895ecb6322d8c89d","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                      \u0027more time than 500/1000. But such extra time looks \u0027"},{"line_number":58,"context_line":"                      \u0027inevitably needed to be sacrificed for the restart \u0027"},{"line_number":59,"context_line":"                      \u0027success rate. \u0027"},{"line_number":60,"context_line":"                      \u0027[1] http://paste.openstack.org/show/745685/\u0027)),"},{"line_number":61,"context_line":"    cfg.BoolOpt(\u0027openflow_processed_per_port\u0027,"},{"line_number":62,"context_line":"                default\u003dFalse,"},{"line_number":63,"context_line":"                help\u003d_(\u0027If enabled, all OpenFlow rules associated to a port \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"30c5d743_eacb35be","line":60,"in_reply_to":"b28b6d3d_7f7e0808","updated":"2022-05-04 10:51:35.000000000","message":"I\u0027ll push another patch to refactor this, adding the script to the docs and changing the reference here.","commit_id":"81d8ca617e0cf53bd68ddfd09c9f0aba685c7148"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"61ab04602889b48bc9cb5c132c773dfd984ed4bc","unresolved":true,"context_lines":[{"line_number":62,"context_line":"                default\u003dFalse,"},{"line_number":63,"context_line":"                help\u003d_(\u0027If enabled, all OpenFlow rules associated to a port \u0027"},{"line_number":64,"context_line":"                       \u0027are processed at once, in one single transaction. \u0027"},{"line_number":65,"context_line":"                       \u0027That avoids possible inconsistencies during the OVS \u0027"},{"line_number":66,"context_line":"                       \u0027agent restart and port updates. \u0027"},{"line_number":67,"context_line":"                       \u0027If disabled, the flows will be processed in batches \u0027"},{"line_number":68,"context_line":"                       \u0027of \"openflow_number_processing_step\" number of \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"76469ecd_9c2382d3","line":65,"range":{"start_line":65,"start_character":68,"end_line":65,"end_character":71},"updated":"2022-05-03 15:56:17.000000000","message":"I think \u0027the\u0027 can be deleted here.","commit_id":"81d8ca617e0cf53bd68ddfd09c9f0aba685c7148"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1d3ea306444863d464b2f31d895ecb6322d8c89d","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                default\u003dFalse,"},{"line_number":63,"context_line":"                help\u003d_(\u0027If enabled, all OpenFlow rules associated to a port \u0027"},{"line_number":64,"context_line":"                       \u0027are processed at once, in one single transaction. \u0027"},{"line_number":65,"context_line":"                       \u0027That avoids possible inconsistencies during the OVS \u0027"},{"line_number":66,"context_line":"                       \u0027agent restart and port updates. \u0027"},{"line_number":67,"context_line":"                       \u0027If disabled, the flows will be processed in batches \u0027"},{"line_number":68,"context_line":"                       \u0027of \"openflow_number_processing_step\" number of \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"889cd439_1152f08b","line":65,"range":{"start_line":65,"start_character":68,"end_line":65,"end_character":71},"in_reply_to":"76469ecd_9c2382d3","updated":"2022-05-04 10:51:35.000000000","message":"Done","commit_id":"81d8ca617e0cf53bd68ddfd09c9f0aba685c7148"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"ea043cb156d7fc8463ace2813038e53cb4e0e036","unresolved":true,"context_lines":[{"line_number":59,"context_line":"                      \u0027success rate. \u0027"},{"line_number":60,"context_line":"                      \u0027[1] http://paste.openstack.org/show/745685/\u0027)),"},{"line_number":61,"context_line":"    cfg.BoolOpt(\u0027openflow_processed_per_port\u0027,"},{"line_number":62,"context_line":"                default\u003dFalse,"},{"line_number":63,"context_line":"                help\u003d_(\u0027If enabled, all OpenFlow rules associated to a port \u0027"},{"line_number":64,"context_line":"                       \u0027are processed at once, in one single transaction. \u0027"},{"line_number":65,"context_line":"                       \u0027That avoids possible inconsistencies during OVS agent \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"fc805d04_0d78ce2f","line":62,"updated":"2022-05-05 10:28:27.000000000","message":"I wonder if that shouldn\u0027t maybe be set to True. In most cases doing it in batches \"per port\" should be better for users as it would avoid inconsistencies in the port\u0027s rules and doing it in equal batches is IMO just kind of workaround when there are scalability issues in the specific cloud.\nWhat do You think about it? Why do You want to keep it as disabled by default?","commit_id":"40dd12d4e864e7dada2b476ec6329cda838d294d"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9f5796a587ba65f2709b6e6dc7d1c36f536e5919","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                      \u0027success rate. \u0027"},{"line_number":60,"context_line":"                      \u0027[1] http://paste.openstack.org/show/745685/\u0027)),"},{"line_number":61,"context_line":"    cfg.BoolOpt(\u0027openflow_processed_per_port\u0027,"},{"line_number":62,"context_line":"                default\u003dFalse,"},{"line_number":63,"context_line":"                help\u003d_(\u0027If enabled, all OpenFlow rules associated to a port \u0027"},{"line_number":64,"context_line":"                       \u0027are processed at once, in one single transaction. \u0027"},{"line_number":65,"context_line":"                       \u0027That avoids possible inconsistencies during OVS agent \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"de75edfa_5a20f90b","line":62,"in_reply_to":"73e7517f_e57310e9","updated":"2022-05-10 09:04:20.000000000","message":"Ok, we can think about changing default value of that config option later maybe.","commit_id":"40dd12d4e864e7dada2b476ec6329cda838d294d"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"4db670a82781b1d1f4d5d680c6368a3e9267d359","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                      \u0027success rate. \u0027"},{"line_number":60,"context_line":"                      \u0027[1] http://paste.openstack.org/show/745685/\u0027)),"},{"line_number":61,"context_line":"    cfg.BoolOpt(\u0027openflow_processed_per_port\u0027,"},{"line_number":62,"context_line":"                default\u003dFalse,"},{"line_number":63,"context_line":"                help\u003d_(\u0027If enabled, all OpenFlow rules associated to a port \u0027"},{"line_number":64,"context_line":"                       \u0027are processed at once, in one single transaction. \u0027"},{"line_number":65,"context_line":"                       \u0027That avoids possible inconsistencies during OVS agent \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"73e7517f_e57310e9","line":62,"in_reply_to":"fc805d04_0d78ce2f","updated":"2022-05-05 10:40:30.000000000","message":"It is, indeed. But that will be rejected [1] as is considered as a rollback. The default value \"False\" allows a suboptimal security status and could be a risk.\n\n[1]https://review.opendev.org/c/openstack/neutron/+/806246/4..9/neutron/agent/common/ovs_lib.py#b483","commit_id":"40dd12d4e864e7dada2b476ec6329cda838d294d"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"422c773b108a4e1e2950d77cd81ceb3080e8fa79","unresolved":true,"context_lines":[{"line_number":44,"context_line":"                       \u0027unregistered multicast packets to all ports. \u0027"},{"line_number":45,"context_line":"                       \u0027The switch will send unregistered multicast packets \u0027"},{"line_number":46,"context_line":"                       \u0027only to ports connected to multicast routers.\u0027)),"},{"line_number":47,"context_line":"    cfg.IntOpt(\u0027openflow_number_processing_step\u0027,"},{"line_number":48,"context_line":"               default\u003d100,"},{"line_number":49,"context_line":"               help\u003d_(\u0027Number of OpenFlow rules to be processed at once. \u0027"},{"line_number":50,"context_line":"                      \u0027Setting this value does not count on special \u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"9cdbed32_966c5b90","line":47,"range":{"start_line":47,"start_character":16,"end_line":47,"end_character":47},"updated":"2022-05-07 04:26:28.000000000","message":"Seems a bit duplicated to this:\nhttps://review.opendev.org/c/openstack/neutron/+/765072/13/neutron/conf/plugins/ml2/drivers/ovs_conf.py","commit_id":"3f06353191a9a06b67e96b10c46fd2afb7f5ff0d"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"ef5ecb9a422eba536af5666b8ddd9043911b49d3","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                       \u0027unregistered multicast packets to all ports. \u0027"},{"line_number":45,"context_line":"                       \u0027The switch will send unregistered multicast packets \u0027"},{"line_number":46,"context_line":"                       \u0027only to ports connected to multicast routers.\u0027)),"},{"line_number":47,"context_line":"    cfg.IntOpt(\u0027openflow_number_processing_step\u0027,"},{"line_number":48,"context_line":"               default\u003d100,"},{"line_number":49,"context_line":"               help\u003d_(\u0027Number of OpenFlow rules to be processed at once. \u0027"},{"line_number":50,"context_line":"                      \u0027Setting this value does not count on special \u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"638ce736_4cc67b68","line":47,"range":{"start_line":47,"start_character":16,"end_line":47,"end_character":47},"in_reply_to":"9cdbed32_966c5b90","updated":"2022-05-09 16:46:40.000000000","message":"But this option has not been merged yet.","commit_id":"3f06353191a9a06b67e96b10c46fd2afb7f5ff0d"}],"releasenotes/notes/ovs-of-rules-processing-parameters-b38f7a1e88568798.yaml":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"61ab04602889b48bc9cb5c132c773dfd984ed4bc","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added two new configuration variables to control the OVS OpenFlow rule"},{"line_number":5,"context_line":"    processing operations:"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    * ``openflow_number_processing_step``: by default 100. This is the number"},{"line_number":8,"context_line":"      of OpenFlow rules that will be processed in OVS in one single operation."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"53fcc356_dd3b7d4e","line":5,"updated":"2022-05-03 15:56:17.000000000","message":"nit: should probably add this is in the [OVS] conf section, even if that\u0027s obvious.","commit_id":"81d8ca617e0cf53bd68ddfd09c9f0aba685c7148"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1d3ea306444863d464b2f31d895ecb6322d8c89d","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added two new configuration variables to control the OVS OpenFlow rule"},{"line_number":5,"context_line":"    processing operations:"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    * ``openflow_number_processing_step``: by default 100. This is the number"},{"line_number":8,"context_line":"      of OpenFlow rules that will be processed in OVS in one single operation."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"db2db1f0_86d2d8de","line":5,"in_reply_to":"53fcc356_dd3b7d4e","updated":"2022-05-04 10:51:35.000000000","message":"I\u0027ll add this info.","commit_id":"81d8ca617e0cf53bd68ddfd09c9f0aba685c7148"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"e10e49b89b225f8052eb2f017606579de91e9ac0","unresolved":true,"context_lines":[{"line_number":5,"context_line":"    the OVS OpenFlow rule processing operations:"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    * ``openflow_number_processing_step``: by default 100. This is the number"},{"line_number":8,"context_line":"      of OpenFlow rules that will be processed in OVS in one single operation."},{"line_number":9,"context_line":"    * ``openflow_processed_per_port``: by default \"False\". If enabled, all"},{"line_number":10,"context_line":"      OpenFlow rules associated to a port will be processed at once, in one"},{"line_number":11,"context_line":"      single transaction. If disabled, the flows will be processed in batches"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"dac0da34_c72a030f","line":8,"range":{"start_line":8,"start_character":57,"end_line":8,"end_character":67},"updated":"2022-05-05 22:55:59.000000000","message":"Nit: I think this sounds a bit redundant. I would just write: a single","commit_id":"8974906d2fc6d6b19183d720190a2180271be200"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a250e524682aba33d4165a9dbe49719cfb6a836c","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    the OVS OpenFlow rule processing operations:"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    * ``openflow_number_processing_step``: by default 100. This is the number"},{"line_number":8,"context_line":"      of OpenFlow rules that will be processed in OVS in one single operation."},{"line_number":9,"context_line":"    * ``openflow_processed_per_port``: by default \"False\". If enabled, all"},{"line_number":10,"context_line":"      OpenFlow rules associated to a port will be processed at once, in one"},{"line_number":11,"context_line":"      single transaction. If disabled, the flows will be processed in batches"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"24399f7d_81fffe6c","line":8,"range":{"start_line":8,"start_character":57,"end_line":8,"end_character":67},"in_reply_to":"dac0da34_c72a030f","updated":"2022-05-06 07:48:42.000000000","message":"Done","commit_id":"8974906d2fc6d6b19183d720190a2180271be200"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"e10e49b89b225f8052eb2f017606579de91e9ac0","unresolved":true,"context_lines":[{"line_number":7,"context_line":"    * ``openflow_number_processing_step``: by default 100. This is the number"},{"line_number":8,"context_line":"      of OpenFlow rules that will be processed in OVS in one single operation."},{"line_number":9,"context_line":"    * ``openflow_processed_per_port``: by default \"False\". If enabled, all"},{"line_number":10,"context_line":"      OpenFlow rules associated to a port will be processed at once, in one"},{"line_number":11,"context_line":"      single transaction. If disabled, the flows will be processed in batches"},{"line_number":12,"context_line":"      of \"openflow_number_processing_step\" number of OpenFlow rules."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"9b1add73_bbd9d537","line":11,"range":{"start_line":10,"start_character":72,"end_line":11,"end_character":12},"updated":"2022-05-05 22:55:59.000000000","message":"ditto","commit_id":"8974906d2fc6d6b19183d720190a2180271be200"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a250e524682aba33d4165a9dbe49719cfb6a836c","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    * ``openflow_number_processing_step``: by default 100. This is the number"},{"line_number":8,"context_line":"      of OpenFlow rules that will be processed in OVS in one single operation."},{"line_number":9,"context_line":"    * ``openflow_processed_per_port``: by default \"False\". If enabled, all"},{"line_number":10,"context_line":"      OpenFlow rules associated to a port will be processed at once, in one"},{"line_number":11,"context_line":"      single transaction. If disabled, the flows will be processed in batches"},{"line_number":12,"context_line":"      of \"openflow_number_processing_step\" number of OpenFlow rules."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"01953c14_e3f29e99","line":11,"range":{"start_line":10,"start_character":72,"end_line":11,"end_character":12},"in_reply_to":"9b1add73_bbd9d537","updated":"2022-05-06 07:48:42.000000000","message":"Done","commit_id":"8974906d2fc6d6b19183d720190a2180271be200"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"e10e49b89b225f8052eb2f017606579de91e9ac0","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":10,"id":"ed725aea_009a5b50","line":13,"updated":"2022-05-05 22:55:59.000000000","message":"Shouldn\u0027t we also indicate in the release note that the new ability to process all the flows associated with a port in a single operation is only used (at least for now) by the firewall?","commit_id":"8974906d2fc6d6b19183d720190a2180271be200"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a250e524682aba33d4165a9dbe49719cfb6a836c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"46e1582b_652ccb39","line":13,"in_reply_to":"ed725aea_009a5b50","updated":"2022-05-06 07:48:42.000000000","message":"I\u0027ll do it in the first paragraph.","commit_id":"8974906d2fc6d6b19183d720190a2180271be200"}]}
