Documentation ¶
Index ¶
- Constants
- func NewMySQLDatastore(uri string, options ...Option) (datastore.Datastore, error)
- type Datastore
- func (mds *Datastore) CheckRevision(ctx context.Context, revisionRaw datastore.Revision) error
- func (mds *Datastore) Close() error
- func (mds *Datastore) DeleteBeforeTx(ctx context.Context, txID datastore.Revision) (removed common.DeletionCounts, err error)
- func (mds *Datastore) Features(_ context.Context) (*datastore.Features, error)
- func (mds *Datastore) HeadRevision(ctx context.Context) (datastore.Revision, error)
- func (mds *Datastore) Now(ctx context.Context) (time.Time, error)
- func (mds *Datastore) ReadWriteTx(ctx context.Context, fn datastore.TxUserFunc, opts ...options.RWTOptionsOption) (datastore.Revision, error)
- func (mds *Datastore) ReadyState(ctx context.Context) (datastore.ReadyState, error)
- func (mds *Datastore) SnapshotReader(revisionRaw datastore.Revision) datastore.Reader
- func (mds *Datastore) Statistics(ctx context.Context) (datastore.Stats, error)
- func (mds *Datastore) TxIDBefore(ctx context.Context, before time.Time) (datastore.Revision, error)
- func (mds *Datastore) Watch(ctx context.Context, afterRevisionRaw datastore.Revision) (<-chan *datastore.RevisionChanges, <-chan error)
- type Option
- func ConnMaxIdleTime(idle time.Duration) Option
- func ConnMaxLifetime(lifetime time.Duration) Option
- func DebugAnalyzeBeforeStatistics() Option
- func GCEnabled(isGCEnabled bool) Option
- func GCInterval(interval time.Duration) Option
- func GCMaxOperationTime(time time.Duration) Option
- func GCWindow(window time.Duration) Option
- func MaxOpenConns(conns int) Option
- func MaxRetries(maxRetries uint8) Option
- func MaxRevisionStalenessPercent(stalenessPercent float64) Option
- func OverrideLockWaitTimeout(seconds uint8) Option
- func RevisionQuantization(quantization time.Duration) Option
- func TablePrefix(prefix string) Option
- func WatchBufferLength(watchBufferLength uint16) Option
- func WithEnablePrometheusStats(enablePrometheusStats bool) Option
- type QueryBuilder
Constants ¶
const (
Engine = "mysql"
)
Variables ¶
This section is empty.
Functions ¶
func NewMySQLDatastore ¶
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 revision.DecimalDecoder // contains filtered or unexported fields }
Datastore is a MySQL-based implementation of the datastore.Datastore interface
func (*Datastore) CheckRevision ¶
func (*Datastore) DeleteBeforeTx ¶ added in v1.10.0
func (mds *Datastore) DeleteBeforeTx( ctx context.Context, txID datastore.Revision, ) (removed common.DeletionCounts, err error)
TODO (@vroldanbet) dupe from postgres datastore - need to refactor - implementation misses metrics
func (*Datastore) HeadRevision ¶
func (*Datastore) Now ¶ added in v1.10.0
TODO (@vroldanbet) dupe from postgres datastore - need to refactor
func (*Datastore) ReadWriteTx ¶ added in v1.8.0
func (mds *Datastore) ReadWriteTx( ctx context.Context, fn datastore.TxUserFunc, opts ...options.RWTOptionsOption, ) (datastore.Revision, error)
TODO (@vroldanbet) dupe from postgres datastore - need to refactor 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
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) SnapshotReader ¶ added in v1.8.0
TODO (@vroldanbet) dupe from postgres datastore - need to refactor
func (*Datastore) Statistics ¶
func (*Datastore) TxIDBefore ¶ added in v1.10.0
TODO (@vroldanbet) dupe from postgres datastore - need to refactor - main difference is how the PSQL driver handles null values
func (*Datastore) Watch ¶
func (mds *Datastore) Watch(ctx context.Context, afterRevisionRaw datastore.Revision) (<-chan *datastore.RevisionChanges, <-chan error)
Watch notifies the caller about all changes to tuples.
All events following afterRevision will be sent to the caller.
TODO (@vroldanbet) dupe from postgres datastore - need to refactor
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 ¶
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 ¶
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
GCEnabled indicates whether garbage collection is enabled.
GC is enabled by default.
func GCInterval ¶
GCInterval is the interval at which garbage collection will occur.
This value defaults to 3 minutes.
func GCMaxOperationTime ¶ added in v1.13.0
GCMaxOperationTime is the maximum operation time of a garbage collection pass before it times out.
This value defaults to 1 minute.
func GCWindow ¶
GCWindow is the maximum age of a passed revision that will be considered valid.
This value defaults to 24 hours.
func MaxOpenConns ¶
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
MaxRetries is the maximum number of times a retriable transaction will be client-side retried.
Default: 10
func MaxRevisionStalenessPercent ¶ added in v1.8.0
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
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
RevisionQuantization is the time bucket size to which advertised revisions will be rounded.
This value defaults to 5 seconds.
func TablePrefix ¶
TablePrefix allows defining a MySQL table name prefix.
No prefix is set by default
func WatchBufferLength ¶ added in v1.8.0
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 WithEnablePrometheusStats ¶
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.