Skip to content

Commit eb4f5a4

Browse files
committed
Merge branch '309-run-without-pools' into 'master'
feat: start DLE and Local UI even if no data pool available (#309) See merge request postgres-ai/database-lab!393
2 parents ad697bb + 042022e commit eb4f5a4

File tree

3 files changed

+28
-20
lines changed

3 files changed

+28
-20
lines changed

cmd/database-lab/main.go

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -81,12 +81,6 @@ func main() {
8181

8282
runner := runners.NewLocalRunner(cfg.Provision.UseSudo)
8383

84-
pm := pool.NewPoolManager(&cfg.PoolManager, runner)
85-
if err = pm.ReloadPools(); err != nil {
86-
log.Err(err.Error())
87-
return
88-
}
89-
9084
internalNetworkID, err := networks.Setup(ctx, docker, engProps.InstanceID, engProps.ContainerName)
9185
if err != nil {
9286
log.Errf(err.Error())
@@ -107,21 +101,17 @@ func main() {
107101
DBName: cfg.Global.Database.Name(),
108102
}
109103

110-
emergencyShutdown := func() {
111-
cancel()
112-
113-
shutdownCtx, shutdownCancel := context.WithTimeout(context.Background(), shutdownTimeout)
114-
defer shutdownCancel()
115-
116-
shutdownDatabaseLabEngine(shutdownCtx, docker, engProps, pm.First().Pool())
117-
}
118-
119104
tm, err := telemetry.New(cfg.Global, engProps)
120105
if err != nil {
121106
log.Errf(errors.WithMessage(err, "failed to initialize a telemetry service").Error())
122107
return
123108
}
124109

110+
pm := pool.NewPoolManager(&cfg.PoolManager, runner)
111+
if err = pm.ReloadPools(); err != nil {
112+
log.Err(err.Error())
113+
}
114+
125115
// Create a new retrieval service to prepare a data directory and start snapshotting.
126116
retrievalSvc := retrieval.New(cfg, engProps, docker, pm, tm, runner)
127117

@@ -133,6 +123,15 @@ func main() {
133123

134124
observingChan := make(chan string, 1)
135125

126+
emergencyShutdown := func() {
127+
cancel()
128+
129+
shutdownCtx, shutdownCancel := context.WithTimeout(context.Background(), shutdownTimeout)
130+
defer shutdownCancel()
131+
132+
shutdownDatabaseLabEngine(shutdownCtx, docker, engProps, pm.First())
133+
}
134+
136135
cloningSvc := cloning.NewBase(&cfg.Cloning, provisioner, tm, observingChan)
137136
if err = cloningSvc.Run(ctx); err != nil {
138137
log.Err(err)
@@ -193,7 +192,7 @@ func main() {
193192
log.Msg(err)
194193
}
195194

196-
shutdownDatabaseLabEngine(shutdownCtx, docker, engProps, pm.First().Pool())
195+
shutdownDatabaseLabEngine(shutdownCtx, docker, engProps, pm.First())
197196
cloningSvc.SaveClonesState()
198197
tm.SendEvent(context.Background(), telemetry.EngineStoppedEvent, telemetry.EngineStopped{Uptime: server.Uptime()})
199198
}
@@ -292,11 +291,13 @@ func setShutdownListener() chan os.Signal {
292291
return c
293292
}
294293

295-
func shutdownDatabaseLabEngine(ctx context.Context, dockerCLI *client.Client, engProps global.EngineProps, fsp *resources.Pool) {
294+
func shutdownDatabaseLabEngine(ctx context.Context, dockerCLI *client.Client, engProps global.EngineProps, fsm pool.FSManager) {
296295
log.Msg("Stopping auxiliary containers")
297296

298-
if err := cont.StopControlContainers(ctx, dockerCLI, engProps.InstanceID, fsp.DataDir()); err != nil {
299-
log.Err("Failed to stop control containers", err)
297+
if fsm != nil {
298+
if err := cont.StopControlContainers(ctx, dockerCLI, engProps.InstanceID, fsm.Pool().DataDir()); err != nil {
299+
log.Err("Failed to stop control containers", err)
300+
}
300301
}
301302

302303
if err := cont.CleanUpSatelliteContainers(ctx, dockerCLI, engProps.InstanceID); err != nil {

internal/provision/mode_local.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import (
3939
const (
4040
maxNumberOfPortsToCheck = 5
4141
portCheckingTimeout = 3 * time.Second
42+
unknownVersion = "unknown"
4243
)
4344

4445
// PortPool describes an available port range for clones.
@@ -723,7 +724,12 @@ func (p *Provisioner) StartCloneContainer(ctx context.Context, containerName str
723724

724725
// DetectDBVersion detects version of the database.
725726
func (p *Provisioner) DetectDBVersion() string {
726-
pgVersion, err := tools.DetectPGVersion(p.pm.First().Pool().DataDir())
727+
fsManager := p.pm.First()
728+
if fsManager == nil {
729+
return unknownVersion
730+
}
731+
732+
pgVersion, err := tools.DetectPGVersion(fsManager.Pool().DataDir())
727733
if err != nil {
728734
return parseImageVersion(p.config.DockerImage)
729735
}

internal/retrieval/retrieval.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ func (r *Retrieval) Run(ctx context.Context) error {
137137
Level: models.RefreshFailed,
138138
Message: "Pool to perform data refresh not found",
139139
}
140+
r.State.Status = models.Failed
140141
r.State.addAlert(alert)
141142
r.tm.SendEvent(ctx, telemetry.AlertEvent, alert)
142143

0 commit comments

Comments
 (0)