Ilya Maximets <[email protected]> writes:
> On 8/20/26 3:51 PM, Aaron Conole via dev wrote:
>> A recent change made the ovsdb-server socket available as a gating object
>> preventing race conditions leading to cascading failure states when the
>> DB service experienced a failure. As part of that change, all of the
>> service dependencies were shifted to using the socket file as the gate.
>>
>> Unfortunately, this exposed a few problems on Fedora 44 shipped systemd.
>> Specifically, with systemd 259.8 the services are now starting in parallel,
>> but that leads to a few unexpected side effects:
>>
>> 1. The ovs-ctl calls 'ovs-vsctl' directly, which requires both a DB service
>> and the vswitchd service to acknowledge the transaction, leading to a
>> hang.
>>
>> 2. The ovs-delete-transient-ports service not waiting for the ovsdb service
>> to fully initialize (when running vsctl with --no-wait), so erroring
>> before completing the transient port deletion.
>
> I'm a bit confused. Why does it error out if the socket service is up?
> If the socket service is "started" then the socket must exist, right?
> And then connection to it must block until the ovsdb-server is actually
> running and accepting connections. Why does it error?
I am too - but the requirement for depending on the .service may have
been related to how .socket files are treated by systemd - I added some
debugging, thought everything was stopped and did a restart. However, I
noticed in the status:
○ ovsdb-server.socket - Open vSwitch Database Socket
Loaded: loaded (/usr/lib/systemd/system/ovsdb-server.socket; disabled;
preset: disabled)
Active: inactive (dead)
Triggers: ● ovsdb-server.service
Listen: /run/openvswitch/db.sock (Stream)
Aug 21 11:23:05 fedora systemd[1]: ovsdb-server.socket: Unit configuration
changed while unit was running, and no socket file descriptors are open. Unit
not
>>
>> Since the service is meant to run on boot, only once (given the Type and
>> RemainAfterExit values) it makes more sense to keep the gate on the server
>> service, and switch 'ovs-ctl' to use the builtin ovs_vsctl function to
>> be a 'db only' transaction.
>>
>> Fixes: 7e7f5d26f841 ("rhel: Add ovsdb-server.socket unit for systemd socket
>> activation.")
>> Signed-off-by: Aaron Conole <[email protected]>
>> ---
>>
>> v1->v2: Bad squash commit (fat-fingered the squash)
>> v2->v3: Corrected the squash.
>>
>> rhel/usr_lib_systemd_system_ovs-delete-transient-ports.service | 2 +-
>> utilities/ovs-ctl.in | 2 +-
>> 2 files changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/rhel/usr_lib_systemd_system_ovs-delete-transient-ports.service
>> b/rhel/usr_lib_systemd_system_ovs-delete-transient-ports.service
>> index 5f993e3047..c06fb19d5d 100644
>> --- a/rhel/usr_lib_systemd_system_ovs-delete-transient-ports.service
>> +++ b/rhel/usr_lib_systemd_system_ovs-delete-transient-ports.service
>> @@ -1,6 +1,6 @@
>> [Unit]
>> Description=Open vSwitch Delete Transient Ports
>> -After=ovsdb-server.socket
>> +After=ovsdb-server.service
>> Before=ovs-vswitchd.service
>>
>> [Service]
>> diff --git a/utilities/ovs-ctl.in b/utilities/ovs-ctl.in
>> index 8ebd720dc5..cfa1ac0625 100644
>> --- a/utilities/ovs-ctl.in
>> +++ b/utilities/ovs-ctl.in
>> @@ -115,7 +115,7 @@ check_core_config () {
>> }
>>
>> del_transient_ports () {
>> - for port in `ovs-vsctl --bare -- --columns=name find port
>> other_config:transient=true`; do
>> + for port in `ovs_vsctl --no-wait --bare -- --columns=name find port
>> other_config:transient=true`; do
>
> ovs_vsctl already includes the --no-wait.
I'll try and clean out everything in the environment before trimming the
extraneous '--no-wait' and submitting (possibly with the .socket
dependency restored). I've been switching between environments lately,
and some of my configurations aren't carried over. Sorry for the noise.
>> ovs_vsctl -- del-port "$port"
>> done
>> }
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev