Skip to content

Commit

Permalink
rhel: Add support for "systemctl reload openvswitch"
Browse files Browse the repository at this point in the history
The reload procedure will trigger a script that saves the flows and tlv
maps (using ovs-save) then it restarts ovsdb-server, it stops ovs-vswitchd,
it sets other_config:flow-restore-wait=true (to wait till flow restore is
finished), it starts ovs-vswitchd, it restore the backupped flows/tlv
maps and it removes other_config:flow-restore-wait=true (logic mostly ripped
from ovs-ctl).

It uses systemctl with --job-mode=ignore-dependencies to restart ovsdb-server
and stop and start ovs-vswitchd in order to avoid systemd to restart the other
components due to dependencies (as explained in rhel/README.RHEL.rst).

Signed-off-by: Timothy Redaelli <tredaelli@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Flavio Leitner <fbl@sysclose.org>
  • Loading branch information
drizzt authored and blp committed Nov 8, 2017
1 parent 1cfa77b commit ea36b04
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 2 deletions.
1 change: 1 addition & 0 deletions rhel/automake.mk
Expand Up @@ -24,6 +24,7 @@ EXTRA_DIST += \
rhel/openvswitch.spec.in \
rhel/openvswitch-fedora.spec \
rhel/openvswitch-fedora.spec.in \
rhel/usr_share_openvswitch_scripts_ovs-systemd-reload \
rhel/usr_share_openvswitch_scripts_sysconfig.template \
rhel/usr_share_openvswitch_scripts_systemd_sysconfig.template \
rhel/usr_lib_udev_rules.d_91-vfio.rules \
Expand Down
5 changes: 5 additions & 0 deletions rhel/openvswitch-fedora.spec.in
Expand Up @@ -314,6 +314,10 @@ install -d -m 0755 $RPM_BUILD_ROOT%{_prefix}/lib/ocf/resource.d/ovn
ln -s %{_datadir}/openvswitch/scripts/ovndb-servers.ocf \
$RPM_BUILD_ROOT%{_prefix}/lib/ocf/resource.d/ovn/ovndb-servers

install -p -D -m 0755 \
rhel/usr_share_openvswitch_scripts_ovs-systemd-reload \
$RPM_BUILD_ROOT%{_datadir}/openvswitch/scripts/ovs-systemd-reload

# remove unpackaged files
rm -f $RPM_BUILD_ROOT%{_bindir}/ovs-parse-backtrace \
$RPM_BUILD_ROOT%{_sbindir}/ovs-vlan-bug-workaround \
Expand Down Expand Up @@ -539,6 +543,7 @@ fi
%{_datadir}/openvswitch/scripts/ovs-save
%{_datadir}/openvswitch/scripts/ovs-vtep
%{_datadir}/openvswitch/scripts/ovs-ctl
%{_datadir}/openvswitch/scripts/ovs-systemd-reload
%config %{_datadir}/openvswitch/vswitch.ovsschema
%config %{_datadir}/openvswitch/vtep.ovsschema
%{_bindir}/ovs-appctl
Expand Down
2 changes: 1 addition & 1 deletion rhel/usr_lib_systemd_system_openvswitch.service
Expand Up @@ -9,7 +9,7 @@ Requires=ovs-vswitchd.service
[Service]
Type=oneshot
ExecStart=/bin/true
ExecReload=/bin/true
ExecReload=/usr/share/openvswitch/scripts/ovs-systemd-reload
ExecStop=/bin/true
RemainAfterExit=yes

Expand Down
1 change: 0 additions & 1 deletion rhel/usr_lib_systemd_system_ovsdb-server.service
Expand Up @@ -3,7 +3,6 @@ Description=Open vSwitch Database Unit
After=syslog.target network-pre.target
Before=network.target network.service
Wants=ovs-delete-transient-ports.service
ReloadPropagatedFrom=openvswitch.service
PartOf=openvswitch.service

[Service]
Expand Down
36 changes: 36 additions & 0 deletions rhel/usr_share_openvswitch_scripts_ovs-systemd-reload
@@ -0,0 +1,36 @@
#! /bin/sh

# Copyright (c) 2017 Red Hat, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Save flows
bridges=$(ovs-vsctl -- --real list-br)
flows=$(/usr/share/openvswitch/scripts/ovs-save save-flows $bridges)

# Restart the database first, since a large database may take a
# while to load, and we want to minimize forwarding disruption.
systemctl --job-mode=ignore-dependencies restart ovsdb-server

# Stop ovs-vswitchd.
systemctl --job-mode=ignore-dependencies stop ovs-vswitchd

# Start vswitchd by asking it to wait till flow restore is finished.
ovs-vsctl --no-wait set open_vswitch . other_config:flow-restore-wait=true
systemctl --job-mode=ignore-dependencies start ovs-vswitchd

# Restore saved flows and inform vswitchd that we are done.
eval "$flows"
ovs-vsctl --if-exists remove open_vswitch . other_config flow-restore-wait=true

exit 0

0 comments on commit ea36b04

Please sign in to comment.