)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"04dbfa79e45cb937996d69801f301177bf751289","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"ed7cb1be_25030e38","updated":"2021-11-22 06:34:54.000000000","message":"-1 for fixed overriding of the floating IPs which are intentionally set to no binding QoS policy.","commit_id":"25f251dfb9527dd31e5306ea47a726d74ab9f11d"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"eed0e901b80d98a63ebac3e4375496c7b12d4b23","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"37efb09c_58376d78","updated":"2021-11-24 12:39:43.000000000","message":"recheck","commit_id":"e1d1b30d5cdded5409ee707a0a4a4967fc48c9a9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"268ae4b69ae93daedda36a29274049ec5074ecd1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"63205e96_0be9c4ef","updated":"2021-11-25 01:53:37.000000000","message":"I will no block this server side change, but let\u0027s wait how it applied in L3-agent side.","commit_id":"d7178927fdea70c2200ec409b4c3a94a8819a029"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d9d42f83f8f36a867ba62512eb58fb5e69741cd8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"3ebe4646_b6f2f879","updated":"2021-12-15 18:05:02.000000000","message":"recheck","commit_id":"d7178927fdea70c2200ec409b4c3a94a8819a029"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4cdec170a3631b09b882082eda58b2bf82189777","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"574143eb_68714b7e","updated":"2021-12-03 07:40:18.000000000","message":"recheck","commit_id":"d7178927fdea70c2200ec409b4c3a94a8819a029"},{"author":{"_account_id":32667,"name":"Mamatisa Nurmatov","email":"nurmatov.mamatisa@huawei.com","username":"isabek"},"change_message_id":"16eb5dc82c9822148bcb5adfefb20abfd3199e21","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"65868ee5_dfd4d36d","updated":"2021-12-07 06:15:21.000000000","message":"recheck","commit_id":"d7178927fdea70c2200ec409b4c3a94a8819a029"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9f79c7f6bc9a0ed9216781ca32098aef6697dcef","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"7872150f_d1d6708b","updated":"2021-12-14 10:20:27.000000000","message":"recheck","commit_id":"d7178927fdea70c2200ec409b4c3a94a8819a029"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"52ddf0be986fe2554bd97be7629abf0cd18b3c0e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"86b0f623_631db289","updated":"2021-12-02 13:19:31.000000000","message":"recheck","commit_id":"d7178927fdea70c2200ec409b4c3a94a8819a029"},{"author":{"_account_id":32667,"name":"Mamatisa Nurmatov","email":"nurmatov.mamatisa@huawei.com","username":"isabek"},"change_message_id":"12fe80fd0db2a7efb0c3a2607f162a42ec2d926c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"973d1894_2946763d","updated":"2021-12-16 07:10:32.000000000","message":"recheck","commit_id":"d7178927fdea70c2200ec409b4c3a94a8819a029"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"77497a4338bdc825a41ef5cbfbd24b32b1c9447b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"b4e1ba83_2924b953","updated":"2021-12-15 08:05:20.000000000","message":"recheck","commit_id":"d7178927fdea70c2200ec409b4c3a94a8819a029"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"808275ff84a61e500964e644852c2c77dd683dbd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"c848864b_23f2db1b","updated":"2021-11-24 15:09:23.000000000","message":"recheck\ng-api can\u0027t start...","commit_id":"d7178927fdea70c2200ec409b4c3a94a8819a029"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"61871a358bc2459aa6be93f326af89fdc20f5db8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"3b54d9d5_bb37eaf8","updated":"2021-12-06 10:01:46.000000000","message":"recheck\ntimeout (and disk_config change timeout in other job)","commit_id":"d7178927fdea70c2200ec409b4c3a94a8819a029"}],"neutron/cmd/upgrade_checks/checks.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"243e9bab234946110486bda612994eb861eb7dfe","unresolved":true,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"def get_external_networks_with_qos_policies():"},{"line_number":121,"context_line":"    ctx \u003d context.get_admin_context()"},{"line_number":122,"context_line":"    query \u003d ctx.session.query(models_v2.Network.id)"},{"line_number":123,"context_line":"    query \u003d query.filter(and_("},{"line_number":124,"context_line":"        models_v2.Network.id \u003d\u003d external_net.ExternalNetwork.network_id,"},{"line_number":125,"context_line":"        models_v2.Network.id \u003d\u003d qos_models.QosNetworkPolicyBinding.network_id))"}],"source_content_type":"text/x-python","patch_set":1,"id":"e20f849d_94f3be87","line":122,"range":{"start_line":122,"start_character":40,"end_line":122,"end_character":47},"updated":"2021-11-19 07:45:43.000000000","message":"can we query ExternalNetwork right away?","commit_id":"20bd9d2ae468679b9af84b9ac388ad480878caf6"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f4b58e9ac3043c4a7c39c07ac914081f9da67a7f","unresolved":true,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"def get_external_networks_with_qos_policies():"},{"line_number":121,"context_line":"    ctx \u003d context.get_admin_context()"},{"line_number":122,"context_line":"    query \u003d ctx.session.query(models_v2.Network.id)"},{"line_number":123,"context_line":"    query \u003d query.filter(and_("},{"line_number":124,"context_line":"        models_v2.Network.id \u003d\u003d external_net.ExternalNetwork.network_id,"},{"line_number":125,"context_line":"        models_v2.Network.id \u003d\u003d qos_models.QosNetworkPolicyBinding.network_id))"}],"source_content_type":"text/x-python","patch_set":1,"id":"d8dfb12e_6c5aafd0","line":122,"range":{"start_line":122,"start_character":40,"end_line":122,"end_character":47},"in_reply_to":"e20f849d_94f3be87","updated":"2021-11-19 08:34:46.000000000","message":"Correct! What I\u0027m doing has no sense (it is valid but unnecessarily complicated).","commit_id":"20bd9d2ae468679b9af84b9ac388ad480878caf6"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"3d95a8d2875ec9701879921f82a1adffe98dbba5","unresolved":true,"context_lines":[{"line_number":432,"context_line":"        \"\"\"Check if a floating IP network has a QoS policy"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        Since LP#1950454, the floating IPs inherit the QoS policy from the"},{"line_number":435,"context_line":"        external network. This check emits a warning message in case of having"},{"line_number":436,"context_line":"        any external network with associated floating IPs and QoS policies"},{"line_number":437,"context_line":"        bound."},{"line_number":438,"context_line":"        \"\"\""},{"line_number":439,"context_line":"        network_ids \u003d []"},{"line_number":440,"context_line":"        for network_id in get_external_networks_with_qos_policies():"}],"source_content_type":"text/x-python","patch_set":1,"id":"7fc5f97f_93297eef","line":437,"range":{"start_line":435,"start_character":45,"end_line":437,"end_character":13},"updated":"2021-11-19 02:00:03.000000000","message":"I\u0027m not quite sure why this should be a warning? Did you mean if external network set a default qos policy, while floating IP has it\u0027s own binding qos policy, these external network (default) qos policy will have side effect on floating IP\u0027s? Policy overriding will happen? IMO, it does not override floating IP\u0027s existing binding qos policy, so this check is not needed.\n\np.s. network default qos for ports under it, did not have a patch to do such upgrade check. \nhttps://review.opendev.org/q/topic:%22bug%252F1851362%22+(status:open%20OR%20status:merged)","commit_id":"20bd9d2ae468679b9af84b9ac388ad480878caf6"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"3070715566e18a5add8ab8b47bf9f0929d4e74a9","unresolved":true,"context_lines":[{"line_number":432,"context_line":"        \"\"\"Check if a floating IP network has a QoS policy"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        Since LP#1950454, the floating IPs inherit the QoS policy from the"},{"line_number":435,"context_line":"        external network. This check emits a warning message in case of having"},{"line_number":436,"context_line":"        any external network with associated floating IPs and QoS policies"},{"line_number":437,"context_line":"        bound."},{"line_number":438,"context_line":"        \"\"\""},{"line_number":439,"context_line":"        network_ids \u003d []"},{"line_number":440,"context_line":"        for network_id in get_external_networks_with_qos_policies():"}],"source_content_type":"text/x-python","patch_set":1,"id":"13d26ecb_99714c32","line":437,"range":{"start_line":435,"start_character":45,"end_line":437,"end_character":13},"in_reply_to":"1050d27a_ee26c53f","updated":"2021-11-22 10:00:54.000000000","message":"We discussed this RFE in the drivers meeting and it was approved.\n\nI\u0027m implementing this check to provide to the admin information about the current status of the network QoS and the FIPs. Admins can remove the QoS from the external networks if needed.\n\nI don\u0027t agree with adding an extra config knob for this feature.","commit_id":"20bd9d2ae468679b9af84b9ac388ad480878caf6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"ab46cedcd06c185738b562f3365fdd9a0ba3719b","unresolved":true,"context_lines":[{"line_number":432,"context_line":"        \"\"\"Check if a floating IP network has a QoS policy"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        Since LP#1950454, the floating IPs inherit the QoS policy from the"},{"line_number":435,"context_line":"        external network. This check emits a warning message in case of having"},{"line_number":436,"context_line":"        any external network with associated floating IPs and QoS policies"},{"line_number":437,"context_line":"        bound."},{"line_number":438,"context_line":"        \"\"\""},{"line_number":439,"context_line":"        network_ids \u003d []"},{"line_number":440,"context_line":"        for network_id in get_external_networks_with_qos_policies():"}],"source_content_type":"text/x-python","patch_set":1,"id":"953d9ec8_b54e156c","line":437,"range":{"start_line":435,"start_character":45,"end_line":437,"end_character":13},"in_reply_to":"13d26ecb_99714c32","updated":"2021-11-22 10:46:34.000000000","message":"\u003e We discussed this RFE in the drivers meeting and it was approved.\n\u003e \n\u003e I\u0027m implementing this check to provide to the admin information about the current status of the network QoS and the FIPs. Admins can remove the QoS from the external networks if needed.\n\nAnother option is to assign an \"empty\" QoS policy to such FIPs, thus they will not inherit network\u0027s policy\n\n\u003e \n\u003e I don\u0027t agree with adding an extra config knob for this feature.","commit_id":"20bd9d2ae468679b9af84b9ac388ad480878caf6"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2945886e9f9b63c1bb08a2dda1ea260382d03bf1","unresolved":true,"context_lines":[{"line_number":432,"context_line":"        \"\"\"Check if a floating IP network has a QoS policy"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        Since LP#1950454, the floating IPs inherit the QoS policy from the"},{"line_number":435,"context_line":"        external network. This check emits a warning message in case of having"},{"line_number":436,"context_line":"        any external network with associated floating IPs and QoS policies"},{"line_number":437,"context_line":"        bound."},{"line_number":438,"context_line":"        \"\"\""},{"line_number":439,"context_line":"        network_ids \u003d []"},{"line_number":440,"context_line":"        for network_id in get_external_networks_with_qos_policies():"}],"source_content_type":"text/x-python","patch_set":1,"id":"ad6ef6cc_3deca287","line":437,"range":{"start_line":435,"start_character":45,"end_line":437,"end_character":13},"in_reply_to":"2cf30e5c_b3e26a15","updated":"2021-11-24 08:33:20.000000000","message":"Adding a new parameter to handle the FIP QoS means to fragment the API. We should expose the same API as with fixed ports. Actually it is the same when applying a QoS policy to a FIP.\n\nAbout the a configuration parameter to drive the API, this has been discarded by the community always and for good reasons.\n\nIf you have bound fixed IP ports in the external network, inheriting from the network QoS, then the administrator can apply directly on the ports the QoS policy. This is the case 2.1\n\nIf you have bound FIPs on this network, this check will warn about those ones without QoS. This is the case 2.2\n\nThis cannot be considered as a hidden behaviour. This feature is exposed by a new extension and a upgrade check. This everything but hidden.","commit_id":"20bd9d2ae468679b9af84b9ac388ad480878caf6"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f4b58e9ac3043c4a7c39c07ac914081f9da67a7f","unresolved":true,"context_lines":[{"line_number":432,"context_line":"        \"\"\"Check if a floating IP network has a QoS policy"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        Since LP#1950454, the floating IPs inherit the QoS policy from the"},{"line_number":435,"context_line":"        external network. This check emits a warning message in case of having"},{"line_number":436,"context_line":"        any external network with associated floating IPs and QoS policies"},{"line_number":437,"context_line":"        bound."},{"line_number":438,"context_line":"        \"\"\""},{"line_number":439,"context_line":"        network_ids \u003d []"},{"line_number":440,"context_line":"        for network_id in get_external_networks_with_qos_policies():"}],"source_content_type":"text/x-python","patch_set":1,"id":"e20f721b_9ef1ba8a","line":437,"range":{"start_line":435,"start_character":45,"end_line":437,"end_character":13},"in_reply_to":"43ec05c3_d3c02cb6","updated":"2021-11-19 08:34:46.000000000","message":"This is just a warning, nothing else. I\u0027m not checking the FIP QoS policies but I could add (IMO, this is over-engineering)\n\nIf we didn\u0027t add this check in the port qos inheritance, that was a mistake. This RFE implies a behavioural change and the user deserves to be informed.","commit_id":"20bd9d2ae468679b9af84b9ac388ad480878caf6"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"04dbfa79e45cb937996d69801f301177bf751289","unresolved":true,"context_lines":[{"line_number":432,"context_line":"        \"\"\"Check if a floating IP network has a QoS policy"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        Since LP#1950454, the floating IPs inherit the QoS policy from the"},{"line_number":435,"context_line":"        external network. This check emits a warning message in case of having"},{"line_number":436,"context_line":"        any external network with associated floating IPs and QoS policies"},{"line_number":437,"context_line":"        bound."},{"line_number":438,"context_line":"        \"\"\""},{"line_number":439,"context_line":"        network_ids \u003d []"},{"line_number":440,"context_line":"        for network_id in get_external_networks_with_qos_policies():"}],"source_content_type":"text/x-python","patch_set":1,"id":"1050d27a_ee26c53f","line":437,"range":{"start_line":435,"start_character":45,"end_line":437,"end_character":13},"in_reply_to":"44fb51d2_50f38a56","updated":"2021-11-22 06:34:54.000000000","message":"Yes, floating IPs have no bonding QoS policy which are intentionally not set by operators. So it will inherit anyway? Then, how to make sure the upgrade not break such settings?\n\nIMO, maybe add a config option to make such behavior configurable? Then cloud admins can decide how to do the upgrading.","commit_id":"20bd9d2ae468679b9af84b9ac388ad480878caf6"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a238c019d34f89c9e145b8f6eddee8801cfbe70c","unresolved":true,"context_lines":[{"line_number":432,"context_line":"        \"\"\"Check if a floating IP network has a QoS policy"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        Since LP#1950454, the floating IPs inherit the QoS policy from the"},{"line_number":435,"context_line":"        external network. This check emits a warning message in case of having"},{"line_number":436,"context_line":"        any external network with associated floating IPs and QoS policies"},{"line_number":437,"context_line":"        bound."},{"line_number":438,"context_line":"        \"\"\""},{"line_number":439,"context_line":"        network_ids \u003d []"},{"line_number":440,"context_line":"        for network_id in get_external_networks_with_qos_policies():"}],"source_content_type":"text/x-python","patch_set":1,"id":"44fb51d2_50f38a56","line":437,"range":{"start_line":435,"start_character":45,"end_line":437,"end_character":13},"in_reply_to":"63da4d1a_c420f22a","updated":"2021-11-21 17:12:17.000000000","message":"Sorry, what does it means \"no limit\"? Do you mean not setting a QoS policy on the FIP?\n\nIf the FIP network has a QoS policy, all FIPs will inherit it. The FIP QoS will prevail but for those without QoS, the network policy will apply.\n\nThis is why I\u0027m doing this check.","commit_id":"20bd9d2ae468679b9af84b9ac388ad480878caf6"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"da6ff8f3ba1aec577036f4d6a76e842e2dffffaa","unresolved":true,"context_lines":[{"line_number":432,"context_line":"        \"\"\"Check if a floating IP network has a QoS policy"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        Since LP#1950454, the floating IPs inherit the QoS policy from the"},{"line_number":435,"context_line":"        external network. This check emits a warning message in case of having"},{"line_number":436,"context_line":"        any external network with associated floating IPs and QoS policies"},{"line_number":437,"context_line":"        bound."},{"line_number":438,"context_line":"        \"\"\""},{"line_number":439,"context_line":"        network_ids \u003d []"},{"line_number":440,"context_line":"        for network_id in get_external_networks_with_qos_policies():"}],"source_content_type":"text/x-python","patch_set":1,"id":"b443056b_7d1150de","line":437,"range":{"start_line":435,"start_character":45,"end_line":437,"end_character":13},"in_reply_to":"77374e1f_c5197ce4","updated":"2021-11-25 09:09:21.000000000","message":"If I\u0027m not wrong you need a tool to, for a defined network (an accepting \"port-device-owner\" as an optional parameter), set the network QoS policy to those ports. Ok, this is feasible.","commit_id":"20bd9d2ae468679b9af84b9ac388ad480878caf6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"243e9bab234946110486bda612994eb861eb7dfe","unresolved":true,"context_lines":[{"line_number":432,"context_line":"        \"\"\"Check if a floating IP network has a QoS policy"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        Since LP#1950454, the floating IPs inherit the QoS policy from the"},{"line_number":435,"context_line":"        external network. This check emits a warning message in case of having"},{"line_number":436,"context_line":"        any external network with associated floating IPs and QoS policies"},{"line_number":437,"context_line":"        bound."},{"line_number":438,"context_line":"        \"\"\""},{"line_number":439,"context_line":"        network_ids \u003d []"},{"line_number":440,"context_line":"        for network_id in get_external_networks_with_qos_policies():"}],"source_content_type":"text/x-python","patch_set":1,"id":"43ec05c3_d3c02cb6","line":437,"range":{"start_line":435,"start_character":45,"end_line":437,"end_character":13},"in_reply_to":"7fc5f97f_93297eef","updated":"2021-11-19 07:45:43.000000000","message":"AFAIU this handles the case when FIP has no policy binding, and after upgrade it inherits network QoS policy, IMO it deserves a warning","commit_id":"20bd9d2ae468679b9af84b9ac388ad480878caf6"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"199183e51c67ebaf93b2791493c838edaf0acd71","unresolved":true,"context_lines":[{"line_number":432,"context_line":"        \"\"\"Check if a floating IP network has a QoS policy"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        Since LP#1950454, the floating IPs inherit the QoS policy from the"},{"line_number":435,"context_line":"        external network. This check emits a warning message in case of having"},{"line_number":436,"context_line":"        any external network with associated floating IPs and QoS policies"},{"line_number":437,"context_line":"        bound."},{"line_number":438,"context_line":"        \"\"\""},{"line_number":439,"context_line":"        network_ids \u003d []"},{"line_number":440,"context_line":"        for network_id in get_external_networks_with_qos_policies():"}],"source_content_type":"text/x-python","patch_set":1,"id":"c3aeb978_1c33389b","line":437,"range":{"start_line":435,"start_character":45,"end_line":437,"end_character":13},"in_reply_to":"953d9ec8_b54e156c","updated":"2021-11-22 13:58:28.000000000","message":"That implies to change the current API behaviour. We don\u0027t have this concept of \"empty\" QoS.\n\nWe can discuss the possibility, during some releases, to add a config knob to disable the inheritance of the network QoS into the FIPs. But as commented, the solution is to remove the QoS policy from the external network. Unless you have fixed ports on it, currently the network QoS policy on those networks is useless. And this patch is warning about this.\n\nIn any case, as commented, I will bring this topic to the Neutron meeting.\n\nAnd just to be aware, this could be implemented in a follow-up patch. So far, no change in the L3 agents has been done, [1] is the first one of this series actually making use of this new network QoS.\n\n[1]https://review.opendev.org/c/openstack/neutron/+/817790","commit_id":"20bd9d2ae468679b9af84b9ac388ad480878caf6"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"bad6e44a3f0fc72741ce28deffa510537a7b0492","unresolved":true,"context_lines":[{"line_number":432,"context_line":"        \"\"\"Check if a floating IP network has a QoS policy"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        Since LP#1950454, the floating IPs inherit the QoS policy from the"},{"line_number":435,"context_line":"        external network. This check emits a warning message in case of having"},{"line_number":436,"context_line":"        any external network with associated floating IPs and QoS policies"},{"line_number":437,"context_line":"        bound."},{"line_number":438,"context_line":"        \"\"\""},{"line_number":439,"context_line":"        network_ids \u003d []"},{"line_number":440,"context_line":"        for network_id in get_external_networks_with_qos_policies():"}],"source_content_type":"text/x-python","patch_set":1,"id":"e650bcd5_56f63bef","line":437,"range":{"start_line":435,"start_character":45,"end_line":437,"end_character":13},"in_reply_to":"ad6ef6cc_3deca287","updated":"2021-11-24 12:06:51.000000000","message":"@LIU Yulong:\nMy first question is why QoS for FIPs and ports should be different thing? If both port (L2) and FIP (L3) are from the same external network, both will consume same bandwidth from that network, right? I don\u0027t really see any reason why we should introduce new concept of floatingip_qos_policy as that would make things more complicated IMO.\n\nRegarding usecase which You described - if there is qos_policy associated directly with port effective policy is always like:\n\n    policy_id \u003d port.get(\u0027qos_policy_id\u0027) or network.get(\u0027qos_policy_id\u0027)\n\nIt\u0027s not that max bw will be calculated from both of them:\n\n    max(port_qos_policy, network_qos_policy).\n\n\nSo before upgrade, if now You have qos_policy set on the external network and this is effectively working for ports in that network but not on fips, You can attach that qos policy directly to the ports and remove from network. This should effectively work in the same way as before for You but it will be more consistent between FIPs and ports than it\u0027s now.\nIMO we made mistake by not adding that inheritance of the QoS policy id from network to FIPs when we did QoS for FIPs initially and now we should fix that.","commit_id":"20bd9d2ae468679b9af84b9ac388ad480878caf6"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"52e06d31fb820dd0bc5c4979299e48ae0e0e4a73","unresolved":true,"context_lines":[{"line_number":432,"context_line":"        \"\"\"Check if a floating IP network has a QoS policy"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        Since LP#1950454, the floating IPs inherit the QoS policy from the"},{"line_number":435,"context_line":"        external network. This check emits a warning message in case of having"},{"line_number":436,"context_line":"        any external network with associated floating IPs and QoS policies"},{"line_number":437,"context_line":"        bound."},{"line_number":438,"context_line":"        \"\"\""},{"line_number":439,"context_line":"        network_ids \u003d []"},{"line_number":440,"context_line":"        for network_id in get_external_networks_with_qos_policies():"}],"source_content_type":"text/x-python","patch_set":1,"id":"77374e1f_c5197ce4","line":437,"range":{"start_line":435,"start_character":45,"end_line":437,"end_character":13},"in_reply_to":"bf94213e_e1b7368d","updated":"2021-11-25 01:52:44.000000000","message":"About the ``config driven API``, IMO, the main problem is how to define it. Neutron has many existing configs which are \"enable_xxx\", \"max_xxx\", \"allow_xxx\". Each of them can change the API behavior. And even more, you can consider ``service_plugins`` as a flag which many times introduced new APIs. It expands neutron API scope. Config options, IMO, are improving the elasticity of a program, especially for a widely used project. You can not say everything can be covered by code itself. But give users some options to choose. For example, Linux has thousands CONFIGs and drivers. Ooooooook, back to this, for this upgrade, the main problem is not in API side, it should be agent side, there is no way to disable such inherition. For the upgrading here, it shoud not break existing running cloud, since they are running fine as neutron current defined. Many times we said to bug reportors, it is a feature not a bug, because it was done in that way from the very beggining. Since there is no code to illustrate the real use in agent side of that QOS_NETWORK_POLICY_ID [2]. Can it be configrable in agent side? IMO, a new agent extension can be an option. Then, if it is not set, let neutron run as it is.\n\nSo, Slawek\u0027s suggestion can be one solution, 1) set exsiting port\u0027s with independent qos policy, 2) remove the external network\u0027s qos policy 2) upgrade the code, 3) set the new qos policy back to external network to make this inheriting work take effect. But once you have run a cloud, you will get complains from your upper platform. Because, they need to change the API combinations, they need to take care of the ports. But fine, I will explain to our developers. For robustness, please add a upgrade tool which will make cloud admins can easily set the QoS policy to existing port. Something like this:\n\nneutron-port-qos-policy-set --network \u003cexternal-network\u003e [--port-device-owner \u003cnetwork:xxxx\u003e] --qos-policy \u003cpolicy-id\u003e\n\nOr an openstack client command:\n\nopenstack network qos port set --network \u003cexternal-network\u003e [--port-device-owner \u003cnetwork:xxxx\u003e] --qos-policy \u003cpolicy-id\u003e\n\n@Slawek, for your question, network is a container whose main attribute is L2 segment (vlan_id, vxlan_vni, ...), while ports are resources coming from it. Port has main attribute mac address and fixed IPs. For qos applied on ports, neutron mostly limit all traffic on it, fixed IPs are ingnored, it is queuing, policing and shaping traffic on it. So we consider that port QoS is a L2 traffic limitation mechanism, because every traffic with same L2 sementation id will be limited. Floating IP is a special resource, it borrows the fixed IP from a network:floating port, but it is mainly for L3 NATing. It resides on a L2 gateway port. We want to set each L3 IP a diffferent QoS, while port QoS is limitting everything passing on it. So we make them independently. I guess there are some dissision on the original layer 3 IP rate limit [1] spec.\n\n[1] https://review.opendev.org/c/openstack/neutron-specs/+/374506/18/specs/pike/layer-3-rate-limit.rst\n[2] https://review.opendev.org/c/openstack/neutron/+/817734/6/neutron/db/l3_fip_qos.py#34","commit_id":"20bd9d2ae468679b9af84b9ac388ad480878caf6"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"da0f980f692db240aeaa66baadd874dc39290bea","unresolved":true,"context_lines":[{"line_number":432,"context_line":"        \"\"\"Check if a floating IP network has a QoS policy"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        Since LP#1950454, the floating IPs inherit the QoS policy from the"},{"line_number":435,"context_line":"        external network. This check emits a warning message in case of having"},{"line_number":436,"context_line":"        any external network with associated floating IPs and QoS policies"},{"line_number":437,"context_line":"        bound."},{"line_number":438,"context_line":"        \"\"\""},{"line_number":439,"context_line":"        network_ids \u003d []"},{"line_number":440,"context_line":"        for network_id in get_external_networks_with_qos_policies():"}],"source_content_type":"text/x-python","patch_set":1,"id":"eb81b6d7_d3b0dc61","line":437,"range":{"start_line":435,"start_character":45,"end_line":437,"end_character":13},"in_reply_to":"c3aeb978_1c33389b","updated":"2021-11-22 14:30:01.000000000","message":"I agree with Rodolfo here and don\u0027t like the idea of adding config option for that. It would be \"config driven API behaviour\" then so we should make it at least discoverable which means new api extension which should be loaded/removed depending on the config option value.\nI also think that warning users in the upgade check and in the release notes should be enough. We may add in the check\u0027s message here info what can be done to keep FIPs without limits if needed, like e.g. that user can either remove QoS policy from the external network and set it directly on ports which requires that or set some extra QoS policy with very high limit on the FIPs which have to be \"no limit\" FIPs still.","commit_id":"20bd9d2ae468679b9af84b9ac388ad480878caf6"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"c9d0634d60b97ebd3630f341a1ce4b3bff9dea2b","unresolved":true,"context_lines":[{"line_number":432,"context_line":"        \"\"\"Check if a floating IP network has a QoS policy"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        Since LP#1950454, the floating IPs inherit the QoS policy from the"},{"line_number":435,"context_line":"        external network. This check emits a warning message in case of having"},{"line_number":436,"context_line":"        any external network with associated floating IPs and QoS policies"},{"line_number":437,"context_line":"        bound."},{"line_number":438,"context_line":"        \"\"\""},{"line_number":439,"context_line":"        network_ids \u003d []"},{"line_number":440,"context_line":"        for network_id in get_external_networks_with_qos_policies():"}],"source_content_type":"text/x-python","patch_set":1,"id":"63da4d1a_c420f22a","line":437,"range":{"start_line":435,"start_character":45,"end_line":437,"end_character":13},"in_reply_to":"e20f721b_9ef1ba8a","updated":"2021-11-20 01:53:57.000000000","message":"For those floating IPs which are intentionally set to no limit, after the neutron upgrade, they are going to inherit the external network\u0027s qos policy?","commit_id":"20bd9d2ae468679b9af84b9ac388ad480878caf6"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"808275ff84a61e500964e644852c2c77dd683dbd","unresolved":true,"context_lines":[{"line_number":432,"context_line":"        \"\"\"Check if a floating IP network has a QoS policy"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        Since LP#1950454, the floating IPs inherit the QoS policy from the"},{"line_number":435,"context_line":"        external network. This check emits a warning message in case of having"},{"line_number":436,"context_line":"        any external network with associated floating IPs and QoS policies"},{"line_number":437,"context_line":"        bound."},{"line_number":438,"context_line":"        \"\"\""},{"line_number":439,"context_line":"        network_ids \u003d []"},{"line_number":440,"context_line":"        for network_id in get_external_networks_with_qos_policies():"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf94213e_e1b7368d","line":437,"range":{"start_line":435,"start_character":45,"end_line":437,"end_character":13},"in_reply_to":"e650bcd5_56f63bef","updated":"2021-11-24 15:09:23.000000000","message":"My 2 cents:\n* avoid if possible cfg driven API.\n* warn the user before update that the FIP will inherit the QoS policy from ext-net.\n* let\u0027s have a similar behaviour like we have for Ports","commit_id":"20bd9d2ae468679b9af84b9ac388ad480878caf6"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"7463bc0fb2912e7995da40912df105dba2ab87dd","unresolved":true,"context_lines":[{"line_number":432,"context_line":"        \"\"\"Check if a floating IP network has a QoS policy"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        Since LP#1950454, the floating IPs inherit the QoS policy from the"},{"line_number":435,"context_line":"        external network. This check emits a warning message in case of having"},{"line_number":436,"context_line":"        any external network with associated floating IPs and QoS policies"},{"line_number":437,"context_line":"        bound."},{"line_number":438,"context_line":"        \"\"\""},{"line_number":439,"context_line":"        network_ids \u003d []"},{"line_number":440,"context_line":"        for network_id in get_external_networks_with_qos_policies():"}],"source_content_type":"text/x-python","patch_set":1,"id":"2cf30e5c_b3e26a15","line":437,"range":{"start_line":435,"start_character":45,"end_line":437,"end_character":13},"in_reply_to":"eb81b6d7_d3b0dc61","updated":"2021-11-23 01:45:55.000000000","message":"Remove the external network\u0027s qos policy will disable all ports\u0027 QoS inherited from it. So that  frees the ports QoS limitation under the external network. So here are some scenarios before the upgrading:\n1. external network has no qos policy, so ports (especially, router external gateway port, floating IP agent gateway port) has no QoS limitation.\n1.1. external network has no QoS policy, and floating IPs from the external network have QoS policy. Floating IP\u0027s QoS is limited by it\u0027s own QoS policy.\n1.2. external network has no QoS policy, and floating IPs from the external network have no binding QoS polciy. Floating IP\u0027s QoS is unlimited.\n\n2. external network has binding QoS policy, so ports under it has QoS limitation.\n2.1. external network has binding QoS policy, and floating IPs from the external network have binding QoS policy. Then the port\u0027s limitation will be the maximum value, the floating IP\u0027s bandwidth will be min(ports_qos_value, floating_ip_qos_value).\n2.2. external network has binding QoS policy, and floating IPs from the external network hasve no binding QoS policy. Then floating IP\u0027s will be limited (or inherit）with such port\u0027s QoS limitation. This looks like some kind of default QoS for floating IPs. 😊\n\nAfter deep thinking of these cases, I wonder the real purpose of the original RFE. Seems directly use qos_policy_id from external newtork breaks the case 2.1 and 2.2. IMO, L3 IPs\u0027 QoS and ports\u0027 QoS should be independent. Maybe this implementation can be done with:\n1. add a floating_qos_polidy_id to external network, then ports\u0027 qos will still inherit the external network\u0027s qos_policy_id.\n2. floating IP decides to whether inherit the floating_qos_polidy_id or not by checking some config value.\n\nAnyway, IMHO, for varity running clouds, we should cover these cases after upgrading. My suggestion is upgrading with nothing changed, let the cloud admins read the release note and make some config tunning to decide what should be done. If you have really operated a cloud, some hidden behaviors will cause user complaints😞. Explicit is better than implicit.","commit_id":"20bd9d2ae468679b9af84b9ac388ad480878caf6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"243e9bab234946110486bda612994eb861eb7dfe","unresolved":true,"context_lines":[{"line_number":444,"context_line":"        if network_ids:"},{"line_number":445,"context_line":"            return upgradecheck.Result("},{"line_number":446,"context_line":"                upgradecheck.Code.WARNING,"},{"line_number":447,"context_line":"                _(\u0027The following external networks have at least one \u0027"},{"line_number":448,"context_line":"                  \u0027associated floating IP and a bound QoS policy: %s\u0027) %"},{"line_number":449,"context_line":"                \u0027, \u0027.join(network_ids))"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"        return upgradecheck.Result("}],"source_content_type":"text/x-python","patch_set":1,"id":"3c4846a3_f3625449","line":448,"range":{"start_line":447,"start_character":19,"end_line":448,"end_character":68},"updated":"2021-11-19 07:45:43.000000000","message":"Maybe it should tell what it would mean after upgrade","commit_id":"20bd9d2ae468679b9af84b9ac388ad480878caf6"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"808275ff84a61e500964e644852c2c77dd683dbd","unresolved":true,"context_lines":[{"line_number":444,"context_line":"        if network_ids:"},{"line_number":445,"context_line":"            return upgradecheck.Result("},{"line_number":446,"context_line":"                upgradecheck.Code.WARNING,"},{"line_number":447,"context_line":"                _(\u0027The following external networks have at least one \u0027"},{"line_number":448,"context_line":"                  \u0027associated floating IP and a bound QoS policy: %s\u0027) %"},{"line_number":449,"context_line":"                \u0027, \u0027.join(network_ids))"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"        return upgradecheck.Result("}],"source_content_type":"text/x-python","patch_set":1,"id":"b9bae18a_1decdea7","line":448,"range":{"start_line":447,"start_character":19,"end_line":448,"end_character":68},"in_reply_to":"2f3235a5_80a6770b","updated":"2021-11-24 15:09:23.000000000","message":"+1","commit_id":"20bd9d2ae468679b9af84b9ac388ad480878caf6"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f4b58e9ac3043c4a7c39c07ac914081f9da67a7f","unresolved":true,"context_lines":[{"line_number":444,"context_line":"        if network_ids:"},{"line_number":445,"context_line":"            return upgradecheck.Result("},{"line_number":446,"context_line":"                upgradecheck.Code.WARNING,"},{"line_number":447,"context_line":"                _(\u0027The following external networks have at least one \u0027"},{"line_number":448,"context_line":"                  \u0027associated floating IP and a bound QoS policy: %s\u0027) %"},{"line_number":449,"context_line":"                \u0027, \u0027.join(network_ids))"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"        return upgradecheck.Result("}],"source_content_type":"text/x-python","patch_set":1,"id":"2f3235a5_80a6770b","line":448,"range":{"start_line":447,"start_character":19,"end_line":448,"end_character":68},"in_reply_to":"3c4846a3_f3625449","updated":"2021-11-19 08:34:46.000000000","message":"I\u0027ll add a better description.","commit_id":"20bd9d2ae468679b9af84b9ac388ad480878caf6"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"8f307f3a13f383603923db7b76dfc10153572840","unresolved":true,"context_lines":[{"line_number":123,"context_line":"    query \u003d ctx.session.query(external_net.ExternalNetwork.network_id)"},{"line_number":124,"context_line":"    query \u003d query.filter(external_net.ExternalNetwork.network_id \u003d\u003d"},{"line_number":125,"context_line":"                         qos_models.QosNetworkPolicyBinding.network_id)"},{"line_number":126,"context_line":"    return [network[0] for network in query.all()]"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"def get_fip_per_network_without_qos_policies(network_id):"}],"source_content_type":"text/x-python","patch_set":5,"id":"a29b50a8_1513186b","line":126,"updated":"2021-12-07 09:37:43.000000000","message":"This method is probably causing failure of the functional tests job in the next patch in the series, see: https://f52137d124383d1b1ab0-2e6f3c0b1b88be23241ab9208d1c2657.ssl.cf2.rackcdn.com/817790/5/check/neutron-functional-with-uwsgi/f8de746/testr_results.html","commit_id":"e1d1b30d5cdded5409ee707a0a4a4967fc48c9a9"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9f79c7f6bc9a0ed9216781ca32098aef6697dcef","unresolved":true,"context_lines":[{"line_number":123,"context_line":"    query \u003d ctx.session.query(external_net.ExternalNetwork.network_id)"},{"line_number":124,"context_line":"    query \u003d query.filter(external_net.ExternalNetwork.network_id \u003d\u003d"},{"line_number":125,"context_line":"                         qos_models.QosNetworkPolicyBinding.network_id)"},{"line_number":126,"context_line":"    return [network[0] for network in query.all()]"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"def get_fip_per_network_without_qos_policies(network_id):"}],"source_content_type":"text/x-python","patch_set":5,"id":"72dd5bf9_69a06c7c","line":126,"in_reply_to":"8b5d6adc_3ca4cadb","updated":"2021-12-14 10:20:27.000000000","message":"Ok, let\u0027s recheck once again to see if test neutron.tests.functional.cmd.test_status.StatusTest.test_neutron_status_cli will be ok.","commit_id":"e1d1b30d5cdded5409ee707a0a4a4967fc48c9a9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"056936e5a8b261e014ec527b3771c5c05c557dee","unresolved":true,"context_lines":[{"line_number":123,"context_line":"    query \u003d ctx.session.query(external_net.ExternalNetwork.network_id)"},{"line_number":124,"context_line":"    query \u003d query.filter(external_net.ExternalNetwork.network_id \u003d\u003d"},{"line_number":125,"context_line":"                         qos_models.QosNetworkPolicyBinding.network_id)"},{"line_number":126,"context_line":"    return [network[0] for network in query.all()]"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"def get_fip_per_network_without_qos_policies(network_id):"}],"source_content_type":"text/x-python","patch_set":5,"id":"8b5d6adc_3ca4cadb","line":126,"in_reply_to":"a29b50a8_1513186b","updated":"2021-12-13 09:53:40.000000000","message":"Those errors are related to https://bugs.launchpad.net/neutron/+bug/1952508","commit_id":"e1d1b30d5cdded5409ee707a0a4a4967fc48c9a9"}],"neutron/tests/unit/cmd/upgrade_checks/test_checks.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"c6249f51c92547076fca678908811893a817b999","unresolved":true,"context_lines":[{"line_number":236,"context_line":"                checks, \u0027get_external_networks_with_qos_policies\u0027) \\"},{"line_number":237,"context_line":"                as mock_nets, \\"},{"line_number":238,"context_line":"                mock.patch.object("},{"line_number":239,"context_line":"                    checks, \u0027get_floatingip_per_network_count\u0027) as mock_fips:"},{"line_number":240,"context_line":"            for _nets, _fips, returned_code in cases:"},{"line_number":241,"context_line":"                mock_nets.return_value \u003d _nets"},{"line_number":242,"context_line":"                mock_fips.return_value \u003d _fips"}],"source_content_type":"text/x-python","patch_set":3,"id":"cc644a6a_6754f2e9","line":239,"range":{"start_line":239,"start_character":29,"end_line":239,"end_character":61},"updated":"2021-11-19 11:15:21.000000000","message":"get_floatingip_per_network_without_qos_policies","commit_id":"fd0d9d977ee7b4414502e30eb66ba0ad8a3b81d9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"de99b69c7f2336689d9aee0e00c1af998d25b681","unresolved":false,"context_lines":[{"line_number":236,"context_line":"                checks, \u0027get_external_networks_with_qos_policies\u0027) \\"},{"line_number":237,"context_line":"                as mock_nets, \\"},{"line_number":238,"context_line":"                mock.patch.object("},{"line_number":239,"context_line":"                    checks, \u0027get_floatingip_per_network_count\u0027) as mock_fips:"},{"line_number":240,"context_line":"            for _nets, _fips, returned_code in cases:"},{"line_number":241,"context_line":"                mock_nets.return_value \u003d _nets"},{"line_number":242,"context_line":"                mock_fips.return_value \u003d _fips"}],"source_content_type":"text/x-python","patch_set":3,"id":"50d2d7f9_1d223c15","line":239,"range":{"start_line":239,"start_character":29,"end_line":239,"end_character":61},"in_reply_to":"cc644a6a_6754f2e9","updated":"2021-11-19 12:14:20.000000000","message":"Done","commit_id":"fd0d9d977ee7b4414502e30eb66ba0ad8a3b81d9"}]}
