From feb4a024d26a4f3ce5029003e257590e74cf6acd Mon Sep 17 00:00:00 2001 From: Joshua Blum Date: Thu, 2 Apr 2026 12:47:58 -0400 Subject: [PATCH] force open LevelDB in parallel --- go/service/main.go | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/go/service/main.go b/go/service/main.go index 300eede21371..ae3b46e07e6d 100644 --- a/go/service/main.go +++ b/go/service/main.go @@ -303,12 +303,11 @@ func (d *Service) Run() (err error) { return } - if err = d.G().LocalDb.ForceOpen(); err != nil { - return err - } - if err = d.G().LocalChatDb.ForceOpen(); err != nil { - return err - } + // Open both local DBs concurrently. They are at different paths so there + // is no lock contention between them. Any DB call that arrives before an + // open finishes will block on sync.Once inside doWhileOpenAndNukeIfCorrupted. + go func() { _ = d.G().LocalDb.ForceOpen() }() + go func() { _ = d.G().LocalChatDb.ForceOpen() }() var l net.Listener if l, err = d.ConfigRPCServer(); err != nil { @@ -667,6 +666,12 @@ func (d *Service) StartLoopbackServer(loginMode libkb.LoginAttempt) error { return err } + // Open both local DBs concurrently. They are at different paths so there + // is no lock contention between them. Any DB call that arrives before an + // open finishes will block on sync.Once inside doWhileOpenAndNukeIfCorrupted. + go func() { _ = d.G().LocalDb.ForceOpen() }() + go func() { _ = d.G().LocalChatDb.ForceOpen() }() + if l, err = d.G().MakeLoopbackServer(); err != nil { return err }