[#364] node: Stop flushing big object when termination signal received

Signed-off-by: Anton Nikiforov <an.nikiforov@yadro.com>
This commit is contained in:
Anton Nikiforov 2023-05-24 14:09:11 +03:00
parent 9c54a24101
commit 802168c0c6
11 changed files with 39 additions and 21 deletions

View file

@ -35,6 +35,17 @@ const (
// runFlushLoop starts background workers which periodically flush objects to the blobstor.
func (c *cache) runFlushLoop() {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
ch := c.closeCh
c.wg.Add(1)
go func() {
<-ch
cancel()
c.wg.Done()
}()
for i := 0; i < c.workersCount; i++ {
c.wg.Add(1)
go c.workerFlushSmall()
@ -42,7 +53,7 @@ func (c *cache) runFlushLoop() {
c.wg.Add(1)
go func() {
c.workerFlushBig(context.TODO())
c.workerFlushBig(ctx)
c.wg.Done()
}()
@ -211,7 +222,7 @@ func (c *cache) flushFSTree(ctx context.Context, ignoreErrors bool) error {
return nil
}
_, err := c.fsTree.Iterate(prm)
_, err := c.fsTree.Iterate(ctx, prm)
return err
}