From 0c7efa17ed4aaa9bef25ef9d771934787e8ccc03 Mon Sep 17 00:00:00 2001 From: Max Asnaashari Date: Mon, 17 Jun 2024 16:35:41 +0000 Subject: [PATCH] internal/db: Check for schema version differences before/after updateV1 Prior to updateFromV1, both the internal and external update count is stored in one variable, so we need to check for version differences between cluster members slightly differently. After the update, the columns are split so we don't need to add the two values together. Signed-off-by: Max Asnaashari --- internal/db/db.go | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/internal/db/db.go b/internal/db/db.go index 8f2bdaac..77a35cf7 100644 --- a/internal/db/db.go +++ b/internal/db/db.go @@ -118,19 +118,27 @@ func (db *DB) waitUpgrade(bootstrap bool, ext extensions.Extensions) error { return fmt.Errorf("Failed to update schema version when joining cluster: %w", err) } - versionsInternal, versionsExternal, err := cluster.GetClusterMemberSchemaVersions(ctx, tx) + versionsInternal, versionsExternal, ranUpdateV1, err := cluster.GetClusterMemberSchemaVersions(ctx, tx) if err != nil { return fmt.Errorf("Failed to get other members' schema versions: %w", err) } - otherNodesBehindInternal, err := checkSchemaVersion(schemaVersionInternal, versionsInternal) - if err != nil { - return err - } + var otherNodesBehindInternal, otherNodesBehindExternal bool + if !ranUpdateV1 { + otherNodesBehindInternal, err = checkSchemaVersion(schemaVersionInternal+schemaVersionExternal, versionsInternal) + if err != nil { + return err + } + } else { + otherNodesBehindInternal, err = checkSchemaVersion(schemaVersionInternal, versionsInternal) + if err != nil { + return err + } - otherNodesBehindExternal, err := checkSchemaVersion(schemaVersionExternal, versionsExternal) - if err != nil { - return err + otherNodesBehindExternal, err = checkSchemaVersion(schemaVersionExternal, versionsExternal) + if err != nil { + return err + } } // Wait until after considering both internal and external schema versions to determine if we should wait for other nodes.