cmd/dolt/commands/sqlserver: Restructure the start up sequence for sql-server.

We explicitly model Services, which can have an Init step, a Run step and a
Stop step. Every registered service get initialized in the order they were
registered in, then they all run concurrently until Stop is called, when they
all get Stopped in reverse order. It's possible for clients to wait for init to
be completed and be delivered any errors encountered on startup. They can also
wait for stop, to be delivered any errors encountered on shutdown.
This commit is contained in:
Aaron Son
2023-11-14 16:30:55 -08:00
parent 0cc42b8440
commit 23dc3ed014
10 changed files with 987 additions and 454 deletions
+6 -5
View File
@@ -31,6 +31,7 @@ import (
"github.com/dolthub/dolt/go/libraries/doltcore/doltdb"
"github.com/dolthub/dolt/go/libraries/doltcore/env"
"github.com/dolthub/dolt/go/libraries/utils/filesys"
"github.com/dolthub/dolt/go/libraries/utils/svcs"
"github.com/dolthub/dolt/go/store/types"
)
@@ -175,13 +176,13 @@ func getProfFile(b *testing.B) *os.File {
}
func executeServerQueries(ctx context.Context, b *testing.B, dEnv *env.DoltEnv, cfg srv.ServerConfig, queries []query) {
serverController := srv.NewServerController()
sc := svcs.NewController()
eg, ctx := errgroup.WithContext(ctx)
//b.Logf("Starting server with Config %v\n", srv.ConfigInfo(cfg))
eg.Go(func() (err error) {
startErr, closeErr := srv.Serve(ctx, "", cfg, serverController, dEnv)
startErr, closeErr := srv.Serve(ctx, "", cfg, sc, dEnv)
if startErr != nil {
return startErr
}
@@ -190,7 +191,7 @@ func executeServerQueries(ctx context.Context, b *testing.B, dEnv *env.DoltEnv,
}
return nil
})
if err := serverController.WaitForStart(); err != nil {
if err := sc.WaitForStart(); err != nil {
b.Fatal(err)
}
@@ -200,8 +201,8 @@ func executeServerQueries(ctx context.Context, b *testing.B, dEnv *env.DoltEnv,
}
}
serverController.StopServer()
if err := serverController.WaitForClose(); err != nil {
sc.Stop()
if err := sc.WaitForStop(); err != nil {
b.Fatal(err)
}
if err := eg.Wait(); err != nil {