From d726a4c780553264dfc107715ddbdc05da02ed77 Mon Sep 17 00:00:00 2001 From: Philip O'Toole Date: Fri, 8 Dec 2023 13:08:36 -0500 Subject: [PATCH] Correct and simplify logic --- store/store.go | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/store/store.go b/store/store.go index e76b99e2..36233e1d 100644 --- a/store/store.go +++ b/store/store.go @@ -1652,24 +1652,27 @@ func (s *Store) Apply(l *raft.Log) (e interface{}) { s.logger.Printf("first log applied since node start, log at index %d", l.Index) } + snapshotNeeded := false cmd, r := applyCommand(l.Data, &s.db, s.dechunkManager) switch cmd.Type { case command.Command_COMMAND_TYPE_NOOP: s.numNoops++ case command.Command_COMMAND_TYPE_LOAD: - s.snapshotTChan <- struct{}{} + snapshotNeeded = true case command.Command_COMMAND_TYPE_LOAD_CHUNK: var lcr command.LoadChunkRequest if err := command.UnmarshalLoadChunkRequest(cmd.SubCommand, &lcr); err != nil { panic(fmt.Sprintf("failed to unmarshal load-chunk subcommand: %s", err.Error())) } - if lcr.IsLast { - if err := s.snapshotStore.SetFullNeeded(); err != nil { - return &fsmGenericResponse{error: fmt.Errorf("failed to SetFullNeeded post load: %s", err)} - } - s.logger.Printf("last chunk loaded, forcing snapshot of database") - s.snapshotTChan <- struct{}{} + snapshotNeeded = lcr.IsLast + } + + if snapshotNeeded { + if err := s.snapshotStore.SetFullNeeded(); err != nil { + return &fsmGenericResponse{error: fmt.Errorf("failed to SetFullNeeded post load: %s", err)} } + s.logger.Printf("last chunk loaded, forcing snapshot of database") + s.snapshotTChan <- struct{}{} } return r }