mysql

package
v1.31.0 Latest Latest
Warning

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

Go to latest
Published: Apr 11, 2024 License: Apache-2.0 Imports: 35 Imported by: 0

README

MySQL Datastore

Minimum required version can be found here defined as MinimumSupportedMySQLVersion in version.go

This datastore implementation allows you to use a MySQL database as the backing durable storage for SpiceDB.

Usage Caveats

The MySQL datastore only supports a single primary node, and does not support read replicas. It is therefore only recommended for installations that can scale the MySQL instance vertically and cannot be used efficiently in a mulit-region installation.

Documentation

Index

Constants

View Source
const (
	Engine = "mysql"
)

Variables

Functions

func NewMySQLDatastore

func NewMySQLDatastore(ctx context.Context, uri string, options ...Option) (datastore.Datastore, error)

NewMySQLDatastore creates a new mysql.Datastore value configured with the MySQL instance specified in through the URI parameter. Supports customization via the various options available in this package.

URI: [scheme://][user[:[password]]@]host[:port][/schema][?attribute1=value1&attribute2=value2... See https://dev.mysql.com/doc/refman/8.0/en/connecting-using-uri-or-key-value-pairs.html

Types

type Datastore

type Datastore struct {
	*QueryBuilder
	*revisions.CachedOptimizedRevisions
	revisions.CommonDecoder
	// contains filtered or unexported fields
}

Datastore is a MySQL-based implementation of the datastore.Datastore interface

func (*Datastore) CheckRevision

func (mds *Datastore) CheckRevision(ctx context.Context, revision datastore.Revision) error

func (*Datastore) Close

func (mds *Datastore) Close() error

Close closes the data store.

func (*Datastore) DeleteBeforeTx added in v1.10.0

func (mds *Datastore) DeleteBeforeTx(
	ctx context.Context,
	txID datastore.Revision,
) (removed common.DeletionCounts, err error)

- implementation misses metrics

func (*Datastore) Features added in v1.11.0

func (mds *Datastore) Features(_ context.Context) (*datastore.Features, error)

func (*Datastore) HasGCRun added in v1.27.0

func (mds *Datastore) HasGCRun() bool

func (*Datastore) HeadRevision

func (mds *Datastore) HeadRevision(ctx context.Context) (datastore.Revision, error)

func (*Datastore) MarkGCCompleted added in v1.27.0

func (mds *Datastore) MarkGCCompleted()

func (*Datastore) Now added in v1.10.0

func (mds *Datastore) Now(ctx context.Context) (time.Time, error)

func (*Datastore) ReadWriteTx added in v1.8.0

func (mds *Datastore) ReadWriteTx(
	ctx context.Context,
	fn datastore.TxUserFunc,
	opts ...options.RWTOptionsOption,
) (datastore.Revision, error)

ReadWriteTx starts a read/write transaction, which will be committed if no error is returned and rolled back if an error is returned.

func (*Datastore) ReadyState added in v1.18.1

func (mds *Datastore) ReadyState(ctx context.Context) (datastore.ReadyState, error)

ReadyState returns whether the datastore is ready to accept data. Datastores that require database schema creation will return false until the migrations have been run to create the necessary tables.

fundamentally different from PSQL implementation:

  • checking if the current migration version is compatible is implemented with IsHeadCompatible
  • Database seeding is handled here, so that we can decouple schema migration from data migration and support skeema-based migrations.

func (*Datastore) ResetGCCompleted added in v1.27.0

func (mds *Datastore) ResetGCCompleted()

func (*Datastore) SnapshotReader added in v1.8.0

func (mds *Datastore) SnapshotReader(rev datastore.Revision) datastore.Reader

func (*Datastore) Statistics

func (mds *Datastore) Statistics(ctx context.Context) (datastore.Stats, error)

func (*Datastore) TxIDBefore added in v1.10.0

func (mds *Datastore) TxIDBefore(ctx context.Context, before time.Time) (datastore.Revision, error)

- main difference is how the PSQL driver handles null values

func (*Datastore) Watch

func (mds *Datastore) Watch(ctx context.Context, afterRevisionRaw datastore.Revision, options datastore.WatchOptions) (<-chan *datastore.RevisionChanges, <-chan error)

Watch notifies the caller about all changes to tuples.

All events following afterRevision will be sent to the caller.

type Option

type Option func(*mysqlOptions)

Option provides the facility to configure how clients within the MySQL datastore interact with the running MySQL database.

func ConnMaxIdleTime

func ConnMaxIdleTime(idle time.Duration) Option

ConnMaxIdleTime is the duration after which an idle connection will be automatically closed. See https://pkg.go.dev/database/sql#DB.SetConnMaxIdleTime/

This value defaults to having no maximum.

func ConnMaxLifetime

func ConnMaxLifetime(lifetime time.Duration) Option

ConnMaxLifetime is the duration since creation after which a connection will be automatically closed. See https://pkg.go.dev/database/sql#DB.SetConnMaxLifetime

This value defaults to having no maximum.

func DebugAnalyzeBeforeStatistics

func DebugAnalyzeBeforeStatistics() Option

DebugAnalyzeBeforeStatistics signals to the Statistics method that it should run Analyze Table on the relationships table before returning statistics. This should only be used for debug and testing.

Disabled by default.

func GCEnabled added in v1.13.0

func GCEnabled(isGCEnabled bool) Option

GCEnabled indicates whether garbage collection is enabled.

GC is enabled by default.

func GCInterval

func GCInterval(interval time.Duration) Option

GCInterval is the interval at which garbage collection will occur.

This value defaults to 3 minutes.

func GCMaxOperationTime added in v1.13.0

func GCMaxOperationTime(time time.Duration) Option

GCMaxOperationTime is the maximum operation time of a garbage collection pass before it times out.

This value defaults to 1 minute.

func GCWindow

func GCWindow(window time.Duration) Option

GCWindow is the maximum age of a passed revision that will be considered valid.

This value defaults to 24 hours.

func MaxOpenConns

func MaxOpenConns(conns int) Option

MaxOpenConns is the maximum size of the connection pool. See https://pkg.go.dev/database/sql#DB.SetMaxOpenConns

This value defaults to having no maximum.

func MaxRetries added in v1.8.0

func MaxRetries(maxRetries uint8) Option

MaxRetries is the maximum number of times a retriable transaction will be client-side retried.

Default: 10

func MaxRevisionStalenessPercent added in v1.8.0

func MaxRevisionStalenessPercent(stalenessPercent float64) Option

MaxRevisionStalenessPercent is the amount of time, expressed as a percentage of the revision quantization window, that a previously computed rounded revision can still be advertised after the next rounded revision would otherwise be ready.

This value defaults to 0.1 (10%).

func OverrideLockWaitTimeout added in v1.8.0

func OverrideLockWaitTimeout(seconds uint8) Option

OverrideLockWaitTimeout sets the lock wait timeout on each new connection established with the databases. As an OLTP service, the default of 50s is unbearably long to block a write for our service, so we suggest setting this value to the minimum of 1 second.

Uses server default by default.

func RevisionQuantization added in v1.8.0

func RevisionQuantization(quantization time.Duration) Option

RevisionQuantization is the time bucket size to which advertised revisions will be rounded.

This value defaults to 5 seconds.

func TablePrefix

func TablePrefix(prefix string) Option

TablePrefix allows defining a MySQL table name prefix.

No prefix is set by default

func WatchBufferLength added in v1.8.0

func WatchBufferLength(watchBufferLength uint16) Option

WatchBufferLength is the number of entries that can be stored in the watch buffer while awaiting read by the client.

This value defaults to 128.

func WatchBufferWriteTimeout added in v1.29.0

func WatchBufferWriteTimeout(watchBufferWriteTimeout time.Duration) Option

WatchBufferWriteTimeout is the maximum timeout for writing to the watch buffer, after which the caller to the watch will be disconnected.

func WithEnablePrometheusStats

func WithEnablePrometheusStats(enablePrometheusStats bool) Option

WithEnablePrometheusStats marks whether Prometheus metrics provided by Go's database/sql package are enabled.

Prometheus metrics are disabled by default.

type QueryBuilder

type QueryBuilder struct {
	GetLastRevision  sq.SelectBuilder
	GetRevisionRange sq.SelectBuilder

	WriteNamespaceQuery        sq.InsertBuilder
	ReadNamespaceQuery         sq.SelectBuilder
	DeleteNamespaceQuery       sq.UpdateBuilder
	DeleteNamespaceTuplesQuery sq.UpdateBuilder

	QueryTuplesWithIdsQuery sq.SelectBuilder
	QueryTuplesQuery        sq.SelectBuilder
	DeleteTupleQuery        sq.UpdateBuilder
	QueryTupleExistsQuery   sq.SelectBuilder
	WriteTupleQuery         sq.InsertBuilder
	QueryChangedQuery       sq.SelectBuilder
	CountTupleQuery         sq.SelectBuilder

	WriteCaveatQuery  sq.InsertBuilder
	ReadCaveatQuery   sq.SelectBuilder
	ListCaveatsQuery  sq.SelectBuilder
	DeleteCaveatQuery sq.UpdateBuilder
}

QueryBuilder captures all parameterizable queries used by the MySQL datastore implementation

func NewQueryBuilder

func NewQueryBuilder(driver *migrations.MySQLDriver) *QueryBuilder

NewQueryBuilder returns a new QueryBuilder instance. The migration driver is used to determine the names of the tables.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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