)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":33341,"name":"Maor Blaustein","email":"mblue@redhat.com","username":"blue"},"change_message_id":"78cf37a7baad4cd2b3d9fa78b6fedf16f143e6a6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"844373ba_249ceaec","updated":"2026-04-20 15:33:06.000000000","message":"Thank you Edu, changes look good, left some thoughts in comments.","commit_id":"7bd7fbf9578e8721bcbf1a442510d0d2d5d7bcb2"},{"author":{"_account_id":33341,"name":"Maor Blaustein","email":"mblue@redhat.com","username":"blue"},"change_message_id":"53334e8529da902bb38473b6562bd6b3542645a6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"704270c2_2e944588","updated":"2026-04-23 09:28:05.000000000","message":"Thank you for the comments and changes, LGTM.","commit_id":"89ba77e5496a43aae62063b2772b535fe0f720ac"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"efdf00eb731702f74ed8ae235d14a4391fb966d4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"2bf6585e_ef33ce9a","updated":"2026-04-21 11:56:00.000000000","message":"recheck whitebox-neutron-tempest-plugin-ovn-single-thread","commit_id":"89ba77e5496a43aae62063b2772b535fe0f720ac"},{"author":{"_account_id":20676,"name":"daniel.pawlik","display_name":"Daniel Pawlik","email":"dpawlik@redhat.com","username":"daniel.pawlik"},"change_message_id":"a005e00aa65e90cff52541777f5a9877d0783822","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"dd7b6df2_222aaf43","updated":"2026-04-21 14:59:36.000000000","message":"recheck whitebox-neutron-tempest-plugin-ovn-single-thread","commit_id":"89ba77e5496a43aae62063b2772b535fe0f720ac"}],"whitebox_neutron_tempest_plugin/config.py":[{"author":{"_account_id":33341,"name":"Maor Blaustein","email":"mblue@redhat.com","username":"blue"},"change_message_id":"78cf37a7baad4cd2b3d9fa78b6fedf16f143e6a6","unresolved":true,"context_lines":[{"line_number":243,"context_line":"               default\u003d\u0027/var/lib/openstack/\u0027,"},{"line_number":244,"context_line":"               help\u003d\u0027Root path to find the neutron related services on \u0027"},{"line_number":245,"context_line":"                    \u0027the computes.\u0027),"},{"line_number":246,"context_line":"    cfg.StrOpt(\u0027devstack_openstack_user\u0027,"},{"line_number":247,"context_line":"               default\u003d\u0027stack\u0027,"},{"line_number":248,"context_line":"               help\u003d\u0027User that installed openstack on devstack environment \u0027"},{"line_number":249,"context_line":"                    \u0027and can execute openstack commands and similar. \u0027"},{"line_number":250,"context_line":"                    \u0027When configured to \"\", the user running tempest will run \u0027"},{"line_number":251,"context_line":"                    \u0027those commands instead.\u0027),"},{"line_number":252,"context_line":"    cfg.StrOpt(\u0027devstack_venv_bin_path\u0027,"},{"line_number":253,"context_line":"               default\u003d\u0027/opt/stack/data/venv/bin\u0027,"},{"line_number":254,"context_line":"               help\u003d\u0027Path where some binary files such as \u0027"},{"line_number":255,"context_line":"                    \u0027neutron-ovn-db-sync-util can be found. When configured \u0027"},{"line_number":256,"context_line":"                    \u0027to \"\", it is assumed that the bin files can be found in \u0027"},{"line_number":257,"context_line":"                    \u0027$PATH\u0027),"},{"line_number":258,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":11,"id":"f0bda71f_a5834be9","line":257,"range":{"start_line":246,"start_character":0,"end_line":257,"end_character":29},"updated":"2026-04-20 15:33:06.000000000","message":"I was thinking since WNTP meant mainly to test podified, better to have default values for podified.\nThis makes it easier to maintain devstack override values in same patch and repo (this), and we have only 2 devstack voting jobs here (ovn ones) so will spare CI maintenance elsewhere.\nwdyt?","commit_id":"7bd7fbf9578e8721bcbf1a442510d0d2d5d7bcb2"},{"author":{"_account_id":33341,"name":"Maor Blaustein","email":"mblue@redhat.com","username":"blue"},"change_message_id":"53334e8529da902bb38473b6562bd6b3542645a6","unresolved":false,"context_lines":[{"line_number":243,"context_line":"               default\u003d\u0027/var/lib/openstack/\u0027,"},{"line_number":244,"context_line":"               help\u003d\u0027Root path to find the neutron related services on \u0027"},{"line_number":245,"context_line":"                    \u0027the computes.\u0027),"},{"line_number":246,"context_line":"    cfg.StrOpt(\u0027devstack_openstack_user\u0027,"},{"line_number":247,"context_line":"               default\u003d\u0027stack\u0027,"},{"line_number":248,"context_line":"               help\u003d\u0027User that installed openstack on devstack environment \u0027"},{"line_number":249,"context_line":"                    \u0027and can execute openstack commands and similar. \u0027"},{"line_number":250,"context_line":"                    \u0027When configured to \"\", the user running tempest will run \u0027"},{"line_number":251,"context_line":"                    \u0027those commands instead.\u0027),"},{"line_number":252,"context_line":"    cfg.StrOpt(\u0027devstack_venv_bin_path\u0027,"},{"line_number":253,"context_line":"               default\u003d\u0027/opt/stack/data/venv/bin\u0027,"},{"line_number":254,"context_line":"               help\u003d\u0027Path where some binary files such as \u0027"},{"line_number":255,"context_line":"                    \u0027neutron-ovn-db-sync-util can be found. When configured \u0027"},{"line_number":256,"context_line":"                    \u0027to \"\", it is assumed that the bin files can be found in \u0027"},{"line_number":257,"context_line":"                    \u0027$PATH\u0027),"},{"line_number":258,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":11,"id":"e8a21f7d_8a843091","line":257,"range":{"start_line":246,"start_character":0,"end_line":257,"end_character":29},"in_reply_to":"46183d47_2f8014e9","updated":"2026-04-23 09:28:05.000000000","message":"ok, saw some more comments on this patch, I see the need for both `devstack_openstack_user` and `devstack_venv_bin_path`.\nSeems good to me, thanks!","commit_id":"7bd7fbf9578e8721bcbf1a442510d0d2d5d7bcb2"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"24b63516dbf86a1ba275efd0bf5795bee5071c5d","unresolved":true,"context_lines":[{"line_number":243,"context_line":"               default\u003d\u0027/var/lib/openstack/\u0027,"},{"line_number":244,"context_line":"               help\u003d\u0027Root path to find the neutron related services on \u0027"},{"line_number":245,"context_line":"                    \u0027the computes.\u0027),"},{"line_number":246,"context_line":"    cfg.StrOpt(\u0027devstack_openstack_user\u0027,"},{"line_number":247,"context_line":"               default\u003d\u0027stack\u0027,"},{"line_number":248,"context_line":"               help\u003d\u0027User that installed openstack on devstack environment \u0027"},{"line_number":249,"context_line":"                    \u0027and can execute openstack commands and similar. \u0027"},{"line_number":250,"context_line":"                    \u0027When configured to \"\", the user running tempest will run \u0027"},{"line_number":251,"context_line":"                    \u0027those commands instead.\u0027),"},{"line_number":252,"context_line":"    cfg.StrOpt(\u0027devstack_venv_bin_path\u0027,"},{"line_number":253,"context_line":"               default\u003d\u0027/opt/stack/data/venv/bin\u0027,"},{"line_number":254,"context_line":"               help\u003d\u0027Path where some binary files such as \u0027"},{"line_number":255,"context_line":"                    \u0027neutron-ovn-db-sync-util can be found. When configured \u0027"},{"line_number":256,"context_line":"                    \u0027to \"\", it is assumed that the bin files can be found in \u0027"},{"line_number":257,"context_line":"                    \u0027$PATH\u0027),"},{"line_number":258,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":11,"id":"46183d47_2f8014e9","line":257,"range":{"start_line":246,"start_character":0,"end_line":257,"end_character":29},"in_reply_to":"f0bda71f_a5834be9","updated":"2026-04-21 08:33:19.000000000","message":"Sorry I am not understanding well. Are you proposing to add some podified configurable options for the new tests? If so, which ones?\n\nRegarding devstack configurable options, it is true that we support devstack mainly because we use opendev CI, but we can also use our local devstack environments to run WNTP tests and making WNTP a little more flexible for devstack could help with that. Example: https://review.opendev.org/c/x/whitebox-neutron-tempest-plugin/+/983699/comment/5a9c2b5a_d15b1ce6/","commit_id":"7bd7fbf9578e8721bcbf1a442510d0d2d5d7bcb2"}],"whitebox_neutron_tempest_plugin/tests/scenario/test_ovn_db_sync.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9f1c52625516a3864913e23d1c0b6e497fecbd09","unresolved":true,"context_lines":[{"line_number":33,"context_line":"            # files are only readable by stack, and tempest runs as"},{"line_number":34,"context_line":"            # the tempest user in CI."},{"line_number":35,"context_line":"            cls.db_sync_cmd \u003d ("},{"line_number":36,"context_line":"                \"sudo -u stack\""},{"line_number":37,"context_line":"                \" /opt/stack/data/venv/bin/neutron-ovn-db-sync-util\""},{"line_number":38,"context_line":"                \" --config-file /etc/neutron/neutron.conf\""},{"line_number":39,"context_line":"                \" --config-file /etc/neutron/plugins/ml2/ml2_conf.ini\")"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a9c2b5a_d15b1ce6","line":36,"updated":"2026-04-15 07:08:22.000000000","message":"this won\u0027t work in e.g. local environment where I have \"vagrant\" user instead of \"stack\". Could we maybe make it configurable?","commit_id":"38512a0a830dac8afbbdd4dc674699008234dfe7"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"16d4f534c18d9a4a9a3b65b37fcad039ee48d0e3","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            # files are only readable by stack, and tempest runs as"},{"line_number":34,"context_line":"            # the tempest user in CI."},{"line_number":35,"context_line":"            cls.db_sync_cmd \u003d ("},{"line_number":36,"context_line":"                \"sudo -u stack\""},{"line_number":37,"context_line":"                \" /opt/stack/data/venv/bin/neutron-ovn-db-sync-util\""},{"line_number":38,"context_line":"                \" --config-file /etc/neutron/neutron.conf\""},{"line_number":39,"context_line":"                \" --config-file /etc/neutron/plugins/ml2/ml2_conf.ini\")"}],"source_content_type":"text/x-python","patch_set":10,"id":"006c58ed_44f32362","line":36,"in_reply_to":"5a9c2b5a_d15b1ce6","updated":"2026-04-15 09:17:01.000000000","message":"Done","commit_id":"38512a0a830dac8afbbdd4dc674699008234dfe7"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9f1c52625516a3864913e23d1c0b6e497fecbd09","unresolved":true,"context_lines":[{"line_number":39,"context_line":"                \" --config-file /etc/neutron/plugins/ml2/ml2_conf.ini\")"},{"line_number":40,"context_line":"        else:"},{"line_number":41,"context_line":"            cls.db_sync_cmd \u003d ("},{"line_number":42,"context_line":"                \"{}-c neutron-api rsh deploy/neutron\""},{"line_number":43,"context_line":"                \" neutron-ovn-db-sync-util\""},{"line_number":44,"context_line":"                \" --config-file /usr/share/neutron/neutron-dist.conf\""},{"line_number":45,"context_line":"                \" --config-file /etc/neutron/neutron.conf\""}],"source_content_type":"text/x-python","patch_set":10,"id":"6327edcf_7c891640","line":42,"range":{"start_line":42,"start_character":17,"end_line":42,"end_character":21},"updated":"2026-04-15 07:08:22.000000000","message":"don\u0027t you miss empty space here between {} and -c ?","commit_id":"38512a0a830dac8afbbdd4dc674699008234dfe7"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"16d4f534c18d9a4a9a3b65b37fcad039ee48d0e3","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                \" --config-file /etc/neutron/plugins/ml2/ml2_conf.ini\")"},{"line_number":40,"context_line":"        else:"},{"line_number":41,"context_line":"            cls.db_sync_cmd \u003d ("},{"line_number":42,"context_line":"                \"{}-c neutron-api rsh deploy/neutron\""},{"line_number":43,"context_line":"                \" neutron-ovn-db-sync-util\""},{"line_number":44,"context_line":"                \" --config-file /usr/share/neutron/neutron-dist.conf\""},{"line_number":45,"context_line":"                \" --config-file /etc/neutron/neutron.conf\""}],"source_content_type":"text/x-python","patch_set":10,"id":"a63839be_4428fece","line":42,"range":{"start_line":42,"start_character":17,"end_line":42,"end_character":21},"in_reply_to":"6327edcf_7c891640","updated":"2026-04-15 09:17:01.000000000","message":"I\u0027ve added the space, but it was not needed because cls.OC is \u0027oc -n openstack \u0027, which is weird. But the rest of code using cls.OC adds a space too.\n\nI will send a followup patch making cls.OC \u003d \u0027oc -n openstack\u0027, which looks a bit better.","commit_id":"38512a0a830dac8afbbdd4dc674699008234dfe7"},{"author":{"_account_id":33341,"name":"Maor Blaustein","email":"mblue@redhat.com","username":"blue"},"change_message_id":"78cf37a7baad4cd2b3d9fa78b6fedf16f143e6a6","unresolved":true,"context_lines":[{"line_number":60,"context_line":"            self.db_sync_cmd, mode)"},{"line_number":61,"context_line":"        LOG.debug(\"Running neutron-ovn-db-sync-util in %s mode\", mode)"},{"line_number":62,"context_line":"        output \u003d self.run_on_master_controller("},{"line_number":63,"context_line":"            cmd, check\u003dTrue, timeout\u003d300)"},{"line_number":64,"context_line":"        LOG.debug(\"neutron-ovn-db-sync-util %s output:\\n%s\", mode, output)"},{"line_number":65,"context_line":"        return output"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"44988ef5_f0046baf","line":63,"range":{"start_line":63,"start_character":29,"end_line":63,"end_character":40},"updated":"2026-04-20 15:33:06.000000000","message":"What about making `timeout` for repair sync configurable on plugin level oslo configuration (for CI setting), would allow us to purposefully test lower times on different setups in CI for future optimization, or allow higher times on resource heavy CI setups in the future.","commit_id":"7bd7fbf9578e8721bcbf1a442510d0d2d5d7bcb2"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"24b63516dbf86a1ba275efd0bf5795bee5071c5d","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            self.db_sync_cmd, mode)"},{"line_number":61,"context_line":"        LOG.debug(\"Running neutron-ovn-db-sync-util in %s mode\", mode)"},{"line_number":62,"context_line":"        output \u003d self.run_on_master_controller("},{"line_number":63,"context_line":"            cmd, check\u003dTrue, timeout\u003d300)"},{"line_number":64,"context_line":"        LOG.debug(\"neutron-ovn-db-sync-util %s output:\\n%s\", mode, output)"},{"line_number":65,"context_line":"        return output"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"57f41579_7194883b","line":63,"range":{"start_line":63,"start_character":29,"end_line":63,"end_character":40},"in_reply_to":"44988ef5_f0046baf","updated":"2026-04-21 08:33:19.000000000","message":"Done and I also realized the previous value of 300 seconds was ridiculously high. I checked in tempest logs and the command takes 10 seconds approx, so I set it to 30 seconds by default.","commit_id":"7bd7fbf9578e8721bcbf1a442510d0d2d5d7bcb2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d3530dbf06a21dded4a2000d4df586eb32d5505f","unresolved":true,"context_lines":[{"line_number":33,"context_line":"            # Run as devstack_openstack_user (default: stack) because"},{"line_number":34,"context_line":"            # the OVN SSL private key files are only readable by that"},{"line_number":35,"context_line":"            # user, and tempest may run as a different user in CI."},{"line_number":36,"context_line":"            venv_bin \u003d WB_CONF.devstack_venv_bin_path"},{"line_number":37,"context_line":"            db_sync_bin \u003d ("},{"line_number":38,"context_line":"                \"{}/neutron-ovn-db-sync-util\".format(venv_bin)"},{"line_number":39,"context_line":"                if venv_bin else \"neutron-ovn-db-sync-util\")"}],"source_content_type":"text/x-python","patch_set":13,"id":"e43fcd3c_bc148e50","line":36,"range":{"start_line":36,"start_character":12,"end_line":36,"end_character":53},"updated":"2026-04-21 08:59:45.000000000","message":"I think that is not necessary. We can use, for example `which neutron-ovn-db-sync-util`. That will return the full path.\n\nWe can have a utils method for that, passing the command name as input parameter.","commit_id":"558c24f415e97d79486a0ee150cc3ca99e1e4ee2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"edd61d6d094ccf3f9a44ef173b9b411a5cde8cbf","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            # Run as devstack_openstack_user (default: stack) because"},{"line_number":34,"context_line":"            # the OVN SSL private key files are only readable by that"},{"line_number":35,"context_line":"            # user, and tempest may run as a different user in CI."},{"line_number":36,"context_line":"            venv_bin \u003d WB_CONF.devstack_venv_bin_path"},{"line_number":37,"context_line":"            db_sync_bin \u003d ("},{"line_number":38,"context_line":"                \"{}/neutron-ovn-db-sync-util\".format(venv_bin)"},{"line_number":39,"context_line":"                if venv_bin else \"neutron-ovn-db-sync-util\")"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7da10f_048c1d4b","line":36,"range":{"start_line":36,"start_character":12,"end_line":36,"end_character":53},"in_reply_to":"63044469_b1d63cfb","updated":"2026-04-21 12:56:39.000000000","message":"Yes, you\u0027ll need to call venv activate before calling `which` in a devstack env. In any case, this could be a future improvement.","commit_id":"558c24f415e97d79486a0ee150cc3ca99e1e4ee2"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"459038483d05026459716c3214934f16f1b368cf","unresolved":true,"context_lines":[{"line_number":33,"context_line":"            # Run as devstack_openstack_user (default: stack) because"},{"line_number":34,"context_line":"            # the OVN SSL private key files are only readable by that"},{"line_number":35,"context_line":"            # user, and tempest may run as a different user in CI."},{"line_number":36,"context_line":"            venv_bin \u003d WB_CONF.devstack_venv_bin_path"},{"line_number":37,"context_line":"            db_sync_bin \u003d ("},{"line_number":38,"context_line":"                \"{}/neutron-ovn-db-sync-util\".format(venv_bin)"},{"line_number":39,"context_line":"                if venv_bin else \"neutron-ovn-db-sync-util\")"}],"source_content_type":"text/x-python","patch_set":13,"id":"63044469_b1d63cfb","line":36,"range":{"start_line":36,"start_character":12,"end_line":36,"end_character":53},"in_reply_to":"e43fcd3c_bc148e50","updated":"2026-04-21 10:30:21.000000000","message":"I have tested it in my local devstack environment and providing the full path is necessary because this path is not included in the user\u0027s `$PATH` (neither for `stack` nor for `tempest`). Command `which` fails.","commit_id":"558c24f415e97d79486a0ee150cc3ca99e1e4ee2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d3530dbf06a21dded4a2000d4df586eb32d5505f","unresolved":true,"context_lines":[{"line_number":37,"context_line":"            db_sync_bin \u003d ("},{"line_number":38,"context_line":"                \"{}/neutron-ovn-db-sync-util\".format(venv_bin)"},{"line_number":39,"context_line":"                if venv_bin else \"neutron-ovn-db-sync-util\")"},{"line_number":40,"context_line":"            user \u003d WB_CONF.devstack_openstack_user"},{"line_number":41,"context_line":"            sudo_prefix \u003d ("},{"line_number":42,"context_line":"                \"sudo -u {} \".format(user) if user else \"\")"},{"line_number":43,"context_line":"            cls.db_sync_cmd \u003d ("}],"source_content_type":"text/x-python","patch_set":13,"id":"75c11117_0b6be16a","line":40,"range":{"start_line":40,"start_character":12,"end_line":40,"end_character":50},"updated":"2026-04-21 08:59:45.000000000","message":"Same here, we can use `whoami`. We are using it in `get_local_ssh_client`, although this method is no longer user. We can just execute `whoami` locally and store the result. That will avoid a new config var.","commit_id":"558c24f415e97d79486a0ee150cc3ca99e1e4ee2"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"459038483d05026459716c3214934f16f1b368cf","unresolved":true,"context_lines":[{"line_number":37,"context_line":"            db_sync_bin \u003d ("},{"line_number":38,"context_line":"                \"{}/neutron-ovn-db-sync-util\".format(venv_bin)"},{"line_number":39,"context_line":"                if venv_bin else \"neutron-ovn-db-sync-util\")"},{"line_number":40,"context_line":"            user \u003d WB_CONF.devstack_openstack_user"},{"line_number":41,"context_line":"            sudo_prefix \u003d ("},{"line_number":42,"context_line":"                \"sudo -u {} \".format(user) if user else \"\")"},{"line_number":43,"context_line":"            cls.db_sync_cmd \u003d ("}],"source_content_type":"text/x-python","patch_set":13,"id":"7854ce3e_e8daf586","line":40,"range":{"start_line":40,"start_character":12,"end_line":40,"end_character":50},"in_reply_to":"75c11117_0b6be16a","updated":"2026-04-21 10:30:21.000000000","message":"No, it wouldn\u0027t work. The user that runs tempest on CI jobs is `tempest` and the command would fail. The `neutron-ovn-db-sync-util` command only works with the `stack` user.","commit_id":"558c24f415e97d79486a0ee150cc3ca99e1e4ee2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"edd61d6d094ccf3f9a44ef173b9b411a5cde8cbf","unresolved":false,"context_lines":[{"line_number":37,"context_line":"            db_sync_bin \u003d ("},{"line_number":38,"context_line":"                \"{}/neutron-ovn-db-sync-util\".format(venv_bin)"},{"line_number":39,"context_line":"                if venv_bin else \"neutron-ovn-db-sync-util\")"},{"line_number":40,"context_line":"            user \u003d WB_CONF.devstack_openstack_user"},{"line_number":41,"context_line":"            sudo_prefix \u003d ("},{"line_number":42,"context_line":"                \"sudo -u {} \".format(user) if user else \"\")"},{"line_number":43,"context_line":"            cls.db_sync_cmd \u003d ("}],"source_content_type":"text/x-python","patch_set":13,"id":"de3d875e_f345ada4","line":40,"range":{"start_line":40,"start_character":12,"end_line":40,"end_character":50},"in_reply_to":"7854ce3e_e8daf586","updated":"2026-04-21 12:56:39.000000000","message":"Right, is `tempest` not `stack`.","commit_id":"558c24f415e97d79486a0ee150cc3ca99e1e4ee2"}]}
