wanderer

package
v0.18.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 18, 2021 License: Apache-2.0 Imports: 3 Imported by: 2

Documentation

Overview

Package wanderer provides the development kit for working with database migrations. This feature allows teams to run and version database migrations with no conflicts in tandem with the supervisor.

Note: The wanderer is part of Blacksmith Enterprise Edition and can not be leveraged when using Blacksmith Standard Edition.

Index

Constants

This section is empty.

Variables

View Source
var Defaults = &Options{}

Defaults are the defaults options set for the wanderer. When not set, these values will automatically be applied.

View Source
var InterfaceWanderer = "wanderer"

InterfaceWanderer is the string representation for the wanderer interface.

View Source
var StatusAcknowledged = "acknowledged"

StatusAcknowledged is used to mark a migration as acknowledged. This is used when registering new migrations into the wanderer.

View Source
var StatusDiscarded = "discarded"

StatusDiscarded is used to mark a migration as discarded. If a rollbacked migration is marked as discarded it can not be run again.

View Source
var StatusExecutingDown = "executing(down)"

StatusExecutingDown is used to inform a migration is executing its "down" logic.

View Source
var StatusExecutingUp = "executing(up)"

StatusExecutingUp is used to inform a migration is executing its "up" logic.

View Source
var StatusFailedDown = "failed(down)"

StatusFailedDown is used to inform a migration has failed to run its "up" logic.

View Source
var StatusFailedUp = "failed(up)"

StatusFailedUp is used to inform a migration has failed to run its "up" logic.

View Source
var StatusSucceededDown = "succeeded(down)"

StatusSucceededDown is used to inform a migration has succeeded its "down" logic. In other words, the migration has successfully been rollbacked.

View Source
var StatusSucceededUp = "succeeded(up)"

StatusSucceededUp is used to inform a migration has succeeded its "up" logic.

Functions

This section is empty.

Types

type Driver added in v0.17.0

type Driver string

Driver is a custom type allowing the user to only pass supported drivers when configuring the wanderer adapter.

var DriverPostgreSQL Driver = "postgres"

DriverPostgreSQL is used to leverage PostgreSQL as the wanderer adapter.

type Meta added in v0.11.0

type Meta struct {

	// Count is the number of entries found that match the constraints applied to
	// the query (without the limit).
	Count uint16 `json:"count"`

	// Pagination is the pagination details based on the count, offset, and limit.
	Pagination *rest.Pagination `json:"pagination"`

	// Where is the constraints applied to the query to find migrations or transitions.
	// This is included in the meta because the wanderer can set defaults or override
	// some constraints (such as a maximum limit). This allows to be aware of the
	// constraints actually applied to the query.
	Where *WhereMigrations `json:"where"`
}

Meta includes information about the query's result returned by the wanderer when looking for entries (migrations or transitions).

type Migration

type Migration struct {

	// ID is the unique identifier of the migration. It must be a valid KSUID.
	//
	// Example: "1UYc8EebLqCAFMOSkbYZdJwNLAJ"
	ID string `json:"id"`

	// Version is the 14 character timestamp when the migration has been created.
	// The name of the version is of the form YYYYMMDDHHMISS, which is a UTC
	// timestamp identifying the migration.
	//
	// Example: "20060102150405"
	Version time.Time `json:"version"`

	// Scope is the string representation of the scope of the migration.
	//
	// Examples: "source:crm", "source/trigger:crm/register"
	Scope string `json:"scope"`

	// Name is the name of the migration to run or rollback. This is a part of the
	// migration's filename.
	//
	// Example: "add_rbac"
	Name string `json:"name"`

	// Direction indicates which direction is being run at the moment when running
	// or rolling back migrations. It shall be one of "up" or "down".
	Direction string `json:"-"`

	// Transitions is an array of the migration's transitions. It is used to keep
	// track of successes, failures, and errors so the wanderer is aware of the
	// migration's status.
	//
	// Note: It is up to the adapter to only return the latest migration's transition
	// since this is the only one that really matters in this context.
	Transitions [1]*Transition `json:"transitions"`

	// CreatedAt is a timestamp of the migration creation date into the wanderer
	// datastore.
	CreatedAt time.Time `json:"created_at,omitempty"`
}

Migration contains the details about a specific migration, including its up and down details.

type Options

type Options struct {

	// From is used to set the desired driver for the wanderer adapter.
	From Driver `json:"from,omitempty"`

	// Connection is the connection string to connect to the wanderer.
	Connection string `json:"-"`
}

Options is the options a user can pass to use the wanderer adapter.

type Toolkit

type Toolkit struct {

	// Logger gives access to the logrus Logger passed in options when creating the
	// Blacksmith application.
	Logger *logrus.Logger

	// WD is the rooted path name corresponding to the current directory. It can be
	// used to read a migration file in a directory.
	WD string
}

Toolkit contains a suite of utilities and data to help the adapter successfully run the wanderer functions.

type Transition

type Transition struct {

	// ID is the unique identifier of the transition. It must be a valid KSUID.
	//
	// Example: "1UYc8EebLqCAFMOSkbYZdJwNLAJ"
	ID string `json:"id"`

	// StateBefore is the state of the migration before running it. This shall be
	// nil when acknowledging the migration.
	StateBefore *string `json:"state_before"`

	// StateAfter is the state of the migration after running the new transition.
	StateAfter string `json:"state_after"`

	// Error keeps track of encountered if any.
	Error error `json:"error"`

	// CreatedAt is a timestamp of the transition creation date into the wanderer
	// datastore.
	CreatedAt time.Time `json:"created_at,omitempty"`

	// MigrationID is the ID of the migration that is being run by the transition.
	MigrationID string `json:"migration_id"`
}

Transition is used to keep track of the status of migrations.

type Wanderer

type Wanderer interface {

	// String returns the string representation of the adapter.
	//
	// Example: "postgres"
	String() string

	// Options returns the options originally passed to the Options struct. This
	// can be used to validate and override user's options if necessary.
	Options() *Options

	// AddMigrations inserts a list of migrations into the wanderer given the data
	// passed in params. It returns an error if any occurred.
	AddMigrations(*Toolkit, []*Migration) error

	// FindMigration returns a migration given the migration ID passed in params.
	FindMigration(*Toolkit, string) (*Migration, error)

	// FindMigrations returns a list of migrations matching the constraints passed
	// in params. It also returns meta information about the query, such as pagination
	// and the constraints really applied to it.
	FindMigrations(*Toolkit, *WhereMigrations) ([]*Migration, *Meta, error)

	// AddTransitions inserts a list of transitions into the datastore to update
	// their related migration status. We insert new transitions instead of updating
	// the migration itself to keep track of the migration's history.
	AddTransitions(*Toolkit, []*Transition) error

	// FindTransition returns a transition given the transition ID passed in params.
	FindTransition(*Toolkit, string) (*Transition, error)

	// FindTransitions returns a list of transitions matching the constraints passed
	// in params. It also returns meta information about the query, such as pagination
	// and the constraints really applied to it.
	FindTransitions(*Toolkit, *WhereMigrations) ([]*Transition, *Meta, error)
}

Wanderer is the interface used to persist the migrations in a datastore to keep track of migrations states.

type WhereMigrations added in v0.11.0

type WhereMigrations struct {

	// VersionBefore makes sure the entries returned by the query are related to a
	// migration versioned before this instant.
	VersionedBefore *time.Time `json:"versioned_before,omitempty"`

	// VersionAfter makes sure the entries returned by the query are related to a
	// migration versioned after this instant.
	VersionedAfter *time.Time `json:"versioned_after,omitempty"`

	// ScopeIn makes sure the entries returned by the query is related to any of
	// the scope kind present in the slice.
	ScopeIn []string `json:"scope_in,omitempty"`

	// ScopeNotIn makes sure the entries returned by the query is not related to
	// any of the scope present in the slice.
	ScopeNotIn []string `json:"scope_notin,omitempty"`

	// AndWhereTransitions lets you define additional constraints related to the
	// transitions for the migrations you are looking for.
	AndWhereTransitions *WhereTransitions `json:"transitions,omitempty"`

	// Offset specifies the number of entries to skip before starting to return entries
	// from the query.
	Offset uint16 `json:"offset"`

	// Limit specifies the number of entries to return after the offset clause has
	// been processed.
	Limit uint16 `json:"limit"`
}

WhereMigrations is used to set constraints on the migrations when looking for entries into the wanderer.

type WhereTransitions added in v0.11.0

type WhereTransitions struct {

	// MigrationID allows to find every entries related to a specific migration ID.
	//
	// Note: When set, other constraints are not applied (except parent offset and
	// limit).
	MigrationID string `json:"migration.id,omitempty"`

	// StatusIn makes sure the entries returned by the query have any of the status
	// present in the slice.
	StatusIn []string `json:"status_in,omitempty"`

	// StatusNotIn makes sure the entries returned by the query do not have any of
	// the status present in the slice.
	StatusNotIn []string `json:"status_notin,omitempty"`
}

WhereTransitions is used to set constraints on transitions when looking for entries into the wanderer.

type WithMigrate added in v0.11.0

type WithMigrate interface {

	// Migrate is the migration logic for running every migrations for a source or
	// a destination. The function gives access only to the migration that need to
	// run with the appropriate direction "up" or "down".
	//
	// Note: It is implemented by the sqlike module, offering production-ready tools
	// to integrate Blacksmith applications with SQL-like databases. See Go module
	// at https://pkg.go.dev/github.com/nunchistudio/blacksmith-modules/sqlike for
	// more details.
	Migrate(*Toolkit, *Migration) error
}

WithMigrate can be implemented by sources and destinations to benefit custom data and database schema migrations.

Note: Feature only available in Blacksmith Enterprise Edition.

type WithMigrations added in v0.11.0

type WithMigrations interface {

	// Migrations returns a slice of migrations regardless their status. The wanderer
	// will then be able to process and keep track of each and every one of them.
	//
	// Note: It is implemented by the sqlike module, offering production-ready tools
	// to integrate Blacksmith applications with SQL-like databases. See Go module
	// at https://pkg.go.dev/github.com/nunchistudio/blacksmith-modules/sqlike for
	// more details.
	Migrations(*Toolkit) ([]*Migration, error)
}

WithMigrations must be implemented by sources (and / or by their triggers) and destinations (and / or by their actions) already implementing the WithMigrate interface.

Note: Feature only available in Blacksmith Enterprise Edition.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL