From 5e77671e919dcc4a0bb78e0fc9bec99659f9ac4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Gouteroux?= Date: Sun, 8 May 2022 09:04:27 +0200 Subject: [PATCH] fix receive router deadlock on interrupt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: François Gouteroux --- cmd/thanos/receive.go | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/cmd/thanos/receive.go b/cmd/thanos/receive.go index 553e8303b2..3719f862a3 100644 --- a/cmd/thanos/receive.go +++ b/cmd/thanos/receive.go @@ -217,12 +217,13 @@ func runReceive( reloadGRPCServer := make(chan struct{}, 1) // hashringChangedChan signals when TSDB needs to be flushed and updated due to hashring config change. hashringChangedChan := make(chan struct{}, 1) - // uploadC signals when new blocks should be uploaded. - uploadC := make(chan struct{}, 1) - // uploadDone signals when uploading has finished. - uploadDone := make(chan struct{}, 1) if enableIngestion { + // uploadC signals when new blocks should be uploaded. + uploadC := make(chan struct{}, 1) + // uploadDone signals when uploading has finished. + uploadDone := make(chan struct{}, 1) + level.Debug(logger).Log("msg", "setting up tsdb") { if err := startTSDBAndUpload(g, logger, reg, dbs, reloadGRPCServer, uploadC, hashringChangedChan, upload, uploadDone, statusProber, bkt); err != nil { @@ -370,7 +371,9 @@ func setupAndRunGRPCServer(g *run.Group, } } return nil - }, func(error) {}) + }, func(error) { + defer close(reloadGRPCServer) + }) return nil @@ -516,7 +519,6 @@ func startTSDBAndUpload(g *run.Group, // TSDBs reload logic, listening on hashring changes. cancel := make(chan struct{}) g.Add(func() error { - defer close(reloadGRPCServer) defer close(uploadC) // Before quitting, ensure the WAL is flushed and the DBs are closed.