forked from gitea/gitea
1
0
Fork 0
gitea/vendor/github.com/pingcap/go-themis/lock.go

59 lines
1.7 KiB
Go

package themis
import "github.com/pingcap/go-hbase"
// LockRole is the role of lock
type LockRole int
func (l LockRole) String() string {
if l == RolePrimary {
return "primary"
}
return "secondary"
}
const (
// RolePrimary means this row is primary
RolePrimary LockRole = iota
// RoleSecondary means this row is secondary
RoleSecondary
)
type Lock interface {
// SetCoordinate sets lock's coordinate
SetCoordinate(c *hbase.ColumnCoordinate)
// Coordinate returns the lock's coordinate
Coordinate() *hbase.ColumnCoordinate
// Timestamp returns startTs of the transction which owned this lock
Timestamp() uint64
// SetExpired sets the lock's expired status.
SetExpired(b bool)
// IsExpired returns if lock is expired.
IsExpired() bool
// Type returns the lock's type, Put or Delete
Type() hbase.Type
// Role returns LockRole, primary or secondary
Role() LockRole
// not used now
Context() interface{}
// valid only Role == Primary
Secondaries() []Lock
// Primary returns the primary lock of this lock
Primary() Lock
// Encode encodes the lock to byte slice
Encode() []byte
}
type LockManager interface {
// CleanLock if clean lock success, first return value is transction's commit
// timestamp, otherwise, the second return value is transction's primary
// lock.
CleanLock(c *hbase.ColumnCoordinate, prewriteTs uint64) (uint64, Lock, error)
// EraseLockAndData removes lock and data.
EraseLockAndData(c *hbase.ColumnCoordinate, prewriteTs uint64) error
// GetCommitTimestamp returns a committed transction's commit timestamp.
GetCommitTimestamp(c *hbase.ColumnCoordinate, prewriteTs uint64) (uint64, error)
// [startTs, endTs]
IsLockExists(c *hbase.ColumnCoordinate, startTs, endTs uint64) (bool, error)
}