tabletserver

package
v0.0.0-...-3712671 Latest Latest
Warning

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

Go to latest
Published: Jul 28, 2014 License: BSD-3-Clause Imports: 49 Imported by: 0

Documentation

Index

Constants

View Source
const (
	TX_CLOSE    = "close"
	TX_COMMIT   = "commit"
	TX_ROLLBACK = "rollback"
	TX_KILL     = "kill"
)
View Source
const (
	MAX_RESULT_NAME                = "_vtMaxResultSize"
	ROWCACHE_INVALIDATION_POSITION = "ROWCACHE_INVALIDATION_POSITION"

	// SPOT_CHECK_MULTIPLIER determines the precision of the
	// spot check ratio: 1e6 == 6 digits
	SPOT_CHECK_MULTIPLIER = 1e6
)
View Source
const (
	QR_CONTINUE = Action(iota)
	QR_FAIL
	QR_FAIL_RETRY
)
View Source
const (
	QR_NOOP = Operator(iota)
	QR_EQ
	QR_NE
	QR_LT
	QR_GE
	QR_GT
	QR_LE
	QR_MATCH
	QR_NOMATCH
	QR_IN
	QR_NOTIN
)
View Source
const (
	QR_OK = iota
	QR_MISMATCH
	QR_OUT_OF_RANGE
)
View Source
const (
	RC_DELETED = 1

	// MAX_KEY_LEN is a value less than memcache's limit of 250.
	MAX_KEY_LEN = 200

	// MAX_DATA_LEN prevents large rows from being inserted in rowcache.
	MAX_DATA_LEN = 8000
)
View Source
const (
	// Allowed state transitions:
	// NOT_SERVING -> INITIALIZING -> SERVING/NOT_SERVING,
	// SERVING -> SHUTTING_TX
	// SHUTTING_TX -> SHUTTING_QUERIES
	// SHUTTING_QUERIES -> NOT_SERVING
	//
	// NOT_SERVING: The query service is not serving queries.
	NOT_SERVING = iota
	// INITIALIZING: The query service is tyring to get to the SERVING state.
	// This is a transient state. It's only informational.
	INITIALIZING
	// SERVING: Query service is running. Everything is allowed.
	SERVING
	// SHUTTING_TX: Query service is shutting down and has disallowed
	// new transactions. New queries are still allowed as long as they
	// are part of an existing transaction. We remain in this state
	// until all existing transactions are completed.
	SHUTTING_TX
	// SHUTTING_QUERIES: Query service is shutting down and has disallowed
	// new queries. This state follows SHUTTING_TX. We enter this state
	// after all existing transactions have completed. We remain in this
	// state until all existing queries are completed. The next state
	// after this is NOT_SERVING.
	SHUTTING_QUERIES
)
View Source
const (
	QUERY_SOURCE_ROWCACHE = 1 << iota
	QUERY_SOURCE_CONSOLIDATOR
	QUERY_SOURCE_MYSQL
)
View Source
const (
	FAIL = iota
	RETRY
	FATAL
	TX_POOL_FULL
	NOT_IN_TX
)
View Source
const TRAILING_COMMENT = "_trailingComment"

Variables

View Source
var (
	BEGIN    = "begin"
	COMMIT   = "commit"
	ROLLBACK = "rollback"
)
View Source
var DefaultQsConfig = Config{
	PoolSize:           16,
	StreamPoolSize:     750,
	TransactionCap:     20,
	TransactionTimeout: 30,
	MaxResultSize:      10000,
	QueryCacheSize:     5000,
	SchemaReloadTime:   30 * 60,
	QueryTimeout:       0,
	IdleTimeout:        30 * 60,
	StreamBufferSize:   32 * 1024,
	RowCache:           RowCacheConfig{Memory: -1, TcpPort: -1, Connections: -1, Threads: -1},
	SpotCheckRatio:     0,
	StrictMode:         true,
	StrictTableAcl:     false,
}

DefaultQSConfig is the default value for the query service config.

The value for StreamBufferSize was chosen after trying out a few of them. Too small buffers force too many packets to be sent. Too big buffers force the clients to read them in multiple chunks and make memory copies. so with the encoding overhead, this seems to work great (the overhead makes the final packets on the wire about twice bigger than this).

View Source
var (
	QPSRates *stats.Rates
)

stats are globals to allow anybody to set them

View Source
var SqlQueryLogger = streamlog.New("SqlQuery", 50)
View Source
var SqlQueryRegisterFunctions []SqlQueryRegisterFunction
View Source
var TxLogger = streamlog.New("TxLog", 10)

TxLogger can be used to enable logging of transactions. Call TxLogger.ServeLogs in your main program to enable logging. The log format can be inferred by looking at TxConnection.Format.

Functions

func AddStatusPart

func AddStatusPart()

AddStatusPart registers the status part for the status page.

func AllowQueries

func AllowQueries(dbconfig *dbconfigs.DBConfig, schemaOverrides []SchemaOverride, qrs *QueryRules, mysqld *mysqlctl.Mysqld, waitForMysql bool) error

AllowQueries can take an indefinite amount of time to return because it keeps retrying until it obtains a valid connection to the database.

func DisallowQueries

func DisallowQueries()

DisallowQueries can take a long time to return (not indefinite) because it has to wait for queries & transactions to be completed or killed, and also for house keeping goroutines to be terminated.

func GetSessionId

func GetSessionId() int64

func InitQueryService

func InitQueryService()

InitQueryService registers the query service, after loading any necessary config files. It also starts any relevant streaming logs.

func IsCachePoolAvailable

func IsCachePoolAvailable() bool

func IsHealthy

func IsHealthy() error

IsHealthy returns nil if the query service is healthy (able to connect to the database and serving traffic) or an error explaining the unhealthiness otherwise.

func Rand

func Rand() int64

Rand generates a pseudo-random int64 number.

func RegisterQueryService

func RegisterQueryService()

func ReloadSchema

func ReloadSchema()

Reload the schema. If the query service is not running, nothing will happen

func SetQueryRules

func SetQueryRules(qrs *QueryRules)

Types

type Action

type Action int

Action speficies the list of actions to perform when a QueryRule is triggered.

type ActivePool

type ActivePool struct {
	// contains filtered or unexported fields
}

func NewActivePool

func NewActivePool(name string, queryTimeout time.Duration, connKiller *ConnectionKiller) *ActivePool

func (*ActivePool) Close

func (ap *ActivePool) Close()

func (*ActivePool) Open

func (ap *ActivePool) Open()

func (*ActivePool) Put

func (ap *ActivePool) Put(id int64)

func (*ActivePool) Remove

func (ap *ActivePool) Remove(id int64)

func (*ActivePool) SetTimeout

func (ap *ActivePool) SetTimeout(timeout time.Duration)

func (*ActivePool) Stats

func (ap *ActivePool) Stats() (size int64, timeout time.Duration)

func (*ActivePool) StatsJSON

func (ap *ActivePool) StatsJSON() string

func (*ActivePool) Timeout

func (ap *ActivePool) Timeout() time.Duration

type ActiveTxPool

type ActiveTxPool struct {
	// contains filtered or unexported fields
}

func NewActiveTxPool

func NewActiveTxPool(name string, timeout time.Duration) *ActiveTxPool

func (*ActiveTxPool) Close

func (axp *ActiveTxPool) Close()

func (*ActiveTxPool) Get

func (axp *ActiveTxPool) Get(transactionId int64) (conn *TxConnection)

You must call Recycle on TxConnection once done.

func (*ActiveTxPool) Open

func (axp *ActiveTxPool) Open()

func (*ActiveTxPool) Rollback

func (axp *ActiveTxPool) Rollback(transactionId int64)

func (*ActiveTxPool) SafeBegin

func (axp *ActiveTxPool) SafeBegin(conn dbconnpool.PoolConnection) (transactionId int64, err error)

func (*ActiveTxPool) SafeCommit

func (axp *ActiveTxPool) SafeCommit(transactionId int64) (invalidList map[string]DirtyKeys, err error)

func (*ActiveTxPool) SetTimeout

func (axp *ActiveTxPool) SetTimeout(timeout time.Duration)

func (*ActiveTxPool) Stats

func (axp *ActiveTxPool) Stats() (size int64, timeout time.Duration)

func (*ActiveTxPool) StatsJSON

func (axp *ActiveTxPool) StatsJSON() string

func (*ActiveTxPool) Timeout

func (axp *ActiveTxPool) Timeout() time.Duration

func (*ActiveTxPool) TransactionKiller

func (axp *ActiveTxPool) TransactionKiller()

func (*ActiveTxPool) WaitForEmpty

func (axp *ActiveTxPool) WaitForEmpty()

type BindVarCond

type BindVarCond struct {
	// contains filtered or unexported fields
}

BindVarCond represents a bind var condition.

type Cache

type Cache struct {
	*memcache.Connection
	// contains filtered or unexported fields
}

Cache re-exposes memcache.Connection that can be recycled.

func (*Cache) Recycle

func (cache *Cache) Recycle()

type CacheInvalidator

type CacheInvalidator interface {
	Delete(key string) bool
}

CacheInvalidator provides the abstraction needed for an instant invalidation vs. delayed invalidation in the case of in-transaction dmls

type CachePool

type CachePool struct {
	DeleteExpiry uint64
	// contains filtered or unexported fields
}

CachePool re-exposes ResourcePool as a pool of Memcache connection objects.

func NewCachePool

func NewCachePool(name string, rowCacheConfig RowCacheConfig, queryTimeout time.Duration, idleTimeout time.Duration) *CachePool

func (*CachePool) Available

func (cp *CachePool) Available() int64

func (*CachePool) Capacity

func (cp *CachePool) Capacity() int64

func (*CachePool) Close

func (cp *CachePool) Close()

func (*CachePool) Get

func (cp *CachePool) Get() *Cache

You must call Recycle on the *Cache once done.

func (*CachePool) IdleTimeout

func (cp *CachePool) IdleTimeout() time.Duration

func (*CachePool) IsClosed

func (cp *CachePool) IsClosed() bool

func (*CachePool) MaxCap

func (cp *CachePool) MaxCap() int64

func (*CachePool) Open

func (cp *CachePool) Open()

func (*CachePool) Put

func (cp *CachePool) Put(conn *Cache)

func (*CachePool) ServeHTTP

func (cp *CachePool) ServeHTTP(response http.ResponseWriter, request *http.Request)

func (*CachePool) StatsJSON

func (cp *CachePool) StatsJSON() string

func (*CachePool) WaitCount

func (cp *CachePool) WaitCount() int64

func (*CachePool) WaitTime

func (cp *CachePool) WaitTime() time.Duration

type Config

type Config struct {
	PoolSize           int
	StreamPoolSize     int
	TransactionCap     int
	TransactionTimeout float64
	MaxResultSize      int
	StreamBufferSize   int
	QueryCacheSize     int
	SchemaReloadTime   float64
	QueryTimeout       float64
	IdleTimeout        float64
	RowCache           RowCacheConfig
	SpotCheckRatio     float64
	StrictMode         bool
	StrictTableAcl     bool
}

type ConnectionKiller

type ConnectionKiller struct {
	// contains filtered or unexported fields
}

ConnectionKiller is used for killing MySQL connections

func NewConnectionKiller

func NewConnectionKiller(poolSize int, idleTimeout time.Duration) *ConnectionKiller

NewConnectionKiller creates a new ConnectionKiller

func (*ConnectionKiller) Close

func (ck *ConnectionKiller) Close()

Close closes the underlying connection pool

func (*ConnectionKiller) Kill

func (ck *ConnectionKiller) Kill(connID int64) error

Kill kills the specified connection

func (*ConnectionKiller) Open

func (ck *ConnectionKiller) Open(ConnFactory dbconnpool.CreateConnectionFunc)

Open opens the connection pool used to kill other connections

func (*ConnectionKiller) SetIdleTimeout

func (ck *ConnectionKiller) SetIdleTimeout(idleTimeout time.Duration)

SetIdleTimeout sets the idle timeout for the underlying connection pool

type Consolidator

type Consolidator struct {
	// contains filtered or unexported fields
}

Consolidator consolidates duplicate queries from executing simulaneously and shares results between them.

func NewConsolidator

func NewConsolidator() *Consolidator

NewConsolidator creates a new Consolidator

func (*Consolidator) Create

func (co *Consolidator) Create(sql string) (r *Result, created bool)

Create adds a query to currently executing queries and acquires a lock on its Result if it is not already present. If the query is a duplicate, Create returns false.

func (*Consolidator) ServeHTTP

func (co *Consolidator) ServeHTTP(response http.ResponseWriter, request *http.Request)

type CreateCacheFunc

type CreateCacheFunc func() (*memcache.Connection, error)

type DirtyKeys

type DirtyKeys map[string]bool

func (DirtyKeys) Delete

func (dk DirtyKeys) Delete(key string) bool

Delete just keeps track of what needs to be deleted

type ExecPlan

type ExecPlan struct {
	*planbuilder.ExecPlan
	TableInfo  *TableInfo
	Fields     []mproto.Field
	Rules      *QueryRules
	Authorized tableacl.ACL

	QueryCount int64
	Time       time.Duration
	RowCount   int64
	ErrorCount int64
	// contains filtered or unexported fields
}

func (*ExecPlan) AddStats

func (ep *ExecPlan) AddStats(queryCount int64, duration time.Duration, rowCount, errorCount int64)

func (*ExecPlan) Size

func (*ExecPlan) Size() int

func (*ExecPlan) Stats

func (ep *ExecPlan) Stats() (queryCount int64, duration time.Duration, rowCount, errorCount int64)

type GenericCache

type GenericCache struct {
	// contains filtered or unexported fields
}

func NewGenericCache

func NewGenericCache(cachePool *CachePool) *GenericCache

func (*GenericCache) Get

func (gc *GenericCache) Get(key string) (value []byte, err error)

func (*GenericCache) PurgeCache

func (gc *GenericCache) PurgeCache()

func (*GenericCache) Set

func (gc *GenericCache) Set(key string, flags uint16, timeout uint64, value []byte)

type MemcacheStats

type MemcacheStats struct {
	// contains filtered or unexported fields
}

MemcacheStats exports the Memcache internal stats through stats package.

func NewMemcacheStats

func NewMemcacheStats(cachePool *CachePool) *MemcacheStats

NewMemcacheStats creates a new MemcacheStats based on given CachePool.

func (*MemcacheStats) Close

func (s *MemcacheStats) Close()

Close clears the variable values.

func (*MemcacheStats) Open

func (s *MemcacheStats) Open()

Open provides a common function API, and does nothing.

type Operator

type Operator int

Operator represents the list of operators.

type QueryDetail

type QueryDetail struct {
	// contains filtered or unexported fields
}

QueryDetail is a simple wrapper for Query, Context and PoolConnection

func NewQueryDetail

func NewQueryDetail(query *proto.Query, context context.Context, connID int64) *QueryDetail

NewQueryDetail creates a new QueryDetail

type QueryDetailzRow

type QueryDetailzRow struct {
	Query             string
	ContextHTML       template.HTML
	Start             time.Time
	Duration          time.Duration
	SessionID         int64
	TransactionID     int64
	ConnID            int64
	State             string
	ShowTerminateLink bool
}

QueryDetailzRow is used for rendering QueryDetail in a template

type QueryEngine

type QueryEngine struct {
	// contains filtered or unexported fields
}

QueryEngine implements the core functionality of tabletserver. It assumes that no requests will be sent to it before Open is called and succeeds. Shutdown is done in the following order:

WaitForTxEmpty: There should be no more new calls to Begin once this function is called. This will return when there are no more pending transactions.

Close: There should be no more pending queries when this function is called.

Functions of QueryEngine do not return errors. They instead panic with NewTabletError as the error type. TODO(sougou): Switch to error return scheme.

func NewQueryEngine

func NewQueryEngine(config Config) *QueryEngine

NewQueryEngine creates a new QueryEngine. This is a singleton class. You must call this only once.

func (*QueryEngine) Begin

func (qe *QueryEngine) Begin(logStats *SQLQueryStats) int64

Begin begins a transaction.

func (*QueryEngine) Close

func (qe *QueryEngine) Close()

Close must be called to shut down QueryEngine. You must ensure that no more queries will be sent before calling Close.

func (*QueryEngine) Commit

func (qe *QueryEngine) Commit(logStats *SQLQueryStats, transactionID int64)

Commit commits the specified transaction.

func (*QueryEngine) Execute

func (qe *QueryEngine) Execute(logStats *SQLQueryStats, query *proto.Query) (reply *mproto.QueryResult)

Execute executes the specified query and returns its result.

func (*QueryEngine) InvalidateForDDL

func (qe *QueryEngine) InvalidateForDDL(ddlInvalidate *proto.DDLInvalidate)

InvalidateForDDL performs schema and rowcache changes for the ddl.

func (*QueryEngine) InvalidateForDml

func (qe *QueryEngine) InvalidateForDml(dml *proto.DmlType)

InvalidateForDml performs rowcache invalidations for the dml.

func (*QueryEngine) Open

func (qe *QueryEngine) Open(dbconfig *dbconfigs.DBConfig, schemaOverrides []SchemaOverride, qrs *QueryRules, mysqld *mysqlctl.Mysqld)

Open must be called before sending requests to QueryEngine.

func (*QueryEngine) Rollback

func (qe *QueryEngine) Rollback(logStats *SQLQueryStats, transactionID int64)

Rollback rolls back the specified transaction.

func (*QueryEngine) StreamExecute

func (qe *QueryEngine) StreamExecute(logStats *SQLQueryStats, query *proto.Query, sendReply func(*mproto.QueryResult) error)

StreamExecute executes the query and streams its result. The first QueryResult will have Fields set (and Rows nil) The subsequent QueryResult will have Rows set (and Fields nil)

func (*QueryEngine) WaitForTxEmpty

func (qe *QueryEngine) WaitForTxEmpty()

WaitForTxEmpty must be called before calling Close. Before calling WaitForTxEmpty, you must ensure that there will be no more calls to Begin.

type QueryList

type QueryList struct {
	// contains filtered or unexported fields
}

QueryList holds a thread safe list of QueryDetails

func NewQueryList

func NewQueryList(connKiller *ConnectionKiller) *QueryList

NewQueryList creates a new QueryList

func (*QueryList) Add

func (ql *QueryList) Add(qd *QueryDetail)

Add adds a QueryDetail to QueryList

func (*QueryList) GetQueryzRows

func (ql *QueryList) GetQueryzRows() []QueryDetailzRow

GetQueryzRows returns a list of QueryDetailzRow sorted by start time

func (*QueryList) Remove

func (ql *QueryList) Remove(qd *QueryDetail)

Remove removes a QueryDetail from QueryList

func (*QueryList) Terminate

func (ql *QueryList) Terminate(connID int64) error

Terminate updates the query status and kills the connection

func (*QueryList) TerminateAll

func (ql *QueryList) TerminateAll()

TerminateAll terminates all queries and kills the MySQL connections

type QueryRule

type QueryRule struct {
	Description string
	Name        string
	// contains filtered or unexported fields
}

QueryRule represents one rule (conditions-action). Name is meant to uniquely identify a rule. Description is a human readable comment that describes the rule. For a QueryRule to fire, all conditions of the QueryRule have to match. For example, an empty QueryRule will match all requests. Every QueryRule has an associated Action. If all the conditions of the QueryRule are met, then the Action is triggerred.

func NewQueryRule

func NewQueryRule(description, name string, act Action) (qr *QueryRule)

NewQueryRule creates a new QueryRule.

func (*QueryRule) AddBindVarCond

func (qr *QueryRule) AddBindVarCond(name string, onAbsent, onMismatch bool, op Operator, value interface{}) error

AddBindVarCond adds a bind variable restriction to the QueryRule. All bind var conditions have to be satisfied for the QueryRule to be a match. name represents the name (not regexp) of the bind variable. onAbsent specifies the value of the condition if the bind variable is absent. onMismatch specifies the value of the condition if there's a type mismatch on the condition. For inequalities, the bindvar is the left operand and the value in the condition is the right operand: bindVar Operator value. Value & operator rules Type Operators Bindvar nil NOOP any type uint64 EQ, NE, LT, GE, GT, LE whole numbers int64 EQ, NE, LT, GE, GT, LE whole numbers string EQ, NE, LT, GE, GT, LE, MATCH, NOMATCH []byte, string KeyRange IN, NOTIN whole numbers whole numbers can be: int, int8, int16, int32, int64, uint64

func (*QueryRule) AddPlanCond

func (qr *QueryRule) AddPlanCond(planType planbuilder.PlanType)

AddPlanCond adds to the list of plans that can be matched for the rule to fire. This function acts as an OR: Any plan id match is considered a match.

func (*QueryRule) AddTableCond

func (qr *QueryRule) AddTableCond(tableName string)

AddTableCond adds to the list of tableNames that can be matched for the rule to fire. This function acts as an OR: Any tableName match is considered a match.

func (*QueryRule) Copy

func (qr *QueryRule) Copy() (newqr *QueryRule)

Copy performs a deep copy of a QueryRule.

func (*QueryRule) SetIPCond

func (qr *QueryRule) SetIPCond(pattern string) (err error)

SetIPCond adds a regular expression condition for the client IP. It has to be a full match (not substring).

func (*QueryRule) SetQueryCond

func (qr *QueryRule) SetQueryCond(pattern string) (err error)

SetQueryCond adds a regular expression condition for the query.

func (*QueryRule) SetUserCond

func (qr *QueryRule) SetUserCond(pattern string) (err error)

SetUserCond adds a regular expression condition for the user name used by the client.

type QueryRules

type QueryRules struct {
	// contains filtered or unexported fields
}

QueryRules is used to store and execute rules for the tabletserver.

func GetQueryRules

func GetQueryRules() (qrs *QueryRules)

func LoadCustomRules

func LoadCustomRules() (qrs *QueryRules)

LoadCustomRules returns custom rules as specified by the command line flags.

func NewQueryRules

func NewQueryRules() *QueryRules

NewQueryRules creates a new QueryRules.

func (*QueryRules) Add

func (qrs *QueryRules) Add(qr *QueryRule)

Add adds a QueryRule to QueryRules. It does not check for duplicates.

func (*QueryRules) Copy

func (qrs *QueryRules) Copy() (newqrs *QueryRules)

Copy performs a deep copy of QueryRules. A nil input produces a nil output.

func (*QueryRules) Delete

func (qrs *QueryRules) Delete(name string) (qr *QueryRule)

Delete deletes a QueryRule by name and returns the rule that was deleted. It returns nil if the rule was not found.

func (*QueryRules) Find

func (qrs *QueryRules) Find(name string) (qr *QueryRule)

Find finds the first occurrence of a QueryRule by matching the Name field. It returns nil if the rule was not found.

func (*QueryRules) UnmarshalJSON

func (qrs *QueryRules) UnmarshalJSON(data []byte) (err error)

type RCResult

type RCResult struct {
	Row []sqltypes.Value
	Cas uint64
}

type Result

type Result struct {
	Result *proto.QueryResult
	Err    error
	// contains filtered or unexported fields
}

Result is a wrapper for QueryResult of a query.

func (*Result) Broadcast

func (rs *Result) Broadcast()

Broadcast removes the entry from current queries and releases the lock on its Result. Broadcast should be invoked when original query completes execution.

func (*Result) Wait

func (rs *Result) Wait()

Wait waits for the original query to complete execution. Wait should be invoked for duplicate queries.

type RowCache

type RowCache struct {
	// contains filtered or unexported fields
}

func NewRowCache

func NewRowCache(tableInfo *TableInfo, cachePool *CachePool) *RowCache

func (*RowCache) Delete

func (rc *RowCache) Delete(key string)

func (*RowCache) Get

func (rc *RowCache) Get(keys []string) (results map[string]RCResult)

func (*RowCache) Set

func (rc *RowCache) Set(key string, row []sqltypes.Value, cas uint64)

type RowCacheConfig

type RowCacheConfig struct {
	Binary      string
	Memory      int
	Socket      string
	TcpPort     int
	Connections int
	Threads     int
	LockPaged   bool
}

func (*RowCacheConfig) GetSubprocessFlags

func (c *RowCacheConfig) GetSubprocessFlags() []string

type RowcacheInvalidator

type RowcacheInvalidator struct {
	Timestamp sync2.AtomicInt64
	GroupId   sync2.AtomicInt64
	// contains filtered or unexported fields
}

RowcacheInvalidator runs the service to invalidate the rowcache based on binlog events.

func NewRowcacheInvalidator

func NewRowcacheInvalidator(qe *QueryEngine) *RowcacheInvalidator

NewRowcacheInvalidator creates a new RowcacheInvalidator. Just like QueryEngine, this is a singleton class. You must call this only once.

func (*RowcacheInvalidator) Close

func (rci *RowcacheInvalidator) Close()

Close terminates the invalidation loop. It returns only of the loop has terminated.

func (*RowcacheInvalidator) Open

func (rci *RowcacheInvalidator) Open(dbname string, mysqld *mysqlctl.Mysqld)

Open runs the invalidation loop.

type SQLQueryStats

type SQLQueryStats struct {
	Method        string
	PlanType      string
	OriginalSql   string
	BindVariables map[string]interface{}

	RowsAffected         int
	NumberOfQueries      int
	StartTime            time.Time
	EndTime              time.Time
	MysqlResponseTime    time.Duration
	WaitingForConnection time.Duration
	CacheHits            int64
	CacheAbsent          int64
	CacheMisses          int64
	CacheInvalidations   int64
	QuerySources         byte
	Rows                 [][]sqltypes.Value
	TransactionID        int64
	// contains filtered or unexported fields
}

func (*SQLQueryStats) AddRewrittenSql

func (stats *SQLQueryStats) AddRewrittenSql(sql string)

func (*SQLQueryStats) ContextHTML

func (log *SQLQueryStats) ContextHTML() template.HTML

func (*SQLQueryStats) FmtBindVariables

func (stats *SQLQueryStats) FmtBindVariables(full bool) string

FmtBindVariables returns the map of bind variables as JSON. For values that are strings or byte slices it only reports their type and length.

func (*SQLQueryStats) FmtQuerySources

func (stats *SQLQueryStats) FmtQuerySources() string

FmtQuerySources returns a comma separated list of query sources. If there were no query sources, it returns the string "none".

func (*SQLQueryStats) Format

func (log *SQLQueryStats) Format(params url.Values) string

String returns a tab separated list of logged fields.

func (*SQLQueryStats) RemoteAddr

func (log *SQLQueryStats) RemoteAddr() string

func (*SQLQueryStats) RewrittenSql

func (stats *SQLQueryStats) RewrittenSql() string

RewrittenSql returns a semicolon separated list of SQL statements that were executed.

func (*SQLQueryStats) Send

func (stats *SQLQueryStats) Send()

func (*SQLQueryStats) SizeOfResponse

func (stats *SQLQueryStats) SizeOfResponse() int

SizeOfResponse returns the approximate size of the response in bytes (this does not take in account BSON encoding). It will return 0 for streaming requests.

func (*SQLQueryStats) TotalTime

func (stats *SQLQueryStats) TotalTime() time.Duration

func (*SQLQueryStats) Username

func (log *SQLQueryStats) Username() string

type SchemaInfo

type SchemaInfo struct {
	// contains filtered or unexported fields
}

func NewSchemaInfo

func NewSchemaInfo(queryCacheSize int, reloadTime time.Duration, idleTimeout time.Duration) *SchemaInfo

func (*SchemaInfo) Close

func (si *SchemaInfo) Close()

func (*SchemaInfo) CreateTable

func (si *SchemaInfo) CreateTable(tableName string)

func (*SchemaInfo) DropTable

func (si *SchemaInfo) DropTable(tableName string)

func (*SchemaInfo) GetPlan

func (si *SchemaInfo) GetPlan(logStats *SQLQueryStats, sql string) (plan *ExecPlan)

func (*SchemaInfo) GetRules

func (si *SchemaInfo) GetRules() (qrs *QueryRules)

func (*SchemaInfo) GetSchema

func (si *SchemaInfo) GetSchema() []*schema.Table

func (*SchemaInfo) GetStreamPlan

func (si *SchemaInfo) GetStreamPlan(sql string) *planbuilder.ExecPlan

GetStreamPlan is similar to GetPlan, but doesn't use the cache and doesn't enforce a limit. It also just returns the parsed query.

func (*SchemaInfo) GetTable

func (si *SchemaInfo) GetTable(tableName string) *TableInfo

func (*SchemaInfo) Open

func (si *SchemaInfo) Open(connFactory dbconnpool.CreateConnectionFunc, schemaOverrides []SchemaOverride, cachePool *CachePool, qrs *QueryRules, strictMode bool)

func (*SchemaInfo) Reload

func (si *SchemaInfo) Reload()

func (*SchemaInfo) ServeHTTP

func (si *SchemaInfo) ServeHTTP(response http.ResponseWriter, request *http.Request)

func (*SchemaInfo) SetQueryCacheSize

func (si *SchemaInfo) SetQueryCacheSize(size int)

func (*SchemaInfo) SetReloadTime

func (si *SchemaInfo) SetReloadTime(reloadTime time.Duration)

func (*SchemaInfo) SetRules

func (si *SchemaInfo) SetRules(qrs *QueryRules)

type SchemaOverride

type SchemaOverride struct {
	Name      string
	PKColumns []string
	Cache     *struct {
		Type   string
		Prefix string
		Table  string
	}
}

type SqlQuery

type SqlQuery struct {
	// contains filtered or unexported fields
}

SqlQuery implements the RPC interface for the query service.

var SqlQueryRpcService *SqlQuery

func NewSqlQuery

func NewSqlQuery(config Config) *SqlQuery

NewSqlQuery creates an instance of SqlQuery. Only one instance of SqlQuery can be created per process.

func (*SqlQuery) Begin

func (sq *SqlQuery) Begin(context context.Context, session *proto.Session, txInfo *proto.TransactionInfo) (err error)

Begin starts a new transaction. This is allowed only if the state is SERVING.

func (*SqlQuery) Commit

func (sq *SqlQuery) Commit(context context.Context, session *proto.Session) (err error)

Commit commits the specified transaction.

func (*SqlQuery) Execute

func (sq *SqlQuery) Execute(context context.Context, query *proto.Query, reply *mproto.QueryResult) (err error)

Execute executes the query and returns the result as response.

func (*SqlQuery) ExecuteBatch

func (sq *SqlQuery) ExecuteBatch(context context.Context, queryList *proto.QueryList, reply *proto.QueryResultList) (err error)

ExecuteBatch executes a group of queries and returns their results as a list. ExecuteBatch can be called for an existing transaction, or it can also begin its own transaction, in which case it's expected to commit it also.

func (*SqlQuery) GetSessionId

func (sq *SqlQuery) GetSessionId(sessionParams *proto.SessionParams, sessionInfo *proto.SessionInfo) error

GetSessionId returns a sessionInfo response if the state is SERVING.

func (*SqlQuery) GetState

func (sq *SqlQuery) GetState() string

GetState returns the name of the current SqlQuery state.

func (*SqlQuery) Rollback

func (sq *SqlQuery) Rollback(context context.Context, session *proto.Session) (err error)

Rollback rollsback the specified transaction.

func (*SqlQuery) StreamExecute

func (sq *SqlQuery) StreamExecute(context context.Context, query *proto.Query, sendReply func(*mproto.QueryResult) error) (err error)

StreamExecute executes the query and streams the result. The first QueryResult will have Fields set (and Rows nil). The subsequent QueryResult will have Rows set (and Fields nil).

type SqlQueryRegisterFunction

type SqlQueryRegisterFunction func(*SqlQuery)

type TableInfo

type TableInfo struct {
	*schema.Table
	Cache *RowCache
	// contains filtered or unexported fields
}

func NewTableInfo

func NewTableInfo(conn dbconnpool.PoolConnection, tableName string, tableType string, createTime sqltypes.Value, comment string, cachePool *CachePool) (ti *TableInfo)

func (*TableInfo) SetPK

func (ti *TableInfo) SetPK(colnames []string) error

func (*TableInfo) Stats

func (ti *TableInfo) Stats() (hits, absent, misses, invalidations int64)

func (*TableInfo) StatsJSON

func (ti *TableInfo) StatsJSON() string

type TabletError

type TabletError struct {
	ErrorType int
	Message   string
	SqlError  int
}

func NewTabletError

func NewTabletError(errorType int, format string, args ...interface{}) *TabletError

func NewTabletErrorSql

func NewTabletErrorSql(errorType int, err error) *TabletError

func (*TabletError) Error

func (te *TabletError) Error() string

func (*TabletError) RecordStats

func (te *TabletError) RecordStats()

type TxConnection

type TxConnection struct {
	dbconnpool.PoolConnection
	TransactionID int64

	StartTime time.Time
	EndTime   time.Time

	Queries    []string
	Conclusion string
	// contains filtered or unexported fields
}

func (*TxConnection) DirtyKeys

func (txc *TxConnection) DirtyKeys(tableName string) DirtyKeys

func (*TxConnection) Format

func (txc *TxConnection) Format(params url.Values) string

func (*TxConnection) RecordQuery

func (txc *TxConnection) RecordQuery(query string)

func (*TxConnection) Recycle

func (txc *TxConnection) Recycle()

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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