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.