From c3a8ac2b531c4e79d2bd241dd31315dc2904c537 Mon Sep 17 00:00:00 2001 From: Maximilian Hoffman Date: Thu, 8 Feb 2024 13:00:58 -0800 Subject: [PATCH] [no-release-notes] Fix stats race (#7474) * [no-release-notes] Fix stats race * [ga-format-pr] Run go/utils/repofmt/format_repo.sh and go/Godeps/update.sh --------- Co-authored-by: max-hoffman --- go/go.mod | 2 +- go/go.sum | 4 ++-- go/libraries/doltcore/sqle/dprocedures/init.go | 8 ++++---- go/libraries/doltcore/sqle/dprocedures/stats_funcs.go | 9 +++++++++ go/libraries/doltcore/sqle/stats/stats_provider.go | 4 ++++ 5 files changed, 20 insertions(+), 7 deletions(-) diff --git a/go/go.mod b/go/go.mod index a8388247fbf..cd6492cac83 100644 --- a/go/go.mod +++ b/go/go.mod @@ -57,7 +57,7 @@ require ( github.com/cespare/xxhash v1.1.0 github.com/creasty/defaults v1.6.0 github.com/dolthub/flatbuffers/v23 v23.3.3-dh.2 - github.com/dolthub/go-mysql-server v0.17.1-0.20240207160654-5ed05eb1cc4b + github.com/dolthub/go-mysql-server v0.17.1-0.20240208021948-8c7762d0d825 github.com/dolthub/swiss v0.1.0 github.com/goccy/go-json v0.10.2 github.com/google/go-github/v57 v57.0.0 diff --git a/go/go.sum b/go/go.sum index a85585fabec..cf4027aa358 100644 --- a/go/go.sum +++ b/go/go.sum @@ -183,8 +183,8 @@ github.com/dolthub/fslock v0.0.3 h1:iLMpUIvJKMKm92+N1fmHVdxJP5NdyDK5bK7z7Ba2s2U= github.com/dolthub/fslock v0.0.3/go.mod h1:QWql+P17oAAMLnL4HGB5tiovtDuAjdDTPbuqx7bYfa0= github.com/dolthub/go-icu-regex v0.0.0-20230524105445-af7e7991c97e h1:kPsT4a47cw1+y/N5SSCkma7FhAPw7KeGmD6c9PBZW9Y= github.com/dolthub/go-icu-regex v0.0.0-20230524105445-af7e7991c97e/go.mod h1:KPUcpx070QOfJK1gNe0zx4pA5sicIK1GMikIGLKC168= -github.com/dolthub/go-mysql-server v0.17.1-0.20240207160654-5ed05eb1cc4b h1:FDNaFIT63vRLfn6cTOr0rsgceMlFeuulaUru54HqIIg= -github.com/dolthub/go-mysql-server v0.17.1-0.20240207160654-5ed05eb1cc4b/go.mod h1:ANK0a6tyjrZ2cOzDJT3nFsDp80xksI4UfeijFlvnjwE= +github.com/dolthub/go-mysql-server v0.17.1-0.20240208021948-8c7762d0d825 h1:uVLs1DxzXXbi7sS2f48EoZ/CRoUmYsHlKU1C5QuIvM4= +github.com/dolthub/go-mysql-server v0.17.1-0.20240208021948-8c7762d0d825/go.mod h1:ANK0a6tyjrZ2cOzDJT3nFsDp80xksI4UfeijFlvnjwE= github.com/dolthub/ishell v0.0.0-20221214210346-d7db0b066488 h1:0HHu0GWJH0N6a6keStrHhUAK5/o9LVfkh44pvsV4514= github.com/dolthub/ishell v0.0.0-20221214210346-d7db0b066488/go.mod h1:ehexgi1mPxRTk0Mok/pADALuHbvATulTh6gzr7NzZto= github.com/dolthub/jsonpath v0.0.2-0.20240201003050-392940944c15 h1:sfTETOpsrNJPDn2KydiCtDgVu6Xopq8k3JP8PjFT22s= diff --git a/go/libraries/doltcore/sqle/dprocedures/init.go b/go/libraries/doltcore/sqle/dprocedures/init.go index b072b4a8537..9d94e910240 100644 --- a/go/libraries/doltcore/sqle/dprocedures/init.go +++ b/go/libraries/doltcore/sqle/dprocedures/init.go @@ -48,10 +48,10 @@ var DoltProcedures = []sql.ExternalStoredProcedureDetails{ {Name: "dolt_tag", Schema: int64Schema("status"), Function: doltTag}, {Name: "dolt_verify_constraints", Schema: int64Schema("violations"), Function: doltVerifyConstraints}, - {Name: "dolt_stats_drop", Schema: doltMergeSchema, Function: statsFunc(statsDrop)}, - {Name: "dolt_stats_restart", Schema: doltMergeSchema, Function: statsFunc(statsRestart)}, - {Name: "dolt_stats_stop", Schema: doltMergeSchema, Function: statsFunc(statsStop)}, - {Name: "dolt_stats_status", Schema: doltMergeSchema, Function: statsFunc(statsStatus)}, + {Name: "dolt_stats_drop", Schema: statsFuncSchema, Function: statsFunc(statsDrop)}, + {Name: "dolt_stats_restart", Schema: statsFuncSchema, Function: statsFunc(statsRestart)}, + {Name: "dolt_stats_stop", Schema: statsFuncSchema, Function: statsFunc(statsStop)}, + {Name: "dolt_stats_status", Schema: statsFuncSchema, Function: statsFunc(statsStatus)}, } // stringSchema returns a non-nullable schema with all columns as LONGTEXT. diff --git a/go/libraries/doltcore/sqle/dprocedures/stats_funcs.go b/go/libraries/doltcore/sqle/dprocedures/stats_funcs.go index 80771124e1d..95e849c3cdc 100644 --- a/go/libraries/doltcore/sqle/dprocedures/stats_funcs.go +++ b/go/libraries/doltcore/sqle/dprocedures/stats_funcs.go @@ -19,12 +19,21 @@ import ( "strings" "github.com/dolthub/go-mysql-server/sql" + gmstypes "github.com/dolthub/go-mysql-server/sql/types" "github.com/dolthub/dolt/go/libraries/doltcore/env" "github.com/dolthub/dolt/go/libraries/doltcore/ref" "github.com/dolthub/dolt/go/libraries/doltcore/sqle/dsess" ) +var statsFuncSchema = []*sql.Column{ + { + Name: "message", + Type: gmstypes.LongText, + Nullable: true, + }, +} + func statsFunc(fn func(ctx *sql.Context) (interface{}, error)) func(ctx *sql.Context, args ...string) (sql.RowIter, error) { return func(ctx *sql.Context, args ...string) (sql.RowIter, error) { res, err := fn(ctx) diff --git a/go/libraries/doltcore/sqle/stats/stats_provider.go b/go/libraries/doltcore/sqle/stats/stats_provider.go index f9d0755fb9d..f49b5ad9041 100644 --- a/go/libraries/doltcore/sqle/stats/stats_provider.go +++ b/go/libraries/doltcore/sqle/stats/stats_provider.go @@ -297,10 +297,14 @@ func (s *dbStats) setLatestHash(tableName string, h hash.Hash) { } func (s *dbStats) getCurrentMap() prolly.Map { + s.mu.Lock() + defer s.mu.Unlock() return s.currentMap } func (s *dbStats) setCurrentMap(m prolly.Map) { + s.mu.Lock() + defer s.mu.Unlock() s.currentMap = m }