Documentation
¶
Index ¶
Constants ¶
const ( CheckTypeNoCheck = CheckType(rrdb.CasCheckType_CT_NO_CHECK) // existence CheckTypeValueNotExist = CheckType(rrdb.CasCheckType_CT_VALUE_NOT_EXIST) // value is not exist CheckTypeValueNotExistOrEmpty = CheckType(rrdb.CasCheckType_CT_VALUE_NOT_EXIST_OR_EMPTY) // value is not exist or value is empty CheckTypeValueExist = CheckType(rrdb.CasCheckType_CT_VALUE_EXIST) // value is exist CheckTypeValueNotEmpty = CheckType(rrdb.CasCheckType_CT_VALUE_NOT_EMPTY) // value is exist and not empty // match CheckTypeMatchAnywhere = CheckType(rrdb.CasCheckType_CT_VALUE_MATCH_ANYWHERE) // operand matches anywhere in value CheckTypeMatchPrefix = CheckType(rrdb.CasCheckType_CT_VALUE_MATCH_PREFIX) // operand matches prefix in value CheckTypeMatchPostfix = CheckType(rrdb.CasCheckType_CT_VALUE_MATCH_POSTFIX) // operand matches postfix in value // bytes compare CheckTypeBytesLess = CheckType(rrdb.CasCheckType_CT_VALUE_BYTES_LESS) // bytes compare: value < operand CheckTypeBytesLessOrEqual = CheckType(rrdb.CasCheckType_CT_VALUE_BYTES_LESS_OR_EQUAL) // bytes compare: value <= operand CheckTypeBytesEqual = CheckType(rrdb.CasCheckType_CT_VALUE_BYTES_EQUAL) // bytes compare: value == operand CheckTypeBytesGreaterOrEqual = CheckType(rrdb.CasCheckType_CT_VALUE_BYTES_GREATER_OR_EQUAL) // bytes compare: value >= operand CheckTypeBytesGreater = CheckType(rrdb.CasCheckType_CT_VALUE_BYTES_GREATER) // bytes compare: value > operand // int compare: first transfer bytes to int64; then compare by int value CheckTypeIntLess = CheckType(rrdb.CasCheckType_CT_VALUE_INT_LESS) // int compare: value < operand CheckTypeIntLessOrEqual = CheckType(rrdb.CasCheckType_CT_VALUE_INT_LESS_OR_EQUAL) // int compare: value <= operand CheckTypeIntEqual = CheckType(rrdb.CasCheckType_CT_VALUE_INT_EQUAL) // int compare: value == operand CheckTypeIntGreaterOrEqual = CheckType(rrdb.CasCheckType_CT_VALUE_INT_GREATER_OR_EQUAL) // int compare: value >= operand CheckTypeIntGreater = CheckType(rrdb.CasCheckType_CT_VALUE_BYTES_GREATER) // int compare: value > operand )
The value checking types
const ( FilterTypeNoFilter = FilterType(rrdb.FilterType_FT_NO_FILTER) FilterTypeMatchAnywhere = FilterType(rrdb.FilterType_FT_MATCH_ANYWHERE) FilterTypeMatchPrefix = FilterType(rrdb.FilterType_FT_MATCH_PREFIX) FilterTypeMatchPostfix = FilterType(rrdb.FilterType_FT_MATCH_POSTFIX) )
Filter types
Variables ¶
var DefaultMultiGetOptions = &MultiGetOptions{ StartInclusive: true, StopInclusive: false, SortKeyFilter: Filter{ Type: FilterTypeNoFilter, Pattern: nil, }, MaxFetchCount: 100, MaxFetchSize: 100000, }
DefaultMultiGetOptions defines the defaults of MultiGetOptions.
Functions ¶
Types ¶
type CheckAndSetOptions ¶
type CheckAndSetOptions struct {
SetValueTTLSeconds int // time to live in seconds of the set value, 0 means no ttl.
ReturnCheckValue bool // if return the check value in results.
}
CheckAndSetOptions is the options of a CAS.
type CheckAndSetResult ¶
type CheckAndSetResult struct {
// true if set value succeed.
SetSucceed bool
// the actual value if set value failed; null means the actual value is not exist.
CheckValue []byte
// if the check value is exist; can be used only when checkValueReturned is true.
CheckValueExist bool
// return the check value if exist; can be used only when checkValueExist is true.
CheckValueReturned bool
}
CheckAndSetResult is the result of a CAS.
type Client ¶
type Client interface {
Close() error
// Open the specific pegasus table. If the table was opened before,
// it will reuse the previous connection to the table.
OpenTable(ctx context.Context, tableName string) (TableConnector, error)
}
Client manages the client sessions to the pegasus cluster specified by `Config`. In order to reuse the previous connections, it's recommended to use one singleton client in your program. The operations upon a client instance are thread-safe.
type Config ¶
type Config struct {
MetaServers []string `json:"meta_servers"`
}
Config is the configuration of pegasus client.
type Filter ¶
type Filter struct {
Type FilterType
Pattern []byte
}
Filter is used to filter based on the key.
type KeyValue ¶
type KeyValue struct {
SortKey, Value []byte
}
KeyValue is the returned type of MultiGet and MultiGetRange.
type MultiGetOptions ¶
type MultiGetOptions struct {
StartInclusive bool
StopInclusive bool
SortKeyFilter Filter
// Max count of k-v pairs to be fetched. MaxFetchCount <= 0 means no limit.
MaxFetchCount int
// Max size of k-v pairs to be fetched. MaxFetchSize <= 0 means no limit.
MaxFetchSize int
// Query order
Reverse bool
}
MultiGetOptions is the options for MultiGet and MultiGetRange, defaults to DefaultMultiGetOptions.
type OpType ¶
type OpType int
OpType is the type of operation that led to PError.
type PError ¶
type PError struct {
// Err is the error that occurred during the operation.
Err error
// The failed operation
Op OpType
}
PError is the return error type of all interfaces of pegasus client.
type Scanner ¶
type Scanner interface {
// Grabs the next entry.
Next(ctx context.Context) (completed bool, hashKey []byte, sortKey []byte, value []byte, err error)
Close() error
}
Scanner defines the interface of client-side scanning.
type ScannerOptions ¶
type ScannerOptions struct {
BatchSize int // internal buffer batch size
StartInclusive bool // if the startSortKey is included
StopInclusive bool // if the stopSortKey is included
HashKeyFilter Filter
SortKeyFilter Filter
NoValue bool // only fetch hash_key and sort_key, but not fetch value
}
ScannerOptions is the options for GetScanner and GetUnorderedScanners.
func NewScanOptions ¶
func NewScanOptions() *ScannerOptions
NewScanOptions returns the default ScannerOptions.
type TableConnector ¶
type TableConnector interface {
// Get retrieves the entry for `hashKey` + `sortKey`.
// Returns nil if no entry matches.
// `hashKey` : CAN'T be nil or empty.
// `sortKey` : CAN'T be nil but CAN be empty.
Get(ctx context.Context, hashKey []byte, sortKey []byte) ([]byte, error)
// Set the entry for `hashKey` + `sortKey` to `value`.
// If Set is called or `ttl` == 0, no data expiration is specified.
// `hashKey` : CAN'T be nil or empty.
// `sortKey` / `value` : CAN'T be nil but CAN be empty.
Set(ctx context.Context, hashKey []byte, sortKey []byte, value []byte) error
SetTTL(ctx context.Context, hashKey []byte, sortKey []byte, value []byte, ttl time.Duration) error
// Delete the entry for `hashKey` + `sortKey`.
// `hashKey` : CAN'T be nil or empty.
// `sortKey` : CAN'T be nil but CAN be empty.
Del(ctx context.Context, hashKey []byte, sortKey []byte) error
// MultiGet/MultiGetOpt retrieves the multiple entries for `hashKey` + `sortKeys[i]` atomically in one operation.
// MultiGet is identical to MultiGetOpt except that the former uses DefaultMultiGetOptions as `options`.
//
// If `sortKeys` are given empty or nil, all entries under `hashKey` will be retrieved.
// `hashKey` : CAN'T be nil or empty.
// `sortKeys[i]` : CAN'T be nil but CAN be empty.
//
// The returned key-value pairs are sorted by sort key in ascending order.
// Returns nil if no entries match.
// Returns true if all data is fetched, false if only partial data is fetched.
//
MultiGet(ctx context.Context, hashKey []byte, sortKeys [][]byte) ([]*KeyValue, bool, error)
MultiGetOpt(ctx context.Context, hashKey []byte, sortKeys [][]byte, options *MultiGetOptions) ([]*KeyValue, bool, error)
// MultiGetRange retrieves the multiple entries under `hashKey`, between range (`startSortKey`, `stopSortKey`),
// atomically in one operation.
//
// startSortKey: nil or len(startSortKey) == 0 means start from begin.
// stopSortKey: nil or len(stopSortKey) == 0 means stop to end.
// `hashKey` : CAN'T be nil.
//
// The returned key-value pairs are sorted by sort keys in ascending order.
// Returns nil if no entries match.
// Returns true if all data is fetched, false if only partial data is fetched.
//
MultiGetRange(ctx context.Context, hashKey []byte, startSortKey []byte, stopSortKey []byte) ([]*KeyValue, bool, error)
MultiGetRangeOpt(ctx context.Context, hashKey []byte, startSortKey []byte, stopSortKey []byte, options *MultiGetOptions) ([]*KeyValue, bool, error)
// MultiSet sets the multiple entries for `hashKey` + `sortKeys[i]` atomically in one operation.
// `hashKey` / `sortKeys` / `values` : CAN'T be nil or empty.
// `sortKeys[i]` / `values[i]` : CAN'T be nil but CAN be empty.
MultiSet(ctx context.Context, hashKey []byte, sortKeys [][]byte, values [][]byte) error
MultiSetOpt(ctx context.Context, hashKey []byte, sortKeys [][]byte, values [][]byte, ttl time.Duration) error
// MultiDel deletes the multiple entries under `hashKey` all in one operation.
// `hashKey` / `sortKeys` : CAN'T be nil or empty.
// `sortKeys[i]` : CAN'T be nil but CAN be empty.
MultiDel(ctx context.Context, hashKey []byte, sortKeys [][]byte) error
// Returns ttl(time-to-live) in seconds: -1 if ttl is not set; -2 if entry doesn't exist.
// `hashKey` : CAN'T be nil or empty.
// `sortKey` : CAN'T be nil but CAN be empty.
TTL(ctx context.Context, hashKey []byte, sortKey []byte) (int, error)
// Check value existence for the entry for `hashKey` + `sortKey`.
// `hashKey`: CAN'T be nil or empty.
Exist(ctx context.Context, hashKey []byte, sortKey []byte) (bool, error)
// Get Scanner for {startSortKey, stopSortKey} within hashKey.
// startSortKey: nil or len(startSortKey) == 0 means start from begin.
// stopSortKey: nil or len(stopSortKey) == 0 means stop to end.
// `hashKey`: CAN'T be nil or empty.
GetScanner(ctx context.Context, hashKey []byte, startSortKey []byte, stopSortKey []byte, options *ScannerOptions) (Scanner, error)
// Get Scanners for all data in pegasus, the count of scanners will
// be no more than maxSplitCount
GetUnorderedScanners(ctx context.Context, maxSplitCount int, options *ScannerOptions) ([]Scanner, error)
// Atomically check and set value by key from the cluster. The value will be set if and only if check passed.
// The sort key for checking and setting can be the same or different.
//
// `checkSortKey`: The sort key for checking.
// `setSortKey`: The sort key for setting.
// `checkOperand`:
CheckAndSet(ctx context.Context, hashKey []byte, checkSortKey []byte, checkType CheckType,
checkOperand []byte, setSortKey []byte, setValue []byte, options *CheckAndSetOptions) (*CheckAndSetResult, error)
// Returns the count of sortkeys under hashkey.
// `hashKey`: CAN'T be nil or empty.
SortKeyCount(ctx context.Context, hashKey []byte) (int64, error)
Close() error
}
TableConnector is used to communicate with single Pegasus table.
func ConnectTable ¶
func ConnectTable(ctx context.Context, tableName string, meta *session.MetaManager, replica *session.ReplicaManager) (TableConnector, error)
ConnectTable queries for the configuration of the given table, and set up connection to the replicas which the table locates on.