influxdb/kv/migration/all/migration.go

56 lines
1.5 KiB
Go

package all
import (
"context"
"github.com/influxdata/influxdb/v2/kv"
"github.com/influxdata/influxdb/v2/kv/migration"
"go.uber.org/zap"
)
// Up is a convenience methods which creates a migrator for all
// migrations and calls Up on it.
func Up(ctx context.Context, logger *zap.Logger, store kv.SchemaStore) error {
migrator, err := migration.NewMigrator(logger, store, Migrations[:]...)
if err != nil {
return err
}
return migrator.Up(ctx)
}
// MigrationFunc is a function which can be used as either an up or down operation.
type MigrationFunc func(context.Context, kv.SchemaStore) error
func noopMigration(context.Context, kv.SchemaStore) error {
return nil
}
// Migration is a type which implements the migration packages Spec interface
// It can be used to conveniently create migration specs for the all package
type Migration struct {
name string
up MigrationFunc
down MigrationFunc
}
// UpOnlyMigration is a migration with an up function and a noop down function
func UpOnlyMigration(name string, up MigrationFunc) *Migration {
return &Migration{name, up, noopMigration}
}
// MigrationName returns the underlying name of the migation
func (m *Migration) MigrationName() string {
return m.name
}
// Up delegates to the underlying anonymous up migration function
func (m *Migration) Up(ctx context.Context, store kv.SchemaStore) error {
return m.up(ctx, store)
}
// Down delegates to the underlying anonymous down migration function
func (m *Migration) Down(ctx context.Context, store kv.SchemaStore) error {
return m.down(ctx, store)
}