Dependency updates

This commit is contained in:
Stash Dev
2019-05-27 12:34:26 -07:00
parent 69917999ef
commit 4b037e1040
359 changed files with 60172 additions and 18749 deletions

View File

@@ -5,7 +5,9 @@
package migrate
import (
"errors"
"fmt"
"github.com/hashicorp/go-multierror"
"os"
"sync"
"time"
@@ -25,10 +27,11 @@ var DefaultPrefetchMigrations = uint(10)
var DefaultLockTimeout = 15 * time.Second
var (
ErrNoChange = fmt.Errorf("no change")
ErrNilVersion = fmt.Errorf("no migration")
ErrLocked = fmt.Errorf("database locked")
ErrLockTimeout = fmt.Errorf("timeout: can't acquire database lock")
ErrNoChange = errors.New("no change")
ErrNilVersion = errors.New("no migration")
ErrInvalidVersion = errors.New("version must be >= -1")
ErrLocked = errors.New("database locked")
ErrLockTimeout = errors.New("timeout: can't acquire database lock")
)
// ErrShortLimit is an error returned when not enough migrations
@@ -62,11 +65,11 @@ type Migrate struct {
// GracefulStop accepts `true` and will stop executing migrations
// as soon as possible at a safe break point, so that the database
// is not corrupted.
GracefulStop chan bool
isGracefulStop bool
GracefulStop chan bool
isLockedMu *sync.Mutex
isLockedMu *sync.Mutex
isLocked bool
isGracefulStop bool
isLocked bool
// PrefetchMigrations defaults to DefaultPrefetchMigrations,
// but can be set per Migrate instance.
@@ -79,28 +82,28 @@ type Migrate struct {
// New returns a new Migrate instance from a source URL and a database URL.
// The URL scheme is defined by each driver.
func New(sourceUrl, databaseUrl string) (*Migrate, error) {
func New(sourceURL, databaseURL string) (*Migrate, error) {
m := newCommon()
sourceName, err := sourceSchemeFromUrl(sourceUrl)
sourceName, err := sourceSchemeFromURL(sourceURL)
if err != nil {
return nil, err
}
m.sourceName = sourceName
databaseName, err := databaseSchemeFromUrl(databaseUrl)
databaseName, err := databaseSchemeFromURL(databaseURL)
if err != nil {
return nil, err
}
m.databaseName = databaseName
sourceDrv, err := source.Open(sourceUrl)
sourceDrv, err := source.Open(sourceURL)
if err != nil {
return nil, err
}
m.sourceDrv = sourceDrv
databaseDrv, err := database.Open(databaseUrl)
databaseDrv, err := database.Open(databaseURL)
if err != nil {
return nil, err
}
@@ -113,10 +116,10 @@ func New(sourceUrl, databaseUrl string) (*Migrate, error) {
// and an existing database instance. The source URL scheme is defined by each driver.
// Use any string that can serve as an identifier during logging as databaseName.
// You are responsible for closing the underlying database client if necessary.
func NewWithDatabaseInstance(sourceUrl string, databaseName string, databaseInstance database.Driver) (*Migrate, error) {
func NewWithDatabaseInstance(sourceURL string, databaseName string, databaseInstance database.Driver) (*Migrate, error) {
m := newCommon()
sourceName, err := schemeFromUrl(sourceUrl)
sourceName, err := schemeFromURL(sourceURL)
if err != nil {
return nil, err
}
@@ -124,7 +127,7 @@ func NewWithDatabaseInstance(sourceUrl string, databaseName string, databaseInst
m.databaseName = databaseName
sourceDrv, err := source.Open(sourceUrl)
sourceDrv, err := source.Open(sourceURL)
if err != nil {
return nil, err
}
@@ -139,10 +142,10 @@ func NewWithDatabaseInstance(sourceUrl string, databaseName string, databaseInst
// and a database URL. The database URL scheme is defined by each driver.
// Use any string that can serve as an identifier during logging as sourceName.
// You are responsible for closing the underlying source client if necessary.
func NewWithSourceInstance(sourceName string, sourceInstance source.Driver, databaseUrl string) (*Migrate, error) {
func NewWithSourceInstance(sourceName string, sourceInstance source.Driver, databaseURL string) (*Migrate, error) {
m := newCommon()
databaseName, err := schemeFromUrl(databaseUrl)
databaseName, err := schemeFromURL(databaseURL)
if err != nil {
return nil, err
}
@@ -150,7 +153,7 @@ func NewWithSourceInstance(sourceName string, sourceInstance source.Driver, data
m.sourceName = sourceName
databaseDrv, err := database.Open(databaseUrl)
databaseDrv, err := database.Open(databaseURL)
if err != nil {
return nil, err
}
@@ -345,7 +348,11 @@ func (m *Migrate) Run(migration ...*Migration) error {
}
ret <- migr
go migr.Buffer()
go func(migr *Migration) {
if err := migr.Buffer(); err != nil {
m.logErr(err)
}
}(migr)
}
}()
@@ -357,7 +364,7 @@ func (m *Migrate) Run(migration ...*Migration) error {
// It resets the dirty state to false.
func (m *Migrate) Force(version int) error {
if version < -1 {
panic("version must be >= -1")
return ErrInvalidVersion
}
if err := m.lock(); err != nil {
@@ -432,7 +439,12 @@ func (m *Migrate) read(from int, to int, ret chan<- interface{}) {
}
ret <- migr
go migr.Buffer()
go func() {
if err := migr.Buffer(); err != nil {
m.logErr(err)
}
}()
from = int(firstVersion)
}
@@ -455,7 +467,12 @@ func (m *Migrate) read(from int, to int, ret chan<- interface{}) {
}
ret <- migr
go migr.Buffer()
go func() {
if err := migr.Buffer(); err != nil {
m.logErr(err)
}
}()
from = int(next)
}
@@ -476,7 +493,12 @@ func (m *Migrate) read(from int, to int, ret chan<- interface{}) {
return
}
ret <- migr
go migr.Buffer()
go func() {
if err := migr.Buffer(); err != nil {
m.logErr(err)
}
}()
return
} else if err != nil {
@@ -491,7 +513,12 @@ func (m *Migrate) read(from int, to int, ret chan<- interface{}) {
}
ret <- migr
go migr.Buffer()
go func() {
if err := migr.Buffer(); err != nil {
m.logErr(err)
}
}()
from = int(prev)
}
}
@@ -539,7 +566,11 @@ func (m *Migrate) readUp(from int, limit int, ret chan<- interface{}) {
}
ret <- migr
go migr.Buffer()
go func() {
if err := migr.Buffer(); err != nil {
m.logErr(err)
}
}()
from = int(firstVersion)
count++
continue
@@ -583,7 +614,11 @@ func (m *Migrate) readUp(from int, limit int, ret chan<- interface{}) {
}
ret <- migr
go migr.Buffer()
go func() {
if err := migr.Buffer(); err != nil {
m.logErr(err)
}
}()
from = int(next)
count++
}
@@ -644,7 +679,11 @@ func (m *Migrate) readDown(from int, limit int, ret chan<- interface{}) {
return
}
ret <- migr
go migr.Buffer()
go func() {
if err := migr.Buffer(); err != nil {
m.logErr(err)
}
}()
count++
}
@@ -665,7 +704,11 @@ func (m *Migrate) readDown(from int, limit int, ret chan<- interface{}) {
}
ret <- migr
go migr.Buffer()
go func() {
if err := migr.Buffer(); err != nil {
m.logErr(err)
}
}()
from = int(prev)
count++
}
@@ -684,12 +727,12 @@ func (m *Migrate) runMigrations(ret <-chan interface{}) error {
return nil
}
switch r.(type) {
switch r := r.(type) {
case error:
return r.(error)
return r
case *Migration:
migr := r.(*Migration)
migr := r
// set version with dirty state
if err := m.databaseDrv.SetVersion(migr.TargetVersion, true); err != nil {
@@ -722,7 +765,7 @@ func (m *Migrate) runMigrations(ret <-chan interface{}) error {
}
default:
panic("unknown type")
return fmt.Errorf("unknown type: %T with value: %+v", r, r)
}
}
return nil
@@ -730,11 +773,15 @@ func (m *Migrate) runMigrations(ret <-chan interface{}) error {
// versionExists checks the source if either the up or down migration for
// the specified migration version exists.
func (m *Migrate) versionExists(version uint) error {
func (m *Migrate) versionExists(version uint) (result error) {
// try up migration first
up, _, err := m.sourceDrv.ReadUp(version)
if err == nil {
defer up.Close()
defer func() {
if errClose := up.Close(); errClose != nil {
result = multierror.Append(result, errClose)
}
}()
}
if os.IsExist(err) {
return nil
@@ -745,7 +792,11 @@ func (m *Migrate) versionExists(version uint) error {
// then try down migration
down, _, err := m.sourceDrv.ReadDown(version)
if err == nil {
defer down.Close()
defer func() {
if errClose := down.Close(); errClose != nil {
result = multierror.Append(result, errClose)
}
}()
}
if os.IsExist(err) {
return nil
@@ -869,10 +920,9 @@ func (m *Migrate) lock() error {
} else {
errchan <- nil
}
return
}()
// wait until we either recieve ErrLockTimeout or error from Lock operation
// wait until we either receive ErrLockTimeout or error from Lock operation
err := <-errchan
if err == nil {
m.isLocked = true
@@ -918,3 +968,10 @@ func (m *Migrate) logVerbosePrintf(format string, v ...interface{}) {
m.Log.Printf(format, v...)
}
}
// logErr writes error to m.Log if not nil
func (m *Migrate) logErr(err error) {
if m.Log != nil {
m.Log.Printf("error: %v", err)
}
}