diff --git a/executor/extension/tracker/db_logger.go b/executor/extension/tracker/db_logger.go index 922e609e6..88de1620c 100644 --- a/executor/extension/tracker/db_logger.go +++ b/executor/extension/tracker/db_logger.go @@ -44,7 +44,7 @@ func makeDbLogger[T any](cfg *utils.Config, log logger.Logger) executor.Extensio } // PreRun creates a logging file -func (l *dbLogger[T]) PreRun(executor.State[T], *executor.Context) error { +func (l *dbLogger[T]) PreRun(_ executor.State[T], ctx *executor.Context) error { var err error l.file, err = os.Create(l.cfg.DbLogging) if err != nil { @@ -56,6 +56,11 @@ func (l *dbLogger[T]) PreRun(executor.State[T], *executor.Context) error { l.wg.Add(1) go l.doLogging() + // in some cases, StateDb does not have to be initialized yet + if ctx.State != nil { + ctx.State = proxy.NewLoggerProxy(ctx.State, l.log, l.input) + } + return nil } diff --git a/executor/extension/tracker/db_logger_test.go b/executor/extension/tracker/db_logger_test.go index 90f88691b..4d413e6d4 100644 --- a/executor/extension/tracker/db_logger_test.go +++ b/executor/extension/tracker/db_logger_test.go @@ -192,7 +192,7 @@ func TestDbLoggerExtension_PreTransactionDoesNotCreateNewLoggerProxy(t *testing. } } -func TestDbLoggerExtension_PreRunDoesNotCreateNewLoggerProxy(t *testing.T) { +func TestDbLoggerExtension_PreRunCreatesNewLoggerProxyIfStateIsNotNil(t *testing.T) { ctrl := gomock.NewController(t) db := state.NewMockStateDB(ctrl) @@ -210,7 +210,26 @@ func TestDbLoggerExtension_PreRunDoesNotCreateNewLoggerProxy(t *testing.T) { t.Fatalf("pre-transaction failed; %v", err) } - if _, ok := ctx.State.(*proxy.LoggingStateDb); ok { - t.Fatal("db must not be of type LoggingStateDb!") + if _, ok := ctx.State.(*proxy.LoggingStateDb); !ok { + t.Fatal("db must be of type LoggingStateDb!") + } +} + +func TestDbLoggerExtension_PreRunDoesNotCreateNewLoggerProxyIfStateIsNil(t *testing.T) { + cfg := &utils.Config{} + cfg.DbLogging = t.TempDir() + "test-log" + cfg.LogLevel = "critical" + + ctx := new(executor.Context) + + ext := MakeDbLogger[any](cfg) + + err := ext.PreRun(executor.State[any]{}, ctx) + if err != nil { + t.Fatalf("pre-transaction failed; %v", err) + } + + if ctx.State != nil { + t.Fatal("db must be nil!") } }