diff --git a/chaos/chaos-server.go b/chaos/chaos-server.go index ab64899..4e196d6 100644 --- a/chaos/chaos-server.go +++ b/chaos/chaos-server.go @@ -34,7 +34,10 @@ import ( // const LockMaintenanceLoop = 1 * time.Minute // const LockCheckValidityInterval = 2 * time.Minute // + +// LockMaintenanceLoop is the locking time for maintenance loop const LockMaintenanceLoop = 1 * time.Second +// LockCheckValidityInterval is the time to check validity interval const LockCheckValidityInterval = 5 * time.Second func startRPCServer(port int) { diff --git a/chaos/chaos.go b/chaos/chaos.go index 6fa5dca..e5678a9 100644 --- a/chaos/chaos.go +++ b/chaos/chaos.go @@ -524,6 +524,7 @@ func testTwoClientsThatHaveReadLocksCrash(wg *sync.WaitGroup, ds *dsync.Dsync) { log.Println("**PASSED** testTwoClientsThatHaveReadLocksCrash") } +// RWLocker Interface type RWLocker interface { Lock(id, source string) RLock(id, source string) @@ -531,11 +532,13 @@ type RWLocker interface { RUnlock() } +// DRWMutexNoWriterStarvation Struct type DRWMutexNoWriterStarvation struct { excl *dsync.DRWMutex rw *dsync.DRWMutex } +// NewDRWMutexNoWriterStarvation function func NewDRWMutexNoWriterStarvation(name string, ds *dsync.Dsync) *DRWMutexNoWriterStarvation { return &DRWMutexNoWriterStarvation{ excl: dsync.NewDRWMutex(context.Background(), name+"-excl-no-writer-starvation", ds), @@ -543,6 +546,7 @@ func NewDRWMutexNoWriterStarvation(name string, ds *dsync.Dsync) *DRWMutexNoWrit } } +// Lock function func (d *DRWMutexNoWriterStarvation) Lock(id, source string) { d.excl.Lock(id+"-excl-no-writer-starvation", source) defer d.excl.Unlock() @@ -550,10 +554,12 @@ func (d *DRWMutexNoWriterStarvation) Lock(id, source string) { d.rw.Lock(id, source) } +// Unlock function func (d *DRWMutexNoWriterStarvation) Unlock() { d.rw.Unlock() } +// RLock function func (d *DRWMutexNoWriterStarvation) RLock(id, source string) { d.excl.Lock(id+"-excl-no-writer-starvation", source) defer d.excl.Unlock() @@ -561,6 +567,7 @@ func (d *DRWMutexNoWriterStarvation) RLock(id, source string) { d.rw.RLock(id, source) } +// RUnlock function func (d *DRWMutexNoWriterStarvation) RUnlock() { d.rw.RUnlock() } diff --git a/chaos/net-rpc-client.go b/chaos/net-rpc-client.go index f97b3a9..6bb834f 100644 --- a/chaos/net-rpc-client.go +++ b/chaos/net-rpc-client.go @@ -81,35 +81,42 @@ func (rpcClient *ReconnectRPCClient) Call(serviceMethod string, args interface{} return err } +// RLock function func (rpcClient *ReconnectRPCClient) RLock(args dsync.LockArgs) (status bool, err error) { err = rpcClient.Call("Dsync.RLock", &args, &status) return status, err } +// Lock function func (rpcClient *ReconnectRPCClient) Lock(args dsync.LockArgs) (status bool, err error) { err = rpcClient.Call("Dsync.Lock", &args, &status) return status, err } +// RUnlock function func (rpcClient *ReconnectRPCClient) RUnlock(args dsync.LockArgs) (status bool, err error) { err = rpcClient.Call("Dsync.RUnlock", &args, &status) return status, err } +// Unlock function func (rpcClient *ReconnectRPCClient) Unlock(args dsync.LockArgs) (status bool, err error) { err = rpcClient.Call("Dsync.Unlock", &args, &status) return status, err } +// ForceUnlock function func (rpcClient *ReconnectRPCClient) ForceUnlock(args dsync.LockArgs) (status bool, err error) { err = rpcClient.Call("Dsync.ForceUnlock", &args, &status) return status, err } +// ServerAddr function func (rpcClient *ReconnectRPCClient) ServerAddr() string { return rpcClient.addr } +// ServiceEndpoint function func (rpcClient *ReconnectRPCClient) ServiceEndpoint() string { return rpcClient.endpoint }