From c66fa25df17ec1ad5b6e1139a72f1bf9aef49ba9 Mon Sep 17 00:00:00 2001 From: Thomas Jungblut Date: Tue, 30 Jan 2024 09:46:05 +0100 Subject: [PATCH] OCPBUGS-27959: fix panic in health check timeouts --- pkg/etcdcli/health.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/pkg/etcdcli/health.go b/pkg/etcdcli/health.go index 1e9610f6c..5d1f36e9e 100644 --- a/pkg/etcdcli/health.go +++ b/pkg/etcdcli/health.go @@ -52,10 +52,13 @@ func getMemberHealth(ctx context.Context, etcdMembers []*etcdserverpb.Member) me const defaultTimeout = 30 * time.Second resChan := make(chan healthCheck, 1) go func() { - ctx, cancel := context.WithTimeout(ctx, defaultTimeout) + ctxTimeout, cancel := context.WithTimeout(ctx, defaultTimeout) defer cancel() - resChan <- checkSingleMemberHealth(ctx, member) + resChan <- checkSingleMemberHealth(ctxTimeout, member) + // closing here to avoid late replies to panic on resChan, + // the result will be considered a timeout anyway + close(resChan) }() select { @@ -68,8 +71,6 @@ func getMemberHealth(ctx context.Context, etcdMembers []*etcdserverpb.Member) me Error: fmt.Errorf("30s timeout waiting for member %s to respond to health check", member.Name)}) } - - close(resChan) } // Purge any unknown members from the raft term metrics collector.