blob: 304f62cca0b0d4d34628a08ff08fc34e91c75225 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
package common
import (
"fmt"
"slices"
"strings"
"github.com/authzed/spicedb/pkg/datastore"
)
type MigrationValidator struct {
additionalAllowedMigrations []string
headMigration string
}
func NewMigrationValidator(headMigration string, additionalAllowedMigrations []string) *MigrationValidator {
return &MigrationValidator{
additionalAllowedMigrations: additionalAllowedMigrations,
headMigration: headMigration,
}
}
// MigrationReadyState returns the readiness of the datastore for the given version.
func (mv *MigrationValidator) MigrationReadyState(version string) datastore.ReadyState {
if version == mv.headMigration {
return datastore.ReadyState{IsReady: true}
}
if slices.Contains(mv.additionalAllowedMigrations, version) {
return datastore.ReadyState{IsReady: true}
}
var msgBuilder strings.Builder
msgBuilder.WriteString(fmt.Sprintf("datastore is not migrated: currently at revision %q, but requires %q", version, mv.headMigration))
if len(mv.additionalAllowedMigrations) > 0 {
msgBuilder.WriteString(fmt.Sprintf(" (additional allowed migrations: %v)", mv.additionalAllowedMigrations))
}
msgBuilder.WriteString(". Please run \"spicedb datastore migrate\".")
return datastore.ReadyState{
Message: msgBuilder.String(),
IsReady: false,
}
}
|