110336
# Copyright (C) 2009, 2010, 2013, 2014 Nicira Networks, Inc.
110336
#
110336
# Copying and distribution of this file, with or without modification,
110336
# are permitted in any medium without royalty provided the copyright
110336
# notice and this notice are preserved.  This file is offered as-is,
110336
# without warranty of any kind.
110336
#
110336
# If tests have to be skipped while building, specify the '--without check'
110336
# option. For example:
110336
# rpmbuild -bb --without check rhel/openvswitch-fedora.spec
110336
110336
# This defines the base package name's version.
110336
110336
%define pkgname openvswitch2.16
110336
110336
110336
%if 0%{?commit:1}
110336
%global shortcommit %(c=%{commit}; echo ${c:0:7})
110336
%endif
110336
110336
# Enable PIE, bz#955181
110336
%global _hardened_build 1
110336
110336
# RHEL-7 doesn't define _rundir macro yet
110336
# Fedora 15 onwards uses /run as _rundir
110336
%if 0%{!?_rundir:1}
110336
%define _rundir /run
110336
%endif
110336
110336
# FIXME Test "STP - flush the fdb and mdb when topology changed" fails on s390x
110336
# FIXME 2 tests fails on ppc64le. They will be hopefully fixed before official 2.11
110336
%ifarch %{ix86} x86_64 aarch64
110336
%bcond_without check
110336
%else
110336
%bcond_with check
110336
%endif
110336
# option to run kernel datapath tests, requires building as root!
110336
%bcond_with check_datapath_kernel
110336
# option to build with libcap-ng, needed for running OVS as regular user
110336
%bcond_without libcapng
110336
# option to build with ipsec support
110336
%bcond_without ipsec
110336
110336
# Build python2 (that provides python) and python3 subpackages on Fedora
110336
# Build only python3 (that provides python) subpackage on RHEL8
110336
# Build only python subpackage on RHEL7
110336
%if 0%{?rhel} > 7 || 0%{?fedora}
110336
# On RHEL8 Sphinx is included in buildroot
110336
%global external_sphinx 1
110336
%else
110336
# Don't use external sphinx (RHV doesn't have optional repositories enabled)
110336
%global external_sphinx 0
110336
%endif
110336
110336
Name: %{pkgname}
110336
Summary: Open vSwitch
110336
Group: System Environment/Daemons daemon/database/utilities
110336
URL: http://www.openvswitch.org/
110336
Version: 2.16.0
Open vSwitch CI 3f2eed
Release: 62%{?dist}
110336
110336
# Nearly all of openvswitch is ASL 2.0.  The bugtool is LGPLv2+, and the
110336
# lib/sflow*.[ch] files are SISSL
110336
# datapath/ is GPLv2 (although not built into any of the binary packages)
110336
License: ASL 2.0 and LGPLv2+ and SISSL
110336
110336
%define dpdkver 20.11.1
110336
%define dpdkdir dpdk
110336
%define dpdksver %(echo %{dpdkver} | cut -d. -f-2)
110336
# NOTE: DPDK does not currently build for s390x
110336
# DPDK on aarch64 is not stable enough to be enabled in FDP
110336
%if 0%{?rhel} > 7 || 0%{?fedora}
110336
%define dpdkarches x86_64 ppc64le
110336
%else
110336
%define dpdkarches
110336
%endif
110336
110336
%if 0%{?commit:1}
110336
Source: https://github.com/openvswitch/ovs/archive/%{commit}.tar.gz#/openvswitch-%{commit}.tar.gz
110336
%else
110336
Source: https://github.com/openvswitch/ovs/archive/v%{version}.tar.gz#/openvswitch-%{version}.tar.gz
110336
%endif
110336
Source10: https://fast.dpdk.org/rel/dpdk-%{dpdkver}.tar.xz
110336
110336
%define docutilsver 0.12
110336
%define pygmentsver 1.4
110336
%define sphinxver   1.2.3
110336
Source100: https://pypi.io/packages/source/d/docutils/docutils-%{docutilsver}.tar.gz
110336
Source101: https://pypi.io/packages/source/P/Pygments/Pygments-%{pygmentsver}.tar.gz
110336
Source102: https://pypi.io/packages/source/S/Sphinx/Sphinx-%{sphinxver}.tar.gz
110336
110336
Patch:     openvswitch-%{version}.patch
110336
110336
# The DPDK is designed to optimize througput of network traffic using, among
110336
# other techniques, carefully crafted assembly instructions.  As such it
110336
# needs extensive work to port it to other architectures.
110336
ExclusiveArch: x86_64 aarch64 ppc64le s390x
110336
110336
# Do not enable this otherwise YUM will break on any upgrade.
110336
# Provides: openvswitch
110336
Conflicts: openvswitch < 2.16
110336
Conflicts: openvswitch-dpdk < 2.16
110336
Conflicts: openvswitch2.10
110336
Conflicts: openvswitch2.11
110336
Conflicts: openvswitch2.12
110336
Conflicts: openvswitch2.13
110336
Conflicts: openvswitch2.14
110336
Conflicts: openvswitch2.15
110336
110336
# FIXME Sphinx is used to generate some manpages, unfortunately, on RHEL, it's
110336
# in the -optional repository and so we can't require it directly since RHV
110336
# doesn't have the -optional repository enabled and so TPS fails
110336
%if %{external_sphinx}
110336
BuildRequires: python3-sphinx
110336
%else
110336
# Sphinx dependencies
110336
BuildRequires: python-devel
110336
BuildRequires: python-setuptools
110336
#BuildRequires: python2-docutils
110336
BuildRequires: python-jinja2
110336
BuildRequires: python-nose
110336
#BuildRequires: python2-pygments
110336
# docutils dependencies
110336
BuildRequires: python-imaging
110336
# pygments dependencies
110336
BuildRequires: python-nose
110336
%endif
110336
110336
BuildRequires: gcc gcc-c++ make
110336
BuildRequires: autoconf automake libtool
110336
BuildRequires: systemd-units openssl openssl-devel
110336
BuildRequires: python3-devel python3-setuptools
110336
BuildRequires: desktop-file-utils
110336
BuildRequires: groff-base graphviz
110336
BuildRequires: unbound-devel
110336
# make check dependencies
110336
BuildRequires: procps-ng
110336
%if 0%{?rhel} > 7 || 0%{?fedora}
110336
BuildRequires: python3-pyOpenSSL
110336
%endif
110336
%if %{with check_datapath_kernel}
110336
BuildRequires: nmap-ncat
110336
# would be useful but not available in RHEL or EPEL
110336
#BuildRequires: pyftpdlib
110336
%endif
110336
110336
%if %{with libcapng}
110336
BuildRequires: libcap-ng libcap-ng-devel
110336
%endif
110336
110336
%ifarch %{dpdkarches}
110336
BuildRequires: meson
110336
# DPDK driver dependencies
110336
BuildRequires: zlib-devel numactl-devel
110336
%ifarch x86_64
110336
BuildRequires: rdma-core-devel >= 15 libmnl-devel
110336
%endif
110336
110336
# Required by packaging policy for the bundled DPDK
110336
Provides: bundled(dpdk) = %{dpdkver}
110336
%endif
110336
110336
Requires: openssl iproute module-init-tools
110336
#Upstream kernel commit 4f647e0a3c37b8d5086214128614a136064110c3
110336
#Requires: kernel >= 3.15.0-0
110336
Requires: openvswitch-selinux-extra-policy
110336
110336
Requires(pre): shadow-utils
110336
Requires(post): /bin/sed
110336
Requires(post): /usr/sbin/usermod
110336
Requires(post): /usr/sbin/groupadd
110336
Requires(post): systemd-units
110336
Requires(preun): systemd-units
110336
Requires(postun): systemd-units
110336
Obsoletes: openvswitch-controller <= 0:2.1.0-1
110336
110336
%description
110336
Open vSwitch provides standard network bridging functions and
110336
support for the OpenFlow protocol for remote per-flow control of
110336
traffic.
110336
110336
%package -n python3-%{pkgname}
110336
Summary: Open vSwitch python3 bindings
110336
License: ASL 2.0
110336
Requires: %{pkgname} = %{?epoch:%{epoch}:}%{version}-%{release}
110336
Provides: python-%{pkgname} = %{?epoch:%{epoch}:}%{version}-%{release}
110336
110336
%description -n python3-%{pkgname}
110336
Python bindings for the Open vSwitch database
110336
110336
%package test
110336
Summary: Open vSwitch testing utilities
110336
License: ASL 2.0
110336
BuildArch: noarch
110336
Requires: python3-%{pkgname} = %{?epoch:%{epoch}:}%{version}-%{release}
110336
Requires: tcpdump
110336
110336
%description test
110336
Utilities that are useful to diagnose performance and connectivity
110336
issues in Open vSwitch setup.
110336
110336
%package devel
110336
Summary: Open vSwitch OpenFlow development package (library, headers)
110336
License: ASL 2.0
110336
Requires: %{pkgname} = %{?epoch:%{epoch}:}%{version}-%{release}
110336
110336
%description devel
110336
This provides shared library, libopenswitch.so and the openvswitch header
110336
files needed to build an external application.
110336
110336
%if 0%{?rhel} > 7 || 0%{?fedora} > 28
110336
%package -n network-scripts-%{name}
110336
Summary: Open vSwitch legacy network service support
110336
License: ASL 2.0
110336
Requires: network-scripts
110336
Supplements: (%{name} and network-scripts)
110336
110336
%description -n network-scripts-%{name}
110336
This provides the ifup and ifdown scripts for use with the legacy network
110336
service.
110336
%endif
110336
110336
%if %{with ipsec}
110336
%package ipsec
110336
Summary: Open vSwitch IPsec tunneling support
110336
License: ASL 2.0
110336
Requires: python3-%{pkgname} = %{?epoch:%{epoch}:}%{version}-%{release}
110336
Requires: libreswan
110336
110336
%description ipsec
110336
This package provides IPsec tunneling support for OVS tunnels.
110336
%endif
110336
110336
%prep
110336
%if 0%{?commit:1}
110336
%setup -q -n ovs-%{commit} -a 10
110336
%else
110336
%setup -q -n ovs-%{version} -a 10
110336
%endif
110336
%if ! %{external_sphinx}
110336
%if 0%{?commit:1}
110336
%setup -n ovs-%{commit} -q -D -T -a 100 -a 101 -a 102
110336
%else
110336
%setup -n ovs-%{version} -q -D -T -a 100 -a 101 -a 102
110336
%endif
110336
%endif
110336
110336
mv dpdk-*/ %{dpdkdir}/
110336
110336
# FIXME should we propose a way to do that upstream?
110336
sed -ri "/^subdir\('(usertools|app)'\)/d" %{dpdkdir}/meson.build
110336
110336
%patch -p1
110336
110336
%build
110336
# Build Sphinx on RHEL
110336
%if ! %{external_sphinx}
110336
export PYTHONPATH="${PYTHONPATH:+$PYTHONPATH:}%{_builddir}/pytmp/lib/python"
110336
for x in docutils-%{docutilsver} Pygments-%{pygmentsver} Sphinx-%{sphinxver}; do
110336
    pushd "$x"
110336
    python2 setup.py install --home %{_builddir}/pytmp
110336
    popd
110336
done
110336
110336
export PATH="$PATH:%{_builddir}/pytmp/bin"
110336
%endif
110336
110336
./boot.sh
110336
110336
%ifarch %{dpdkarches}    # build dpdk
110336
# Lets build DPDK first
110336
cd %{dpdkdir}
110336
110336
ENABLED_DRIVERS=(
110336
    bus/pci
110336
    bus/vdev
110336
    mempool/ring
110336
    net/failsafe
110336
    net/i40e
110336
    net/ring
110336
    net/vhost
110336
    net/virtio
110336
    net/tap
110336
)
110336
110336
%ifarch x86_64
110336
ENABLED_DRIVERS+=(
110336
    bus/vmbus
110336
    common/iavf
110336
    common/mlx5
110336
    net/bnxt
110336
    net/enic
110336
    net/iavf
110336
    net/ice
110336
    net/mlx5
110336
    net/netvsc
110336
    net/nfp
110336
    net/qede
110336
    net/vdev_netvsc
110336
)
110336
%endif
110336
110336
%ifarch aarch64 x86_64
110336
ENABLED_DRIVERS+=(
110336
    net/e1000
110336
    net/ixgbe
110336
)
110336
%endif
110336
110336
# Since upstream doesn't have a way
110336
for driver in drivers/*/*/; do
110336
    driver=${driver#drivers/}
110336
    driver=${driver%/}
110336
    [[ " ${ENABLED_DRIVERS[@]} " == *" $driver "* ]] || \
110336
        disable_drivers="${disable_drivers:+$disable_drivers,}"$driver
110336
done
110336
110336
#CFLAGS="$(echo %{optflags} | sed -e 's:-Wall::g' -e 's:-march=[[:alnum:]]* ::g') -Wformat -fPIC %{_hardening_ldflags}" \
110336
%set_build_flags
110336
%__meson --prefix=%{_builddir}/dpdk-build \
110336
         --buildtype=plain \
110336
         -Ddisable_drivers="$disable_drivers" \
110336
         -Dmachine=default \
Open vSwitch CI fa61cd
         -Dmax_ethports=1048 \
110336
         -Dmax_numa_nodes=8 \
110336
         -Dtests=false \
110336
         %{_vpath_builddir}
110336
%meson_build
110336
%__meson install -C %{_vpath_builddir} --no-rebuild
110336
110336
# FIXME currently with LTO enabled OVS tries to link with both static and shared libraries
110336
rm -v %{_builddir}/dpdk-build/%{_lib}/*.so*
110336
110336
# Generate a list of supported drivers, its hard to tell otherwise.
110336
cat << EOF > README.DPDK-PMDS
110336
DPDK drivers included in this package:
110336
110336
EOF
110336
110336
for f in %{_builddir}/dpdk-build/%{_lib}/librte_net_*.a; do
110336
    basename ${f} | cut -c12- | cut -d. -f1 | tr [:lower:] [:upper:]
110336
done >> README.DPDK-PMDS
110336
110336
cat << EOF >> README.DPDK-PMDS
110336
110336
For further information about the drivers, see
110336
http://dpdk.org/doc/guides-%{dpdksver}/nics/index.html
110336
EOF
110336
110336
cd -
110336
%endif    # build dpdk
110336
110336
# And now for OVS...
110336
mkdir build-shared build-static
110336
pushd build-shared
110336
ln -s ../configure
110336
%configure \
110336
%if %{with libcapng}
110336
        --enable-libcapng \
110336
%else
110336
        --disable-libcapng \
110336
%endif
110336
        --disable-static \
110336
        --enable-shared \
110336
        --enable-ssl \
110336
        --with-pkidir=%{_sharedstatedir}/openvswitch/pki
110336
make %{?_smp_mflags}
110336
popd
110336
pushd build-static
110336
ln -s ../configure
110336
%ifarch %{dpdkarches}
110336
PKG_CONFIG_PATH=%{_builddir}/dpdk-build/%{_lib}/pkgconfig \
110336
%endif
110336
%configure \
110336
%if %{with libcapng}
110336
        --enable-libcapng \
110336
%else
110336
        --disable-libcapng \
110336
%endif
110336
        --enable-ssl \
110336
%ifarch %{dpdkarches}
110336
        --with-dpdk=static \
110336
%endif
110336
        --with-pkidir=%{_sharedstatedir}/openvswitch/pki
110336
make %{?_smp_mflags}
110336
popd
110336
110336
/usr/bin/python3 build-aux/dpdkstrip.py \
110336
        --dpdk \
110336
        < rhel/usr_lib_systemd_system_ovs-vswitchd.service.in \
110336
        > rhel/usr_lib_systemd_system_ovs-vswitchd.service
110336
110336
%install
110336
rm -rf $RPM_BUILD_ROOT
110336
make -C build-shared install-libLTLIBRARIES DESTDIR=$RPM_BUILD_ROOT
110336
make -C build-static install DESTDIR=$RPM_BUILD_ROOT
110336
110336
install -d -m 0755 $RPM_BUILD_ROOT%{_rundir}/openvswitch
110336
install -d -m 0750 $RPM_BUILD_ROOT%{_localstatedir}/log/openvswitch
110336
install -d -m 0755 $RPM_BUILD_ROOT%{_sysconfdir}/openvswitch
110336
110336
install -p -D -m 0644 rhel/usr_lib_udev_rules.d_91-vfio.rules \
110336
        $RPM_BUILD_ROOT%{_udevrulesdir}/91-vfio.rules
110336
110336
install -p -D -m 0644 \
110336
        rhel/usr_share_openvswitch_scripts_systemd_sysconfig.template \
110336
        $RPM_BUILD_ROOT/%{_sysconfdir}/sysconfig/openvswitch
110336
110336
for service in openvswitch ovsdb-server ovs-vswitchd \
110336
               ovs-delete-transient-ports; do
110336
        install -p -D -m 0644 \
110336
                        rhel/usr_lib_systemd_system_${service}.service \
110336
                        $RPM_BUILD_ROOT%{_unitdir}/${service}.service
110336
done
110336
110336
%if %{with ipsec}
110336
install -p -D -m 0644 rhel/usr_lib_systemd_system_openvswitch-ipsec.service \
110336
                      $RPM_BUILD_ROOT%{_unitdir}/openvswitch-ipsec.service
110336
%endif
110336
110336
install -m 0755 rhel/etc_init.d_openvswitch \
110336
        $RPM_BUILD_ROOT%{_datadir}/openvswitch/scripts/openvswitch.init
110336
110336
install -p -D -m 0644 rhel/etc_openvswitch_default.conf \
110336
        $RPM_BUILD_ROOT/%{_sysconfdir}/openvswitch/default.conf
110336
110336
install -p -D -m 0644 rhel/etc_logrotate.d_openvswitch \
110336
        $RPM_BUILD_ROOT/%{_sysconfdir}/logrotate.d/openvswitch
110336
110336
install -m 0644 vswitchd/vswitch.ovsschema \
110336
        $RPM_BUILD_ROOT/%{_datadir}/openvswitch/vswitch.ovsschema
110336
110336
install -d -m 0755 $RPM_BUILD_ROOT/%{_sysconfdir}/sysconfig/network-scripts/
110336
install -p -m 0755 rhel/etc_sysconfig_network-scripts_ifdown-ovs \
110336
        $RPM_BUILD_ROOT/%{_sysconfdir}/sysconfig/network-scripts/ifdown-ovs
110336
install -p -m 0755 rhel/etc_sysconfig_network-scripts_ifup-ovs \
110336
        $RPM_BUILD_ROOT/%{_sysconfdir}/sysconfig/network-scripts/ifup-ovs
110336
110336
install -d -m 0755 $RPM_BUILD_ROOT%{python3_sitelib}
110336
cp -a $RPM_BUILD_ROOT/%{_datadir}/openvswitch/python/ovstest \
110336
        $RPM_BUILD_ROOT%{python3_sitelib}
110336
110336
# Build the JSON C extension for the Python lib (#1417738)
110336
pushd python
110336
(
110336
export CPPFLAGS="-I ../include -I ../build-shared/include"
110336
export LDFLAGS="%{__global_ldflags} -L $RPM_BUILD_ROOT%{_libdir}"
110336
%py3_build
110336
%py3_install
110336
[ -f "$RPM_BUILD_ROOT/%{python3_sitearch}/ovs/_json$(python3-config --extension-suffix)" ]
110336
)
110336
popd
110336
110336
rm -rf $RPM_BUILD_ROOT/%{_datadir}/openvswitch/python/
110336
110336
install -d -m 0755 $RPM_BUILD_ROOT/%{_sharedstatedir}/openvswitch
110336
110336
install -d -m 0755 $RPM_BUILD_ROOT%{_prefix}/lib/firewalld/services/
110336
110336
install -p -D -m 0755 \
110336
        rhel/usr_share_openvswitch_scripts_ovs-systemd-reload \
110336
        $RPM_BUILD_ROOT%{_datadir}/openvswitch/scripts/ovs-systemd-reload
110336
110336
touch $RPM_BUILD_ROOT%{_sysconfdir}/openvswitch/conf.db
110336
# The db needs special permission as IPsec Pre-shared keys are stored in it.
110336
chmod 0640 $RPM_BUILD_ROOT%{_sysconfdir}/openvswitch/conf.db
110336
110336
touch $RPM_BUILD_ROOT%{_sysconfdir}/openvswitch/system-id.conf
110336
110336
# remove unpackaged files
110336
rm -f $RPM_BUILD_ROOT/%{_bindir}/ovs-benchmark \
110336
        $RPM_BUILD_ROOT/%{_bindir}/ovs-docker \
110336
        $RPM_BUILD_ROOT/%{_bindir}/ovs-parse-backtrace \
110336
        $RPM_BUILD_ROOT/%{_bindir}/ovs-testcontroller \
110336
        $RPM_BUILD_ROOT/%{_sbindir}/ovs-vlan-bug-workaround \
110336
        $RPM_BUILD_ROOT/%{_mandir}/man1/ovs-benchmark.1* \
110336
        $RPM_BUILD_ROOT/%{_mandir}/man8/ovs-testcontroller.* \
110336
        $RPM_BUILD_ROOT/%{_mandir}/man8/ovs-vlan-bug-workaround.8*
110336
110336
%if ! %{with ipsec}
110336
rm -f $RPM_BUILD_ROOT/%{_datadir}/openvswitch/scripts/ovs-monitor-ipsec
110336
%endif
110336
110336
# remove ovn unpackages files
110336
rm -f $RPM_BUILD_ROOT%{_bindir}/ovn*
110336
rm -f $RPM_BUILD_ROOT%{_mandir}/man1/ovn*
110336
rm -f $RPM_BUILD_ROOT%{_mandir}/man5/ovn*
110336
rm -f $RPM_BUILD_ROOT%{_mandir}/man7/ovn*
110336
rm -f $RPM_BUILD_ROOT%{_mandir}/man8/ovn*
110336
rm -f $RPM_BUILD_ROOT%{_datadir}/openvswitch/ovn*
110336
rm -f $RPM_BUILD_ROOT%{_datadir}/openvswitch/scripts/ovn*
110336
rm -f $RPM_BUILD_ROOT%{_includedir}/ovn/*
110336
110336
%check
110336
%if %{with check}
110336
    pushd build-static
110336
    touch resolv.conf
110336
    export OVS_RESOLV_CONF=$(pwd)/resolv.conf
110336
    if make check TESTSUITEFLAGS='%{_smp_mflags}' ||
110336
       make check TESTSUITEFLAGS='--recheck'; then :;
110336
    else
110336
        cat tests/testsuite.log
110336
        exit 1
110336
    fi
110336
    popd
110336
%endif
110336
%if %{with check_datapath_kernel}
110336
    pushd build-static
110336
    if make check-kernel RECHECK=yes; then :;
110336
    else
110336
        cat tests/system-kmod-testsuite.log
110336
        exit 1
110336
    fi
110336
    popd
110336
%endif
110336
110336
%clean
110336
rm -rf $RPM_BUILD_ROOT
110336
110336
%preun
110336
%if 0%{?systemd_preun:1}
110336
    %systemd_preun openvswitch.service
110336
%else
110336
    if [ $1 -eq 0 ] ; then
110336
    # Package removal, not upgrade
110336
        /bin/systemctl --no-reload disable openvswitch.service >/dev/null 2>&1 || :
110336
        /bin/systemctl stop openvswitch.service >/dev/null 2>&1 || :
110336
    fi
110336
%endif
110336
110336
%pre
110336
getent group openvswitch >/dev/null || groupadd -r openvswitch
110336
getent passwd openvswitch >/dev/null || \
110336
    useradd -r -g openvswitch -d / -s /sbin/nologin \
110336
    -c "Open vSwitch Daemons" openvswitch
110336
110336
%ifarch %{dpdkarches}
110336
    getent group hugetlbfs >/dev/null || groupadd hugetlbfs
110336
    usermod -a -G hugetlbfs openvswitch
110336
%endif
110336
exit 0
110336
110336
%post
110336
if [ $1 -eq 1 ]; then
110336
    sed -i 's:^#OVS_USER_ID=:OVS_USER_ID=:' /etc/sysconfig/openvswitch
110336
110336
%ifarch %{dpdkarches}
110336
    sed -i \
110336
        's@OVS_USER_ID="openvswitch:openvswitch"@OVS_USER_ID="openvswitch:hugetlbfs"@'\
110336
        /etc/sysconfig/openvswitch
110336
%endif
110336
fi
110336
chown -R openvswitch:openvswitch /etc/openvswitch
110336
110336
%if 0%{?systemd_post:1}
110336
    %systemd_post openvswitch.service
110336
%else
110336
    # Package install, not upgrade
110336
    if [ $1 -eq 1 ]; then
110336
        /bin/systemctl daemon-reload >dev/null || :
110336
    fi
110336
%endif
110336
110336
%postun
110336
%if 0%{?systemd_postun:1}
110336
    %systemd_postun openvswitch.service
110336
%else
110336
    /bin/systemctl daemon-reload >/dev/null 2>&1 || :
110336
%endif
110336
110336
%triggerun -- openvswitch < 2.5.0-22.git20160727%{?dist}
110336
# old rpm versions restart the service in postun, but
110336
# due to systemd some preparation is needed.
110336
if systemctl is-active openvswitch >/dev/null 2>&1 ; then
110336
    /usr/share/openvswitch/scripts/ovs-ctl stop >/dev/null 2>&1 || :
110336
    systemctl daemon-reload >/dev/null 2>&1 || :
110336
    systemctl stop openvswitch ovsdb-server ovs-vswitchd >/dev/null 2>&1 || :
110336
    systemctl start openvswitch >/dev/null 2>&1 || :
110336
fi
110336
exit 0
110336
110336
%files -n python3-%{pkgname}
110336
%{python3_sitearch}/ovs
110336
%{python3_sitearch}/ovs-*.egg-info
110336
%doc LICENSE
110336
110336
%files test
110336
%{_bindir}/ovs-pcap
110336
%{_bindir}/ovs-tcpdump
110336
%{_bindir}/ovs-tcpundump
110336
%{_mandir}/man1/ovs-pcap.1*
110336
%{_mandir}/man8/ovs-tcpdump.8*
110336
%{_mandir}/man1/ovs-tcpundump.1*
110336
%{_bindir}/ovs-test
110336
%{_bindir}/ovs-vlan-test
110336
%{_bindir}/ovs-l3ping
110336
%{_mandir}/man8/ovs-test.8*
110336
%{_mandir}/man8/ovs-vlan-test.8*
110336
%{_mandir}/man8/ovs-l3ping.8*
110336
%{python3_sitelib}/ovstest
110336
110336
%files devel
110336
%{_libdir}/*.so
110336
%{_libdir}/pkgconfig/*.pc
110336
%{_includedir}/openvswitch/*
110336
%{_includedir}/openflow/*
110336
%exclude %{_libdir}/*.a
110336
%exclude %{_libdir}/*.la
110336
110336
%if 0%{?rhel} > 7 || 0%{?fedora} > 28
110336
%files -n network-scripts-%{name}
110336
%{_sysconfdir}/sysconfig/network-scripts/ifup-ovs
110336
%{_sysconfdir}/sysconfig/network-scripts/ifdown-ovs
110336
%endif
110336
110336
%files
110336
%defattr(-,openvswitch,openvswitch)
110336
%dir %{_sysconfdir}/openvswitch
110336
%{_sysconfdir}/openvswitch/default.conf
110336
%config %ghost %verify(not owner group md5 size mtime) %{_sysconfdir}/openvswitch/conf.db
110336
%ghost %attr(0600,-,-) %verify(not owner group md5 size mtime) %{_sysconfdir}/openvswitch/.conf.db.~lock~
110336
%config %ghost %{_sysconfdir}/openvswitch/system-id.conf
110336
%defattr(-,root,root)
110336
%config(noreplace) %verify(not md5 size mtime) %{_sysconfdir}/sysconfig/openvswitch
110336
%{_sysconfdir}/bash_completion.d/ovs-appctl-bashcomp.bash
110336
%{_sysconfdir}/bash_completion.d/ovs-vsctl-bashcomp.bash
110336
%config(noreplace) %{_sysconfdir}/logrotate.d/openvswitch
110336
%{_unitdir}/openvswitch.service
110336
%{_unitdir}/ovsdb-server.service
110336
%{_unitdir}/ovs-vswitchd.service
110336
%{_unitdir}/ovs-delete-transient-ports.service
110336
%{_datadir}/openvswitch/scripts/openvswitch.init
110336
%{_datadir}/openvswitch/scripts/ovs-check-dead-ifs
110336
%{_datadir}/openvswitch/scripts/ovs-lib
110336
%{_datadir}/openvswitch/scripts/ovs-save
110336
%{_datadir}/openvswitch/scripts/ovs-vtep
110336
%{_datadir}/openvswitch/scripts/ovs-ctl
110336
%{_datadir}/openvswitch/scripts/ovs-kmod-ctl
110336
%{_datadir}/openvswitch/scripts/ovs-systemd-reload
110336
%config %{_datadir}/openvswitch/vswitch.ovsschema
110336
%config %{_datadir}/openvswitch/vtep.ovsschema
110336
%{_bindir}/ovs-appctl
110336
%{_bindir}/ovs-dpctl
110336
%{_bindir}/ovs-ofctl
110336
%{_bindir}/ovs-vsctl
110336
%{_bindir}/ovsdb-client
110336
%{_bindir}/ovsdb-tool
110336
%{_bindir}/ovs-pki
110336
%{_bindir}/vtep-ctl
110336
%{_libdir}/*.so.*
110336
%{_sbindir}/ovs-vswitchd
110336
%{_sbindir}/ovsdb-server
110336
%{_mandir}/man1/ovsdb-client.1*
110336
%{_mandir}/man1/ovsdb-server.1*
110336
%{_mandir}/man1/ovsdb-tool.1*
110336
%{_mandir}/man5/ovsdb.5*
110336
%{_mandir}/man5/ovsdb-server.5.*
110336
%{_mandir}/man5/ovs-vswitchd.conf.db.5*
110336
%{_mandir}/man5/vtep.5*
110336
%{_mandir}/man7/ovsdb-server.7*
110336
%{_mandir}/man7/ovsdb.7*
110336
%{_mandir}/man7/ovs-actions.7*
110336
%{_mandir}/man7/ovs-fields.7*
110336
%{_mandir}/man8/vtep-ctl.8*
110336
%{_mandir}/man8/ovs-appctl.8*
110336
%{_mandir}/man8/ovs-ctl.8*
110336
%{_mandir}/man8/ovs-dpctl.8*
110336
%{_mandir}/man8/ovs-kmod-ctl.8.*
110336
%{_mandir}/man8/ovs-ofctl.8*
110336
%{_mandir}/man8/ovs-pki.8*
110336
%{_mandir}/man8/ovs-vsctl.8*
110336
%{_mandir}/man8/ovs-vswitchd.8*
110336
%{_mandir}/man8/ovs-parse-backtrace.8*
110336
%{_udevrulesdir}/91-vfio.rules
110336
%doc LICENSE NOTICE README.rst NEWS rhel/README.RHEL.rst
110336
%ifarch %{dpdkarches}
110336
%doc %{dpdkdir}/README.DPDK-PMDS
Open vSwitch CI 3f9b5c
%attr(750,openvswitch,hugetlbfs) %verify(not owner group) /var/log/openvswitch
Open vSwitch CI 3f9b5c
%else
Open vSwitch CI 3f9b5c
%attr(750,openvswitch,openvswitch) %verify(not owner group) /var/log/openvswitch
110336
%endif
110336
/var/lib/openvswitch
110336
%ghost %attr(755,root,root) %verify(not owner group) %{_rundir}/openvswitch
110336
%{_datadir}/openvswitch/bugtool-plugins/
110336
%{_datadir}/openvswitch/scripts/ovs-bugtool-*
110336
%{_bindir}/ovs-dpctl-top
110336
%{_sbindir}/ovs-bugtool
110336
%{_mandir}/man8/ovs-dpctl-top.8*
110336
%{_mandir}/man8/ovs-bugtool.8*
110336
%if (0%{?rhel} && 0%{?rhel} <= 7) || (0%{?fedora} && 0%{?fedora} < 29)
110336
%{_sysconfdir}/sysconfig/network-scripts/ifup-ovs
110336
%{_sysconfdir}/sysconfig/network-scripts/ifdown-ovs
110336
%endif
110336
110336
%if %{with ipsec}
110336
%files ipsec
110336
%{_datadir}/openvswitch/scripts/ovs-monitor-ipsec
110336
%{_unitdir}/openvswitch-ipsec.service
110336
%endif
110336
110336
%changelog
Open vSwitch CI 3f2eed
* Fri Mar 11 2022 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-62
Open vSwitch CI 3f2eed
- Merging upstream branch-2.16 [RH git: 561b178a3d]
Open vSwitch CI 3f2eed
    Commit list:
Open vSwitch CI 3f2eed
    47b5374280 system-dpdk: Fix mfex autovalidator tests.
Open vSwitch CI 3f2eed
    98a74bd487 ofp-prop: Silence the 'may be uninitialized' warning.
Open vSwitch CI 3f2eed
    ab4f30e02b ovsdb-cluster.at: Avoid test failures due to different hashing.
Open vSwitch CI 3f2eed
Open vSwitch CI 3f2eed
Open vSwitch CI 9457da
* Mon Mar 07 2022 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-61
Open vSwitch CI 9457da
- Merging upstream branch-2.16 [RH git: 0e0cf86cf5]
Open vSwitch CI 9457da
    Commit list:
Open vSwitch CI 9457da
    d5d2bd3c09 ofproto: Use xlate map for uuid lookups.
Open vSwitch CI 9457da
    d158b29fb6 ofproto: Add refcount to ofproto to fix ofproto use-after-free.
Open vSwitch CI 9457da
Open vSwitch CI 9457da
Open vSwitch CI b85476
* Sat Mar 05 2022 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-60
Open vSwitch CI b85476
- Merging upstream branch-2.16 [RH git: 67312d8bee]
Open vSwitch CI b85476
    Commit list:
Open vSwitch CI b85476
    43882d8372 ofproto-dpif: Trigger revalidation when ipfix config set.
Open vSwitch CI b85476
    218bb05fb2 system-tso: Skip encap tests when userspace TSO is enabled.
Open vSwitch CI b85476
Open vSwitch CI b85476
Open vSwitch CI 872216
* Fri Mar 04 2022 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-59
Open vSwitch CI 872216
- Merging upstream branch-2.16 [RH git: 832e52bea7]
Open vSwitch CI 872216
    Commit list:
Open vSwitch CI 872216
    1515e085b9 tc: Fix stats byte count on fragmented packets.
Open vSwitch CI 872216
    7a3b46d517 compat: Add gen_stats include to define tc hw stats.
Open vSwitch CI 872216
Open vSwitch CI 872216
Open vSwitch CI fa61cd
* Tue Mar 01 2022 Timothy Redaelli <tredaelli@redhat.com> - 2.16.0-58
Open vSwitch CI fa61cd
- Change RTE_ETH_MAXPORTS to 1024 [RH git: 81ff7c5a60] (#2059758)
Open vSwitch CI fa61cd
    Resolves: #2059758
Open vSwitch CI fa61cd
Open vSwitch CI fa61cd
Open vSwitch CI 8f82a4
* Fri Feb 25 2022 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-57
Open vSwitch CI 8f82a4
- Merging upstream branch-2.16 [RH git: 897937f6d3]
Open vSwitch CI 8f82a4
    Commit list:
Open vSwitch CI 8f82a4
    9598f0529c ovsdb: raft: Fix inability to join the cluster after interrupted attempt. (#2033514)
Open vSwitch CI 8f82a4
Open vSwitch CI 8f82a4
Open vSwitch CI b1e396
* Fri Feb 25 2022 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-56
Open vSwitch CI b1e396
- Merging upstream branch-2.16 [RH git: e4d6d108a3]
Open vSwitch CI b1e396
    Commit list:
Open vSwitch CI b1e396
    fb4767b472 dpif-netdev: Fix a race condition in deletion of offloaded flows.
Open vSwitch CI b1e396
    3e72eae031 dpif-netdev: Move port flush after datapath reconfiguration.
Open vSwitch CI b1e396
Open vSwitch CI b1e396
Open vSwitch CI 53ddb2
* Thu Feb 24 2022 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-55
Open vSwitch CI 53ddb2
- Merging upstream branch-2.16 [RH git: 970214133d]
Open vSwitch CI 53ddb2
    Commit list:
Open vSwitch CI 53ddb2
    0168e7989d reconnect: Fix broken inactivity probe if there is no other reason to wake up.
Open vSwitch CI 53ddb2
Open vSwitch CI 53ddb2
Open vSwitch CI a34d7e
* Thu Feb 24 2022 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-54
Open vSwitch CI a34d7e
- Merging upstream branch-2.16 [RH git: ac5da61d03]
Open vSwitch CI a34d7e
    Commit list:
Open vSwitch CI a34d7e
    dee52795e6 datapath-windows: Fix NXM_OF_IP_TOS issue
Open vSwitch CI a34d7e
Open vSwitch CI a34d7e
Open vSwitch CI 04c61d
* Wed Feb 16 2022 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-53
Open vSwitch CI 04c61d
- Merging upstream branch-2.16 [RH git: b2df459e49]
Open vSwitch CI 04c61d
    Commit list:
Open vSwitch CI 04c61d
    dcde9771c5 ovsdb-idl: Fix use-after-free when destroying an IDL loop.
Open vSwitch CI 04c61d
Open vSwitch CI 04c61d
Open vSwitch CI f3f8d7
* Wed Feb 16 2022 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-52
Open vSwitch CI f3f8d7
- Merging upstream branch-2.16 [RH git: bba08b5363]
Open vSwitch CI f3f8d7
    Commit list:
Open vSwitch CI f3f8d7
    8e23c06f24 dpif-netdev-dpcls: Make subtable reprobe thread-safe.
Open vSwitch CI f3f8d7
    ac0e3dd3ba ci: Fix typo in variable name.
Open vSwitch CI f3f8d7
    fc25e0397a dp-packet: Ensure packet base is always non-NULL.
Open vSwitch CI f3f8d7
    dbae56e702 bfd: lldp: stp: Fix misaligned packet field access.
Open vSwitch CI f3f8d7
    ee17b06cf9 ovsdb-idlc: Avoid accessing member within NULL idl index cursors.
Open vSwitch CI f3f8d7
    1d799a5d17 stopwatch: Fix buffer underflow when computing percentiles.
Open vSwitch CI f3f8d7
Open vSwitch CI f3f8d7
Open vSwitch CI 323f75
* Wed Feb 09 2022 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-51
Open vSwitch CI 323f75
- Merging upstream branch-2.16 [RH git: 7b6570c65f]
Open vSwitch CI 323f75
    Commit list:
Open vSwitch CI 323f75
    0954c2911d ofproto: Fix ipfix not always sampling on egress. (#2016346)
Open vSwitch CI 323f75
Open vSwitch CI 323f75
Open vSwitch CI 83969d
* Wed Feb 09 2022 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-50
Open vSwitch CI 83969d
- Merging upstream branch-2.16 [RH git: c5ad7f71c5]
Open vSwitch CI 83969d
    Commit list:
Open vSwitch CI 83969d
    867e586b45 tc: Fix incorrect TC rule for decap+encap datapath flow.
Open vSwitch CI 83969d
Open vSwitch CI 83969d
Open vSwitch CI ba1bf3
* Tue Feb 08 2022 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-49
Open vSwitch CI ba1bf3
- Merging upstream branch-2.16 [RH git: 4541c91b99]
Open vSwitch CI ba1bf3
    Commit list:
Open vSwitch CI ba1bf3
    418e6a0b8e dpif-netdev: fix vlan and ipv4 parsing in avx512
Open vSwitch CI ba1bf3
Open vSwitch CI ba1bf3
Open vSwitch CI 6c8a79
* Mon Feb 07 2022 Michael Santana <msantana@redhat.com> - 2.16.0-48
Open vSwitch CI 6c8a79
- Merging upstream branch-2.16 [RH git: 9d51785142]
Open vSwitch CI 6c8a79
    Commit list:
Open vSwitch CI 6c8a79
    1ec567a752 ci: Install wheel before installing any other python packages.
Open vSwitch CI 6c8a79
    031a99cef0 odp-util: Fix tunnel key attr for GTP-U.
Open vSwitch CI 6c8a79
    558699c73c ovsdb-idl: Only process successful txn in ovsdb_idl_loop_run.
Open vSwitch CI 6c8a79
Open vSwitch CI 6c8a79
Open vSwitch CI 05e085
* Wed Feb 02 2022 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-47
Open vSwitch CI 05e085
- Merging upstream branch-2.16 [RH git: 6e6f66ffd0]
Open vSwitch CI 05e085
    Commit list:
Open vSwitch CI 05e085
    0276bdb30a ofproto-dpif-upcall: Fix n_revalidators on upcall show.
Open vSwitch CI 05e085
Open vSwitch CI 05e085
Open vSwitch CI 878172
* Wed Feb 02 2022 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-46
Open vSwitch CI 878172
- Merging upstream branch-2.16 [RH git: 513117cbb0]
Open vSwitch CI 878172
    Commit list:
Open vSwitch CI 878172
    16575362dc acinclude: Detect avx512 vpopcntdq compiler support.
Open vSwitch CI 878172
Open vSwitch CI 878172
Open vSwitch CI 9de20b
* Tue Feb 01 2022 Ilya Maximets <i.maximets@redhat.com> - 2.16.0-45
Open vSwitch CI 9de20b
- ovsdb: transaction: Keep one entry in the transaction history. [RH git: 7665f42d12] (#2044621)
Open vSwitch CI 9de20b
    commit 6e13565dd32fb2cf5517f51ca06956e2052c4bba
Open vSwitch CI 9de20b
    Author: Ilya Maximets <i.maximets@ovn.org>
Open vSwitch CI 9de20b
    Date:   Sun Dec 19 15:09:38 2021 +0100
Open vSwitch CI 9de20b
    
Open vSwitch CI 9de20b
        ovsdb: transaction: Keep one entry in the transaction history.
Open vSwitch CI 9de20b
    
Open vSwitch CI 9de20b
        If a single transaction exceeds the size of the whole database (e.g.,
Open vSwitch CI 9de20b
        a lot of rows got removed and new ones added), transaction history will
Open vSwitch CI 9de20b
        be drained.  This leads to sending UUID_ZERO to the clients as the last
Open vSwitch CI 9de20b
        transaction id in the next monitor update, because monitor doesn't
Open vSwitch CI 9de20b
        know what was the actual last transaction id.  In case of a re-connect
Open vSwitch CI 9de20b
        that will cause re-downloading of the whole database, since the
Open vSwitch CI 9de20b
        client's last_id will be out of sync.
Open vSwitch CI 9de20b
    
Open vSwitch CI 9de20b
        One solution would be to store the last transaction ID separately
Open vSwitch CI 9de20b
        from the actual transactions, but that will require a careful
Open vSwitch CI 9de20b
        management in cases where database gets reset and the history needs
Open vSwitch CI 9de20b
        to be cleared.  Keeping the one last transaction instead to avoid
Open vSwitch CI 9de20b
        the problem.  That should not be a big concern in terms of memory
Open vSwitch CI 9de20b
        consumption, because this last transaction will be removed from the
Open vSwitch CI 9de20b
        history once the next transaction appeared.  This is also not a concern
Open vSwitch CI 9de20b
        for a fast re-sync, because this last transaction will not be used
Open vSwitch CI 9de20b
        for the monitor reply; it's either client already has it, so no need
Open vSwitch CI 9de20b
        to send, or it's a history miss.
Open vSwitch CI 9de20b
    
Open vSwitch CI 9de20b
        The test updated to not check the number of atoms if there is only
Open vSwitch CI 9de20b
        one transaction in the history.
Open vSwitch CI 9de20b
    
Open vSwitch CI 9de20b
        Fixes: 317b1bfd7dd3 ("ovsdb: Don't let transaction history grow larger than the database.")
Open vSwitch CI 9de20b
        Acked-by: Mike Pattrick <mkp@redhat.com>
Open vSwitch CI 9de20b
        Acked-by: Han Zhou <hzhou@ovn.org>
Open vSwitch CI 9de20b
        Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
Open vSwitch CI 9de20b
    
Open vSwitch CI 9de20b
    Reported-at: https://bugzilla.redhat.com/2044621
Open vSwitch CI 9de20b
    Signed-off-by: Ilya Maximets <i.maximets@redhat.com>
Open vSwitch CI 9de20b
Open vSwitch CI 9de20b
Open vSwitch CI adebee
* Mon Jan 31 2022 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-44
Open vSwitch CI adebee
- Merging upstream branch-2.16 [RH git: d202cd6da1]
Open vSwitch CI adebee
    Commit list:
Open vSwitch CI adebee
    34c830c540 ovsdb-idl: ovsdb_idl_loop_destroy must also destroy the committing txn.
Open vSwitch CI adebee
    13009736b2 ovsdb-cs: Clear last_id on reconnect if condition changes in-flight.
Open vSwitch CI adebee
    017e2ae50e ofp-flow: Skip flow reply if it exceeds the maximum message size.
Open vSwitch CI adebee
    e0c6f92a95 ovsdb-cs: Fix ignoring of the last id from the initial monitor reply. (#2044624)
Open vSwitch CI adebee
Open vSwitch CI adebee
Open vSwitch CI 86062a
* Fri Jan 28 2022 Ilya Maximets <i.maximets@redhat.com> - 2.16.0-43
Open vSwitch CI 86062a
- ovsdb: storage: Randomize should_snapshot checks when the minimum time passed. [RH git: abe61535ca] (#2044614)
Open vSwitch CI 86062a
    commit 339f97044e3c2312fbb65b932fa14a181acf40d5
Open vSwitch CI 86062a
    Author: Ilya Maximets <i.maximets@ovn.org>
Open vSwitch CI 86062a
    Date:   Mon Dec 13 16:43:33 2021 +0100
Open vSwitch CI 86062a
    
Open vSwitch CI 86062a
        ovsdb: storage: Randomize should_snapshot checks when the minimum time passed.
Open vSwitch CI 86062a
    
Open vSwitch CI 86062a
        Snapshots are scheduled for every 10-20 minutes.  It's a random value
Open vSwitch CI 86062a
        in this interval for each server.  Once the time is up, but the maximum
Open vSwitch CI 86062a
        time (24 hours) not reached yet, ovsdb will start checking if the log
Open vSwitch CI 86062a
        grew a lot on every iteration.  Once the growth is detected, compaction
Open vSwitch CI 86062a
        is triggered.
Open vSwitch CI 86062a
    
Open vSwitch CI 86062a
        OTOH, it's very common for an OVSDB cluster to not have the log growing
Open vSwitch CI 86062a
        very fast.  If the log didn't grow 2x in 20 minutes, the randomness of
Open vSwitch CI 86062a
        the initial scheduled time is gone and all the servers are checking if
Open vSwitch CI 86062a
        they need to create snapshot on every iteration.  And since all of them
Open vSwitch CI 86062a
        are part of the same cluster, their logs are growing with the same
Open vSwitch CI 86062a
        speed.  Once the critical mass is reached, all the servers will start
Open vSwitch CI 86062a
        creating snapshots at the same time.  If the database is big enough,
Open vSwitch CI 86062a
        that might leave the cluster unresponsive for an extended period of
Open vSwitch CI 86062a
        time (e.g. 10-15 seconds for OVN_Southbound database in a larger scale
Open vSwitch CI 86062a
        OVN deployment) until the compaction completed.
Open vSwitch CI 86062a
    
Open vSwitch CI 86062a
        Fix that by re-scheduling a quick retry if the minimal time already
Open vSwitch CI 86062a
        passed.  Effectively, this will work as a randomized 1-2 min delay
Open vSwitch CI 86062a
        between checks, so the servers will not synchronize.
Open vSwitch CI 86062a
    
Open vSwitch CI 86062a
        Scheduling function updated to not change the upper limit on quick
Open vSwitch CI 86062a
        reschedules to avoid delaying the snapshot creation indefinitely.
Open vSwitch CI 86062a
        Currently quick re-schedules are only used for the error cases, and
Open vSwitch CI 86062a
        there is always a 'slow' re-schedule after the successful compaction.
Open vSwitch CI 86062a
        So, the change of a scheduling function doesn't change the current
Open vSwitch CI 86062a
        behavior much.
Open vSwitch CI 86062a
    
Open vSwitch CI 86062a
        Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
Open vSwitch CI 86062a
        Acked-by: Han Zhou <hzhou@ovn.org>
Open vSwitch CI 86062a
        Acked-by: Dumitru Ceara <dceara@redhat.com>
Open vSwitch CI 86062a
    
Open vSwitch CI 86062a
    Reported-at: https://bugzilla.redhat.com/2044614
Open vSwitch CI 86062a
    Signed-off-by: Ilya Maximets <i.maximets@redhat.com>
Open vSwitch CI 86062a
Open vSwitch CI 86062a
Open vSwitch CI 86062a
* Fri Jan 28 2022 Ilya Maximets <i.maximets@redhat.com> - 2.16.0-42
Open vSwitch CI 86062a
- raft: Only allow followers to snapshot. [RH git: 915efc8c00] (#2044614)
Open vSwitch CI 86062a
    commit bf07cc9cdb2f37fede8c0363937f1eb9f4cfd730
Open vSwitch CI 86062a
    Author: Dumitru Ceara <dceara@redhat.com>
Open vSwitch CI 86062a
    Date:   Mon Dec 13 20:46:03 2021 +0100
Open vSwitch CI 86062a
    
Open vSwitch CI 86062a
        raft: Only allow followers to snapshot.
Open vSwitch CI 86062a
    
Open vSwitch CI 86062a
        Commit 3c2d6274bcee ("raft: Transfer leadership before creating
Open vSwitch CI 86062a
        snapshots.") made it such that raft leaders transfer leadership before
Open vSwitch CI 86062a
        snapshotting.  However, there's still the case when the next leader to
Open vSwitch CI 86062a
        be is in the process of snapshotting.  To avoid delays in that case too,
Open vSwitch CI 86062a
        we now explicitly allow snapshots only on followers.  Cluster members
Open vSwitch CI 86062a
        will have to wait until the current election is settled before
Open vSwitch CI 86062a
        snapshotting.
Open vSwitch CI 86062a
    
Open vSwitch CI 86062a
        Given the following logs taken from an OVN_Southbound 3-server cluster
Open vSwitch CI 86062a
        during a scale test:
Open vSwitch CI 86062a
    
Open vSwitch CI 86062a
        S1 (old leader):
Open vSwitch CI 86062a
          19:07:51.226Z|raft|INFO|Transferring leadership to write a snapshot.
Open vSwitch CI 86062a
          19:08:03.830Z|ovsdb|INFO|OVN_Southbound: Database compaction took 12601ms
Open vSwitch CI 86062a
          19:08:03.940Z|raft|INFO|server 8b8d is leader for term 43
Open vSwitch CI 86062a
    
Open vSwitch CI 86062a
        S2 (follower):
Open vSwitch CI 86062a
          19:08:00.870Z|raft|INFO|server 8b8d is leader for term 43
Open vSwitch CI 86062a
    
Open vSwitch CI 86062a
        S3 (new leader):
Open vSwitch CI 86062a
          19:07:51.242Z|raft|INFO|received leadership transfer from f5c9 in term 42
Open vSwitch CI 86062a
          19:07:51.244Z|raft|INFO|term 43: starting election
Open vSwitch CI 86062a
          19:08:00.805Z|ovsdb|INFO|OVN_Southbound: Database compaction took 9559ms
Open vSwitch CI 86062a
          19:08:00.869Z|raft|INFO|term 43: elected leader by 2+ of 3 servers
Open vSwitch CI 86062a
    
Open vSwitch CI 86062a
        We see that the leader to be (S3) receives the leadership transfer,
Open vSwitch CI 86062a
        initiates the election and immediately after starts a snapshot that
Open vSwitch CI 86062a
        takes ~9.5 seconds.  During this time, S2 votes for S3 electing it
Open vSwitch CI 86062a
        as cluster leader but S3 doesn't effectively become leader until it
Open vSwitch CI 86062a
        finishes snapshotting, essentially keeping the cluster without a
Open vSwitch CI 86062a
        leader for up to ~9.5 seconds.
Open vSwitch CI 86062a
    
Open vSwitch CI 86062a
        With the current change, S3 will delay compaction and snapshotting until
Open vSwitch CI 86062a
        the election is finished.
Open vSwitch CI 86062a
    
Open vSwitch CI 86062a
        The only exception is the case of single-node clusters for which we
Open vSwitch CI 86062a
        allow the node to snapshot regardless of role.
Open vSwitch CI 86062a
    
Open vSwitch CI 86062a
        Acked-by: Han Zhou <hzhou@ovn.org>
Open vSwitch CI 86062a
        Signed-off-by: Dumitru Ceara <dceara@redhat.com>
Open vSwitch CI 86062a
        Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
Open vSwitch CI 86062a
    
Open vSwitch CI 86062a
    Reported-at: https://bugzilla.redhat.com/2044614
Open vSwitch CI 86062a
    Signed-off-by: Ilya Maximets <i.maximets@redhat.com>
Open vSwitch CI 86062a
Open vSwitch CI 86062a
Open vSwitch CI 655655
* Wed Jan 26 2022 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-41
Open vSwitch CI 655655
- Merging upstream branch-2.16 [RH git: f1ca7b8ac3]
Open vSwitch CI 655655
    Commit list:
Open vSwitch CI 655655
    2571b1a464 ofproto-dpif: Fix issue with non-reversible actions on a patch ports.
Open vSwitch CI 655655
Open vSwitch CI 655655
Open vSwitch CI 1b2c23
* Fri Jan 21 2022 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-40
Open vSwitch CI 1b2c23
- Merging upstream branch-2.16 [RH git: 60b19f443c]
Open vSwitch CI 1b2c23
    Commit list:
Open vSwitch CI 1b2c23
    07a115f7d9 ovs-monitor-ipsec: Fix generated strongSwan ipsec.conf for IPv6.
Open vSwitch CI 1b2c23
Open vSwitch CI 1b2c23
Open vSwitch CI 68b64a
* Thu Jan 20 2022 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-39
Open vSwitch CI 68b64a
- Merging upstream branch-2.16 [RH git: 349d687673]
Open vSwitch CI 68b64a
    Commit list:
Open vSwitch CI 68b64a
    f2ee013f73 datapath-windows: Pickup Ct tuple as CT lookup key in function OvsCtSetupLookupCtx
Open vSwitch CI 68b64a
Open vSwitch CI 68b64a
Open vSwitch CI 2f9230
* Tue Jan 18 2022 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-38
Open vSwitch CI 2f9230
- Merging upstream branch-2.16 [RH git: e370e283cf]
Open vSwitch CI 2f9230
    Commit list:
Open vSwitch CI 2f9230
    bd8ebcd10c Documentation: Fix Rx/Tx queue configuration section.
Open vSwitch CI 2f9230
Open vSwitch CI 2f9230
Open vSwitch CI cf2efe
* Mon Jan 17 2022 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-37
Open vSwitch CI cf2efe
- Merging upstream branch-2.16 [RH git: c9297f5ef7]
Open vSwitch CI cf2efe
    Commit list:
Open vSwitch CI cf2efe
    29936a853f ofproto-dpif: Fix memory leak in dpif/show-dp-features appctl.
Open vSwitch CI cf2efe
Open vSwitch CI cf2efe
Open vSwitch CI b0f2e9
* Thu Jan 13 2022 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-36
Open vSwitch CI b0f2e9
- Merging upstream branch-2.16 [RH git: edae801e00]
Open vSwitch CI b0f2e9
    Commit list:
Open vSwitch CI b0f2e9
    ba7fffb832 dpif-netdev: Improve loading of packet data for undersized packets.
Open vSwitch CI b0f2e9
Open vSwitch CI b0f2e9
Open vSwitch CI b0f2e9
* Sat Dec 18 2021 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-35
Open vSwitch CI b0f2e9
- Merging upstream branch-2.16 [RH git: 6ad0375ff5]
Open vSwitch CI b0f2e9
    Commit list:
Open vSwitch CI b0f2e9
    2595b7b3d1 Prepare for 2.16.3.
Open vSwitch CI b0f2e9
    6caaae525c Set release date for 2.16.2.
Open vSwitch CI b0f2e9
    443e3657d7 ofproto-dpif-xlate: Snoop ingress packets and update neigh cache if needed.
Open vSwitch CI b0f2e9
    75d2ef9a60 tnl-neigh-cache: Do not refresh the entry while revalidating.
Open vSwitch CI b0f2e9
    5d88836566 tnl-neigh-cache: Read/write expires atomically.
Open vSwitch CI b0f2e9
    fb42c99c15 dpif-netdev: Improve handling of IP/TCP in avx512 mfex.
Open vSwitch CI b0f2e9
Open vSwitch CI b0f2e9
Open vSwitch CI b0f2e9
* Thu Dec 09 2021 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-34
Open vSwitch CI b0f2e9
- Merging upstream branch-2.16 [RH git: 07b9bf085a]
Open vSwitch CI b0f2e9
    Commit list:
Open vSwitch CI b0f2e9
    f42c484445 compat: handle NF_REPEAT error on nf_conntrack_in.
Open vSwitch CI b0f2e9
Open vSwitch CI b0f2e9
Open vSwitch CI cc3329
* Mon Dec 06 2021 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-33
Open vSwitch CI cc3329
- Merging upstream branch-2.16 [RH git: 8708b55152]
Open vSwitch CI cc3329
    Commit list:
Open vSwitch CI cc3329
    3e527f21cf flow: Consider dataofs when parsing TCP packets.
Open vSwitch CI cc3329
    b537e049ad tests/flowgen: Fix packet data endianness.
Open vSwitch CI cc3329
    35244b4980 ofproto: Fix resource usage explosion due to removal of large number of flows.
Open vSwitch CI cc3329
    a201297639 ofproto: Fix resource usage explosion while processing bundled FLOW_MOD.
Open vSwitch CI cc3329
    cd0133402c tests/flowgen: Fix length field of 802.2 data link header.
Open vSwitch CI cc3329
    2d65b8ffd2 ovs-lib: Backup and remove existing DB when joining cluster.
Open vSwitch CI cc3329
    ab01177637 docs/dpdk: Fix install doc.
Open vSwitch CI cc3329
    38a2129524 ovs-save: Save igmp flows in ofp_parse syntax.
Open vSwitch CI cc3329
    dc77857ce2 faq: Update OVS/DPDK version table for OVS 2.13/2.14.
Open vSwitch CI cc3329
Open vSwitch CI cc3329
Open vSwitch CI bda466
* Thu Nov 18 2021 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-32
Open vSwitch CI bda466
- Merging upstream branch-2.16 [RH git: e90e06a818]
Open vSwitch CI bda466
    Commit list:
Open vSwitch CI bda466
    1d8e0f861f ofproto-dpif-xlate: Fix check_pkt_larger incomplete translation.
Open vSwitch CI bda466
Open vSwitch CI bda466
Open vSwitch CI 550c65
* Mon Nov 15 2021 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-31
Open vSwitch CI 550c65
- Merging upstream branch-2.16 [RH git: 77a249d38b]
Open vSwitch CI 550c65
    Commit list:
Open vSwitch CI 550c65
    f8f2f7c9cb datapath-windows: Reset flow key after Ipv4 fragments are reassembled
Open vSwitch CI 550c65
Open vSwitch CI 550c65
Open vSwitch CI ee63f1
* Wed Nov 10 2021 Timothy Redaelli <tredaelli@redhat.com> - 2.16.0-30
Open vSwitch CI ee63f1
- python: Replace pyOpenSSL with ssl. [RH git: 0cd5867531] (#1988429)
Open vSwitch CI ee63f1
    Currently, pyOpenSSL is half-deprecated upstream and so it's removed on
Open vSwitch CI ee63f1
    some distributions (for example on CentOS Stream 9,
Open vSwitch CI ee63f1
    https://issues.redhat.com/browse/CS-336), but since OVS only
Open vSwitch CI ee63f1
    supports Python 3 it's possible to replace pyOpenSSL with "import ssl"
Open vSwitch CI ee63f1
    included in base Python 3.
Open vSwitch CI ee63f1
    
Open vSwitch CI ee63f1
    Stream recv and send had to be splitted as _recv and _send, since SSLError
Open vSwitch CI ee63f1
    is a subclass of socket.error and so it was not possible to except for
Open vSwitch CI ee63f1
    SSLWantReadError and SSLWantWriteError in recv and send of SSLStream.
Open vSwitch CI ee63f1
    
Open vSwitch CI ee63f1
    TCPstream._open cannot be used in SSLStream, since Python ssl module
Open vSwitch CI ee63f1
    requires the SSL socket to be created before connecting it, so
Open vSwitch CI ee63f1
    SSLStream._open needs to create the socket, create SSL socket and then
Open vSwitch CI ee63f1
    connect the SSL socket.
Open vSwitch CI ee63f1
    
Open vSwitch CI ee63f1
    Reported-by: Timothy Redaelli <tredaelli@redhat.com>
Open vSwitch CI ee63f1
    Reported-at: https://bugzilla.redhat.com/1988429
Open vSwitch CI ee63f1
    Signed-off-by: Timothy Redaelli <tredaelli@redhat.com>
Open vSwitch CI ee63f1
    Acked-by: Terry Wilson <twilson@redhat.com>
Open vSwitch CI ee63f1
    Tested-by: Terry Wilson <twilson@redhat.com>
Open vSwitch CI ee63f1
    Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
Open vSwitch CI ee63f1
    Signed-off-by: Timothy Redaelli <tredaelli@redhat.com>
Open vSwitch CI ee63f1
Open vSwitch CI ee63f1
Open vSwitch CI ee63f1
* Wed Nov 10 2021 Timothy Redaelli <tredaelli@redhat.com> - 2.16.0-29
Open vSwitch CI ee63f1
- python: socket-util: Split inet_open_active function and use connect_ex. [RH git: 2e704b371c]
Open vSwitch CI ee63f1
    In an upcoming patch, PyOpenSSL will be replaced with Python ssl module,
Open vSwitch CI ee63f1
    but in order to do an async connection with Python ssl module the ssl
Open vSwitch CI ee63f1
    socket must be created when the socket is created, but before the
Open vSwitch CI ee63f1
    socket is connected.
Open vSwitch CI ee63f1
    
Open vSwitch CI ee63f1
    So, inet_open_active function is splitted in 3 parts:
Open vSwitch CI ee63f1
    - inet_create_socket_active: creates the socket and returns the family and
Open vSwitch CI ee63f1
      the socket, or (error, None) if some error needs to be returned.
Open vSwitch CI ee63f1
    - inet_connect_active: connect the socket and returns the errno (it
Open vSwitch CI ee63f1
      returns 0 if errno is EINPROGRESS or EWOULDBLOCK).
Open vSwitch CI ee63f1
    
Open vSwitch CI ee63f1
    connect is replaced by connect_ex, since Python suggest to use it for
Open vSwitch CI ee63f1
    asynchronous connects and it's also cleaner since inet_connect_active
Open vSwitch CI ee63f1
    returns errno that connect_ex already returns, moreover due to a Python
Open vSwitch CI ee63f1
    limitation connect cannot not be used with ssl module.
Open vSwitch CI ee63f1
    
Open vSwitch CI ee63f1
    inet_open_active function is changed in order to use the new functions
Open vSwitch CI ee63f1
    inet_create_socket_active and inet_connect_active.
Open vSwitch CI ee63f1
    
Open vSwitch CI ee63f1
    Signed-off-by: Timothy Redaelli <tredaelli@redhat.com>
Open vSwitch CI ee63f1
    Acked-by: Terry Wilson <twilson@redhat.com>
Open vSwitch CI ee63f1
    Tested-by: Terry Wilson <twilson@redhat.com>
Open vSwitch CI ee63f1
    Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
Open vSwitch CI ee63f1
    Signed-off-by: Timothy Redaelli <tredaelli@redhat.com>
Open vSwitch CI ee63f1
Open vSwitch CI ee63f1
Open vSwitch CI 117739
* Wed Nov 10 2021 Timothy Redaelli <tredaelli@redhat.com> - 2.16.0-28
Open vSwitch CI 117739
- redhat: remove mlx4 support [RH git: 4c846afd24] (#1998122)
Open vSwitch CI 117739
    Resolves: #1998122
Open vSwitch CI 117739
Open vSwitch CI 117739
Open vSwitch CI 483c2c
* Tue Nov 09 2021 Ilya Maximets <i.maximets@redhat.com> - 2.16.0-27
Open vSwitch CI 483c2c
- ovsdb: Don't let transaction history grow larger than the database. [RH git: 93d1fa0bdf] (#2012949)
Open vSwitch CI 483c2c
    commit 317b1bfd7dd315e241c158e6d4095002ff391ee3
Open vSwitch CI 483c2c
    Author: Ilya Maximets <i.maximets@ovn.org>
Open vSwitch CI 483c2c
    Date:   Tue Sep 28 13:17:21 2021 +0200
Open vSwitch CI 483c2c
    
Open vSwitch CI 483c2c
        ovsdb: Don't let transaction history grow larger than the database.
Open vSwitch CI 483c2c
    
Open vSwitch CI 483c2c
        If user frequently changes a lot of rows in a database, transaction
Open vSwitch CI 483c2c
        history could grow way larger than the database itself.  This wastes
Open vSwitch CI 483c2c
        a lot of memory and also makes monitor_cond_since slower than
Open vSwitch CI 483c2c
        usual monotor_cond if the transaction id is old enough, because
Open vSwitch CI 483c2c
        re-construction of the changes from a history is slower than just
Open vSwitch CI 483c2c
        creation of initial database snapshot.  This is also the case if
Open vSwitch CI 483c2c
        user deleted a lot of data, so transaction history still holds all of
Open vSwitch CI 483c2c
        it while the database itself doesn't.
Open vSwitch CI 483c2c
    
Open vSwitch CI 483c2c
        In case of current lb-per-service model in ovn-kubernetes, each
Open vSwitch CI 483c2c
        load-balancer is added to every logical switch/router.  Such a
Open vSwitch CI 483c2c
        transaction touches more than a half of a OVN_Northbound database.
Open vSwitch CI 483c2c
        And each of these transactions is added to the transaction history.
Open vSwitch CI 483c2c
        Since transaction history depth is 100, in worst case scenario,
Open vSwitch CI 483c2c
        it will hold 100 copies of a database increasing memory consumption
Open vSwitch CI 483c2c
        dramatically.  In tests with 3000 LBs and 120 LSs, memory goes up
Open vSwitch CI 483c2c
        to 3 GB, while holding at 30 MB if transaction history disabled in
Open vSwitch CI 483c2c
        the code.
Open vSwitch CI 483c2c
    
Open vSwitch CI 483c2c
        Fixing that by keeping count of the number of ovsdb_atom's in the
Open vSwitch CI 483c2c
        database and not allowing the total number of atoms in transaction
Open vSwitch CI 483c2c
        history to grow larger than this value.  Counting atoms is fairly
Open vSwitch CI 483c2c
        cheap because we don't need to iterate over them, so it doesn't have
Open vSwitch CI 483c2c
        significant performance impact.  It would be ideal to measure the
Open vSwitch CI 483c2c
        size of individual atoms, but that will hit the performance.
Open vSwitch CI 483c2c
        Counting cells instead of atoms is not sufficient, because OVN
Open vSwitch CI 483c2c
        users are adding hundreds or thousands of atoms to a single cell,
Open vSwitch CI 483c2c
        so they are largely different in size.
Open vSwitch CI 483c2c
    
Open vSwitch CI 483c2c
        Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
Open vSwitch CI 483c2c
        Acked-by: Han Zhou <hzhou@ovn.org>
Open vSwitch CI 483c2c
        Acked-by: Dumitru Ceara <dceara@redhat.com>
Open vSwitch CI 483c2c
    
Open vSwitch CI 483c2c
    Reported-at: https://bugzilla.redhat.com/2012949
Open vSwitch CI 483c2c
    Signed-off-by: Ilya Maximets <i.maximets@redhat.com>
Open vSwitch CI 483c2c
Open vSwitch CI 483c2c
Open vSwitch CI 483c2c
* Tue Nov 09 2021 Ilya Maximets <i.maximets@redhat.com> - 2.16.0-26
Open vSwitch CI 483c2c
- ovsdb: transaction: Incremental reassessment of weak refs. [RH git: e8a363db49] (#2005958)
Open vSwitch CI 483c2c
    commit 4dbff9f0a68579241ac1a040726be3906afb8fe9
Open vSwitch CI 483c2c
    Author: Ilya Maximets <i.maximets@ovn.org>
Open vSwitch CI 483c2c
    Date:   Sat Oct 16 03:20:23 2021 +0200
Open vSwitch CI 483c2c
    
Open vSwitch CI 483c2c
        ovsdb: transaction: Incremental reassessment of weak refs.
Open vSwitch CI 483c2c
    
Open vSwitch CI 483c2c
        The main idea is to not store list of weak references in the source
Open vSwitch CI 483c2c
        row, so they all don't need to be re-checked/updated on every
Open vSwitch CI 483c2c
        modification of that source row.  The point is that source row already
Open vSwitch CI 483c2c
        knows UUIDs of all destination rows stored in the data, so there is no
Open vSwitch CI 483c2c
        much profit in storing this information somewhere else.  If needed,
Open vSwitch CI 483c2c
        destination row can be looked up and reference can be looked up in the
Open vSwitch CI 483c2c
        destination row.  For the fast lookup, destination row now stores
Open vSwitch CI 483c2c
        references in a hash map.
Open vSwitch CI 483c2c
    
Open vSwitch CI 483c2c
        Weak reference structure now contains the table and uuid of a source
Open vSwitch CI 483c2c
        row instead of a direct pointer.  This allows to replace/update the
Open vSwitch CI 483c2c
        source row without breaking any weak references stored in destination
Open vSwitch CI 483c2c
        rows.
Open vSwitch CI 483c2c
    
Open vSwitch CI 483c2c
        Structure also now contains the key-value pair of atoms that triggered
Open vSwitch CI 483c2c
        creation of this reference.  These atoms can be used to quickly
Open vSwitch CI 483c2c
        subtract removed references from a source row.  During reassessment,
Open vSwitch CI 483c2c
        ovsdb now only needs to care about new added or removed atoms, and
Open vSwitch CI 483c2c
        atoms that got removed due to removal of the destination rows, but
Open vSwitch CI 483c2c
        these are marked for reassessment by the destination row.
Open vSwitch CI 483c2c
    
Open vSwitch CI 483c2c
        ovsdb_datum_subtract() is used to remove atoms that points to removed
Open vSwitch CI 483c2c
        or incorrect rows, so there is no need to re-sort datum in the end.
Open vSwitch CI 483c2c
    
Open vSwitch CI 483c2c
        Results of an OVN load-balancer benchmark that adds 3K load-balancers
Open vSwitch CI 483c2c
        to each of 120 logical switches and 120 logical routers in the OVN
Open vSwitch CI 483c2c
        sandbox with clustered Northbound database and then removes them:
Open vSwitch CI 483c2c
    
Open vSwitch CI 483c2c
        Before:
Open vSwitch CI 483c2c
    
Open vSwitch CI 483c2c
          %CPU  CPU Time  CMD
Open vSwitch CI 483c2c
          86.8  00:16:05  ovsdb-server nb1.db
Open vSwitch CI 483c2c
          44.1  00:08:11  ovsdb-server nb2.db
Open vSwitch CI 483c2c
          43.2  00:08:00  ovsdb-server nb3.db
Open vSwitch CI 483c2c
    
Open vSwitch CI 483c2c
        After:
Open vSwitch CI 483c2c
    
Open vSwitch CI 483c2c
          %CPU  CPU Time  CMD
Open vSwitch CI 483c2c
          54.9  00:02:58  ovsdb-server nb1.db
Open vSwitch CI 483c2c
          33.3  00:01:48  ovsdb-server nb2.db
Open vSwitch CI 483c2c
          32.2  00:01:44  ovsdb-server nb3.db
Open vSwitch CI 483c2c
    
Open vSwitch CI 483c2c
        So, on a cluster leader the processing time dropped by 5.4x, on
Open vSwitch CI 483c2c
        followers - by 4.5x.  More load-balancers - larger the performance
Open vSwitch CI 483c2c
        difference.  There is a slight increase of memory usage, because new
Open vSwitch CI 483c2c
        reference structure is larger, but the difference is not significant.
Open vSwitch CI 483c2c
    
Open vSwitch CI 483c2c
        Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
Open vSwitch CI 483c2c
        Acked-by: Dumitru Ceara <dceara@redhat.com>
Open vSwitch CI 483c2c
    
Open vSwitch CI 483c2c
    Reported-at: https://bugzilla.redhat.com/2005958
Open vSwitch CI 483c2c
    Signed-off-by: Ilya Maximets <i.maximets@redhat.com>
Open vSwitch CI 483c2c
Open vSwitch CI 483c2c
Open vSwitch CI 3f9b5c
* Thu Oct 28 2021 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-25
Open vSwitch CI 3f9b5c
- Merging upstream branch-2.16 [RH git: f5366890c5]
Open vSwitch CI 3f9b5c
    Commit list:
Open vSwitch CI 3f9b5c
    c221c8e613 datapath-windows:Reset PseudoChecksum value only for TX direction offload case
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
* Wed Oct 27 2021 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-24
Open vSwitch CI 3f9b5c
- Merging upstream branch-2.16 [RH git: 4682b76694]
Open vSwitch CI 3f9b5c
    Commit list:
Open vSwitch CI 3f9b5c
    b79f0369f2 ci: Make linux-prepare trust system installs.
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
* Mon Oct 25 2021 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-23
Open vSwitch CI 3f9b5c
- Merging upstream branch-2.16 [RH git: cce913794e]
Open vSwitch CI 3f9b5c
    Commit list:
Open vSwitch CI 3f9b5c
    2a4c87f300 Prepare for 2.16.2.
Open vSwitch CI 3f9b5c
    aaa1439b8e Set release date for 2.16.1.
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
* Thu Oct 21 2021 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-22
Open vSwitch CI 3f9b5c
- Merging upstream branch-2.16 [RH git: 29f01c4fdb]
Open vSwitch CI 3f9b5c
    Commit list:
Open vSwitch CI 3f9b5c
    108176ab5a github: Stick to python 3.9.
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
* Tue Oct 19 2021 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-21
Open vSwitch CI 3f9b5c
- Merging upstream branch-2.16 [RH git: 2546fa9646]
Open vSwitch CI 3f9b5c
    Commit list:
Open vSwitch CI 3f9b5c
    5c5e34603b datapath-windows: add layers when adding the deferred actions
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
* Thu Oct 14 2021 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-20
Open vSwitch CI 3f9b5c
- Merging upstream branch-2.16 [RH git: d572c95f69]
Open vSwitch CI 3f9b5c
    Commit list:
Open vSwitch CI 3f9b5c
    458a4f75f3 ofproto-dpif-xlate: Fix zone set from non-frozen-metadata fields.
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
* Wed Oct 13 2021 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-19
Open vSwitch CI 3f9b5c
- Merging upstream branch-2.16 [RH git: 557ca689f7]
Open vSwitch CI 3f9b5c
    Commit list:
Open vSwitch CI 3f9b5c
    6d8190584a dpif-netdev: Fix use-after-free on PACKET_OUT of IP fragments.
Open vSwitch CI 3f9b5c
    44a66cc1d0 tunnel-push-pop.at: Mask source port in tunnel header.
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
* Tue Oct 12 2021 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-18
Open vSwitch CI 3f9b5c
- Merging upstream branch-2.16 [RH git: a6c4770398]
Open vSwitch CI 3f9b5c
    Commit list:
Open vSwitch CI 3f9b5c
    27a5848a33 ovs-ctl: Add missing description for --ovs-vswitchd-options and --ovsdb-server-options to usage().
Open vSwitch CI 3f9b5c
    0300d0c0c2 dpdk-stub: Change the ERR log to DBG.
Open vSwitch CI 3f9b5c
    cdd6dd821d dpif-netlink: Fix feature negotiation for older kernels.
Open vSwitch CI 3f9b5c
    c2682c42cb dpif-netdev: Fix pmd thread comments to include SMC.
Open vSwitch CI 3f9b5c
    9377f4a465 python: idl: Avoid sending transactions when the DB is not synced up.
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
* Tue Oct 12 2021 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-17
Open vSwitch CI 3f9b5c
- Merging upstream branch-2.16 [RH git: c1145b5236]
Open vSwitch CI 3f9b5c
    Commit list:
Open vSwitch CI 3f9b5c
    0fd17fbb09 ipf: release unhandled packets from the batch
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
* Thu Sep 30 2021 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-16
Open vSwitch CI 3f9b5c
- Merging upstream branch-2.16 [RH git: 5c05133179]
Open vSwitch CI 3f9b5c
    Commit list:
Open vSwitch CI 3f9b5c
    3f692fba98 datapath-windows:adjust Offset when processing packet in POP_VLAN action
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
* Wed Sep 29 2021 Dumitru Ceara <dceara@redhat.com> - 2.16.0-15
Open vSwitch CI 3f9b5c
- ovsdb-data: Deduplicate string atoms. [RH git: 24e7d1140e] (#2006839)
Open vSwitch CI 3f9b5c
    commit 429b114c5aadee24ccfb16ad7d824f45cdcea75a
Open vSwitch CI 3f9b5c
    Author: Ilya Maximets <i.maximets@ovn.org>
Open vSwitch CI 3f9b5c
    Date:   Wed Sep 22 09:28:50 2021 +0200
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        ovsdb-server spends a lot of time cloning atoms for various reasons,
Open vSwitch CI 3f9b5c
        e.g. to create a diff of two rows or to clone a row to the transaction.
Open vSwitch CI 3f9b5c
        All atoms, except for strings, contains a simple value that could be
Open vSwitch CI 3f9b5c
        copied in efficient way, but duplicating strings every time has a
Open vSwitch CI 3f9b5c
        significant performance impact.
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        Introducing a new reference-counted structure 'ovsdb_atom_string'
Open vSwitch CI 3f9b5c
        that allows to not copy strings every time, but just increase a
Open vSwitch CI 3f9b5c
        reference counter.
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        This change allows to increase transaction throughput in benchmarks
Open vSwitch CI 3f9b5c
        up to 2x for standalone databases and 3x for clustered databases, i.e.
Open vSwitch CI 3f9b5c
        number of transactions that ovsdb-server can handle per second.
Open vSwitch CI 3f9b5c
        It also noticeably reduces memory consumption of ovsdb-server.
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        Next step will be to consolidate this structure with json strings,
Open vSwitch CI 3f9b5c
        so we will not need to duplicate strings while converting database
Open vSwitch CI 3f9b5c
        objects to json and back.
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
Open vSwitch CI 3f9b5c
        Acked-by: Dumitru Ceara <dceara@redhat.com>
Open vSwitch CI 3f9b5c
        Acked-by: Mark D. Gray <mark.d.gray@redhat.com>
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
    Reported-at: https://bugzilla.redhat.com/show_bug.cgi?id=2006839
Open vSwitch CI 3f9b5c
    Signed-off-by: Dumitru Ceara <dceara@redhat.com>
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
* Wed Sep 29 2021 Dumitru Ceara <dceara@redhat.com> - 2.16.0-14
Open vSwitch CI 3f9b5c
- ovsdb-data: Add function to apply diff in-place. [RH git: df0e4bda98] (#2006851)
Open vSwitch CI 3f9b5c
    commit 32b51326ef9c307b4acd0bacafb0218dd1372f3d
Open vSwitch CI 3f9b5c
    Author: Ilya Maximets <i.maximets@ovn.org>
Open vSwitch CI 3f9b5c
    Date:   Thu Sep 23 01:47:24 2021 +0200
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        ovsdb_datum_apply_diff() is heavily used in ovsdb transactions, but
Open vSwitch CI 3f9b5c
        it's linear in terms of number of comparisons.  And it also clones
Open vSwitch CI 3f9b5c
        all the atoms along the way.  In most cases size of a diff is much
Open vSwitch CI 3f9b5c
        smaller than the size of the original datum, this allows to perform
Open vSwitch CI 3f9b5c
        the same operation in-place with only O(diff->n * log2(old->n))
Open vSwitch CI 3f9b5c
        comparisons and O(old->n + diff->n) memory copies with memcpy.
Open vSwitch CI 3f9b5c
        Using this function while applying diffs read from the storage gives
Open vSwitch CI 3f9b5c
        a significant performance boost and allows to execute much more
Open vSwitch CI 3f9b5c
        transactions per second.
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
Open vSwitch CI 3f9b5c
        Acked-by: Mark D. Gray <mark.d.gray@redhat.com>
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
    Reported-at: https://bugzilla.redhat.com/show_bug.cgi?id=2006851
Open vSwitch CI 3f9b5c
    Signed-off-by: Dumitru Ceara <dceara@redhat.com>
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
* Wed Sep 29 2021 Dumitru Ceara <dceara@redhat.com> - 2.16.0-13
Open vSwitch CI 3f9b5c
- ovsdb-data: Optimize subtraction of sets. [RH git: 5bace82405] (#2005483)
Open vSwitch CI 3f9b5c
    commit bb12b63176389e516ddfefce20dfa165f24430fb
Open vSwitch CI 3f9b5c
    Author: Ilya Maximets <i.maximets@ovn.org>
Open vSwitch CI 3f9b5c
    Date:   Thu Sep 23 01:47:23 2021 +0200
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        Current algorithm for ovsdb_datum_subtract looks like this:
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
          for-each atom in a:
Open vSwitch CI 3f9b5c
              if atom in b:
Open vSwitch CI 3f9b5c
                  swap(atom, <last atom in 'a'>)
Open vSwitch CI 3f9b5c
                  destroy(atom)
Open vSwitch CI 3f9b5c
          quicksort(a)
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        Complexity:
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
          Na * log2(Nb)  +  (Na - Nb) * log2(Na - Nb)
Open vSwitch CI 3f9b5c
            Search          Comparisons for quicksort
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        It's not optimal, especially because Nb << Na in a vast majority of
Open vSwitch CI 3f9b5c
        cases.
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        Reversing the search phase to look up atoms from 'b' in 'a', and
Open vSwitch CI 3f9b5c
        closing gaps from deleted elements in 'a' by plain memory copy to
Open vSwitch CI 3f9b5c
        avoid quicksort.
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        Resulted complexity:
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
          Nb * log2(Na)  +    (Na - Nb)
Open vSwitch CI 3f9b5c
            Search          Memory copies
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        Subtraction is heavily used while executing database transactions.
Open vSwitch CI 3f9b5c
        For example, to remove one port from a logical switch in OVN.
Open vSwitch CI 3f9b5c
        Complexity of such operation if original logical switch had 100 ports
Open vSwitch CI 3f9b5c
        goes down from
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
         100 * log2(1)   = 100 comparisons for search and
Open vSwitch CI 3f9b5c
          99 * log2(99)  = 656 comparisons for quicksort
Open vSwitch CI 3f9b5c
                           ------------------------------
Open vSwitch CI 3f9b5c
                           756 comparisons in total
Open vSwitch CI 3f9b5c
        to only
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
           1 * log2(100) = 7 comparisons for search
Open vSwitch CI 3f9b5c
           + memory copy of 99 * sizeof (union ovsdb_atom) bytes.
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        We could use memmove to close the gaps after removing atoms, but
Open vSwitch CI 3f9b5c
        it will lead to 2 memory copies inside the call, while we can perform
Open vSwitch CI 3f9b5c
        only one to the temporary 'result' and swap pointers.
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        Performance in cases, where sizes of 'a' and 'b' are comparable,
Open vSwitch CI 3f9b5c
        should not change.  Cases with Nb >> Na should not happen in practice.
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        All in all, this change allows ovsdb-server to perform several times
Open vSwitch CI 3f9b5c
        more transactions, that removes elements from sets, per second.
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
Open vSwitch CI 3f9b5c
        Acked-by: Han Zhou <hzhou@ovn.org>
Open vSwitch CI 3f9b5c
        Acked-by: Mark D. Gray <mark.d.gray@redhat.com>
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
    Reported-at: https://bugzilla.redhat.com/show_bug.cgi?id=2005483
Open vSwitch CI 3f9b5c
    Signed-off-by: Dumitru Ceara <dceara@redhat.com>
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
* Wed Sep 29 2021 Dumitru Ceara <dceara@redhat.com> - 2.16.0-12
Open vSwitch CI 3f9b5c
- ovsdb-data: Optimize union of sets. [RH git: e2a4c7d794] (#2005483)
Open vSwitch CI 3f9b5c
    commit 51946d22274cd591dc061358fb507056fbd91420
Open vSwitch CI 3f9b5c
    Author: Ilya Maximets <i.maximets@ovn.org>
Open vSwitch CI 3f9b5c
    Date:   Thu Sep 23 01:47:22 2021 +0200
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        Current algorithm of ovsdb_datum_union looks like this:
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
          for-each atom in b:
Open vSwitch CI 3f9b5c
              if not bin_search(a, atom):
Open vSwitch CI 3f9b5c
                  push(a, clone(atom))
Open vSwitch CI 3f9b5c
          quicksort(a)
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        So, the complexity looks like this:
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
           Nb * log2(Na)   +    Nb     +   (Na + Nb) * log2(Na + Nb)
Open vSwitch CI 3f9b5c
           Comparisons        clones       Comparisons for quicksort
Open vSwitch CI 3f9b5c
           for search
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        ovsdb_datum_union() is heavily used in database transactions while
Open vSwitch CI 3f9b5c
        new element is added to a set.  For example, if new logical switch
Open vSwitch CI 3f9b5c
        port is added to a logical switch in OVN.  This is a very common
Open vSwitch CI 3f9b5c
        use case where CMS adds one new port to an existing switch that
Open vSwitch CI 3f9b5c
        already has, let's say, 100 ports.  For this case ovsdb-server will
Open vSwitch CI 3f9b5c
        have to perform:
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
           1 * log2(100)  + 1 clone + 101 * log2(101)
Open vSwitch CI 3f9b5c
           Comparisons                Comparisons for
Open vSwitch CI 3f9b5c
           for search                   quicksort.
Open vSwitch CI 3f9b5c
               ~7           1            ~707
Open vSwitch CI 3f9b5c
           Roughly 714 comparisons of atoms and 1 clone.
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        Since binary search can give us position, where new atom should go
Open vSwitch CI 3f9b5c
        (it's the 'low' index after the search completion) for free, the
Open vSwitch CI 3f9b5c
        logic can be re-worked like this:
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
          copied = 0
Open vSwitch CI 3f9b5c
          for-each atom in b:
Open vSwitch CI 3f9b5c
              desired_position = bin_search(a, atom)
Open vSwitch CI 3f9b5c
              push(result, a[ copied : desired_position - 1 ])
Open vSwitch CI 3f9b5c
              copied = desired_position
Open vSwitch CI 3f9b5c
              push(result, clone(atom))
Open vSwitch CI 3f9b5c
          push(result, a[ copied : Na ])
Open vSwitch CI 3f9b5c
          swap(a, result)
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        Complexity of this schema:
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
           Nb * log2(Na)   +    Nb     +         Na
Open vSwitch CI 3f9b5c
           Comparisons        clones       memory copy on push
Open vSwitch CI 3f9b5c
           for search
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        'swap' is just a swap of a few pointers.  'push' is not a 'clone',
Open vSwitch CI 3f9b5c
        but a simple memory copy of 'union ovsdb_atom'.
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        In general, this schema substitutes complexity of a quicksort
Open vSwitch CI 3f9b5c
        with complexity of a memory copy of Na atom structures, where we're
Open vSwitch CI 3f9b5c
        not even copying strings that these atoms are pointing to.
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        Complexity in the example above goes down from 714 comparisons
Open vSwitch CI 3f9b5c
        to 7 comparisons and memcpy of 100 * sizeof (union ovsdb_atom) bytes.
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        General complexity of a memory copy should always be lower than
Open vSwitch CI 3f9b5c
        complexity of a quicksort, especially because these copies usually
Open vSwitch CI 3f9b5c
        performed in bulk, so this new schema should work faster for any input.
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        All in all, this change allows to execute several times more
Open vSwitch CI 3f9b5c
        transactions per second for transactions that adds new entries to sets.
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        Alternatively, union can be implemented as a linear merge of two
Open vSwitch CI 3f9b5c
        sorted arrays, but this will result in O(Na) comparisons, which
Open vSwitch CI 3f9b5c
        is more than Nb * log2(Na) in common case, since Na is usually
Open vSwitch CI 3f9b5c
        far bigger than Nb.  Linear merge will also mean per-atom memory
Open vSwitch CI 3f9b5c
        copies instead of copying in bulk.
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        'replace' functionality of ovsdb_datum_union() had no users, so it
Open vSwitch CI 3f9b5c
        just removed.  But it can easily be added back if needed in the future.
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
Open vSwitch CI 3f9b5c
        Acked-by: Han Zhou <hzhou@ovn.org>
Open vSwitch CI 3f9b5c
        Acked-by: Mark D. Gray <mark.d.gray@redhat.com>
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
    Reported-at: https://bugzilla.redhat.com/show_bug.cgi?id=2005483
Open vSwitch CI 3f9b5c
    Signed-off-by: Dumitru Ceara <dceara@redhat.com>
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
* Wed Sep 29 2021 Dumitru Ceara <dceara@redhat.com> - 2.16.0-11
Open vSwitch CI 3f9b5c
- ovsdb: transaction: Use diffs for strong reference counting. [RH git: 85da133eaa] (#2003203)
Open vSwitch CI 3f9b5c
    commit b2712d026eae2d9a5150c2805310eaf506e1f162
Open vSwitch CI 3f9b5c
    Author: Ilya Maximets <i.maximets@ovn.org>
Open vSwitch CI 3f9b5c
    Date:   Tue Sep 14 00:19:57 2021 +0200
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        Currently, even if one reference added to the set of strong references
Open vSwitch CI 3f9b5c
        or removed from it, ovsdb-server will walk through the whole set and
Open vSwitch CI 3f9b5c
        re-count references to other rows.  These referenced rows will also be
Open vSwitch CI 3f9b5c
        added to the transaction in order to re-count their references.
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        For example, every time Logical Switch Port added to a Logical Switch,
Open vSwitch CI 3f9b5c
        OVN Northbound database server will walk through all ports of this
Open vSwitch CI 3f9b5c
        Logical Switch, clone their rows, and re-count references.  This is
Open vSwitch CI 3f9b5c
        not very efficient.  Instead, it can only increase reference counters
Open vSwitch CI 3f9b5c
        for added references and reduce for removed ones.  In many cases this
Open vSwitch CI 3f9b5c
        will be only one row affected in the Logical_Switch_Port table.
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        Introducing new function that generates a diff of two datum objects,
Open vSwitch CI 3f9b5c
        but stores added and removed atoms separately, so they can be used
Open vSwitch CI 3f9b5c
        to increase or decrease row reference counters accordingly.
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        This change allows to perform several times more transactions that
Open vSwitch CI 3f9b5c
        adds or removes strong references to/from sets per second, because
Open vSwitch CI 3f9b5c
        ovsdb-server no longer clones and re-counts rows that are irrelevant
Open vSwitch CI 3f9b5c
        to current transaction.
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
        Acked-by: Dumitru Ceara <dceara@redhat.com>
Open vSwitch CI 3f9b5c
        Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
Open vSwitch CI 3f9b5c
    
Open vSwitch CI 3f9b5c
    Reported-at: https://bugzilla.redhat.com/show_bug.cgi?id=2003203
Open vSwitch CI 3f9b5c
    Signed-off-by: Dumitru Ceara <dceara@redhat.com>
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
* Mon Sep 27 2021 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-10
Open vSwitch CI 3f9b5c
- Merging upstream branch-2.16 [RH git: 2114714012]
Open vSwitch CI 3f9b5c
    Commit list:
Open vSwitch CI 3f9b5c
    547371ecdb cirrus: Reduce memory requirements for FreeBSD VMs.
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
* Thu Sep 23 2021 Timothy Redaelli <tredaelli@redhat.com> - 2.16.0-9
Open vSwitch CI 3f9b5c
- redhat: use hugetlbfs group for /var/log/openvswitch when dpdk is enabled [RH git: 4e5928b671] (#2004543)
Open vSwitch CI 3f9b5c
    Resolves: #2004543
Open vSwitch CI 3f9b5c
Open vSwitch CI 3f9b5c
110336
* Thu Sep 16 2021 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-8
110336
- Merging upstream branch-2.16 [RH git: 7332b410fc]
110336
    Commit list:
110336
    facaf5bc71 netdev-linux: Fix a null pointer dereference in netdev_linux_notify_sock().
110336
    6e203d4873 pcap-file: Fix memory leak in ovs_pcap_open().
110336
    f50da0b267 odp-util: Fix a null pointer dereference in odp_flow_format().
110336
    7da752e43f odp-util: Fix a null pointer dereference in odp_nsh_key_from_attr__().
110336
    bc22b01459 netdev-dpdk: Fix RSS configuration for virtio.
110336
    81706c5d43 ipf: Fix only nat the first fragment in the reass process.
110336
110336
110336
* Wed Sep 08 2021 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-7
110336
- Merging upstream branch-2.16 [RH git: e71f31dfd6]
110336
    Commit list:
110336
    242c280f0e dpif-netdev: Fix crash when PACKET_OUT is metered.
110336
110336
110336
* Tue Aug 31 2021 Ilya Maximets <i.maximets@redhat.com> - 2.16.0-6
110336
- ovsdb: monitor: Store serialized json in a json cache. [RH git: bc20330c85] (#1996152)
110336
    commit 43e66fc27659af2a5c976bdd27fe747b442b5554
110336
    Author: Ilya Maximets <i.maximets@ovn.org>
110336
    Date:   Tue Aug 24 21:00:39 2021 +0200
110336
    
110336
        Same json from a json cache is typically sent to all the clients,
110336
        e.g., in case of OVN deployment with ovn-monitor-all=true.
110336
    
110336
        There could be hundreds or thousands connected clients and ovsdb
110336
        will serialize the same json object for each of them before sending.
110336
    
110336
        Serializing it once before storing into json cache to speed up
110336
        processing.
110336
    
110336
        This change allows to save a lot of CPU cycles and a bit of memory
110336
        since we need to store in memory only a string and not the full json
110336
        object.
110336
    
110336
        Testing with ovn-heater on 120 nodes using density-heavy scenario
110336
        shows reduction of the total CPU time used by Southbound DB processes
110336
        from 256 minutes to 147.  Duration of unreasonably long poll intervals
110336
        also reduced dramatically from 7 to 2 seconds:
110336
    
110336
                   Count   Min    Max   Median    Mean   95 percentile
110336
         -------------------------------------------------------------
110336
          Before   1934   1012   7480   4302.5   4875.3     7034.3
110336
          After    1909   1004   2730   1453.0   1532.5     2053.6
110336
    
110336
        Acked-by: Dumitru Ceara <dceara@redhat.com>
110336
        Acked-by: Han Zhou <hzhou@ovn.org>
110336
        Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
110336
    
110336
    Reported-at: https://bugzilla.redhat.com/show_bug.cgi?id=1996152
110336
    Signed-off-by: Ilya Maximets <i.maximets@redhat.com>
110336
110336
110336
* Tue Aug 31 2021 Ilya Maximets <i.maximets@redhat.com> - 2.16.0-5
110336
- raft: Don't keep full json objects in memory if no longer needed. [RH git: 4606423e8b] (#1990058)
110336
    commit 0de882954032aa37dc943bafd72c33324aa0c95a
110336
    Author: Ilya Maximets <i.maximets@ovn.org>
110336
    Date:   Tue Aug 24 21:00:38 2021 +0200
110336
    
110336
        raft: Don't keep full json objects in memory if no longer needed.
110336
    
110336
        Raft log entries (and raft database snapshot) contains json objects
110336
        of the data.  Follower receives append requests with data that gets
110336
        parsed and added to the raft log.  Leader receives execution requests,
110336
        parses data out of them and adds to the log.  In both cases, later
110336
        ovsdb-server reads the log with ovsdb_storage_read(), constructs
110336
        transaction and updates the database.  On followers these json objects
110336
        in common case are never used again.  Leader may use them to send
110336
        append requests or snapshot installation requests to followers.
110336
        However, all these operations (except for ovsdb_storage_read()) are
110336
        just serializing the json in order to send it over the network.
110336
    
110336
        Json objects are significantly larger than their serialized string
110336
        representation.  For example, the snapshot of the database from one of
110336
        the ovn-heater scale tests takes 270 MB as a string, but 1.6 GB as
110336
        a json object from the total 3.8 GB consumed by ovsdb-server process.
110336
    
110336
        ovsdb_storage_read() for a given raft entry happens only once in a
110336
        lifetime, so after this call, we can serialize the json object, store
110336
        the string representation and free the actual json object that ovsdb
110336
        will never need again.  This can save a lot of memory and can also
110336
        save serialization time, because each raft entry for append requests
110336
        and snapshot installation requests serialized only once instead of
110336
        doing that every time such request needs to be sent.
110336
    
110336
        JSON_SERIALIZED_OBJECT can be used in order to seamlessly integrate
110336
        pre-serialized data into raft_header and similar json objects.
110336
    
110336
        One major special case is creation of a database snapshot.
110336
        Snapshot installation request received over the network will be parsed
110336
        and read by ovsdb-server just like any other raft log entry.  However,
110336
        snapshots created locally with raft_store_snapshot() will never be
110336
        read back, because they reflect the current state of the database,
110336
        hence already applied.  For this case we can free the json object
110336
        right after writing snapshot on disk.
110336
    
110336
        Tests performed with ovn-heater on 60 node density-light scenario,
110336
        where on-disk database goes up to 97 MB, shows average memory
110336
        consumption of ovsdb-server Southbound DB processes decreased by 58%
110336
        (from 602 MB to 256 MB per process) and peak memory consumption
110336
        decreased by 40% (from 1288 MB to 771 MB).
110336
    
110336
        Test with 120 nodes on density-heavy scenario with 270 MB on-disk
110336
        database shows 1.5 GB memory consumption decrease as expected.
110336
        Also, total CPU time consumed by the Southbound DB process reduced
110336
        from 296 to 256 minutes.  Number of unreasonably long poll intervals
110336
        reduced from 2896 down to 1934.
110336
    
110336
        Deserialization is also implemented just in case.  I didn't see this
110336
        function being invoked in practice.
110336
    
110336
        Acked-by: Dumitru Ceara <dceara@redhat.com>
110336
        Acked-by: Han Zhou <hzhou@ovn.org>
110336
        Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
110336
    
110336
    Reported-at: https://bugzilla.redhat.com/show_bug.cgi?id=1990058
110336
    Signed-off-by: Ilya Maximets <i.maximets@redhat.com>
110336
110336
110336
* Tue Aug 31 2021 Ilya Maximets <i.maximets@redhat.com> - 2.16.0-4
110336
- json: Add support for partially serialized json objects. [RH git: 885e5ce1b5] (#1990058)
110336
    commit b0bca6f27aae845c3ca8b48d66a7dbd3d978162a
110336
    Author: Ilya Maximets <i.maximets@ovn.org>
110336
    Date:   Tue Aug 24 21:00:37 2021 +0200
110336
    
110336
        json: Add support for partially serialized json objects.
110336
    
110336
        Introducing a new json type JSON_SERIALIZED_OBJECT.  It's not an
110336
        actual type that can be seen in a json message on a wire, but
110336
        internal type that is intended to hold a serialized version of
110336
        some other json object.  For this reason it's defined after the
110336
        JSON_N_TYPES to not confuse parsers and other parts of the code
110336
        that relies on compliance with RFC 4627.
110336
    
110336
        With this JSON type internal users may construct large JSON objects,
110336
        parts of which are already serialized.  This way, while serializing
110336
        the larger object, data from JSON_SERIALIZED_OBJECT can be added
110336
        directly to the result, without additional processing.
110336
    
110336
        This will be used by next commits to add pre-serialized JSON data
110336
        to the raft_header structure, that can be converted to a JSON
110336
        before writing the file transaction on disk or sending to other
110336
        servers.  Same technique can also be used to pre-serialize json_cache
110336
        for ovsdb monitors, this should allow to not perform serialization
110336
        for every client and will save some more memory.
110336
    
110336
        Since serialized JSON is just a string, reusing the 'json->string'
110336
        pointer for it.
110336
    
110336
        Acked-by: Dumitru Ceara <dceara@redhat.com>
110336
        Acked-by: Han Zhou <hzhou@ovn.org>
110336
        Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
110336
    
110336
    Reported-at: https://bugzilla.redhat.com/show_bug.cgi?id=1990058
110336
    Signed-off-by: Ilya Maximets <i.maximets@redhat.com>
110336
110336
110336
* Tue Aug 31 2021 Ilya Maximets <i.maximets@redhat.com> - 2.16.0-3
110336
- json: Optimize string serialization. [RH git: bb1654da63] (#1990069)
110336
    commit 748010ff304b7cd2c43f4eb98a554433f0df07f9
110336
    Author: Ilya Maximets <i.maximets@ovn.org>
110336
    Date:   Tue Aug 24 23:07:22 2021 +0200
110336
    
110336
        json: Optimize string serialization.
110336
    
110336
        Current string serialization code puts all characters one by one.
110336
        This is slow because dynamic string needs to perform length checks
110336
        on every ds_put_char() and it's also doesn't allow compiler to use
110336
        better memory copy operations, i.e. doesn't allow copying few bytes
110336
        at once.
110336
    
110336
        Special symbols are rare in a typical database.  Quotes are frequent,
110336
        but not too frequent.  In databases created by ovn-kubernetes, for
110336
        example, usually there are at least 10 to 50 chars between quotes.
110336
        So, it's better to count characters that doesn't require escaping
110336
        and use fast data copy for the whole sequential block.
110336
    
110336
        Testing with a synthetic benchmark (included) on my laptop shows
110336
        following performance improvement:
110336
    
110336
           Size      Q  S       Before       After       Diff
110336
         -----------------------------------------------------
110336
         100000      0  0 :    0.227 ms     0.142 ms   -37.4 %
110336
         100000      2  1 :    0.277 ms     0.186 ms   -32.8 %
110336
         100000      10 1 :    0.361 ms     0.309 ms   -14.4 %
110336
         10000000    0  0 :   22.720 ms    12.160 ms   -46.4 %
110336
         10000000    2  1 :   27.470 ms    19.300 ms   -29.7 %
110336
         10000000    10 1 :   37.950 ms    31.250 ms   -17.6 %
110336
         100000000   0  0 :  239.600 ms   126.700 ms   -47.1 %
110336
         100000000   2  1 :  292.400 ms   188.600 ms   -35.4 %
110336
         100000000   10 1 :  387.700 ms   321.200 ms   -17.1 %
110336
    
110336
        Here Q - probability (%) for a character to be a '\"' and
110336
        S - probability (%) to be a special character ( < 32).
110336
    
110336
        Testing with a closer to real world scenario shows overall decrease
110336
        of the time needed for database compaction by ~5-10 %.  And this
110336
        change also decreases CPU consumption in general, because string
110336
        serialization is used in many different places including ovsdb
110336
        monitors and raft.
110336
    
110336
        Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
110336
        Acked-by: Numan Siddique <numans@ovn.org>
110336
        Acked-by: Dumitru Ceara <dceara@redhat.com>
110336
    
110336
    Reported-at: https://bugzilla.redhat.com/show_bug.cgi?id=1990069
110336
    Signed-off-by: Ilya Maximets <i.maximets@redhat.com>
110336
110336
110336
* Fri Aug 20 2021 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-2
110336
- Merging upstream branch-2.16 [RH git: 7d7567e339]
110336
    Commit list:
110336
    0991ea8d19 Prepare for 2.16.1.
110336
110336
110336
* Wed Aug 18 2021 Flavio Leitner <fbl@redhat.com> - 2.16.0-1
110336
- redhat: First 2.16.0 release. [RH git: 0a1c4276cc]
110336
110336