From 5a76595dbf9f943f5ca1d257e74ed06c313cbca7 Mon Sep 17 00:00:00 2001 From: Steven Zhang Date: Fri, 12 Dec 2025 09:58:40 -0600 Subject: [PATCH] fix: fdv2 datasystem leaves sychronizer open after client is closed This update modifies the runSynchronizers method to ensure that both primary and secondary synchronizers are closed before returning due to a client shutdown. --- internal/datasystem/fdv2_datasystem.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/internal/datasystem/fdv2_datasystem.go b/internal/datasystem/fdv2_datasystem.go index 9d1e20f7..d346393e 100644 --- a/internal/datasystem/fdv2_datasystem.go +++ b/internal/datasystem/fdv2_datasystem.go @@ -288,10 +288,12 @@ func (f *FDv2) runSynchronizers(ctx context.Context, closeWhenReady chan struct{ f.loggers.Debugf("Primary synchronizer %s is starting", primarySync.Name()) resultChan := primarySync.Sync(f.store) removeSync, fallbackv1, err := f.consumeSynchronizerResults(ctx, resultChan, f.fallbackCond, closeWhenReady) + + if err := primarySync.Close(); err != nil { + f.loggers.Errorf("Primary synchronizer %s failed to gracefully close: %v", primarySync.Name(), err) + } if errors.Is(err, context.Canceled) { return - } else if err := primarySync.Close(); err != nil { - f.loggers.Errorf("Primary synchronizer %s failed to gracefully close: %v", primarySync.Name(), err) } if removeSync { @@ -327,10 +329,12 @@ func (f *FDv2) runSynchronizers(ctx context.Context, closeWhenReady chan struct{ resultChan = secondarySync.Sync(f.store) removeSync, fallbackv1, err = f.consumeSynchronizerResults(ctx, resultChan, f.recoveryCond, closeWhenReady) + + if err := secondarySync.Close(); err != nil { + f.loggers.Errorf("Secondary synchronizer %s failed to gracefully close: %v", secondarySync.Name(), err) + } if errors.Is(err, context.Canceled) { return - } else if err := secondarySync.Close(); err != nil { - f.loggers.Errorf("Secondary synchronizer %s failed to gracefully close: %v", secondarySync.Name(), err) } if removeSync {