From 595a86508ed5ccf7c8e89f093edab82a77c740c4 Mon Sep 17 00:00:00 2001 From: Todd Knight Date: Wed, 20 Jan 2021 18:10:45 -0700 Subject: [PATCH] Fix lockup when initalizing database. (#875) --- internal/cmd/commands/database/init.go | 30 ++++++++++---------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/internal/cmd/commands/database/init.go b/internal/cmd/commands/database/init.go index 92ce10a3c7..d195105a11 100644 --- a/internal/cmd/commands/database/init.go +++ b/internal/cmd/commands/database/init.go @@ -257,15 +257,16 @@ func (c *InitCommand) Run(args []string) (retCode int) { migrationUrlToParse = urlToParse } - dbaseUrl, err := config.ParseAddress(urlToParse) + migrationUrl, err := config.ParseAddress(migrationUrlToParse) if err != nil && err != config.ErrNotAUrl { - c.UI.Error(fmt.Errorf("Error parsing database url: %w", err).Error()) + c.UI.Error(fmt.Errorf("Error parsing migration url: %w", err).Error()) return 1 } + migrationUrl = strings.TrimSpace(migrationUrl) // This database is used to keep an exclusive lock on the database for the // remainder of the command - dBase, err := sql.Open(dialect, dbaseUrl) + dBase, err := sql.Open(dialect, migrationUrl) if err != nil { c.UI.Error(fmt.Errorf("Error establishing db connection for locking: %w", err).Error()) return 1 @@ -310,31 +311,22 @@ func (c *InitCommand) Run(args []string) (retCode int) { } }() - migrationUrl, err := config.ParseAddress(migrationUrlToParse) - if err != nil && err != config.ErrNotAUrl { - c.UI.Error(fmt.Errorf("Error parsing migration url: %w", err).Error()) - return 1 - } - - // Core migrations using the migration URL { - migrationUrl = strings.TrimSpace(migrationUrl) - ran, err := schema.InitStore(c.Context, dialect, migrationUrl) - if err != nil { + if err := man.RollForward(c.Context); err != nil { c.UI.Error(fmt.Errorf("Error running database migrations: %w", err).Error()) return 1 } - if !ran { - if base.Format(c.UI) == "table" { - c.UI.Info("Database already initialized.") - return 0 - } - } if base.Format(c.UI) == "table" { c.UI.Info("Migrations successfully run.") } } + dbaseUrl, err := config.ParseAddress(urlToParse) + if err != nil && err != config.ErrNotAUrl { + c.UI.Error(fmt.Errorf("Error parsing database url: %w", err).Error()) + return 1 + } + // Everything after is done with normal database URL and is affecting actual data c.srv.DatabaseUrl = strings.TrimSpace(dbaseUrl) if err := c.srv.ConnectToDatabase(dialect); err != nil {