From 16b67cd436442b010bcfa7a2922881d0b1e1e2c3922caa1d2a66bfff7cfac420 Mon Sep 17 00:00:00 2001 From: Vasily Ulyanov Date: Thu, 3 Aug 2023 07:35:05 +0000 Subject: [PATCH] Accepting request 1102119 from home:vulyanov:branches:Virtualization - Fix leaking tickers 0008-fix-ticker-leak.patch OBS-URL: https://build.opensuse.org/request/show/1102119 OBS-URL: https://build.opensuse.org/package/show/Virtualization/kubevirt?expand=0&rev=126 --- 0008-fix-ticker-leak.patch | 128 +++++++++++++++++++++++++++++++++++++ kubevirt.changes | 6 ++ kubevirt.spec | 1 + 3 files changed, 135 insertions(+) create mode 100644 0008-fix-ticker-leak.patch diff --git a/0008-fix-ticker-leak.patch b/0008-fix-ticker-leak.patch new file mode 100644 index 0000000..dd4da4d --- /dev/null +++ b/0008-fix-ticker-leak.patch @@ -0,0 +1,128 @@ +From f18f0988669908b4bdc5c4152fc7f5863d5ef3cd Mon Sep 17 00:00:00 2001 +From: rokkiter <101091030+rokkiter@users.noreply.github.com> +Date: Mon, 31 Jul 2023 16:51:08 +0800 +Subject: [PATCH 1/2] fix ticker leak + +Signed-off-by: rokkiter <101091030+rokkiter@users.noreply.github.com> +--- + cmd/virt-launcher/virt-launcher.go | 16 ++++++++++------ + 1 file changed, 10 insertions(+), 6 deletions(-) + +diff --git a/cmd/virt-launcher/virt-launcher.go b/cmd/virt-launcher/virt-launcher.go +index e8d7c553f..c682c1bc6 100644 +--- a/cmd/virt-launcher/virt-launcher.go ++++ b/cmd/virt-launcher/virt-launcher.go +@@ -237,14 +237,18 @@ func detectDomainWithUUID(domainManager virtwrap.DomainManager) *api.Domain { + + func waitForDomainUUID(timeout time.Duration, events chan watch.Event, stop chan struct{}, domainManager virtwrap.DomainManager) *api.Domain { + +- ticker := time.NewTicker(timeout).C +- checkEarlyExit := time.NewTicker(time.Second * 2).C +- domainCheckTicker := time.NewTicker(time.Second * 10).C ++ ticker := time.NewTicker(timeout) ++ defer ticker.Stop() ++ checkEarlyExit := time.NewTicker(time.Second * 2) ++ defer checkEarlyExit.Stop() ++ domainCheckTicker := time.NewTicker(time.Second * 10) ++ defer domainCheckTicker.Stop() ++ + for { + select { +- case <-ticker: ++ case <-ticker.C: + panic(fmt.Errorf("timed out waiting for domain to be defined")) +- case <-domainCheckTicker: ++ case <-domainCheckTicker.C: + log.Log.V(3).Infof("Periodically checking for domain with UUID") + domain := detectDomainWithUUID(domainManager) + if domain != nil { +@@ -258,7 +262,7 @@ func waitForDomainUUID(timeout time.Duration, events chan watch.Event, stop chan + } + case <-stop: + return nil +- case <-checkEarlyExit: ++ case <-checkEarlyExit.C: + if cmdserver.ReceivedEarlyExitSignal() { + panic(fmt.Errorf("received early exit signal")) + } +-- +2.41.0 + + +From e8941fad18234293e10fd3b968491bc4d22a6c09 Mon Sep 17 00:00:00 2001 +From: rokkiter <101091030+rokkiter@users.noreply.github.com> +Date: Wed, 2 Aug 2023 10:18:39 +0800 +Subject: [PATCH 2/2] fix ticker leak + +Signed-off-by: rokkiter <101091030+rokkiter@users.noreply.github.com> +--- + pkg/monitoring/domainstats/downwardmetrics/scraper.go | 1 + + pkg/virt-handler/retry_manager.go | 1 + + pkg/virt-launcher/monitor.go | 3 +-- + pkg/virt-launcher/virtwrap/agent-poller/agent_poller.go | 2 +- + 4 files changed, 4 insertions(+), 3 deletions(-) + +diff --git a/pkg/monitoring/domainstats/downwardmetrics/scraper.go b/pkg/monitoring/domainstats/downwardmetrics/scraper.go +index 8ca6ae4c3..1ca2465cf 100644 +--- a/pkg/monitoring/domainstats/downwardmetrics/scraper.go ++++ b/pkg/monitoring/domainstats/downwardmetrics/scraper.go +@@ -149,6 +149,7 @@ func RunDownwardMetricsCollector(context context.Context, nodeName string, vmiIn + + go func() { + ticker := time.NewTicker(DownwardmetricsRefreshDuration) ++ defer ticker.Stop() + for { + select { + case <-ticker.C: +diff --git a/pkg/virt-handler/retry_manager.go b/pkg/virt-handler/retry_manager.go +index dc14fb66d..ba549a157 100644 +--- a/pkg/virt-handler/retry_manager.go ++++ b/pkg/virt-handler/retry_manager.go +@@ -145,6 +145,7 @@ func (f *FailRetryManager) ShouldDelay(key string, isFailure func() bool) (bool, + // Run starts the manager. + func (f *FailRetryManager) Run(stopCh chan struct{}) { + ticker := time.NewTicker(f.maxWait) ++ defer ticker.Stop() + for { + select { + case <-ticker.C: +diff --git a/pkg/virt-launcher/monitor.go b/pkg/virt-launcher/monitor.go +index 6620ac4df..d82c5c669 100644 +--- a/pkg/virt-launcher/monitor.go ++++ b/pkg/virt-launcher/monitor.go +@@ -181,7 +181,7 @@ func (mon *monitor) monitorLoop(startTimeout time.Duration, signalStopChan chan + log.Log.Infof("Monitoring loop: rate %v start timeout %s", rate, timeoutRepr) + + ticker := time.NewTicker(rate) +- ++ defer ticker.Stop() + mon.isDone = false + mon.timeout = startTimeout + mon.start = time.Now() +@@ -200,7 +200,6 @@ func (mon *monitor) monitorLoop(startTimeout time.Duration, signalStopChan chan + } + } + +- ticker.Stop() + } + + func (mon *monitor) RunForever(startTimeout time.Duration, signalStopChan chan struct{}) { +diff --git a/pkg/virt-launcher/virtwrap/agent-poller/agent_poller.go b/pkg/virt-launcher/virtwrap/agent-poller/agent_poller.go +index 83265f3e5..ba681b204 100644 +--- a/pkg/virt-launcher/virtwrap/agent-poller/agent_poller.go ++++ b/pkg/virt-launcher/virtwrap/agent-poller/agent_poller.go +@@ -243,10 +243,10 @@ func (p *PollerWorker) Poll(execAgentCommands agentCommandsExecutor, closeChan c + } + + ticker := time.NewTicker(pollInterval) ++ defer ticker.Stop() + for { + select { + case <-closeChan: +- ticker.Stop() + return + case <-ticker.C: + execAgentCommands(p.AgentCommands) +-- +2.41.0 + diff --git a/kubevirt.changes b/kubevirt.changes index 06d2af2..af527b9 100644 --- a/kubevirt.changes +++ b/kubevirt.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Thu Aug 3 06:27:57 UTC 2023 - Vasily Ulyanov + +- Fix leaking tickers + 0008-fix-ticker-leak.patch + ------------------------------------------------------------------- Fri Jul 28 08:20:41 UTC 2023 - Vasily Ulyanov diff --git a/kubevirt.spec b/kubevirt.spec index 6384ec1..7b133e8 100644 --- a/kubevirt.spec +++ b/kubevirt.spec @@ -35,6 +35,7 @@ Patch4: 0004-tests-leave-some-space-for-metadata-on-the-backend-P.patch Patch5: 0005-Support-multiple-watchdogs-in-the-domain-schema.patch Patch6: 0006-isolation-close-file-when-exits.patch Patch7: 0007-Fix-volume-detach-on-hotplug-attachment-pod-delete.patch +Patch8: 0008-fix-ticker-leak.patch BuildRequires: glibc-devel-static BuildRequires: golang-packaging BuildRequires: pkgconfig