Documentation
¶
Index ¶
- Constants
- Variables
- func BinlogTransactionToProto(bt *BinlogTransaction) *pb.BinlogTransaction
- func BlpPositionListToProto(l *BlpPositionList) []*pbt.BlpPosition
- func BlpPositionToProto(b *BlpPosition) *pbt.BlpPosition
- func StatementToProto(s *Statement) *pb.BinlogTransaction_Statement
- func StreamEventToProto(s *StreamEvent) *pb.StreamEvent
- type BinlogEvent
- type BinlogFormat
- type BinlogTransaction
- type BlpPosition
- type BlpPositionList
- type KeyRangeRequest
- type Query
- type Statement
- type StreamEvent
- type TablesRequest
- type UpdateStream
- type UpdateStreamRequest
Constants ¶
const ( BL_UNRECOGNIZED = iota BL_BEGIN BL_COMMIT BL_ROLLBACK BL_DML BL_DDL BL_SET )
Valid statement types in the binlogs.
Variables ¶
var BL_CATEGORY_NAMES = map[int]string{ BL_UNRECOGNIZED: "BL_UNRECOGNIZED", BL_BEGIN: "BL_BEGIN", BL_COMMIT: "BL_COMMIT", BL_ROLLBACK: "BL_ROLLBACK", BL_DML: "BL_DML", BL_DDL: "BL_DDL", BL_SET: "BL_SET", }
Functions ¶
func BinlogTransactionToProto ¶
func BinlogTransactionToProto(bt *BinlogTransaction) *pb.BinlogTransaction
BinlogTransactionToProto converts a BinlogTransaction to a proto3
func BlpPositionListToProto ¶
func BlpPositionListToProto(l *BlpPositionList) []*pbt.BlpPosition
BlpPositionListToProto converts a BlpPositionList to a proto3
func BlpPositionToProto ¶
func BlpPositionToProto(b *BlpPosition) *pbt.BlpPosition
BlpPositionToProto converts a BlpPosition to a proto3
func StatementToProto ¶
func StatementToProto(s *Statement) *pb.BinlogTransaction_Statement
StatementToProto converts a Statement to a proto3
func StreamEventToProto ¶
func StreamEventToProto(s *StreamEvent) *pb.StreamEvent
StreamEventToProto converts a StreamEvent to a proto3
Types ¶
type BinlogEvent ¶
type BinlogEvent interface {
// IsValid returns true if the underlying data buffer contains a valid event.
// This should be called first on any BinlogEvent, and other methods should
// only be called if this one returns true. This ensures you won't get panics
// due to bounds checking on the byte array.
IsValid() bool
// IsFormatDescription returns true if this is a FORMAT_DESCRIPTION_EVENT.
IsFormatDescription() bool
// IsQuery returns true if this is a QUERY_EVENT, which encompasses all SQL
// statements.
IsQuery() bool
// IsXID returns true if this is an XID_EVENT, which is an alternate form of
// COMMIT.
IsXID() bool
// IsGTID returns true if this is a GTID_EVENT.
IsGTID() bool
// IsRotate returns true if this is a ROTATE_EVENT.
IsRotate() bool
// IsIntVar returns true if this is an INTVAR_EVENT.
IsIntVar() bool
// IsRand returns true if this is a RAND_EVENT.
IsRand() bool
// HasGTID returns true if this event contains a GTID. That could either be
// because it's a GTID_EVENT (MariaDB, MySQL 5.6), or because it is some
// arbitrary event type that has a GTID in the header (Google MySQL).
HasGTID(BinlogFormat) bool
// Timestamp returns the timestamp from the event header.
Timestamp() uint32
// Format returns a BinlogFormat struct based on the event data.
// This is only valid if IsFormatDescription() returns true.
Format() (BinlogFormat, error)
// GTID returns the GTID from the event.
// This is only valid if HasGTID() returns true.
GTID(BinlogFormat) (myproto.GTID, error)
// IsBeginGTID returns true if this is a GTID_EVENT that also serves as a
// BEGIN statement. Otherwise, the GTID_EVENT is just providing the GTID for
// the following QUERY_EVENT.
// This is only valid if IsGTID() returns true.
IsBeginGTID(BinlogFormat) bool
// Query returns a Query struct representing data from a QUERY_EVENT.
// This is only valid if IsQuery() returns true.
Query(BinlogFormat) (Query, error)
// IntVar returns the name and value of the variable for an INTVAR_EVENT.
// This is only valid if IsIntVar() returns true.
IntVar(BinlogFormat) (string, uint64, error)
// Rand returns the two seed values for a RAND_EVENT.
// This is only valid if IsRand() returns true.
Rand(BinlogFormat) (uint64, uint64, error)
// StripChecksum returns the checksum and a modified event with the checksum
// stripped off, if any. If there is no checksum, it returns the same event
// and a nil checksum.
StripChecksum(BinlogFormat) (ev BinlogEvent, checksum []byte, err error)
}
BinlogEvent represents a single event from a raw MySQL binlog dump stream. The implementation is provided by each supported flavor in go/vt/mysqlctl.
BinlogStreamer receives these events through a mysqlctl.SlaveConnection and processes them, grouping statements into BinlogTransactions as appropriate.
Methods that only access header fields can't fail as long as IsValid() returns true, so they have a single return value. Methods that might fail even when IsValid() is true return an error value.
Methods that require information from the initial FORMAT_DESCRIPTION_EVENT will have a BinlogFormat parameter.
type BinlogFormat ¶
type BinlogFormat struct {
// FormatVersion is the version number of the binlog file format.
FormatVersion uint16
// ServerVersion is the name of the MySQL server version.
ServerVersion string
// HeaderLength is the size in bytes of event headers other than FORMAT_DESCRIPTION_EVENT.
HeaderLength byte
// ChecksumAlgorithm is the ID number of the binlog checksum algorithm.
ChecksumAlgorithm byte
}
BinlogFormat contains relevant data from the FORMAT_DESCRIPTION_EVENT. This structure is passed to subsequent event types to let them know how to parse themselves.
func (BinlogFormat) IsZero ¶
func (f BinlogFormat) IsZero() bool
IsZero returns true if the BinlogFormat has not been initialized.
type BinlogTransaction ¶
BinlogTransaction represents one transaction as read from the binlog. Timestamp is set if the first statement was something like 'SET TIMESTAMP=...'
func ProtoToBinlogTransaction ¶
func ProtoToBinlogTransaction(bt *pb.BinlogTransaction) *BinlogTransaction
ProtoToBinlogTransaction converts a proto to a BinlogTransaction
func (*BinlogTransaction) MarshalBson ¶
func (binlogTransaction *BinlogTransaction) MarshalBson(buf *bytes2.ChunkedWriter, key string)
MarshalBson bson-encodes BinlogTransaction.
func (*BinlogTransaction) UnmarshalBson ¶
func (binlogTransaction *BinlogTransaction) UnmarshalBson(buf *bytes.Buffer, kind byte)
UnmarshalBson bson-decodes into BinlogTransaction.
type BlpPosition ¶
type BlpPosition struct {
Uid uint32
Position myproto.ReplicationPosition
}
BlpPosition describes a binlog player position to start from.
func ProtoToBlpPosition ¶
func ProtoToBlpPosition(b *pbt.BlpPosition) *BlpPosition
ProtoToBlpPosition converts a proto to a BlpPosition
func (*BlpPosition) MarshalBson ¶
func (blpPosition *BlpPosition) MarshalBson(buf *bytes2.ChunkedWriter, key string)
MarshalBson bson-encodes BlpPosition.
func (*BlpPosition) UnmarshalBson ¶
func (blpPosition *BlpPosition) UnmarshalBson(buf *bytes.Buffer, kind byte)
UnmarshalBson bson-decodes into BlpPosition.
type BlpPositionList ¶
type BlpPositionList struct {
Entries []BlpPosition
}
BlpPositionList is a list of BlpPosition, not sorted.
func ProtoToBlpPositionList ¶
func ProtoToBlpPositionList(l []*pbt.BlpPosition) *BlpPositionList
ProtoToBlpPositionList converts a proto to a BlpPositionList
func (*BlpPositionList) FindBlpPositionById ¶
func (bpl *BlpPositionList) FindBlpPositionById(id uint32) (*BlpPosition, error)
FindBlpPositionById returns the BlpPosition with the given id, or error
func (*BlpPositionList) MarshalBson ¶
func (blpPositionList *BlpPositionList) MarshalBson(buf *bytes2.ChunkedWriter, key string)
MarshalBson bson-encodes BlpPositionList.
func (*BlpPositionList) UnmarshalBson ¶
func (blpPositionList *BlpPositionList) UnmarshalBson(buf *bytes.Buffer, kind byte)
UnmarshalBson bson-decodes into BlpPositionList.
type KeyRangeRequest ¶
type KeyRangeRequest struct {
Position string
KeyspaceIdType key.KeyspaceIdType
KeyRange key.KeyRange
Charset *mproto.Charset
}
KeyRangeRequest is used to make a request for StreamKeyRange.
type Statement ¶
Statement represents one statement as read from the binlog.
func ProtoToStatement ¶
func ProtoToStatement(s *pb.BinlogTransaction_Statement) Statement
ProtoToStatement converts a proto to a Statement
func (*Statement) MarshalBson ¶
func (statement *Statement) MarshalBson(buf *bytes2.ChunkedWriter, key string)
MarshalBson bson-encodes Statement.
type StreamEvent ¶
type StreamEvent struct {
// Category can be "DML", "DDL", "ERR" or "POS"
Category string
// TableName, PrimaryKeyFields and PrimaryKeyValues are set for DML
TableName string
PrimaryKeyFields []mproto.Field
PrimaryKeyValues [][]sqltypes.Value
// Sql is set for DDL or ERR
Sql string
// Timestamp is set for DML, DDL or ERR
Timestamp int64
// TransactionID is set for POS
TransactionID string
}
StreamEvent represents one event for the update stream.
func ProtoToStreamEvent ¶
func ProtoToStreamEvent(s *pb.StreamEvent) *StreamEvent
ProtoToStreamEvent converts a proto to a StreamEvent
func (*StreamEvent) MarshalBson ¶
func (streamEvent *StreamEvent) MarshalBson(buf *bytes2.ChunkedWriter, key string)
MarshalBson bson-encodes StreamEvent.
func (*StreamEvent) UnmarshalBson ¶
func (streamEvent *StreamEvent) UnmarshalBson(buf *bytes.Buffer, kind byte)
UnmarshalBson bson-decodes into StreamEvent.
type TablesRequest ¶
TablesRequest is used to make a request for StreamTables.
type UpdateStream ¶
type UpdateStream interface {
// ServeUpdateStream serves the query and streams the result
// for the full update stream
ServeUpdateStream(position string, sendReply func(reply *StreamEvent) error) error
// StreamKeyRange streams events related to a KeyRange only
StreamKeyRange(position string, keyspaceIdType key.KeyspaceIdType, keyRange *pb.KeyRange, charset *mproto.Charset, sendReply func(reply *BinlogTransaction) error) error
// StreamTables streams events related to a set of Tables only
StreamTables(position string, tables []string, charset *mproto.Charset, sendReply func(reply *BinlogTransaction) error) error
// HandlePanic should be called in a defer,
// first thing in the RPC implementation.
HandlePanic(*error)
}
UpdateStream is the interface for the server
type UpdateStreamRequest ¶
type UpdateStreamRequest struct {
Position string
}
UpdateStreamRequest is used to make a request for ServeUpdateStream.