[statspro] Restart drop db (#8350)

* [statspro] restart only inits stats database if missing

* fix test
This commit is contained in:
Maximilian Hoffman
2024-09-13 13:11:30 -07:00
committed by GitHub
parent 3c58db3c59
commit b42eee3996
4 changed files with 31 additions and 10 deletions

View File

@@ -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
}

View File

@@ -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)
}

View File

@@ -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
}

View File

@@ -130,6 +130,26 @@ 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"
run dolt sql -r csv <<EOF
select count(*) from dolt_statistics;
set @@GLOBAL.dolt_stats_auto_refresh_interval = 2;
call dolt_stats_restart();
select count(*) from dolt_statistics;
select sleep(3);
select count(*) from dolt_statistics;
EOF
[ "${lines[1]}" = "4" ]
[ "${lines[5]}" = "4" ]
[ "${lines[9]}" = "4" ]
[ "$status" -eq 0 ]
}
@test "stats: stats roundtrip restart" {
cd repo2
@@ -383,6 +403,7 @@ SQL
dolt sql <<SQL
use repo2;
insert into xy values (0,0);
analyze table xy;
SQL
sleep 1