Documentation ¶
Index ¶
- func DbMigrations(conf config.Config, secretsManager secrets.SecretsManager) (*migrate.Migrate, error)
- func MigrationSucceeded(err error) bool
- type Backoff
- type DatabaseLock
- func (lock *DatabaseLock) Obtain(resourceId model.Identifier, clientId model.Identifier) (*Lease, error)
- func (lock *DatabaseLock) ObtainWithBackoff(resourceId model.Identifier, clientId model.Identifier, backoff Backoff) (*Lease, error)
- func (lock *DatabaseLock) ObtainWithNoWait(resourceId model.Identifier, clientId model.Identifier) (*Lease, error)
- func (lock *DatabaseLock) Release(lease *Lease) error
- type ExponentialBackoff
- type Lease
- type Lock
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func DbMigrations ¶
func DbMigrations(conf config.Config, secretsManager secrets.SecretsManager) (*migrate.Migrate, error)
DbMigrations creates a db migrate instance. Location of migration scripts have to be passed via config. Example:
db: migrations: "./db/migrations/"
func MigrationSucceeded ¶
MigrationSucceeded verifies than an error return from migration up is nil or at least no changes has happend.
Types ¶
type Backoff ¶
type Backoff interface { // Reset number of attempts to start from scratch. Start() // Next calculates durection a client should eait for next attempts to get a lock. Next() *time.Duration // Attempts returns the number of alreadz executed circles. Attempts() int // MaxAttempts returns the maximun number of attempts used by a backoff. MaxAttempts() int }
Backoff is used for retry if a lock can not be obtained directly.
func NewBackoff ¶
func NewBackoff() Backoff
NewBackoff returns a backoff with default values. MaxAttempts: 3. InitialInterval: 1s, Nultiplier: 1.5
type DatabaseLock ¶
type DatabaseLock struct {
// contains filtered or unexported fields
}
DatabaseLock is an instance of Lock using a database to manage lock entries.
func (*DatabaseLock) Obtain ¶
func (lock *DatabaseLock) Obtain(resourceId model.Identifier, clientId model.Identifier) (*Lease, error)
Obtain will try to get a lock for given resource using a default backoff. See NewBackoff().
func (*DatabaseLock) ObtainWithBackoff ¶
func (lock *DatabaseLock) ObtainWithBackoff(resourceId model.Identifier, clientId model.Identifier, backoff Backoff) (*Lease, error)
ObtainWithBackoff will tru to get a lock and uses given backoff if first ot follow up attempts fail.
func (*DatabaseLock) ObtainWithNoWait ¶
func (lock *DatabaseLock) ObtainWithNoWait(resourceId model.Identifier, clientId model.Identifier) (*Lease, error)
ObtainWithNoWait will only run one attempt to get a lock.
func (*DatabaseLock) Release ¶
func (lock *DatabaseLock) Release(lease *Lease) error
Release deletes given lock and should be used after all operations for a resource has been performed. Sure, a lock will expire, but you should ensure efficient usage of resource locks.
type ExponentialBackoff ¶
type ExponentialBackoff struct { // InitialInterval is the initial wait duration for a second attempt. InitialInterval time.Duration // Multiplier is applied to wait interval at each attempt. Multiplier float64 // contains filtered or unexported fields }
ExponentialBackoff is used to retry obtaining a lock.
func (*ExponentialBackoff) Attempts ¶
func (backoff *ExponentialBackoff) Attempts() int
Attempts returns number of current attempts.
func (*ExponentialBackoff) MaxAttempts ¶
func (backoff *ExponentialBackoff) MaxAttempts() int
MaxAttempts returns number of max attempts a backoff is confibured for.
func (*ExponentialBackoff) Next ¶
func (backoff *ExponentialBackoff) Next() *time.Duration
Next calculates duration until next attempt should be run.
func (*ExponentialBackoff) Start ¶
func (backoff *ExponentialBackoff) Start()
Start reset current attempts to 0.
type Lease ¶
type Lease struct { // ResourceId is an identifier of a locked resource. ResourceId model.Identifier // ClientId is a source application id which obtains a lock for a resource. ClientId model.Identifier // Expiry, UTC timestamp when a lock gets invalid. Expiry time.Time // Sequence, serials number of a lockused to avoid resource changes by deprecated locks. Sequence int }
Lease is a temprary lock of a resource.
type Lock ¶
type Lock interface { // Obtain will try to get a lock for given resource by using a default backoff. s. NewBackoff() for details. Obtain(resourceId model.Identifier, clientId model.Identifier) (*Lease, error) // ObtainWithBackoff will try to lock passed resource and uses given backoff for retry. ObtainWithBackoff(resourceId model.Identifier, clientId model.Identifier, backoff Backoff) (*Lease, error) // ObtainWithNoWait will fail if a lock for given resource can not be created immedeately. ObtainWithNoWait(resourceId model.Identifier, clientId model.Identifier) (*Lease, error) // Release should be used to clean a lock if it's no longer required. // Locks expired after a defined time, so it's not mandatory to call this method - but this will keep a lock for a unnecessary long time and may block other clients. Release(lease *Lease) error }
Lock is unused to obtain and release resource locks.