Documentation
¶
Overview ¶
Package lockservice implements the lockserver functions.
Index ¶
Constants ¶
const ( ErrFileacquired = Error("file already acquired") ErrCantReleaseFile = Error("file cannot be released, wasn't locked before") ErrCheckAcquireFailure = Error("file is not acquired") ErrFileUnlocked = Error("file doesn't have a lock") )
Constant errors. Rule of thumb, all errors start with a small letter and end with no full stop.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type CheckAcquireRes ¶
type CheckAcquireRes struct {
Owner string `json:"owner"`
}
CheckAcquireRes is the response of a Checkacquire.
type Descriptors ¶
Descriptors describe the type of data that a lock acquiring component must describe.
type LockCheckRequest ¶
type LockCheckRequest struct {
FileID string `json:"fileID"`
}
LockCheckRequest is an instance of a lock check request.
type LockDescriptor ¶
LockDescriptor implements the Descriptors interface. Many descriptors can be added to this struct and the ID can be a combination of all those descriptors.
func NewLockDescriptor ¶
func NewLockDescriptor(FileID, UserID string) *LockDescriptor
NewLockDescriptor returns an instance of the LockDescriptor.
func (*LockDescriptor) ID ¶
func (sd *LockDescriptor) ID() string
ID represents the distinguishable ID of the descriptor.
func (*LockDescriptor) Owner ¶
func (sd *LockDescriptor) Owner() string
Owner represents the distinguishable ID of the entity that holds the lock for FileID.
type LockRequest ¶
LockRequest is an instance of a request for a lock.
type LockService ¶
type LockService interface {
// Acquire allows the service to set a lock on the given descriptors.
// An error is generated if the same isn't possible for any reason,
// including already existing locks on the descriptor.
Acquire(Descriptors) error
// Release allows the service to release the lock on the given descriptors.
// An error is generated if the same isn't possible for any reason,
// including releasing locks on non-acquired descriptors.
Release(Descriptors) error
// CheckAcquired checks whether a lock has been acquired on the given descriptor.
// The function returns true if the lock has been acquired on the component.
// It also returns the owner of the lock on query.
CheckAcquired(Descriptors) (string, bool)
// CheckReleased checks whether a lock has been released (or not acquired) on the
// given component. Returns true if there are no locks on the descriptor.
CheckReleased(Descriptors) bool
}
LockService describes a lock service component that enables maintaining a set of locks. This service is a standalone component that can be implemented on any server component, distributed or not.
type Object ¶
type Object interface {
ID() string
}
Object describes any object that can be used with the lockservice.
type ObjectDescriptor ¶
type ObjectDescriptor struct {
ObjectID string
}
ObjectDescriptor describes the object that is subjected to lock operations.
func NewObjectDescriptor ¶
func NewObjectDescriptor(ObjectID string) *ObjectDescriptor
NewObjectDescriptor returns an instance of the ObjectDescriptor.
func (*ObjectDescriptor) ID ¶
func (od *ObjectDescriptor) ID() string
ID returns the ID related to the object.
type SafeLockMap ¶
SafeLockMap is the lockserver's data structure
type SimpleConfig ¶
SimpleConfig implements Config.
func NewSimpleConfig ¶
func NewSimpleConfig(IPAddr, PortAddr string) *SimpleConfig
NewSimpleConfig returns an instance of the SimpleConfig.
func (*SimpleConfig) IP ¶
func (scfg *SimpleConfig) IP() string
IP returns the IP from the SimpleConfig.
func (*SimpleConfig) Port ¶
func (scfg *SimpleConfig) Port() string
Port returns the port from SimpleConfig.
type SimpleLockService ¶
type SimpleLockService struct {
// contains filtered or unexported fields
}
SimpleLockService is a lock service that implements LockService. It uses a golang map to maintain the locks of the descriptors. It can acquire and release locks and has an in-built logger.
func NewSimpleLockService ¶
func NewSimpleLockService(log zerolog.Logger) *SimpleLockService
NewSimpleLockService creates and returns a new lock service ready to use.
func (*SimpleLockService) Acquire ¶
func (ls *SimpleLockService) Acquire(sd Descriptors) error
Acquire function lets a client acquire a lock on an object.
func (*SimpleLockService) CheckAcquired ¶
func (ls *SimpleLockService) CheckAcquired(sd Descriptors) (string, bool)
CheckAcquired returns true if the file is Acquired. It also returns the owner of the file.
func (*SimpleLockService) CheckReleased ¶
func (ls *SimpleLockService) CheckReleased(sd Descriptors) bool
CheckReleased returns true if the file is released
func (*SimpleLockService) Release ¶
func (ls *SimpleLockService) Release(sd Descriptors) error
Release lets a client to release a lock on an object.