From 205249fcac4ad883215aff5d21d5364f31593719 Mon Sep 17 00:00:00 2001 From: Max Hoffman Date: Thu, 12 Sep 2024 14:38:21 -0700 Subject: [PATCH 1/2] [statspro] restart only inits stats database if missing --- .../doltcore/sqle/statspro/configure.go | 2 -- .../doltcore/sqle/statspro/initdbhook.go | 16 ++++++++-------- .../doltcore/sqle/statspro/stats_provider.go | 2 ++ integration-tests/bats/stats.bats | 19 +++++++++++++++++++ 4 files changed, 29 insertions(+), 10 deletions(-) diff --git a/go/libraries/doltcore/sqle/statspro/configure.go b/go/libraries/doltcore/sqle/statspro/configure.go index e03cc19a29a..ff384a2fbcb 100644 --- a/go/libraries/doltcore/sqle/statspro/configure.go +++ b/go/libraries/doltcore/sqle/statspro/configure.go @@ -147,8 +147,6 @@ func (p *Provider) Load(ctx *sql.Context, fs filesys.Filesys, db dsess.SqlDataba } } - p.mu.Lock() - defer p.mu.Unlock() p.setStatDb(strings.ToLower(db.Name()), statsDb) return } diff --git a/go/libraries/doltcore/sqle/statspro/initdbhook.go b/go/libraries/doltcore/sqle/statspro/initdbhook.go index 3c50776b3c8..1a354a2e053 100644 --- a/go/libraries/doltcore/sqle/statspro/initdbhook.go +++ b/go/libraries/doltcore/sqle/statspro/initdbhook.go @@ -37,15 +37,15 @@ func NewStatsInitDatabaseHook( denv *env.DoltEnv, db dsess.SqlDatabase, ) error { - statsDb, err := statsProv.sf.Init(ctx, db, statsProv.pro, denv.FS, env.GetCurrentUserHomeDir) - if err != nil { - ctx.GetLogger().Debugf("statistics load error: %s", err.Error()) - return nil + dbName := strings.ToLower(db.Name()) + if _, ok := statsProv.getStatDb(dbName); !ok { + statsDb, err := statsProv.sf.Init(ctx, db, statsProv.pro, denv.FS, env.GetCurrentUserHomeDir) + if err != nil { + ctx.GetLogger().Debugf("statistics load error: %s", err.Error()) + return nil + } + statsProv.setStatDb(dbName, statsDb) } - statsProv.mu.Lock() - statsProv.setStatDb(strings.ToLower(db.Name()), statsDb) - statsProv.mu.Unlock() - ctx.GetLogger().Debugf("statistics refresh: initialize %s", name) return statsProv.InitAutoRefresh(ctxFactory, name, bThreads) } diff --git a/go/libraries/doltcore/sqle/statspro/stats_provider.go b/go/libraries/doltcore/sqle/statspro/stats_provider.go index 6e7ecd29bee..b22e0b48b6c 100644 --- a/go/libraries/doltcore/sqle/statspro/stats_provider.go +++ b/go/libraries/doltcore/sqle/statspro/stats_provider.go @@ -186,6 +186,8 @@ func (p *Provider) GetTableDoltStats(ctx *sql.Context, branch, db, table string) } func (p *Provider) setStatDb(name string, db Database) { + p.mu.Lock() + defer p.mu.Unlock() p.statDbs[name] = db } diff --git a/integration-tests/bats/stats.bats b/integration-tests/bats/stats.bats index c2fd4771283..bcc1c00140b 100644 --- a/integration-tests/bats/stats.bats +++ b/integration-tests/bats/stats.bats @@ -130,6 +130,25 @@ teardown() { [ "$status" -eq 1 ] } +@test "stats: restart in shell doesn't drop db, issue#8345" { + cd repo2 + + dolt sql -q "insert into xy values (0,0), (1,1), (2,2), (3,3), (4,4)" + dolt sql -q "insert into ab values (0,0), (1,1), (2,2), (3,3), (4,4)" + dolt sql -q "ANALYZE table xy, ab" + dolt sql < Date: Thu, 12 Sep 2024 16:32:43 -0700 Subject: [PATCH 2/2] fix test --- integration-tests/bats/stats.bats | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/integration-tests/bats/stats.bats b/integration-tests/bats/stats.bats index bcc1c00140b..973d23a794d 100644 --- a/integration-tests/bats/stats.bats +++ b/integration-tests/bats/stats.bats @@ -136,7 +136,7 @@ teardown() { dolt sql -q "insert into xy values (0,0), (1,1), (2,2), (3,3), (4,4)" dolt sql -q "insert into ab values (0,0), (1,1), (2,2), (3,3), (4,4)" dolt sql -q "ANALYZE table xy, ab" - dolt sql <