From 61b7dded9c974983c891bed6fba4840c3942eddc Mon Sep 17 00:00:00 2001 From: Mengxin Liu Date: Wed, 8 Jan 2020 19:38:07 +0800 Subject: [PATCH] fix: add a periodically recompute to ovn-controller to avoid inconsistency ovn 2.12 use a new incremental process engine that increase the performance of ovn-controller. However we meet inconsistency between ovn-sb and ovs several times, so we pick the recompute patch from upstream and periodically invoke it to keep consistent (cherry picked from commit dc92afa3dcfa9022da7c34526289bc65e8d354fd) --- dist/images/Dockerfile.cni | 2 +- dist/images/Dockerfile.controller | 2 +- dist/images/Dockerfile.db | 2 +- dist/images/Dockerfile.node | 2 +- dist/images/Dockerfile.pinger | 2 +- dist/images/Dockerfile.webhook | 2 +- pkg/daemon/controller.go | 9 +++++++++ 7 files changed, 15 insertions(+), 6 deletions(-) diff --git a/dist/images/Dockerfile.cni b/dist/images/Dockerfile.cni index cdfa4835170..6063b12d8cc 100644 --- a/dist/images/Dockerfile.cni +++ b/dist/images/Dockerfile.cni @@ -14,7 +14,7 @@ RUN yum install -y \ yum clean all ENV OVS_VERSION=2.12.0 -ENV OVS_SUBVERSION=3 +ENV OVS_SUBVERSION=4 RUN rpm -ivh https://github.com/alauda/ovs/releases/download/${OVS_VERSION}-${OVS_SUBVERSION}/openvswitch-${OVS_VERSION}-${OVS_SUBVERSION}.el7.x86_64.rpm && \ rpm -ivh https://github.com/alauda/ovs/releases/download/${OVS_VERSION}-${OVS_SUBVERSION}/ovn-${OVS_VERSION}-${OVS_SUBVERSION}.el7.x86_64.rpm && \ diff --git a/dist/images/Dockerfile.controller b/dist/images/Dockerfile.controller index a0edc064bbb..a9a55e628f3 100644 --- a/dist/images/Dockerfile.controller +++ b/dist/images/Dockerfile.controller @@ -14,7 +14,7 @@ RUN yum install -y \ yum clean all ENV OVS_VERSION=2.12.0 -ENV OVS_SUBVERSION=3 +ENV OVS_SUBVERSION=4 RUN rpm -ivh https://github.com/alauda/ovs/releases/download/${OVS_VERSION}-${OVS_SUBVERSION}/openvswitch-${OVS_VERSION}-${OVS_SUBVERSION}.el7.x86_64.rpm && \ rpm -ivh https://github.com/alauda/ovs/releases/download/${OVS_VERSION}-${OVS_SUBVERSION}/openvswitch-devel-${OVS_VERSION}-${OVS_SUBVERSION}.el7.x86_64.rpm && \ diff --git a/dist/images/Dockerfile.db b/dist/images/Dockerfile.db index d6b8ce1003c..152d9df3b7f 100644 --- a/dist/images/Dockerfile.db +++ b/dist/images/Dockerfile.db @@ -14,7 +14,7 @@ RUN yum install -y \ yum clean all ENV OVS_VERSION=2.12.0 -ENV OVS_SUBVERSION=3 +ENV OVS_SUBVERSION=4 RUN rpm -ivh https://github.com/alauda/ovs/releases/download/${OVS_VERSION}-${OVS_SUBVERSION}/openvswitch-${OVS_VERSION}-${OVS_SUBVERSION}.el7.x86_64.rpm && \ rpm -ivh https://github.com/alauda/ovs/releases/download/${OVS_VERSION}-${OVS_SUBVERSION}/openvswitch-devel-${OVS_VERSION}-${OVS_SUBVERSION}.el7.x86_64.rpm && \ diff --git a/dist/images/Dockerfile.node b/dist/images/Dockerfile.node index 115028e5336..40e73377ccb 100644 --- a/dist/images/Dockerfile.node +++ b/dist/images/Dockerfile.node @@ -14,7 +14,7 @@ RUN yum install -y \ yum clean all ENV OVS_VERSION=2.12.0 -ENV OVS_SUBVERSION=3 +ENV OVS_SUBVERSION=4 RUN rpm -ivh https://github.com/alauda/ovs/releases/download/${OVS_VERSION}-${OVS_SUBVERSION}/openvswitch-${OVS_VERSION}-${OVS_SUBVERSION}.el7.x86_64.rpm && \ rpm -ivh https://github.com/alauda/ovs/releases/download/${OVS_VERSION}-${OVS_SUBVERSION}/openvswitch-devel-${OVS_VERSION}-${OVS_SUBVERSION}.el7.x86_64.rpm && \ diff --git a/dist/images/Dockerfile.pinger b/dist/images/Dockerfile.pinger index b14350384a6..cbd3a9ed4a6 100644 --- a/dist/images/Dockerfile.pinger +++ b/dist/images/Dockerfile.pinger @@ -14,7 +14,7 @@ RUN yum install -y \ yum clean all ENV OVS_VERSION=2.12.0 -ENV OVS_SUBVERSION=3 +ENV OVS_SUBVERSION=4 RUN rpm -ivh https://github.com/alauda/ovs/releases/download/${OVS_VERSION}-${OVS_SUBVERSION}/openvswitch-${OVS_VERSION}-${OVS_SUBVERSION}.el7.x86_64.rpm && \ rpm -ivh https://github.com/alauda/ovs/releases/download/${OVS_VERSION}-${OVS_SUBVERSION}/openvswitch-devel-${OVS_VERSION}-${OVS_SUBVERSION}.el7.x86_64.rpm && \ diff --git a/dist/images/Dockerfile.webhook b/dist/images/Dockerfile.webhook index b363d55ebec..5068d723e41 100644 --- a/dist/images/Dockerfile.webhook +++ b/dist/images/Dockerfile.webhook @@ -14,7 +14,7 @@ RUN yum install -y \ yum clean all ENV OVS_VERSION=2.12.0 -ENV OVS_SUBVERSION=3 +ENV OVS_SUBVERSION=4 RUN rpm -ivh https://github.com/alauda/ovs/releases/download/${OVS_VERSION}-${OVS_SUBVERSION}/openvswitch-${OVS_VERSION}-${OVS_SUBVERSION}.el7.x86_64.rpm && \ rpm -ivh https://github.com/alauda/ovs/releases/download/${OVS_VERSION}-${OVS_SUBVERSION}/openvswitch-devel-${OVS_VERSION}-${OVS_SUBVERSION}.el7.x86_64.rpm && \ diff --git a/pkg/daemon/controller.go b/pkg/daemon/controller.go index efe5794d5a4..336e89359ef 100644 --- a/pkg/daemon/controller.go +++ b/pkg/daemon/controller.go @@ -3,6 +3,7 @@ package daemon import ( "fmt" "net" + "os/exec" "time" "k8s.io/client-go/kubernetes/scheme" @@ -348,6 +349,7 @@ func (c *Controller) Run(stopCh <-chan struct{}) error { return err } c.protocol = util.CheckProtocol(node.Annotations[util.IpAddressAnnotation]) + go wait.Until(recompute, 10 * time.Minute, stopCh) go wait.Until(c.runGateway, 3 * time.Second, stopCh) klog.Info("Started workers") @@ -356,3 +358,10 @@ func (c *Controller) Run(stopCh <-chan struct{}) error { return nil } + +func recompute() { + output, err := exec.Command("ovs-appctl", "-t", "ovn-controller", "recompute").CombinedOutput() + if err != nil { + klog.Errorf("failed to recompute ovn-controller %s", string(output)) + } +}