From 322c112327cacf1ffc63f9f0ea56e1db5ad25e8f Mon Sep 17 00:00:00 2001 From: SUMUKHA-PK Date: Mon, 20 Jul 2020 22:17:11 +0530 Subject: [PATCH 01/20] implements an interface idea for #15 --- internal/lockclient/client.go | 11 ++++++++++ internal/lockclient/simple_client.go | 31 +++++++++++++++++++++------- 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/internal/lockclient/client.go b/internal/lockclient/client.go index 0005fe6..3baab08 100644 --- a/internal/lockclient/client.go +++ b/internal/lockclient/client.go @@ -19,6 +19,17 @@ type Client interface { // implementation interacts with the underlying server and // provides the service. Release(lockservice.Descriptors) error + // Watch can be used to watch the state of lock on a descriptor + // continously. When the state of the lock changes, the "watcher" + // will be notified about the change. + Watch(lockservice.Descriptors) error + // Pounce can be used to "pounce" on a lock that has already been + // acquired. This is similar to acquire but once a process has + // opted to pounce, they will be provided first access by having + // a queue of pouncers. + Pounce(lockservice.Descriptors) error + // Pouncers returns the current pouncers on any particular lock. + Pouncers(lockservice.Descriptors) []string } // Config describes the configuration for the lockservice to run on. diff --git a/internal/lockclient/simple_client.go b/internal/lockclient/simple_client.go index 6013bfb..e731fc1 100644 --- a/internal/lockclient/simple_client.go +++ b/internal/lockclient/simple_client.go @@ -20,7 +20,7 @@ type SimpleClient struct { cache cache.LRUCache } -// NewSimpleKey returns a new SimpleKey of the given value. +// NewSimpleClient returns a new SimpleKey of the given value. func NewSimpleClient(config lockservice.SimpleConfig, cache cache.LRUCache) *SimpleClient { return &SimpleClient{ config: config, @@ -30,8 +30,8 @@ func NewSimpleClient(config lockservice.SimpleConfig, cache cache.LRUCache) *Sim var _ Client = (*SimpleClient)(nil) -// Acquire makes a HTTP call to the lockserver and acquires the lock. -// The errors invloved may be due the HTTP errors or the lockservice errors. +// Acquire makes an HTTP call to the lockserver and acquires the lock. +// The errors involved may be due the HTTP errors or the lockservice errors. func (sc *SimpleClient) Acquire(d lockservice.Descriptors) error { endPoint := sc.config.IP() + ":" + sc.config.Port() + "/acquire" @@ -42,9 +42,9 @@ func (sc *SimpleClient) Acquire(d lockservice.Descriptors) error { } testData := lockservice.LockRequest{FileID: d.ID(), UserID: d.Owner()} - requestJson, err := json.Marshal(testData) + requestJSON, err := json.Marshal(testData) - req, err := http.NewRequest("POST", endPoint, bytes.NewBuffer(requestJson)) + req, err := http.NewRequest("POST", endPoint, bytes.NewBuffer(requestJSON)) if err != nil { return err } @@ -71,14 +71,14 @@ func (sc *SimpleClient) Acquire(d lockservice.Descriptors) error { return nil } -// Release makes a HTTP call to the lockserver and acquires the lock. +// Release makes an HTTP call to the lockserver and acquires the lock. // The errors invloved may be due the HTTP errors or the lockservice errors. func (sc *SimpleClient) Release(d lockservice.Descriptors) error { endPoint := sc.config.IPAddr + ":" + sc.config.PortAddr + "/release" testData := lockservice.LockRequest{FileID: d.ID(), UserID: d.Owner()} - requestJson, err := json.Marshal(testData) - req, err := http.NewRequest("POST", endPoint, bytes.NewBuffer(requestJson)) + requestJSON, err := json.Marshal(testData) + req, err := http.NewRequest("POST", endPoint, bytes.NewBuffer(requestJSON)) req.Header.Set("Content-Type", "application/json") client := &http.Client{} @@ -103,3 +103,18 @@ func (sc *SimpleClient) Release(d lockservice.Descriptors) error { func (sc *SimpleClient) StartService(cfg Config) error { panic("TODO") } + +// Watch can be used to watch the given lock. +func (sc *SimpleClient) Watch(lockservice.Descriptors) error { + panic("TODO") +} + +// Pounce can be used to pounce on a waiting lock. +func (sc *SimpleClient) Pounce(lockservice.Descriptors) error { + panic("TODO") +} + +// Pouncers can be used to check the existing pouncers on a descriptor. +func (sc *SimpleClient) Pouncers(lockservice.Descriptors) []string { + panic("TODO") +} From 5edcfd12a9528af855e05c403b1ebe3ab6bdffb2 Mon Sep 17 00:00:00 2001 From: SUMUKHA-PK Date: Thu, 23 Jul 2020 12:08:30 +0530 Subject: [PATCH 02/20] return owner details in CheckAcquire --- internal/cache/error.go | 1 + internal/cache/lru_cache.go | 7 +- internal/lockclient/client.go | 19 ++++- internal/lockclient/simple_client.go | 92 ++++++++++++++++++----- internal/lockclient/simple_client_test.go | 15 +++- internal/lockservice/lockservice.go | 3 +- internal/lockservice/simpleLockService.go | 15 ++-- internal/routing/acquire.go | 3 +- 8 files changed, 120 insertions(+), 35 deletions(-) diff --git a/internal/cache/error.go b/internal/cache/error.go index e5e7cbb..b5a0fa3 100644 --- a/internal/cache/error.go +++ b/internal/cache/error.go @@ -10,4 +10,5 @@ func (e Error) Error() string { return string(e) } const ( ErrElementDoesntExist = Error("element doesn't exist in the cache") ErrElementAlreadyExists = Error("element already exists in the cache") + ErrCacheDoesntExist = Error("cache doesn't exist") ) diff --git a/internal/cache/lru_cache.go b/internal/cache/lru_cache.go index ece7809..ed3e88d 100644 --- a/internal/cache/lru_cache.go +++ b/internal/cache/lru_cache.go @@ -72,11 +72,6 @@ func (lru *LRUCache) GetElement(element interface{}) error { // the LRU element. lru.dll.InsertNodeToLeft(lru.dll.Head, nodeOfKey.NodeKey) lru.insertElementIntoMap(*element.(*SimpleKey), lru.dll.Head) - - // headRight := lru.dll.Head.Right() - // if headRight != nil { - // lru.insertElementIntoMap(headRight.Key(), headRight) - // } } return nil } @@ -125,7 +120,7 @@ func (lru *LRUCache) PutElement(element interface{}) error { return nil } -// RemoveElement() deletes a node from the cache based on a key value +// RemoveElement deletes a node from the cache based on a key value // If there are multiple nodes with the same value, the node that was // most recently used will be removed. func (lru *LRUCache) RemoveElement(element interface{}) error { diff --git a/internal/lockclient/client.go b/internal/lockclient/client.go index 3baab08..d1240c4 100644 --- a/internal/lockclient/client.go +++ b/internal/lockclient/client.go @@ -22,7 +22,9 @@ type Client interface { // Watch can be used to watch the state of lock on a descriptor // continously. When the state of the lock changes, the "watcher" // will be notified about the change. - Watch(lockservice.Descriptors) error + // The channel passed as the argument can be used to stop watching + // at any point of time. + Watch(lockservice.Descriptors, chan struct{}) (chan Lock, error) // Pounce can be used to "pounce" on a lock that has already been // acquired. This is similar to acquire but once a process has // opted to pounce, they will be provided first access by having @@ -39,3 +41,18 @@ type Config interface { // Port provides the port where the server is supposed to run. Port() string } + +// State describes the state of a lock. +type State int + +// These are the states of a lock. +const ( + Acquire State = iota + Release +) + +// Lock includes the state of the lock and the owner. +type Lock struct { + Owner string + LockState State +} diff --git a/internal/lockclient/simple_client.go b/internal/lockclient/simple_client.go index e731fc1..3b8e7c6 100644 --- a/internal/lockclient/simple_client.go +++ b/internal/lockclient/simple_client.go @@ -7,6 +7,7 @@ import ( "io/ioutil" "net/http" "strings" + "time" "github.com/SystemBuilders/LocKey/internal/cache" "github.com/SystemBuilders/LocKey/internal/lockservice" @@ -16,12 +17,13 @@ var _ Config = (*lockservice.SimpleConfig)(nil) // SimpleClient implements Client, the lockclient for LocKey. type SimpleClient struct { - config lockservice.SimpleConfig - cache cache.LRUCache + config *lockservice.SimpleConfig + cache *cache.LRUCache } // NewSimpleClient returns a new SimpleKey of the given value. -func NewSimpleClient(config lockservice.SimpleConfig, cache cache.LRUCache) *SimpleClient { +// This client works with or without the existance of a cache. +func NewSimpleClient(config *lockservice.SimpleConfig, cache *cache.LRUCache) *SimpleClient { return &SimpleClient{ config: config, cache: cache, @@ -34,11 +36,9 @@ var _ Client = (*SimpleClient)(nil) // The errors involved may be due the HTTP errors or the lockservice errors. func (sc *SimpleClient) Acquire(d lockservice.Descriptors) error { endPoint := sc.config.IP() + ":" + sc.config.Port() + "/acquire" - - isInCache := sc.cache.GetElement(cache.NewSimpleKey(d.ID())) - - if isInCache == nil { - return lockservice.ErrFileAcquired + err := sc.getFromCache(d) + if err != nil { + return err } testData := lockservice.LockRequest{FileID: d.ID(), UserID: d.Owner()} @@ -59,15 +59,14 @@ func (sc *SimpleClient) Acquire(d lockservice.Descriptors) error { defer resp.Body.Close() body, _ := ioutil.ReadAll(resp.Body) - if resp.StatusCode != 200 { return errors.New(strings.TrimSpace(string(body))) } - err = sc.cache.PutElement(cache.NewSimpleKey(d.ID())) + + err = sc.releaseFromCache(d) if err != nil { return err } - return nil } @@ -75,7 +74,6 @@ func (sc *SimpleClient) Acquire(d lockservice.Descriptors) error { // The errors invloved may be due the HTTP errors or the lockservice errors. func (sc *SimpleClient) Release(d lockservice.Descriptors) error { endPoint := sc.config.IPAddr + ":" + sc.config.PortAddr + "/release" - testData := lockservice.LockRequest{FileID: d.ID(), UserID: d.Owner()} requestJSON, err := json.Marshal(testData) req, err := http.NewRequest("POST", endPoint, bytes.NewBuffer(requestJSON)) @@ -83,18 +81,16 @@ func (sc *SimpleClient) Release(d lockservice.Descriptors) error { client := &http.Client{} resp, err := client.Do(req) - if err != nil { return (err) } defer resp.Body.Close() body, _ := ioutil.ReadAll(resp.Body) - if resp.StatusCode != 200 { return lockservice.Error(strings.TrimSpace(string(body))) } - sc.cache.RemoveElement(cache.NewSimpleKey(d.ID())) + return nil } @@ -105,8 +101,47 @@ func (sc *SimpleClient) StartService(cfg Config) error { } // Watch can be used to watch the given lock. -func (sc *SimpleClient) Watch(lockservice.Descriptors) error { - panic("TODO") +// This works with or without the existance of a cache +// for the client. +// +// On calling Watch, the current state of the lock is +// returned. If the lock is not acquired, the function returns. +// If the lock is acquired by a different process, the +// details of the acquirer is sent back and the function +// doesn't return unless explicitly told to. Only on changes +// in the ownership of the lock, details are sent back to +// the function caller. +// The function also returns if THIS owner eventually pounced +// and got access to the lock. +func (sc *SimpleClient) Watch(d lockservice.Descriptors, quit chan struct{}) (chan Lock, error) { + stateChan := make(chan Lock, 1) + if sc.cache != nil { + err := sc.getFromCache(d) + if err != nil { + return nil, err + } + // Send the initial state of the lock and then + // keep sending state changes until stopped + // explicitly. + stateChan <- Lock{d.Owner(), Acquire} + go func() { + for { + select { + case <-quit: + return + default: + <-time.After(100 * time.Millisecond) + err := sc.getFromCache(d) + if err != nil { + return + } + } + } + }() + return stateChan, nil + } + + return nil, nil } // Pounce can be used to pounce on a waiting lock. @@ -118,3 +153,26 @@ func (sc *SimpleClient) Pounce(lockservice.Descriptors) error { func (sc *SimpleClient) Pouncers(lockservice.Descriptors) []string { panic("TODO") } + +// getFromCache checks the lock status on the descriptor in the cache. +func (sc *SimpleClient) getFromCache(d lockservice.Descriptors) error { + if sc.cache != nil { + err := sc.cache.GetElement(cache.NewSimpleKey(d.ID())) + if err == nil { + return lockservice.ErrFileAcquired + } + return nil + } + return cache.ErrCacheDoesntExist +} + +func (sc *SimpleClient) releaseFromCache(d lockservice.Descriptors) error { + if sc.cache != nil { + err := sc.cache.RemoveElement(cache.NewSimpleKey(d.ID())) + if err != nil { + return err + } + return nil + } + return cache.ErrCacheDoesntExist +} diff --git a/internal/lockclient/simple_client_test.go b/internal/lockclient/simple_client_test.go index 4650ae9..99f984d 100644 --- a/internal/lockclient/simple_client_test.go +++ b/internal/lockclient/simple_client_test.go @@ -12,7 +12,7 @@ import ( "github.com/rs/zerolog" ) -func TestAcquireandRelease(t *testing.T) { +func TestLockService(t *testing.T) { zerolog.New(os.Stdout).With() log := zerolog.New(os.Stdout).With().Logger().Level(zerolog.GlobalLevel()) @@ -34,9 +34,10 @@ func TestAcquireandRelease(t *testing.T) { // Server takes some time to start time.Sleep(100 * time.Millisecond) t.Run("acquire test release test", func(t *testing.T) { + t.SkipNow() size := 5 cache := cache.NewLRUCache(size) - sc := NewSimpleClient(*scfg, *cache) + sc := NewSimpleClient(scfg, cache) d := lockservice.NewSimpleDescriptor("test", "owner") @@ -71,9 +72,10 @@ func TestAcquireandRelease(t *testing.T) { }) t.Run("acquire test, acquire test, release test", func(t *testing.T) { + t.SkipNow() size := 5 cache := cache.NewLRUCache(size) - sc := NewSimpleClient(*scfg, *cache) + sc := NewSimpleClient(scfg, cache) d := lockservice.NewSimpleDescriptor("test", "owner") @@ -99,9 +101,10 @@ func TestAcquireandRelease(t *testing.T) { }) t.Run("acquire test, trying to release test as another entity should fail", func(t *testing.T) { + t.SkipNow() size := 1 cache := cache.NewLRUCache(size) - sc := NewSimpleClient(*scfg, *cache) + sc := NewSimpleClient(scfg, cache) d := lockservice.NewSimpleDescriptor("test", "owner1") got := sc.Acquire(d) @@ -133,6 +136,10 @@ func TestAcquireandRelease(t *testing.T) { t.Errorf("release: got %q want %q", got, want) } }) + + t.Run("lock watching", func(t *testing.T) { + + }) quit <- true return } diff --git a/internal/lockservice/lockservice.go b/internal/lockservice/lockservice.go index 7c40379..40df0b1 100644 --- a/internal/lockservice/lockservice.go +++ b/internal/lockservice/lockservice.go @@ -14,7 +14,8 @@ type LockService interface { Release(Descriptors) error // CheckAcquire checks whether a lock has been acquired on the given descriptor. // The function returns true if the lock has been acquired on the component. - CheckAcquired(Descriptors) bool + // It also returns the owner of the lock on query. + CheckAcquired(Descriptors) (string, bool) // CheckRelease 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 diff --git a/internal/lockservice/simpleLockService.go b/internal/lockservice/simpleLockService.go index 42e4fad..97c9d15 100644 --- a/internal/lockservice/simpleLockService.go +++ b/internal/lockservice/simpleLockService.go @@ -18,11 +18,13 @@ type SimpleConfig struct { PortAddr string } +// LockRequest is an instance of a request for a lock. type LockRequest struct { FileID string `json:"FileID"` UserID string `json:"UserID"` } +// IP returns the IP from the SimpleConfig. func (scfg *SimpleConfig) IP() string { return scfg.IPAddr } @@ -63,6 +65,7 @@ func (sd *SimpleDescriptor) Owner() string { return sd.UserID } +// NewSimpleConfig returns an instance of the SimpleConfig. func NewSimpleConfig(IPAddr, PortAddr string) *SimpleConfig { return &SimpleConfig{ IPAddr: IPAddr, @@ -70,6 +73,7 @@ func NewSimpleConfig(IPAddr, PortAddr string) *SimpleConfig { } } +// NewSimpleDescriptor returns an instance of the SimpleDescriptor. func NewSimpleDescriptor(FileID, UserID string) *SimpleDescriptor { return &SimpleDescriptor{ FileID: FileID, @@ -146,17 +150,18 @@ func (ls *SimpleLockService) Release(sd Descriptors) error { } -// CheckAcquired returns true if the file is acquired -func (ls *SimpleLockService) CheckAcquired(sd Descriptors) bool { +// CheckAcquired returns true if the file is acquired. +// It also returns the owner of the file. +func (ls *SimpleLockService) CheckAcquired(sd Descriptors) (string, bool) { ls.lockMap.Mutex.Lock() - if _, ok := ls.lockMap.LockMap[sd.ID()]; ok { + if owner, ok := ls.lockMap.LockMap[sd.ID()]; ok { ls.lockMap.Mutex.Unlock() ls. log. Debug(). Str("descriptor", sd.ID()). Msg("checkAcquire success") - return true + return owner, true } ls. log. @@ -164,7 +169,7 @@ func (ls *SimpleLockService) CheckAcquired(sd Descriptors) bool { Str("descriptor", sd.ID()). Msg("check Acquire failure") ls.lockMap.Mutex.Unlock() - return false + return "", false } // CheckReleased returns true if the file is released diff --git a/internal/routing/acquire.go b/internal/routing/acquire.go index c4decb5..2974ee8 100644 --- a/internal/routing/acquire.go +++ b/internal/routing/acquire.go @@ -60,7 +60,8 @@ func checkAcquired(w http.ResponseWriter, r *http.Request, ls *lockservice.Simpl FileID: req.FileID, UserID: req.UserID, } - if ls.CheckAcquired(desc) { + _, ok := ls.CheckAcquired(desc) + if ok { w.Write([]byte("checkAcquire success")) return } From 89306000a0580a32bc37f30f7d63644a0a906846 Mon Sep 17 00:00:00 2001 From: SUMUKHA-PK Date: Fri, 24 Jul 2020 20:42:53 +0530 Subject: [PATCH 03/20] this commit implements in its entirity the method to watch locks only when caches are inexistent --- go.mod | 1 + go.sum | 10 ++ internal/lockclient/simple_client.go | 136 ++++++++++++++++++++-- internal/lockclient/simple_client_test.go | 50 +++++++- internal/lockservice/errors.go | 7 +- internal/lockservice/simpleLockService.go | 26 +++-- internal/routing/acquire.go | 17 +-- 7 files changed, 216 insertions(+), 31 deletions(-) diff --git a/go.mod b/go.mod index ad32b6c..161bbc8 100644 --- a/go.mod +++ b/go.mod @@ -5,4 +5,5 @@ go 1.14 require ( github.com/gorilla/mux v1.7.4 github.com/rs/zerolog v1.19.0 + github.com/stretchr/testify v1.6.1 ) diff --git a/go.sum b/go.sum index 4284e25..c5a474a 100644 --- a/go.sum +++ b/go.sum @@ -1,10 +1,17 @@ github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/gorilla/mux v1.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc= github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/zerolog v1.19.0 h1:hYz4ZVdUgjXTBUmrkrw55j1nHx68LfOKIQk5IYtyScg= github.com/rs/zerolog v1.19.0/go.mod h1:IzD0RJ65iWH0w97OQQebJEvTZYvsCUm9WVLWBQrJRjo= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -12,3 +19,6 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/tools v0.0.0-20190828213141-aed303cbaa74/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/internal/lockclient/simple_client.go b/internal/lockclient/simple_client.go index 3b8e7c6..4d2237e 100644 --- a/internal/lockclient/simple_client.go +++ b/internal/lockclient/simple_client.go @@ -11,6 +11,7 @@ import ( "github.com/SystemBuilders/LocKey/internal/cache" "github.com/SystemBuilders/LocKey/internal/lockservice" + "github.com/rs/zerolog/log" ) var _ Config = (*lockservice.SimpleConfig)(nil) @@ -36,11 +37,16 @@ var _ Client = (*SimpleClient)(nil) // The errors involved may be due the HTTP errors or the lockservice errors. func (sc *SimpleClient) Acquire(d lockservice.Descriptors) error { endPoint := sc.config.IP() + ":" + sc.config.Port() + "/acquire" - err := sc.getFromCache(d) - if err != nil { - return err + // Check for existance of a cache and check + // if the element is in the cache. + if sc.cache != nil { + err := sc.getFromCache(d) + if err != nil { + return err + } } + // Since the cache doesn't have the element, query the server. testData := lockservice.LockRequest{FileID: d.ID(), UserID: d.Owner()} requestJSON, err := json.Marshal(testData) @@ -54,7 +60,7 @@ func (sc *SimpleClient) Acquire(d lockservice.Descriptors) error { resp, err := client.Do(req) if err != nil { - return (err) + return err } defer resp.Body.Close() @@ -63,10 +69,13 @@ func (sc *SimpleClient) Acquire(d lockservice.Descriptors) error { return errors.New(strings.TrimSpace(string(body))) } - err = sc.releaseFromCache(d) - if err != nil { - return err + if sc.cache != nil { + err := sc.addToCache(d) + if err != nil { + return err + } } + return nil } @@ -74,9 +83,16 @@ func (sc *SimpleClient) Acquire(d lockservice.Descriptors) error { // The errors invloved may be due the HTTP errors or the lockservice errors. func (sc *SimpleClient) Release(d lockservice.Descriptors) error { endPoint := sc.config.IPAddr + ":" + sc.config.PortAddr + "/release" - testData := lockservice.LockRequest{FileID: d.ID(), UserID: d.Owner()} - requestJSON, err := json.Marshal(testData) + data := lockservice.LockRequest{FileID: d.ID(), UserID: d.Owner()} + requestJSON, err := json.Marshal(data) + if err != nil { + return err + } + req, err := http.NewRequest("POST", endPoint, bytes.NewBuffer(requestJSON)) + if err != nil { + return err + } req.Header.Set("Content-Type", "application/json") client := &http.Client{} @@ -91,6 +107,12 @@ func (sc *SimpleClient) Release(d lockservice.Descriptors) error { return lockservice.Error(strings.TrimSpace(string(body))) } + if sc.cache != nil { + err = sc.releaseFromCache(d) + if err != nil { + return err + } + } return nil } @@ -111,10 +133,14 @@ func (sc *SimpleClient) StartService(cfg Config) error { // doesn't return unless explicitly told to. Only on changes // in the ownership of the lock, details are sent back to // the function caller. +// // The function also returns if THIS owner eventually pounced // and got access to the lock. +// +// The stateChan is assumed to be cleared as soon as data is +// sent through it. func (sc *SimpleClient) Watch(d lockservice.Descriptors, quit chan struct{}) (chan Lock, error) { - stateChan := make(chan Lock, 1) + stateChan := make(chan Lock, 10) if sc.cache != nil { err := sc.getFromCache(d) if err != nil { @@ -140,8 +166,42 @@ func (sc *SimpleClient) Watch(d lockservice.Descriptors, quit chan struct{}) (ch }() return stateChan, nil } + // case of no cache + owner, err := sc.CheckAcquire(d) + if err != nil { + return nil, err + } - return nil, nil + stateChan <- Lock{owner, Acquire} + log.Debug().Str("process", "lock watching").Str("lock", d.ID()).Str("owner", owner).Msg("lock is in acquired state") + go func() { + for { + select { + case <-quit: + log.Debug().Msg("stopped watching") + return + default: + newOwner, err := sc.CheckAcquire(d) + if err != nil { + if err == lockservice.ErrCheckAcquireFailure { + stateChan <- Lock{"", Release} + log.Debug().Str("process", "lock watching").Str("lock", d.ID()).Msg("lock is in released state") + } else { + return + } + } else { + // notify about the state only if there's a change. + if newOwner != owner { + owner = newOwner + stateChan <- Lock{owner, Acquire} + log.Debug().Str("process", "lock watching").Str("lock", d.ID()).Str("owner", owner).Msg("lock is in acquired state") + } + } + } + } + }() + + return stateChan, nil } // Pounce can be used to pounce on a waiting lock. @@ -155,6 +215,8 @@ func (sc *SimpleClient) Pouncers(lockservice.Descriptors) []string { } // getFromCache checks the lock status on the descriptor in the cache. +// This function returns an error if the cache doesn't exist or the +// file is already acquired. func (sc *SimpleClient) getFromCache(d lockservice.Descriptors) error { if sc.cache != nil { err := sc.cache.GetElement(cache.NewSimpleKey(d.ID())) @@ -166,6 +228,17 @@ func (sc *SimpleClient) getFromCache(d lockservice.Descriptors) error { return cache.ErrCacheDoesntExist } +func (sc *SimpleClient) addToCache(d lockservice.Descriptors) error { + if sc.cache != nil { + err := sc.cache.PutElement(cache.NewSimpleKey(d.ID())) + if err != nil { + return err + } + return nil + } + return cache.ErrCacheDoesntExist +} + func (sc *SimpleClient) releaseFromCache(d lockservice.Descriptors) error { if sc.cache != nil { err := sc.cache.RemoveElement(cache.NewSimpleKey(d.ID())) @@ -176,3 +249,44 @@ func (sc *SimpleClient) releaseFromCache(d lockservice.Descriptors) error { } return cache.ErrCacheDoesntExist } + +// CheckAcquire checks for acquisition of lock and returns the owner if the lock +// is already acquired. +func (sc *SimpleClient) CheckAcquire(d lockservice.Descriptors) (string, error) { + endPoint := sc.config.IPAddr + ":" + sc.config.PortAddr + "/checkAcquire" + data := lockservice.LockCheckRequest{FileID: d.ID()} + requestJSON, err := json.Marshal(data) + if err != nil { + return "", err + } + + req, err := http.NewRequest("POST", endPoint, bytes.NewBuffer(requestJSON)) + if err != nil { + return "", err + } + + req.Header.Set("Content-Type", "application/json") + + client := &http.Client{} + resp, err := client.Do(req) + if err != nil { + return "", err + } + defer resp.Body.Close() + + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + return "", err + } + if resp.StatusCode != 200 { + return "", lockservice.Error(strings.TrimSpace(string(body))) + } + + var ownerData lockservice.CheckAcquireRes + err = json.Unmarshal(body, &ownerData) + if err != nil { + return "", err + } + + return ownerData.Owner, nil +} diff --git a/internal/lockclient/simple_client_test.go b/internal/lockclient/simple_client_test.go index 99f984d..92efb72 100644 --- a/internal/lockclient/simple_client_test.go +++ b/internal/lockclient/simple_client_test.go @@ -1,6 +1,7 @@ package lockclient import ( + "fmt" "os" "testing" "time" @@ -8,6 +9,7 @@ import ( "github.com/SystemBuilders/LocKey/internal/cache" "github.com/SystemBuilders/LocKey/internal/lockservice" "github.com/SystemBuilders/LocKey/internal/node" + "github.com/stretchr/testify/assert" "github.com/rs/zerolog" ) @@ -128,17 +130,59 @@ func TestLockService(t *testing.T) { } d = lockservice.NewSimpleDescriptor("test", "owner1") - got = sc.Release(d) want = nil - if got != want { t.Errorf("release: got %q want %q", got, want) } }) - t.Run("lock watching", func(t *testing.T) { + t.Run("lock watching without cache", func(t *testing.T) { + // t.SkipNow() + sc := NewSimpleClient(scfg, nil) + + assert := assert.New(t) + d := lockservice.NewSimpleDescriptor("test", "owner1") + // acquire the lock + err := sc.Acquire(d) + assert.Nil(err) + + // start watching the lock. + quit := make(chan struct{}, 1) + stateChan, err := sc.Watch(d, quit) + assert.Nil(err) + + states := []Lock{} + go func() { + for { + state := <-stateChan + states = append(states, state) + } + }() + + err = sc.Release(d) + assert.Nil(err) + + d1 := lockservice.NewSimpleDescriptor("test", "owner2") + err = sc.Acquire(d1) + assert.Nil(err) + + err = sc.Release(d1) + assert.Nil(err) + + d2 := lockservice.NewSimpleDescriptor("test", "owner3") + err = sc.Acquire(d2) + assert.Nil(err) + + err = sc.Release(d2) + assert.Nil(err) + + quit <- struct{}{} + + // wait to stop watching gracefully. + <-time.After(10 * time.Millisecond) + fmt.Println(states) }) quit <- true return diff --git a/internal/lockservice/errors.go b/internal/lockservice/errors.go index cc18cfd..665789a 100644 --- a/internal/lockservice/errors.go +++ b/internal/lockservice/errors.go @@ -8,7 +8,8 @@ func (e Error) Error() string { return string(e) } // Constant errors. // Rule of thumb, all errors start with a small letter and end with no full stop. const ( - ErrFileAcquired = Error("file already acquired") - ErrCantReleaseFile = Error("file cannot be released, wasn't locked before") - ErrUnauthorizedAccess = Error("file cannot be released, unauthorized access") + ErrFileAcquired = Error("file already acquired") + ErrCantReleaseFile = Error("file cannot be released, wasn't locked before") + ErrUnauthorizedAccess = Error("file cannot be released, unauthorized access") + ErrCheckAcquireFailure = Error("file is not acquired") ) diff --git a/internal/lockservice/simpleLockService.go b/internal/lockservice/simpleLockService.go index 97c9d15..0317f9d 100644 --- a/internal/lockservice/simpleLockService.go +++ b/internal/lockservice/simpleLockService.go @@ -24,6 +24,16 @@ type LockRequest struct { UserID string `json:"UserID"` } +// LockCheckRequest is an instance of a lock check request. +type LockCheckRequest struct { + FileID string `json:"FileID"` +} + +// CheckAcquireRes is the response of a CheckAcquire. +type CheckAcquireRes struct { + Owner string `json:"owner"` +} + // IP returns the IP from the SimpleConfig. func (scfg *SimpleConfig) IP() string { return scfg.IPAddr @@ -154,19 +164,20 @@ func (ls *SimpleLockService) Release(sd Descriptors) error { // It also returns the owner of the file. func (ls *SimpleLockService) CheckAcquired(sd Descriptors) (string, bool) { ls.lockMap.Mutex.Lock() - if owner, ok := ls.lockMap.LockMap[sd.ID()]; ok { + id := sd.ID() + if owner, ok := ls.lockMap.LockMap[id]; ok { ls.lockMap.Mutex.Unlock() ls. log. Debug(). - Str("descriptor", sd.ID()). + Str("descriptor", id). Msg("checkAcquire success") return owner, true } ls. log. Debug(). - Str("descriptor", sd.ID()). + Str("descriptor", id). Msg("check Acquire failure") ls.lockMap.Mutex.Unlock() return "", false @@ -175,20 +186,21 @@ func (ls *SimpleLockService) CheckAcquired(sd Descriptors) (string, bool) { // CheckReleased returns true if the file is released func (ls *SimpleLockService) CheckReleased(sd Descriptors) bool { ls.lockMap.Mutex.Lock() - if _, ok := ls.lockMap.LockMap[sd.ID()]; ok { + id := sd.ID() + if _, ok := ls.lockMap.LockMap[id]; ok { ls.lockMap.Mutex.Unlock() ls. log. Debug(). - Str("descriptor", sd.ID()). + Str("descriptor", id). Msg("checkRelease failure") return false } + ls.lockMap.Mutex.Unlock() ls. log. Debug(). - Str("descriptor", sd.ID()). + Str("descriptor", id). Msg("checkRelease success") - ls.lockMap.Mutex.Unlock() return true } diff --git a/internal/routing/acquire.go b/internal/routing/acquire.go index 2974ee8..fccbefa 100644 --- a/internal/routing/acquire.go +++ b/internal/routing/acquire.go @@ -8,8 +8,6 @@ import ( "github.com/SystemBuilders/LocKey/internal/lockservice" ) -// type Request = lockservice.Request - func acquire(w http.ResponseWriter, r *http.Request, ls *lockservice.SimpleLockService) { body, err := ioutil.ReadAll(r.Body) @@ -48,7 +46,7 @@ func checkAcquired(w http.ResponseWriter, r *http.Request, ls *lockservice.Simpl return } - var req lockservice.LockRequest + var req lockservice.LockCheckRequest err = json.Unmarshal(body, &req) if err != nil { @@ -58,12 +56,17 @@ func checkAcquired(w http.ResponseWriter, r *http.Request, ls *lockservice.Simpl desc := &lockservice.SimpleDescriptor{ FileID: req.FileID, - UserID: req.UserID, } - _, ok := ls.CheckAcquired(desc) + + owner, ok := ls.CheckAcquired(desc) if ok { - w.Write([]byte("checkAcquire success")) + byteData, err := json.Marshal(lockservice.CheckAcquireRes{Owner: owner}) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + w.Write(byteData) return } - w.Write([]byte("checkAcquire failure")) + http.Error(w, lockservice.ErrCheckAcquireFailure.Error(), http.StatusInternalServerError) } From c65adc7a0c6ae350cee6728cb7f4a4b53946108f Mon Sep 17 00:00:00 2001 From: SUMUKHA-PK Date: Sat, 25 Jul 2020 10:45:34 +0530 Subject: [PATCH 04/20] this commit fixes some minor issues with formatting --- internal/lockclient/simple_client.go | 26 +++++++++++++++++------ internal/lockclient/simple_client_test.go | 9 +------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/internal/lockclient/simple_client.go b/internal/lockclient/simple_client.go index 4d2237e..d69be08 100644 --- a/internal/lockclient/simple_client.go +++ b/internal/lockclient/simple_client.go @@ -75,7 +75,6 @@ func (sc *SimpleClient) Acquire(d lockservice.Descriptors) error { return err } } - return nil } @@ -102,7 +101,10 @@ func (sc *SimpleClient) Release(d lockservice.Descriptors) error { } defer resp.Body.Close() - body, _ := ioutil.ReadAll(resp.Body) + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + return err + } if resp.StatusCode != 200 { return lockservice.Error(strings.TrimSpace(string(body))) } @@ -171,9 +173,13 @@ func (sc *SimpleClient) Watch(d lockservice.Descriptors, quit chan struct{}) (ch if err != nil { return nil, err } - stateChan <- Lock{owner, Acquire} - log.Debug().Str("process", "lock watching").Str("lock", d.ID()).Str("owner", owner).Msg("lock is in acquired state") + log.Debug(). + Str("process", "lock watching"). + Str("lock", d.ID()). + Str("owner", owner). + Msg("lock is in acquired state") + go func() { for { select { @@ -185,7 +191,10 @@ func (sc *SimpleClient) Watch(d lockservice.Descriptors, quit chan struct{}) (ch if err != nil { if err == lockservice.ErrCheckAcquireFailure { stateChan <- Lock{"", Release} - log.Debug().Str("process", "lock watching").Str("lock", d.ID()).Msg("lock is in released state") + log.Debug(). + Str("process", "lock watching"). + Str("lock", d.ID()). + Msg("lock is in released state") } else { return } @@ -194,13 +203,16 @@ func (sc *SimpleClient) Watch(d lockservice.Descriptors, quit chan struct{}) (ch if newOwner != owner { owner = newOwner stateChan <- Lock{owner, Acquire} - log.Debug().Str("process", "lock watching").Str("lock", d.ID()).Str("owner", owner).Msg("lock is in acquired state") + log.Debug(). + Str("process", "lock watching"). + Str("lock", d.ID()). + Str("owner", owner). + Msg("lock is in acquired state") } } } } }() - return stateChan, nil } diff --git a/internal/lockclient/simple_client_test.go b/internal/lockclient/simple_client_test.go index 92efb72..a11b642 100644 --- a/internal/lockclient/simple_client_test.go +++ b/internal/lockclient/simple_client_test.go @@ -1,7 +1,6 @@ package lockclient import ( - "fmt" "os" "testing" "time" @@ -36,7 +35,6 @@ func TestLockService(t *testing.T) { // Server takes some time to start time.Sleep(100 * time.Millisecond) t.Run("acquire test release test", func(t *testing.T) { - t.SkipNow() size := 5 cache := cache.NewLRUCache(size) sc := NewSimpleClient(scfg, cache) @@ -74,7 +72,6 @@ func TestLockService(t *testing.T) { }) t.Run("acquire test, acquire test, release test", func(t *testing.T) { - t.SkipNow() size := 5 cache := cache.NewLRUCache(size) sc := NewSimpleClient(scfg, cache) @@ -103,8 +100,7 @@ func TestLockService(t *testing.T) { }) t.Run("acquire test, trying to release test as another entity should fail", func(t *testing.T) { - t.SkipNow() - size := 1 + size := 2 cache := cache.NewLRUCache(size) sc := NewSimpleClient(scfg, cache) @@ -138,7 +134,6 @@ func TestLockService(t *testing.T) { }) t.Run("lock watching without cache", func(t *testing.T) { - // t.SkipNow() sc := NewSimpleClient(scfg, nil) assert := assert.New(t) @@ -181,8 +176,6 @@ func TestLockService(t *testing.T) { // wait to stop watching gracefully. <-time.After(10 * time.Millisecond) - - fmt.Println(states) }) quit <- true return From 0dae8af979b9838ecd1630d69031692d5ea9e5cf Mon Sep 17 00:00:00 2001 From: SUMUKHA-PK Date: Sat, 25 Jul 2020 19:36:23 +0530 Subject: [PATCH 05/20] fixed RemoveElement to reduce cache size, added cache vs non cache benchmarks --- internal/cache/lru_cache.go | 2 + internal/lockclient/simple_client_test.go | 76 +++++++++++++++++++++++ 2 files changed, 78 insertions(+) diff --git a/internal/cache/lru_cache.go b/internal/cache/lru_cache.go index ed3e88d..f886549 100644 --- a/internal/cache/lru_cache.go +++ b/internal/cache/lru_cache.go @@ -99,6 +99,7 @@ func (lru *LRUCache) PutElement(element interface{}) error { return err } } + lru.size++ if lru.size == lru.capacity { lru.full = true @@ -137,6 +138,7 @@ func (lru *LRUCache) RemoveElement(element interface{}) error { } else if lru.tail == nodeOfKey { lru.tail = nodeOfKey.LeftNode.(*DLLNode) } + lru.size-- lru.dll.DeleteNode(nodeOfKey) lru.deleteElementFromMap(*nodeOfKey.Key().(*SimpleKey)) return nil diff --git a/internal/lockclient/simple_client_test.go b/internal/lockclient/simple_client_test.go index a11b642..429d212 100644 --- a/internal/lockclient/simple_client_test.go +++ b/internal/lockclient/simple_client_test.go @@ -180,3 +180,79 @@ func TestLockService(t *testing.T) { quit <- true return } + +// BenchmarkLocKeyWithoutCache stats: 2130 28828088 ns/op 15952 B/op 190 allocs/op +func BenchmarkLocKeyWithoutCache(b *testing.B) { + zerolog.New(os.Stdout).With() + + log := zerolog.New(os.Stdout).With().Logger().Level(zerolog.GlobalLevel()) + scfg := lockservice.NewSimpleConfig("http://127.0.0.1", "1234") + ls := lockservice.NewSimpleLockService(log) + + quit := make(chan bool, 1) + go func() { + node.Start(ls, *scfg) + for { + select { + case <-quit: + return + default: + } + } + }() + time.Sleep(100 * time.Millisecond) + + sc := NewSimpleClient(scfg, nil) + d := lockservice.NewSimpleDescriptor("test", "owner") + for n := 0; n < b.N; n++ { + got := sc.Acquire(d) + var want error + if got != want { + b.Errorf("acquire: got %q want %q", got, want) + } + + got = sc.Release(d) + if got != want { + b.Errorf("release: got %q want %q", got, want) + } + } +} + +// BenchmarkLocKeyWithCache stats: 3669 28702266 ns/op 16048 B/op 194 allocs/op +func BenchmarkLocKeyWithCache(b *testing.B) { + zerolog.New(os.Stdout).With() + + log := zerolog.New(os.Stdout).With().Logger().Level(zerolog.GlobalLevel()) + scfg := lockservice.NewSimpleConfig("http://127.0.0.1", "1234") + ls := lockservice.NewSimpleLockService(log) + + quit := make(chan bool, 1) + go func() { + node.Start(ls, *scfg) + for { + select { + case <-quit: + return + default: + } + } + }() + time.Sleep(100 * time.Millisecond) + + size := 5 + cache := cache.NewLRUCache(size) + sc := NewSimpleClient(scfg, cache) + d := lockservice.NewSimpleDescriptor("test", "owner") + for n := 0; n < b.N; n++ { + got := sc.Acquire(d) + var want error + if got != want { + b.Errorf("acquire: got %q want %q", got, want) + } + + got = sc.Release(d) + if got != want { + b.Errorf("release: got %q want %q", got, want) + } + } +} From ea80df451619ad2d368bf1f3563b26ff95f71dfc Mon Sep 17 00:00:00 2001 From: SUMUKHA-PK Date: Wed, 29 Jul 2020 12:44:24 +0530 Subject: [PATCH 06/20] this commit adds a wrapper for lock status check --- internal/lockclient/simple_client.go | 45 ++++++++++------------------ 1 file changed, 15 insertions(+), 30 deletions(-) diff --git a/internal/lockclient/simple_client.go b/internal/lockclient/simple_client.go index d69be08..e5f04ad 100644 --- a/internal/lockclient/simple_client.go +++ b/internal/lockclient/simple_client.go @@ -7,7 +7,6 @@ import ( "io/ioutil" "net/http" "strings" - "time" "github.com/SystemBuilders/LocKey/internal/cache" "github.com/SystemBuilders/LocKey/internal/lockservice" @@ -142,37 +141,14 @@ func (sc *SimpleClient) StartService(cfg Config) error { // The stateChan is assumed to be cleared as soon as data is // sent through it. func (sc *SimpleClient) Watch(d lockservice.Descriptors, quit chan struct{}) (chan Lock, error) { - stateChan := make(chan Lock, 10) - if sc.cache != nil { - err := sc.getFromCache(d) - if err != nil { - return nil, err - } - // Send the initial state of the lock and then - // keep sending state changes until stopped - // explicitly. - stateChan <- Lock{d.Owner(), Acquire} - go func() { - for { - select { - case <-quit: - return - default: - <-time.After(100 * time.Millisecond) - err := sc.getFromCache(d) - if err != nil { - return - } - } - } - }() - return stateChan, nil - } - // case of no cache - owner, err := sc.CheckAcquire(d) + stateChan := make(chan Lock, 1) + owner, err := sc.watchLock(d) if err != nil { return nil, err } + // Send the initial state of the lock and then + // keep sending state changes until stopped + // explicitly. stateChan <- Lock{owner, Acquire} log.Debug(). Str("process", "lock watching"). @@ -187,7 +163,7 @@ func (sc *SimpleClient) Watch(d lockservice.Descriptors, quit chan struct{}) (ch log.Debug().Msg("stopped watching") return default: - newOwner, err := sc.CheckAcquire(d) + newOwner, err := sc.watchLock(d) if err != nil { if err == lockservice.ErrCheckAcquireFailure { stateChan <- Lock{"", Release} @@ -302,3 +278,12 @@ func (sc *SimpleClient) CheckAcquire(d lockservice.Descriptors) (string, error) return ownerData.Owner, nil } + +// watchLock wraps the process of getting the status of a lock +// for cases with or without a cache. +func (sc *SimpleClient) watchLock(d lockservice.Descriptors) (string, error) { + if sc.cache != nil { + return "", nil + } + return sc.CheckAcquire(d) +} From 3975b10d2096892ba5c53d9675a05b8e3ac2232d Mon Sep 17 00:00:00 2001 From: SUMUKHA-PK Date: Wed, 29 Jul 2020 21:29:51 +0530 Subject: [PATCH 07/20] this commit completes lock watching with a cache in the lockservice --- internal/cache/cache.go | 2 +- internal/cache/dll.go | 4 +- internal/cache/dll_test.go | 14 +-- internal/cache/lru_cache.go | 43 +++++--- internal/cache/lru_cache_test.go | 26 ++--- internal/lockclient/simple_client.go | 127 +++++++++++++--------- internal/lockclient/simple_client_test.go | 47 ++++++++ internal/lockservice/errors.go | 1 + internal/lockservice/simpleLockService.go | 2 + 9 files changed, 175 insertions(+), 91 deletions(-) diff --git a/internal/cache/cache.go b/internal/cache/cache.go index 679e88f..80b75f5 100644 --- a/internal/cache/cache.go +++ b/internal/cache/cache.go @@ -6,7 +6,7 @@ type Cache interface { // Getting the object makes it the most recently used object // in the cache. This function must be implemented in O(1) complexity. // If the object doesn't exist in the cache, an error is raised. - GetElement(element interface{}) error + GetElement(element interface{}) (string, error) // PutElement inserts an object into the cache. // Putting the object makes it the most recently used object // in the cache. This function must be implemented in O(1) complexity. diff --git a/internal/cache/dll.go b/internal/cache/dll.go index 709d5bb..37afc56 100644 --- a/internal/cache/dll.go +++ b/internal/cache/dll.go @@ -10,6 +10,7 @@ var _ Key = (*SimpleKey)(nil) // SimpleKey implements a Key interface. type SimpleKey struct { + Owner string Value string } @@ -19,9 +20,10 @@ func (sk *SimpleKey) Data() string { } // NewSimpleKey returns a new SimpleKey of the given value. -func NewSimpleKey(val string) *SimpleKey { +func NewSimpleKey(val, owner string) *SimpleKey { return &SimpleKey{ Value: val, + Owner: owner, } } diff --git a/internal/cache/dll_test.go b/internal/cache/dll_test.go index b268057..624ec10 100644 --- a/internal/cache/dll_test.go +++ b/internal/cache/dll_test.go @@ -5,37 +5,37 @@ import "testing" func Test_DLL(t *testing.T) { dllNode := NewDoublyLinkedList() - dllNode.InsertNodeToRight(nil, &SimpleKey{"1"}) + dllNode.InsertNodeToRight(nil, &SimpleKey{Value: "1"}) dllNode.PrintLinkedList() if dllNode.Head.Key().Data() != "1" { t.Errorf("Required value \"1\", got %s", dllNode.Head.Key()) } - dllNode.InsertNodeToLeft(dllNode.Head, &SimpleKey{"2"}) + dllNode.InsertNodeToLeft(dllNode.Head, &SimpleKey{Value: "2"}) dllNode.PrintLinkedList() dllNode.DeleteNode(dllNode.Head.Right()) dllNode.PrintLinkedList() - dllNode.InsertNodeToLeft(dllNode.Head, &SimpleKey{"1"}) + dllNode.InsertNodeToLeft(dllNode.Head, &SimpleKey{Value: "1"}) dllNode.PrintLinkedList() - dllNode.InsertNodeToLeft(dllNode.Head, &SimpleKey{"3"}) + dllNode.InsertNodeToLeft(dllNode.Head, &SimpleKey{Value: "3"}) dllNode.PrintLinkedList() dllNode.DeleteNode(dllNode.Head.Right().Right()) dllNode.PrintLinkedList() - dllNode.InsertNodeToLeft(dllNode.Head, &SimpleKey{"2"}) + dllNode.InsertNodeToLeft(dllNode.Head, &SimpleKey{Value: "2"}) dllNode.PrintLinkedList() - dllNode.InsertNodeToLeft(dllNode.Head, &SimpleKey{"4"}) + dllNode.InsertNodeToLeft(dllNode.Head, &SimpleKey{Value: "4"}) dllNode.PrintLinkedList() dllNode.DeleteNode(dllNode.Head.Right().Right().Right()) dllNode.PrintLinkedList() - dllNode.InsertNodeToLeft(dllNode.Head, &SimpleKey{"1"}) + dllNode.InsertNodeToLeft(dllNode.Head, &SimpleKey{Value: "1"}) dllNode.PrintLinkedList() } diff --git a/internal/cache/lru_cache.go b/internal/cache/lru_cache.go index f886549..870229b 100644 --- a/internal/cache/lru_cache.go +++ b/internal/cache/lru_cache.go @@ -1,6 +1,9 @@ package cache -import "fmt" +import ( + "fmt" + "sync" +) var _ Cache = (*LRUCache)(nil) @@ -30,6 +33,7 @@ type LRUCache struct { tail *DLLNode m map[interface{}]*DLLNode dll *DoublyLinkedList + mu sync.Mutex } // NewLRUCache creates a new LRUCache of provided size. @@ -50,10 +54,14 @@ func NewLRUCache(capacity int) *LRUCache { // // The element is removed from the map too because // it might have stale node values. -func (lru *LRUCache) GetElement(element interface{}) error { +// +// Error is returned only if the element doesn't exist in the cache. +func (lru *LRUCache) GetElement(element interface{}) (string, error) { // Check whether the element exists in the cache. - if _, ok := lru.m[*element.(*SimpleKey)]; ok { - nodeOfKey := lru.m[*element.(*SimpleKey)] + lru.mu.Lock() + defer lru.mu.Unlock() + if node, ok := lru.m[*&element.(*SimpleKey).Value]; ok { + nodeOfKey := lru.m[*&element.(*SimpleKey).Value] // Check whether the currently accessed element is the // most recently used element in the cache. If it's not, // it must be moved to the MRU to accomodate the protocol. @@ -65,17 +73,17 @@ func (lru *LRUCache) GetElement(element interface{}) error { // delete the old key so that it can be moved to MRU. lru.dll.DeleteNode(nodeOfKey) - lru.deleteElementFromMap(*nodeOfKey.Key().(*SimpleKey)) + lru.deleteElementFromMap(*&nodeOfKey.Key().(*SimpleKey).Value) // Move the currently accessed node to the MRU position. // The start pointer doesn't change as it still points to // the LRU element. lru.dll.InsertNodeToLeft(lru.dll.Head, nodeOfKey.NodeKey) - lru.insertElementIntoMap(*element.(*SimpleKey), lru.dll.Head) + lru.insertElementIntoMap(*&element.(*SimpleKey).Value, lru.dll.Head) } - return nil + return node.NodeKey.Owner, nil } - return ErrElementDoesntExist + return "", ErrElementDoesntExist } // PutElement inserts an element in the cache. @@ -84,17 +92,19 @@ func (lru *LRUCache) GetElement(element interface{}) error { // Removal of the LRU is done my deleting the tail node, // making place for a new node. func (lru *LRUCache) PutElement(element interface{}) error { + lru.mu.Lock() + defer lru.mu.Unlock() if !lru.full { if lru.dll.Head == nil { lru.dll.InsertNodeToRight(lru.dll.Head, element.(*SimpleKey)) - err := lru.insertElementIntoMap(*element.(*SimpleKey), lru.dll.Head) + err := lru.insertElementIntoMap(*&element.(*SimpleKey).Value, lru.dll.Head) if err != nil { return err } lru.tail = lru.dll.Head.(*DLLNode) } else { lru.dll.InsertNodeToLeft(lru.dll.Head, element.(*SimpleKey)) - err := lru.insertElementIntoMap(*element.(*SimpleKey), lru.dll.Head) + err := lru.insertElementIntoMap(*&element.(*SimpleKey).Value, lru.dll.Head) if err != nil { return err } @@ -106,7 +116,7 @@ func (lru *LRUCache) PutElement(element interface{}) error { } } else { lru.dll.InsertNodeToLeft(lru.dll.Head, element.(*SimpleKey)) - err := lru.insertElementIntoMap(*element.(*SimpleKey), lru.dll.Head) + err := lru.insertElementIntoMap(*&element.(*SimpleKey).Value, lru.dll.Head) if err != nil { return err } @@ -116,7 +126,7 @@ func (lru *LRUCache) PutElement(element interface{}) error { // Delete the "start" node and make the newly inserted node the MRU node. lru.dll.DeleteNode(tailNode) - lru.deleteElementFromMap(*tailNode.Key().(*SimpleKey)) + lru.deleteElementFromMap(*&tailNode.Key().(*SimpleKey).Value) } return nil } @@ -125,9 +135,11 @@ func (lru *LRUCache) PutElement(element interface{}) error { // If there are multiple nodes with the same value, the node that was // most recently used will be removed. func (lru *LRUCache) RemoveElement(element interface{}) error { + lru.mu.Lock() + defer lru.mu.Unlock() // Check if the node exists in the cache - if _, ok := lru.m[*element.(*SimpleKey)]; ok { - nodeOfKey := lru.m[*element.(*SimpleKey)] + if _, ok := lru.m[*&element.(*SimpleKey).Value]; ok { + nodeOfKey := lru.m[*&element.(*SimpleKey).Value] // If there is only one element in the linked list, make the // tail point to nil // @@ -138,9 +150,10 @@ func (lru *LRUCache) RemoveElement(element interface{}) error { } else if lru.tail == nodeOfKey { lru.tail = nodeOfKey.LeftNode.(*DLLNode) } + // lru.PrintCache() lru.size-- lru.dll.DeleteNode(nodeOfKey) - lru.deleteElementFromMap(*nodeOfKey.Key().(*SimpleKey)) + lru.deleteElementFromMap(*&nodeOfKey.Key().(*SimpleKey).Value) return nil } diff --git a/internal/cache/lru_cache_test.go b/internal/cache/lru_cache_test.go index c79b9e5..328bf90 100644 --- a/internal/cache/lru_cache_test.go +++ b/internal/cache/lru_cache_test.go @@ -5,13 +5,13 @@ import "testing" func Test_LRUCache(t *testing.T) { lruCache := NewLRUCache(5) - one := NewSimpleKey("1") - two := NewSimpleKey("2") - three := NewSimpleKey("3") - four := NewSimpleKey("4") - one_1 := NewSimpleKey("1") - five := NewSimpleKey("5") - six := NewSimpleKey("6") + one := NewSimpleKey("1", "owner1") + two := NewSimpleKey("2", "owner1") + three := NewSimpleKey("3", "owner1") + four := NewSimpleKey("4", "owner1") + oneOne := NewSimpleKey("1", "owner1") + five := NewSimpleKey("5", "owner1") + six := NewSimpleKey("6", "owner1") err := lruCache.PutElement(one) if err != nil { @@ -25,7 +25,7 @@ func Test_LRUCache(t *testing.T) { } lruCache.PrintCache() - err = lruCache.GetElement(one) + _, err = lruCache.GetElement(one) if err != nil { t.Fatal(err) } @@ -37,7 +37,7 @@ func Test_LRUCache(t *testing.T) { } lruCache.PrintCache() - err = lruCache.GetElement(two) + _, err = lruCache.GetElement(two) if err != nil { t.Fatal(err) } @@ -49,25 +49,25 @@ func Test_LRUCache(t *testing.T) { } lruCache.PrintCache() - err = lruCache.GetElement(one) + _, err = lruCache.GetElement(one) if err != nil { t.Fatal(err) } lruCache.PrintCache() - err = lruCache.GetElement(three) + _, err = lruCache.GetElement(three) if err != nil { t.Fatal(err) } lruCache.PrintCache() - err = lruCache.GetElement(four) + _, err = lruCache.GetElement(four) if err != nil { t.Fatal(err) } lruCache.PrintCache() - err = lruCache.RemoveElement(one_1) + err = lruCache.RemoveElement(oneOne) if err != nil { t.Fatal(err) } diff --git a/internal/lockclient/simple_client.go b/internal/lockclient/simple_client.go index e5f04ad..a329515 100644 --- a/internal/lockclient/simple_client.go +++ b/internal/lockclient/simple_client.go @@ -35,16 +35,17 @@ var _ Client = (*SimpleClient)(nil) // Acquire makes an HTTP call to the lockserver and acquires the lock. // The errors involved may be due the HTTP errors or the lockservice errors. func (sc *SimpleClient) Acquire(d lockservice.Descriptors) error { - endPoint := sc.config.IP() + ":" + sc.config.Port() + "/acquire" // Check for existance of a cache and check // if the element is in the cache. if sc.cache != nil { - err := sc.getFromCache(d) - if err != nil { + _, err := sc.getFromCache(d) + // Since there can be network errors, we have this double check. + if err != nil && err != lockservice.ErrCheckAcquireFailure { return err } } + endPoint := sc.config.IP() + ":" + sc.config.Port() + "/acquire" // Since the cache doesn't have the element, query the server. testData := lockservice.LockRequest{FileID: d.ID(), UserID: d.Owner()} requestJSON, err := json.Marshal(testData) @@ -142,19 +143,35 @@ func (sc *SimpleClient) StartService(cfg Config) error { // sent through it. func (sc *SimpleClient) Watch(d lockservice.Descriptors, quit chan struct{}) (chan Lock, error) { stateChan := make(chan Lock, 1) - owner, err := sc.watchLock(d) + // releaseNotification is true if the last notification wasn't a release. + releaseNotification := false + owner, err := sc.CheckAcquire(d) if err != nil { - return nil, err + if err != lockservice.ErrCheckAcquireFailure { + return nil, err + } + // This means that the file is released + if releaseNotification { + releaseNotification = false + stateChan <- Lock{"", Release} + log.Debug(). + Str("process", "lock watching"). + Str("lock", d.ID()). + Msg("lock is in released state") + } } // Send the initial state of the lock and then // keep sending state changes until stopped // explicitly. - stateChan <- Lock{owner, Acquire} - log.Debug(). - Str("process", "lock watching"). - Str("lock", d.ID()). - Str("owner", owner). - Msg("lock is in acquired state") + if owner != "" { + releaseNotification = true + stateChan <- Lock{owner, Acquire} + log.Debug(). + Str("process", "lock watching"). + Str("lock", d.ID()). + Str("owner", owner). + Msg("lock is in acquired state") + } go func() { for { @@ -163,20 +180,23 @@ func (sc *SimpleClient) Watch(d lockservice.Descriptors, quit chan struct{}) (ch log.Debug().Msg("stopped watching") return default: - newOwner, err := sc.watchLock(d) + newOwner, err := sc.CheckAcquire(d) if err != nil { - if err == lockservice.ErrCheckAcquireFailure { + if err != lockservice.ErrCheckAcquireFailure { + return + } + if releaseNotification { + releaseNotification = false stateChan <- Lock{"", Release} log.Debug(). Str("process", "lock watching"). Str("lock", d.ID()). Msg("lock is in released state") - } else { - return } } else { // notify about the state only if there's a change. if newOwner != owner { + releaseNotification = true owner = newOwner stateChan <- Lock{owner, Acquire} log.Debug(). @@ -202,45 +222,17 @@ func (sc *SimpleClient) Pouncers(lockservice.Descriptors) []string { panic("TODO") } -// getFromCache checks the lock status on the descriptor in the cache. -// This function returns an error if the cache doesn't exist or the -// file is already acquired. -func (sc *SimpleClient) getFromCache(d lockservice.Descriptors) error { - if sc.cache != nil { - err := sc.cache.GetElement(cache.NewSimpleKey(d.ID())) - if err == nil { - return lockservice.ErrFileAcquired - } - return nil - } - return cache.ErrCacheDoesntExist -} - -func (sc *SimpleClient) addToCache(d lockservice.Descriptors) error { +// CheckAcquire checks for acquisition of lock and returns the owner if the lock +// is already acquired. +func (sc *SimpleClient) CheckAcquire(d lockservice.Descriptors) (string, error) { if sc.cache != nil { - err := sc.cache.PutElement(cache.NewSimpleKey(d.ID())) + owner, err := sc.getFromCache(d) if err != nil { - return err + return "", err } - return nil + return owner, nil } - return cache.ErrCacheDoesntExist -} -func (sc *SimpleClient) releaseFromCache(d lockservice.Descriptors) error { - if sc.cache != nil { - err := sc.cache.RemoveElement(cache.NewSimpleKey(d.ID())) - if err != nil { - return err - } - return nil - } - return cache.ErrCacheDoesntExist -} - -// CheckAcquire checks for acquisition of lock and returns the owner if the lock -// is already acquired. -func (sc *SimpleClient) CheckAcquire(d lockservice.Descriptors) (string, error) { endPoint := sc.config.IPAddr + ":" + sc.config.PortAddr + "/checkAcquire" data := lockservice.LockCheckRequest{FileID: d.ID()} requestJSON, err := json.Marshal(data) @@ -279,11 +271,38 @@ func (sc *SimpleClient) CheckAcquire(d lockservice.Descriptors) (string, error) return ownerData.Owner, nil } -// watchLock wraps the process of getting the status of a lock -// for cases with or without a cache. -func (sc *SimpleClient) watchLock(d lockservice.Descriptors) (string, error) { +// getFromCache checks the lock status on the descriptor in the cache. +// This function returns an error if the cache doesn't exist or the +// file is NOT acquired. +func (sc *SimpleClient) getFromCache(d lockservice.Descriptors) (string, error) { if sc.cache != nil { - return "", nil + owner, err := sc.cache.GetElement(cache.NewSimpleKey(d.ID(), d.Owner())) + if err != nil { + return "", lockservice.ErrCheckAcquireFailure + } + return owner, nil } - return sc.CheckAcquire(d) + return "", cache.ErrCacheDoesntExist +} + +func (sc *SimpleClient) addToCache(d lockservice.Descriptors) error { + if sc.cache != nil { + err := sc.cache.PutElement(cache.NewSimpleKey(d.ID(), d.Owner())) + if err != nil { + return err + } + return nil + } + return cache.ErrCacheDoesntExist +} + +func (sc *SimpleClient) releaseFromCache(d lockservice.Descriptors) error { + if sc.cache != nil { + err := sc.cache.RemoveElement(cache.NewSimpleKey(d.ID(), d.Owner())) + if err != nil { + return err + } + return nil + } + return cache.ErrCacheDoesntExist } diff --git a/internal/lockclient/simple_client_test.go b/internal/lockclient/simple_client_test.go index 429d212..4604e04 100644 --- a/internal/lockclient/simple_client_test.go +++ b/internal/lockclient/simple_client_test.go @@ -177,6 +177,53 @@ func TestLockService(t *testing.T) { // wait to stop watching gracefully. <-time.After(10 * time.Millisecond) }) + + t.Run("lock watching with cache", func(t *testing.T) { + size := 5 + cache := cache.NewLRUCache(size) + sc := NewSimpleClient(scfg, cache) + + assert := assert.New(t) + d := lockservice.NewSimpleDescriptor("test", "owner1") + // acquire the lock + err := sc.Acquire(d) + assert.Nil(err) + + // start watching the lock. + quit := make(chan struct{}, 1) + stateChan, err := sc.Watch(d, quit) + assert.Nil(err) + + states := []Lock{} + go func() { + for { + state := <-stateChan + states = append(states, state) + } + }() + + err = sc.Release(d) + assert.Nil(err) + + d1 := lockservice.NewSimpleDescriptor("test", "owner2") + err = sc.Acquire(d1) + assert.Nil(err) + + err = sc.Release(d1) + assert.Nil(err) + + d2 := lockservice.NewSimpleDescriptor("test", "owner3") + err = sc.Acquire(d2) + assert.Nil(err) + + err = sc.Release(d2) + assert.Nil(err) + + quit <- struct{}{} + + // wait to stop watching gracefully. + <-time.After(10 * time.Millisecond) + }) quit <- true return } diff --git a/internal/lockservice/errors.go b/internal/lockservice/errors.go index 665789a..2b8c85f 100644 --- a/internal/lockservice/errors.go +++ b/internal/lockservice/errors.go @@ -12,4 +12,5 @@ const ( ErrCantReleaseFile = Error("file cannot be released, wasn't locked before") ErrUnauthorizedAccess = Error("file cannot be released, unauthorized access") ErrCheckAcquireFailure = Error("file is not acquired") + ErrFileUnlocked = Error("file doesn't have a lock") ) diff --git a/internal/lockservice/simpleLockService.go b/internal/lockservice/simpleLockService.go index 0317f9d..d309bd7 100644 --- a/internal/lockservice/simpleLockService.go +++ b/internal/lockservice/simpleLockService.go @@ -120,6 +120,7 @@ func (ls *SimpleLockService) Acquire(sd Descriptors) error { log. Debug(). Str("descriptor", sd.ID()). + Str("owner", sd.Owner()). Msg("locked") return nil } @@ -135,6 +136,7 @@ func (ls *SimpleLockService) Release(sd Descriptors) error { log. Debug(). Str("descriptor", sd.ID()). + Str("owner", sd.Owner()). Msg("released") ls.lockMap.Mutex.Unlock() return nil From 38e35145c6ed0812209250c227c07bc43f290d32 Mon Sep 17 00:00:00 2001 From: SUMUKHA-PK Date: Fri, 31 Jul 2020 22:15:45 +0530 Subject: [PATCH 08/20] this commit adds more clarity on pouncing on a lock --- internal/lockclient/client.go | 4 ++- internal/lockclient/simple_client.go | 52 ++++++++++++++++++++++------ 2 files changed, 44 insertions(+), 12 deletions(-) diff --git a/internal/lockclient/client.go b/internal/lockclient/client.go index d1240c4..fea2eaa 100644 --- a/internal/lockclient/client.go +++ b/internal/lockclient/client.go @@ -29,7 +29,9 @@ type Client interface { // acquired. This is similar to acquire but once a process has // opted to pounce, they will be provided first access by having // a queue of pouncers. - Pounce(lockservice.Descriptors) error + // The second and third arguments dictate the end of the pouncing + // reign and allows pouncing on pre-pounced objects respectively. + Pounce(lockservice.Descriptors, chan struct{}, bool) error // Pouncers returns the current pouncers on any particular lock. Pouncers(lockservice.Descriptors) []string } diff --git a/internal/lockclient/simple_client.go b/internal/lockclient/simple_client.go index a329515..a10249a 100644 --- a/internal/lockclient/simple_client.go +++ b/internal/lockclient/simple_client.go @@ -17,16 +17,19 @@ var _ Config = (*lockservice.SimpleConfig)(nil) // SimpleClient implements Client, the lockclient for LocKey. type SimpleClient struct { - config *lockservice.SimpleConfig - cache *cache.LRUCache + config *lockservice.SimpleConfig + cache *cache.LRUCache + pouncers map[lockservice.Descriptors][]string } // NewSimpleClient returns a new SimpleKey of the given value. // This client works with or without the existance of a cache. func NewSimpleClient(config *lockservice.SimpleConfig, cache *cache.LRUCache) *SimpleClient { + p := make(map[lockservice.Descriptors][]string) return &SimpleClient{ - config: config, - cache: cache, + config: config, + cache: cache, + pouncers: p, } } @@ -124,12 +127,12 @@ func (sc *SimpleClient) StartService(cfg Config) error { panic("TODO") } -// Watch can be used to watch the given lock. +// Watch can be used to watch the given lock descriptor. // This works with or without the existance of a cache // for the client. // // On calling Watch, the current state of the lock is -// returned. If the lock is not acquired, the function returns. +// returned. // If the lock is acquired by a different process, the // details of the acquirer is sent back and the function // doesn't return unless explicitly told to. Only on changes @@ -141,6 +144,17 @@ func (sc *SimpleClient) StartService(cfg Config) error { // // The stateChan is assumed to be cleared as soon as data is // sent through it. +// +// Usage: +// quitChan := make(chan struct{},1) +// stateChan, err := client.Watch(descriptor,quitChan) +// go func() { +// for { +// state := <-stateChan +// // process the state data. +// } +// } +// func (sc *SimpleClient) Watch(d lockservice.Descriptors, quit chan struct{}) (chan Lock, error) { stateChan := make(chan Lock, 1) // releaseNotification is true if the last notification wasn't a release. @@ -213,13 +227,29 @@ func (sc *SimpleClient) Watch(d lockservice.Descriptors, quit chan struct{}) (ch } // Pounce can be used to pounce on a waiting lock. -func (sc *SimpleClient) Pounce(lockservice.Descriptors) error { - panic("TODO") +// +// This can be basically used as a reservation on any given +// pre-acquired lock which can be acquired as soon as it's released. +// +// One lock can have many pouncers. The "pouncer" can choose to +// wait on the "pounce" until it gets the lock or return if there was +// a preceding "pouncer" for the lock. +// +// The "pouncer" can stop "pouncing" at any time by signalling through +// the channel passed as the argument. +// +// The third boolean argument dictates the function to pounce or not +// when there is an existng "pouncer". "true" for pounce even with "pouncers". +// +// The pounce returns on achieving its goal of acquiring the lock. +func (sc *SimpleClient) Pounce(d lockservice.Descriptors, quit chan struct{}, instant bool) error { + + return nil } -// Pouncers can be used to check the existing pouncers on a descriptor. -func (sc *SimpleClient) Pouncers(lockservice.Descriptors) []string { - panic("TODO") +// Pouncers returns the active "pouncers" on a descriptor. +func (sc *SimpleClient) Pouncers(d lockservice.Descriptors) []string { + return sc.pouncers[d] } // CheckAcquire checks for acquisition of lock and returns the owner if the lock From 52b008f84317e1d0f7acd6f36a16f923646ff74d Mon Sep 17 00:00:00 2001 From: = <=> Date: Sat, 15 Aug 2020 20:06:31 +0530 Subject: [PATCH 09/20] this commit adds some basic implementation of the Pounce function and moves Acquire to acquire while allowing Acquire to call Pounce directly --- go.mod | 1 + go.sum | 57 ++++++++++++++++++ internal/lockclient/client.go | 15 ++++- internal/lockclient/errors.go | 12 ++++ internal/lockclient/simple_client.go | 71 ++++++++++++++++++----- internal/lockclient/simple_client_test.go | 30 +++++----- internal/lockservice/errors.go | 4 +- internal/lockservice/lockservice.go | 2 +- internal/lockservice/simpleLockService.go | 14 ++--- internal/routing/acquire.go | 6 +- internal/routing/routing.go | 10 ++-- 11 files changed, 171 insertions(+), 51 deletions(-) create mode 100644 internal/lockclient/errors.go diff --git a/go.mod b/go.mod index 161bbc8..2ea9b1e 100644 --- a/go.mod +++ b/go.mod @@ -6,4 +6,5 @@ require ( github.com/gorilla/mux v1.7.4 github.com/rs/zerolog v1.19.0 github.com/stretchr/testify v1.6.1 + golang.org/x/tools/gopls v0.4.4 // indirect ) diff --git a/go.sum b/go.sum index c5a474a..af664ed 100644 --- a/go.sum +++ b/go.sum @@ -1,24 +1,81 @@ +github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/gorilla/mux v1.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc= github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.5.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.6.0/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/zerolog v1.19.0 h1:hYz4ZVdUgjXTBUmrkrw55j1nHx68LfOKIQk5IYtyScg= github.com/rs/zerolog v1.19.0/go.mod h1:IzD0RJ65iWH0w97OQQebJEvTZYvsCUm9WVLWBQrJRjo= +github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208 h1:qwRHBd0NqMbJxfbotnDhm2ByMI1Shq4Y6oRJo21SGJA= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/tools v0.0.0-20190828213141-aed303cbaa74/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200626171337-aa94e735be7f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729181040-64cdafbe085c h1:jLQLIAedRoS9I2Py7l/ZAGGzUxLFsdg42JXEpS/a+ow= +golang.org/x/tools v0.0.0-20200729181040-64cdafbe085c/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200814230902-9882f1d1823d h1:XZxUC4/ZNKTjrT4/Oc9gCgIYnzPW3/CefdPjsndrVWM= +golang.org/x/tools/gopls v0.4.4 h1:8djGYsaZ0ByP0vaXg4T+mnyfDcHpWKSZ+tpQSGv9ahk= +golang.org/x/tools/gopls v0.4.4/go.mod h1:zhyGzA+CAtREUwwq/btQxEx2FHnGzDwJvGs5YqdVCbE= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.1-2020.1.4 h1:UoveltGrhghAA7ePc+e+QYDHXrBps2PqFZiHkGR/xK8= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +mvdan.cc/gofumpt v0.0.0-20200709182408-4fd085cb6d5f h1:gi7cb8HTDZ6q8VqsUpkdoFi3vxwHMneQ6+Q5Ap5hjPE= +mvdan.cc/gofumpt v0.0.0-20200709182408-4fd085cb6d5f/go.mod h1:9VQ397fNXEnF84t90W4r4TRCQK+pg9f8ugVfyj+S26w= +mvdan.cc/xurls/v2 v2.2.0 h1:NSZPykBXJFCetGZykLAxaL6SIpvbVy/UFEniIfHAa8A= +mvdan.cc/xurls/v2 v2.2.0/go.mod h1:EV1RMtya9D6G5DMYPGD8zTQzaHet6Jh8gFlRgGRJeO8= diff --git a/internal/lockclient/client.go b/internal/lockclient/client.go index fea2eaa..a305917 100644 --- a/internal/lockclient/client.go +++ b/internal/lockclient/client.go @@ -5,16 +5,24 @@ import "github.com/SystemBuilders/LocKey/internal/lockservice" // Client describes a client that can be used to interact with // the Lockey lockservice. The client can start the lockservice // and interact acquire and release locks by making calls to it. +// +// The client has the ability to start the lockservice from its +// in-built function or it can be started separately. +// +// To acquire a lock on an object, the user is forced to go via +// the Pounce function in order to maintain the order of lock +// acquisition. No other function is exposed to the user for the +// same. type Client interface { // StartService starts the lockservice Lockey using the given // configuration. It provides an appropriate error on failing // to do so. Starting the service should be a non-blocking call // and return as soon as the server is started and setup. StartService(Config) error - // Acquire can be used to acquire a lock on Lockey. This + // acquire can be used to acquire a lock on Lockey. This // implementation interacts with the underlying server and // provides the service. - Acquire(lockservice.Descriptors) error + acquire(lockservice.Descriptors) error // Release can be used to release a lock on Lockey. This // implementation interacts with the underlying server and // provides the service. @@ -31,6 +39,7 @@ type Client interface { // a queue of pouncers. // The second and third arguments dictate the end of the pouncing // reign and allows pouncing on pre-pounced objects respectively. + // True bool allows pouncing on pre-pounced objects. Pounce(lockservice.Descriptors, chan struct{}, bool) error // Pouncers returns the current pouncers on any particular lock. Pouncers(lockservice.Descriptors) []string @@ -49,7 +58,7 @@ type State int // These are the states of a lock. const ( - Acquire State = iota + acquire State = iota Release ) diff --git a/internal/lockclient/errors.go b/internal/lockclient/errors.go new file mode 100644 index 0000000..ab2a9d6 --- /dev/null +++ b/internal/lockclient/errors.go @@ -0,0 +1,12 @@ +package lockclient + +// Error provides constant error strings to the driver functions. +type Error string + +func (e Error) Error() string { return string(e) } + +// Constant errors. +// Rule of thumb, all errors start with a small letter and end with no full stop. +const ( + ErrorObjectAlreadyPouncedOn = Error("the object already has a minimum of one pouncer") +) diff --git a/internal/lockclient/simple_client.go b/internal/lockclient/simple_client.go index a10249a..6f06899 100644 --- a/internal/lockclient/simple_client.go +++ b/internal/lockclient/simple_client.go @@ -7,6 +7,7 @@ import ( "io/ioutil" "net/http" "strings" + "sync" "github.com/SystemBuilders/LocKey/internal/cache" "github.com/SystemBuilders/LocKey/internal/lockservice" @@ -20,6 +21,7 @@ type SimpleClient struct { config *lockservice.SimpleConfig cache *cache.LRUCache pouncers map[lockservice.Descriptors][]string + mu sync.Mutex } // NewSimpleClient returns a new SimpleKey of the given value. @@ -35,15 +37,20 @@ func NewSimpleClient(config *lockservice.SimpleConfig, cache *cache.LRUCache) *S var _ Client = (*SimpleClient)(nil) -// Acquire makes an HTTP call to the lockserver and acquires the lock. -// The errors involved may be due the HTTP errors or the lockservice errors. +// Acquire internally calls Pounce in order to follow the FIFO order. func (sc *SimpleClient) Acquire(d lockservice.Descriptors) error { + return sc.Pounce(d, nil, false) +} + +// acquire makes an HTTP call to the lockserver and acquires the lock. +// The errors involved may be due the HTTP errors or the lockservice errors. +func (sc *SimpleClient) acquire(d lockservice.Descriptors) error { // Check for existance of a cache and check // if the element is in the cache. if sc.cache != nil { _, err := sc.getFromCache(d) // Since there can be network errors, we have this double check. - if err != nil && err != lockservice.ErrCheckAcquireFailure { + if err != nil && err != lockservice.ErrCheckacquireFailure { return err } } @@ -159,9 +166,9 @@ func (sc *SimpleClient) Watch(d lockservice.Descriptors, quit chan struct{}) (ch stateChan := make(chan Lock, 1) // releaseNotification is true if the last notification wasn't a release. releaseNotification := false - owner, err := sc.CheckAcquire(d) + owner, err := sc.Checkacquire(d) if err != nil { - if err != lockservice.ErrCheckAcquireFailure { + if err != lockservice.ErrCheckacquireFailure { return nil, err } // This means that the file is released @@ -179,7 +186,7 @@ func (sc *SimpleClient) Watch(d lockservice.Descriptors, quit chan struct{}) (ch // explicitly. if owner != "" { releaseNotification = true - stateChan <- Lock{owner, Acquire} + stateChan <- Lock{owner, acquire} log.Debug(). Str("process", "lock watching"). Str("lock", d.ID()). @@ -194,9 +201,9 @@ func (sc *SimpleClient) Watch(d lockservice.Descriptors, quit chan struct{}) (ch log.Debug().Msg("stopped watching") return default: - newOwner, err := sc.CheckAcquire(d) + newOwner, err := sc.Checkacquire(d) if err != nil { - if err != lockservice.ErrCheckAcquireFailure { + if err != lockservice.ErrCheckacquireFailure { return } if releaseNotification { @@ -212,7 +219,7 @@ func (sc *SimpleClient) Watch(d lockservice.Descriptors, quit chan struct{}) (ch if newOwner != owner { releaseNotification = true owner = newOwner - stateChan <- Lock{owner, Acquire} + stateChan <- Lock{owner, acquire} log.Debug(). Str("process", "lock watching"). Str("lock", d.ID()). @@ -239,22 +246,56 @@ func (sc *SimpleClient) Watch(d lockservice.Descriptors, quit chan struct{}) (ch // the channel passed as the argument. // // The third boolean argument dictates the function to pounce or not -// when there is an existng "pouncer". "true" for pounce even with "pouncers". +// when there is an existng "pouncer", "true" for pounce even with "pouncers". // // The pounce returns on achieving its goal of acquiring the lock. func (sc *SimpleClient) Pounce(d lockservice.Descriptors, quit chan struct{}, instant bool) error { + // Reject the pounce if the client doesn't want to pounce on + // pre-pounced objects. + if !instant && len(sc.Pouncers(d)) > 1 { + log.Debug().Msg("stopped pounce activity, object already under pounce") + return ErrorObjectAlreadyPouncedOn + } + + // If there are no pouncers on the object, grant the lock + // to the client and return. + if len(sc.Pouncers(d)) == 0 { + return sc.acquire(d) + } + + // When the pre-requisites are out of the way, the client + // process can be added to the queue of pouncers. + sc.pouncers[d] = append(sc.pouncers[d], d.Owner()) + + // Here we start waiting for the quit signal in order to + // end on command or wait on the lock state to grant access + // to the pouncer. + // The lock is continously watched and whenever the lock is + // released the first pouncer obtains the lock. + go func() { + for { + select { + case <-quit: + log.Debug().Msg("stop signal received, stopped pouncing activity") + default: + + } + } + }() return nil } // Pouncers returns the active "pouncers" on a descriptor. func (sc *SimpleClient) Pouncers(d lockservice.Descriptors) []string { + sc.mu.Lock() + defer sc.mu.Unlock() return sc.pouncers[d] } -// CheckAcquire checks for acquisition of lock and returns the owner if the lock +// Checkacquire checks for acquisition of lock and returns the owner if the lock // is already acquired. -func (sc *SimpleClient) CheckAcquire(d lockservice.Descriptors) (string, error) { +func (sc *SimpleClient) Checkacquire(d lockservice.Descriptors) (string, error) { if sc.cache != nil { owner, err := sc.getFromCache(d) if err != nil { @@ -263,7 +304,7 @@ func (sc *SimpleClient) CheckAcquire(d lockservice.Descriptors) (string, error) return owner, nil } - endPoint := sc.config.IPAddr + ":" + sc.config.PortAddr + "/checkAcquire" + endPoint := sc.config.IPAddr + ":" + sc.config.PortAddr + "/checkacquire" data := lockservice.LockCheckRequest{FileID: d.ID()} requestJSON, err := json.Marshal(data) if err != nil { @@ -292,7 +333,7 @@ func (sc *SimpleClient) CheckAcquire(d lockservice.Descriptors) (string, error) return "", lockservice.Error(strings.TrimSpace(string(body))) } - var ownerData lockservice.CheckAcquireRes + var ownerData lockservice.CheckacquireRes err = json.Unmarshal(body, &ownerData) if err != nil { return "", err @@ -308,7 +349,7 @@ func (sc *SimpleClient) getFromCache(d lockservice.Descriptors) (string, error) if sc.cache != nil { owner, err := sc.cache.GetElement(cache.NewSimpleKey(d.ID(), d.Owner())) if err != nil { - return "", lockservice.ErrCheckAcquireFailure + return "", lockservice.ErrCheckacquireFailure } return owner, nil } diff --git a/internal/lockclient/simple_client_test.go b/internal/lockclient/simple_client_test.go index 4604e04..c8e110f 100644 --- a/internal/lockclient/simple_client_test.go +++ b/internal/lockclient/simple_client_test.go @@ -41,7 +41,7 @@ func TestLockService(t *testing.T) { d := lockservice.NewSimpleDescriptor("test", "owner") - got := sc.Acquire(d) + got := sc.acquire(d) var want error if got != want { t.Errorf("acquire: got %q want %q", got, want) @@ -49,7 +49,7 @@ func TestLockService(t *testing.T) { d = lockservice.NewSimpleDescriptor("test1", "owner") - got = sc.Acquire(d) + got = sc.acquire(d) if got != want { t.Errorf("acquire: got %q want %q", got, want) } @@ -78,14 +78,14 @@ func TestLockService(t *testing.T) { d := lockservice.NewSimpleDescriptor("test", "owner") - got := sc.Acquire(d) + got := sc.acquire(d) var want error if got != want { t.Errorf("acquire: got %q want %q", got, want) } - got = sc.Acquire(d) - want = lockservice.ErrFileAcquired + got = sc.acquire(d) + want = lockservice.ErrFileacquired if got.Error() != want.Error() { t.Errorf("acquire: got %q want %q", got, want) } @@ -105,7 +105,7 @@ func TestLockService(t *testing.T) { sc := NewSimpleClient(scfg, cache) d := lockservice.NewSimpleDescriptor("test", "owner1") - got := sc.Acquire(d) + got := sc.acquire(d) var want error if got != want { t.Errorf("acquire: got %q want %q", got, want) @@ -119,7 +119,7 @@ func TestLockService(t *testing.T) { } d = lockservice.NewSimpleDescriptor("test2", "owner1") - got = sc.Acquire(d) + got = sc.acquire(d) want = nil if got != want { t.Errorf("acquire: got %q want %q", got, want) @@ -139,7 +139,7 @@ func TestLockService(t *testing.T) { assert := assert.New(t) d := lockservice.NewSimpleDescriptor("test", "owner1") // acquire the lock - err := sc.Acquire(d) + err := sc.acquire(d) assert.Nil(err) // start watching the lock. @@ -159,14 +159,14 @@ func TestLockService(t *testing.T) { assert.Nil(err) d1 := lockservice.NewSimpleDescriptor("test", "owner2") - err = sc.Acquire(d1) + err = sc.acquire(d1) assert.Nil(err) err = sc.Release(d1) assert.Nil(err) d2 := lockservice.NewSimpleDescriptor("test", "owner3") - err = sc.Acquire(d2) + err = sc.acquire(d2) assert.Nil(err) err = sc.Release(d2) @@ -186,7 +186,7 @@ func TestLockService(t *testing.T) { assert := assert.New(t) d := lockservice.NewSimpleDescriptor("test", "owner1") // acquire the lock - err := sc.Acquire(d) + err := sc.acquire(d) assert.Nil(err) // start watching the lock. @@ -206,14 +206,14 @@ func TestLockService(t *testing.T) { assert.Nil(err) d1 := lockservice.NewSimpleDescriptor("test", "owner2") - err = sc.Acquire(d1) + err = sc.acquire(d1) assert.Nil(err) err = sc.Release(d1) assert.Nil(err) d2 := lockservice.NewSimpleDescriptor("test", "owner3") - err = sc.Acquire(d2) + err = sc.acquire(d2) assert.Nil(err) err = sc.Release(d2) @@ -252,7 +252,7 @@ func BenchmarkLocKeyWithoutCache(b *testing.B) { sc := NewSimpleClient(scfg, nil) d := lockservice.NewSimpleDescriptor("test", "owner") for n := 0; n < b.N; n++ { - got := sc.Acquire(d) + got := sc.acquire(d) var want error if got != want { b.Errorf("acquire: got %q want %q", got, want) @@ -291,7 +291,7 @@ func BenchmarkLocKeyWithCache(b *testing.B) { sc := NewSimpleClient(scfg, cache) d := lockservice.NewSimpleDescriptor("test", "owner") for n := 0; n < b.N; n++ { - got := sc.Acquire(d) + got := sc.acquire(d) var want error if got != want { b.Errorf("acquire: got %q want %q", got, want) diff --git a/internal/lockservice/errors.go b/internal/lockservice/errors.go index 2b8c85f..16d2422 100644 --- a/internal/lockservice/errors.go +++ b/internal/lockservice/errors.go @@ -8,9 +8,9 @@ func (e Error) Error() string { return string(e) } // Constant errors. // Rule of thumb, all errors start with a small letter and end with no full stop. const ( - ErrFileAcquired = Error("file already acquired") + ErrFileacquired = Error("file already acquired") ErrCantReleaseFile = Error("file cannot be released, wasn't locked before") ErrUnauthorizedAccess = Error("file cannot be released, unauthorized access") - ErrCheckAcquireFailure = Error("file is not acquired") + ErrCheckacquireFailure = Error("file is not acquired") ErrFileUnlocked = Error("file doesn't have a lock") ) diff --git a/internal/lockservice/lockservice.go b/internal/lockservice/lockservice.go index 40df0b1..761860d 100644 --- a/internal/lockservice/lockservice.go +++ b/internal/lockservice/lockservice.go @@ -12,7 +12,7 @@ type LockService interface { // An error is generated if the same isn't possible for any reason, // including releasing locks on non-acquired descriptors. Release(Descriptors) error - // CheckAcquire checks whether a lock has been acquired on the given descriptor. + // Checkacquire 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) diff --git a/internal/lockservice/simpleLockService.go b/internal/lockservice/simpleLockService.go index d309bd7..e77e286 100644 --- a/internal/lockservice/simpleLockService.go +++ b/internal/lockservice/simpleLockService.go @@ -29,8 +29,8 @@ type LockCheckRequest struct { FileID string `json:"FileID"` } -// CheckAcquireRes is the response of a CheckAcquire. -type CheckAcquireRes struct { +// CheckacquireRes is the response of a Checkacquire. +type CheckacquireRes struct { Owner string `json:"owner"` } @@ -102,7 +102,7 @@ func NewSimpleLockService(log zerolog.Logger) *SimpleLockService { } } -// Acquire function lets a client acquire a lock on an object. +// Acquire function lets a client Acquire a lock on an object. func (ls *SimpleLockService) Acquire(sd Descriptors) error { ls.lockMap.Mutex.Lock() if _, ok := ls.lockMap.LockMap[sd.ID()]; ok { @@ -112,7 +112,7 @@ func (ls *SimpleLockService) Acquire(sd Descriptors) error { Debug(). Str("descriptor", sd.ID()). Msg("can't acquire, already been acquired") - return ErrFileAcquired + return ErrFileacquired } ls.lockMap.LockMap[sd.ID()] = sd.Owner() ls.lockMap.Mutex.Unlock() @@ -162,7 +162,7 @@ func (ls *SimpleLockService) Release(sd Descriptors) error { } -// CheckAcquired returns true if the file is acquired. +// CheckAcquired returns true if the file is Acquired. // It also returns the owner of the file. func (ls *SimpleLockService) CheckAcquired(sd Descriptors) (string, bool) { ls.lockMap.Mutex.Lock() @@ -173,14 +173,14 @@ func (ls *SimpleLockService) CheckAcquired(sd Descriptors) (string, bool) { log. Debug(). Str("descriptor", id). - Msg("checkAcquire success") + Msg("checkacquire success") return owner, true } ls. log. Debug(). Str("descriptor", id). - Msg("check Acquire failure") + Msg("check acquire failure") ls.lockMap.Mutex.Unlock() return "", false } diff --git a/internal/routing/acquire.go b/internal/routing/acquire.go index fccbefa..84737c6 100644 --- a/internal/routing/acquire.go +++ b/internal/routing/acquire.go @@ -8,7 +8,7 @@ import ( "github.com/SystemBuilders/LocKey/internal/lockservice" ) -func acquire(w http.ResponseWriter, r *http.Request, ls *lockservice.SimpleLockService) { +func Acquire(w http.ResponseWriter, r *http.Request, ls *lockservice.SimpleLockService) { body, err := ioutil.ReadAll(r.Body) if err != nil { @@ -60,7 +60,7 @@ func checkAcquired(w http.ResponseWriter, r *http.Request, ls *lockservice.Simpl owner, ok := ls.CheckAcquired(desc) if ok { - byteData, err := json.Marshal(lockservice.CheckAcquireRes{Owner: owner}) + byteData, err := json.Marshal(lockservice.CheckacquireRes{Owner: owner}) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return @@ -68,5 +68,5 @@ func checkAcquired(w http.ResponseWriter, r *http.Request, ls *lockservice.Simpl w.Write(byteData) return } - http.Error(w, lockservice.ErrCheckAcquireFailure.Error(), http.StatusInternalServerError) + http.Error(w, lockservice.ErrCheckacquireFailure.Error(), http.StatusInternalServerError) } diff --git a/internal/routing/routing.go b/internal/routing/routing.go index 575c96f..95008e7 100644 --- a/internal/routing/routing.go +++ b/internal/routing/routing.go @@ -9,20 +9,20 @@ import ( // SetupRouting adds all the routes on the http server. func SetupRouting(ls *lockservice.SimpleLockService, r *mux.Router) *mux.Router { - r.HandleFunc("/acquire", makeAcquireHandler(ls)).Methods(http.MethodPost) - r.HandleFunc("/checkAcquire", makeCheckAcquiredHandler(ls)).Methods(http.MethodPost) + r.HandleFunc("/acquire", makeacquireHandler(ls)).Methods(http.MethodPost) + r.HandleFunc("/checkacquire", makeCheckacquiredHandler(ls)).Methods(http.MethodPost) r.HandleFunc("/release", makeReleaseHandler(ls)).Methods(http.MethodPost) r.HandleFunc("/checkRelease", makeCheckReleaseHandler(ls)).Methods(http.MethodPost) return r } -func makeAcquireHandler(ls *lockservice.SimpleLockService) http.HandlerFunc { +func makeacquireHandler(ls *lockservice.SimpleLockService) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - acquire(w, r, ls) + Acquire(w, r, ls) } } -func makeCheckAcquiredHandler(ls *lockservice.SimpleLockService) http.HandlerFunc { +func makeCheckacquiredHandler(ls *lockservice.SimpleLockService) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { checkAcquired(w, r, ls) } From 7d0575353976f18a44931835f032fc29986e9fda Mon Sep 17 00:00:00 2001 From: = <=> Date: Sun, 16 Aug 2020 12:29:14 +0530 Subject: [PATCH 10/20] this commit moves SimpleDescriptor to LockDescriptor --- internal/lockclient/client.go | 4 +-- internal/lockclient/simple_client.go | 36 ++++++++++++++++++----- internal/lockclient/simple_client_test.go | 36 +++++++++++------------ internal/lockservice/simpleLockService.go | 16 +++++----- internal/routing/acquire.go | 4 +-- internal/routing/release.go | 4 +-- 6 files changed, 60 insertions(+), 40 deletions(-) diff --git a/internal/lockclient/client.go b/internal/lockclient/client.go index a305917..af20e79 100644 --- a/internal/lockclient/client.go +++ b/internal/lockclient/client.go @@ -19,10 +19,10 @@ type Client interface { // to do so. Starting the service should be a non-blocking call // and return as soon as the server is started and setup. StartService(Config) error - // acquire can be used to acquire a lock on Lockey. This + // Acquire can be used to acquire a lock on Lockey. This // implementation interacts with the underlying server and // provides the service. - acquire(lockservice.Descriptors) error + Acquire(lockservice.Descriptors) error // Release can be used to release a lock on Lockey. This // implementation interacts with the underlying server and // provides the service. diff --git a/internal/lockclient/simple_client.go b/internal/lockclient/simple_client.go index 6f06899..47792e0 100644 --- a/internal/lockclient/simple_client.go +++ b/internal/lockclient/simple_client.go @@ -198,6 +198,7 @@ func (sc *SimpleClient) Watch(d lockservice.Descriptors, quit chan struct{}) (ch for { select { case <-quit: + close(stateChan) log.Debug().Msg("stopped watching") return default: @@ -273,16 +274,35 @@ func (sc *SimpleClient) Pounce(d lockservice.Descriptors, quit chan struct{}, in // to the pouncer. // The lock is continously watched and whenever the lock is // released the first pouncer obtains the lock. - go func() { - for { - select { - case <-quit: - log.Debug().Msg("stop signal received, stopped pouncing activity") - default: - + q := make(chan struct{}) + stateChan, err := sc.Watch(d, q) + for { + select { + case <-quit: + log.Debug().Msg("stop signal received, stopped pouncing activity") + default: + + if err != nil { + return err + } + // Just check for one state change and then wait for + state := <-stateChan + // When there's a release operation that occurred, a + // new client process can get access to the lock. + // Always the first element in the slice is granted access + // to the lock on the object. + if state.LockState == Release { + op := sc.Pouncers(d)[0] + // Remove the first element from the slice. + sc.pouncers[d] = append(sc.pouncers[d][:0], sc.pouncers[d][1:]...) + desc := lockservice.NewLockDescriptor(d.ID(), op) + _ = sc.Acquire(desc) } } - }() + break + } + q <- struct{}{} + close(q) return nil } diff --git a/internal/lockclient/simple_client_test.go b/internal/lockclient/simple_client_test.go index c8e110f..6b66ca3 100644 --- a/internal/lockclient/simple_client_test.go +++ b/internal/lockclient/simple_client_test.go @@ -39,7 +39,7 @@ func TestLockService(t *testing.T) { cache := cache.NewLRUCache(size) sc := NewSimpleClient(scfg, cache) - d := lockservice.NewSimpleDescriptor("test", "owner") + d := lockservice.NewLockDescriptor("test", "owner") got := sc.acquire(d) var want error @@ -47,14 +47,14 @@ func TestLockService(t *testing.T) { t.Errorf("acquire: got %q want %q", got, want) } - d = lockservice.NewSimpleDescriptor("test1", "owner") + d = lockservice.NewLockDescriptor("test1", "owner") got = sc.acquire(d) if got != want { t.Errorf("acquire: got %q want %q", got, want) } - d = lockservice.NewSimpleDescriptor("test", "owner") + d = lockservice.NewLockDescriptor("test", "owner") got = sc.Release(d) @@ -62,7 +62,7 @@ func TestLockService(t *testing.T) { t.Errorf("release: got %q want %q", got, want) } - d = lockservice.NewSimpleDescriptor("test1", "owner") + d = lockservice.NewLockDescriptor("test1", "owner") got = sc.Release(d) @@ -76,7 +76,7 @@ func TestLockService(t *testing.T) { cache := cache.NewLRUCache(size) sc := NewSimpleClient(scfg, cache) - d := lockservice.NewSimpleDescriptor("test", "owner") + d := lockservice.NewLockDescriptor("test", "owner") got := sc.acquire(d) var want error @@ -90,7 +90,7 @@ func TestLockService(t *testing.T) { t.Errorf("acquire: got %q want %q", got, want) } - d = lockservice.NewSimpleDescriptor("test", "owner") + d = lockservice.NewLockDescriptor("test", "owner") got = sc.Release(d) want = nil @@ -104,28 +104,28 @@ func TestLockService(t *testing.T) { cache := cache.NewLRUCache(size) sc := NewSimpleClient(scfg, cache) - d := lockservice.NewSimpleDescriptor("test", "owner1") + d := lockservice.NewLockDescriptor("test", "owner1") got := sc.acquire(d) var want error if got != want { t.Errorf("acquire: got %q want %q", got, want) } - d = lockservice.NewSimpleDescriptor("test", "owner2") + d = lockservice.NewLockDescriptor("test", "owner2") got = sc.Release(d) want = lockservice.ErrUnauthorizedAccess if got != want { t.Errorf("acquire: got %v want %v", got, want) } - d = lockservice.NewSimpleDescriptor("test2", "owner1") + d = lockservice.NewLockDescriptor("test2", "owner1") got = sc.acquire(d) want = nil if got != want { t.Errorf("acquire: got %q want %q", got, want) } - d = lockservice.NewSimpleDescriptor("test", "owner1") + d = lockservice.NewLockDescriptor("test", "owner1") got = sc.Release(d) want = nil if got != want { @@ -137,7 +137,7 @@ func TestLockService(t *testing.T) { sc := NewSimpleClient(scfg, nil) assert := assert.New(t) - d := lockservice.NewSimpleDescriptor("test", "owner1") + d := lockservice.NewLockDescriptor("test", "owner1") // acquire the lock err := sc.acquire(d) assert.Nil(err) @@ -158,14 +158,14 @@ func TestLockService(t *testing.T) { err = sc.Release(d) assert.Nil(err) - d1 := lockservice.NewSimpleDescriptor("test", "owner2") + d1 := lockservice.NewLockDescriptor("test", "owner2") err = sc.acquire(d1) assert.Nil(err) err = sc.Release(d1) assert.Nil(err) - d2 := lockservice.NewSimpleDescriptor("test", "owner3") + d2 := lockservice.NewLockDescriptor("test", "owner3") err = sc.acquire(d2) assert.Nil(err) @@ -184,7 +184,7 @@ func TestLockService(t *testing.T) { sc := NewSimpleClient(scfg, cache) assert := assert.New(t) - d := lockservice.NewSimpleDescriptor("test", "owner1") + d := lockservice.NewLockDescriptor("test", "owner1") // acquire the lock err := sc.acquire(d) assert.Nil(err) @@ -205,14 +205,14 @@ func TestLockService(t *testing.T) { err = sc.Release(d) assert.Nil(err) - d1 := lockservice.NewSimpleDescriptor("test", "owner2") + d1 := lockservice.NewLockDescriptor("test", "owner2") err = sc.acquire(d1) assert.Nil(err) err = sc.Release(d1) assert.Nil(err) - d2 := lockservice.NewSimpleDescriptor("test", "owner3") + d2 := lockservice.NewLockDescriptor("test", "owner3") err = sc.acquire(d2) assert.Nil(err) @@ -250,7 +250,7 @@ func BenchmarkLocKeyWithoutCache(b *testing.B) { time.Sleep(100 * time.Millisecond) sc := NewSimpleClient(scfg, nil) - d := lockservice.NewSimpleDescriptor("test", "owner") + d := lockservice.NewLockDescriptor("test", "owner") for n := 0; n < b.N; n++ { got := sc.acquire(d) var want error @@ -289,7 +289,7 @@ func BenchmarkLocKeyWithCache(b *testing.B) { size := 5 cache := cache.NewLRUCache(size) sc := NewSimpleClient(scfg, cache) - d := lockservice.NewSimpleDescriptor("test", "owner") + d := lockservice.NewLockDescriptor("test", "owner") for n := 0; n < b.N; n++ { got := sc.acquire(d) var want error diff --git a/internal/lockservice/simpleLockService.go b/internal/lockservice/simpleLockService.go index e77e286..ef39ad8 100644 --- a/internal/lockservice/simpleLockService.go +++ b/internal/lockservice/simpleLockService.go @@ -54,24 +54,24 @@ type SimpleLockService struct { lockMap *SafeLockMap } -var _ Descriptors = (*SimpleDescriptor)(nil) +var _ Descriptors = (*LockDescriptor)(nil) -// SimpleDescriptor implements the Descriptors interface. +// LockDescriptor implements the Descriptors interface. // Many descriptors can be added to this struct and the ID // can be a combination of all those descriptors. -type SimpleDescriptor struct { +type LockDescriptor struct { FileID string UserID string } // ID represents the distinguishable ID of the descriptor. -func (sd *SimpleDescriptor) ID() string { +func (sd *LockDescriptor) ID() string { return sd.FileID } // Owner represents the distinguishable ID of the entity that // holds the lock for FileID. -func (sd *SimpleDescriptor) Owner() string { +func (sd *LockDescriptor) Owner() string { return sd.UserID } @@ -83,9 +83,9 @@ func NewSimpleConfig(IPAddr, PortAddr string) *SimpleConfig { } } -// NewSimpleDescriptor returns an instance of the SimpleDescriptor. -func NewSimpleDescriptor(FileID, UserID string) *SimpleDescriptor { - return &SimpleDescriptor{ +// NewLockDescriptor returns an instance of the LockDescriptor. +func NewLockDescriptor(FileID, UserID string) *LockDescriptor { + return &LockDescriptor{ FileID: FileID, UserID: UserID, } diff --git a/internal/routing/acquire.go b/internal/routing/acquire.go index 84737c6..7695568 100644 --- a/internal/routing/acquire.go +++ b/internal/routing/acquire.go @@ -24,7 +24,7 @@ func Acquire(w http.ResponseWriter, r *http.Request, ls *lockservice.SimpleLockS return } - desc := &lockservice.SimpleDescriptor{ + desc := &lockservice.LockDescriptor{ FileID: req.FileID, UserID: req.UserID, } @@ -54,7 +54,7 @@ func checkAcquired(w http.ResponseWriter, r *http.Request, ls *lockservice.Simpl return } - desc := &lockservice.SimpleDescriptor{ + desc := &lockservice.LockDescriptor{ FileID: req.FileID, } diff --git a/internal/routing/release.go b/internal/routing/release.go index c60942e..27d7c85 100644 --- a/internal/routing/release.go +++ b/internal/routing/release.go @@ -24,7 +24,7 @@ func release(w http.ResponseWriter, r *http.Request, ls *lockservice.SimpleLockS return } - desc := &lockservice.SimpleDescriptor{ + desc := &lockservice.LockDescriptor{ FileID: req.FileID, UserID: req.UserID, } @@ -59,7 +59,7 @@ func checkReleased(w http.ResponseWriter, r *http.Request, ls *lockservice.Simpl return } - desc := &lockservice.SimpleDescriptor{ + desc := &lockservice.LockDescriptor{ FileID: req.FileID, UserID: req.UserID, } From 35be35b86f6feef2ecf3277eb5b3a9cb27eae46e Mon Sep 17 00:00:00 2001 From: = <=> Date: Sun, 16 Aug 2020 12:48:34 +0530 Subject: [PATCH 11/20] this commit adds the new ObjectDescriptor type across the lockclient and lockservice in view of #21 --- internal/lockclient/client.go | 11 +++++---- internal/lockclient/simple_client.go | 30 +++++++++++------------ internal/lockclient/simple_client_test.go | 4 +-- internal/lockservice/simpleLockService.go | 13 ++++++++++ 4 files changed, 36 insertions(+), 22 deletions(-) diff --git a/internal/lockclient/client.go b/internal/lockclient/client.go index af20e79..38a610e 100644 --- a/internal/lockclient/client.go +++ b/internal/lockclient/client.go @@ -32,17 +32,18 @@ type Client interface { // will be notified about the change. // The channel passed as the argument can be used to stop watching // at any point of time. - Watch(lockservice.Descriptors, chan struct{}) (chan Lock, error) + Watch(lockservice.ObjectDescriptor, chan struct{}) (chan Lock, error) // Pounce can be used to "pounce" on a lock that has already been // acquired. This is similar to acquire but once a process has // opted to pounce, they will be provided first access by having // a queue of pouncers. - // The second and third arguments dictate the end of the pouncing - // reign and allows pouncing on pre-pounced objects respectively. + // The second, third and fourth arguments dictate the end of the pouncing + // reign, the owner willig to pounce and allows pouncing on pre-pounced + // objects respectively. // True bool allows pouncing on pre-pounced objects. - Pounce(lockservice.Descriptors, chan struct{}, bool) error + Pounce(lockservice.ObjectDescriptor, string, chan struct{}, bool) error // Pouncers returns the current pouncers on any particular lock. - Pouncers(lockservice.Descriptors) []string + Pouncers(lockservice.ObjectDescriptor) []string } // Config describes the configuration for the lockservice to run on. diff --git a/internal/lockclient/simple_client.go b/internal/lockclient/simple_client.go index 47792e0..8a07c99 100644 --- a/internal/lockclient/simple_client.go +++ b/internal/lockclient/simple_client.go @@ -20,14 +20,14 @@ var _ Config = (*lockservice.SimpleConfig)(nil) type SimpleClient struct { config *lockservice.SimpleConfig cache *cache.LRUCache - pouncers map[lockservice.Descriptors][]string + pouncers map[lockservice.ObjectDescriptor][]string mu sync.Mutex } // NewSimpleClient returns a new SimpleKey of the given value. // This client works with or without the existance of a cache. func NewSimpleClient(config *lockservice.SimpleConfig, cache *cache.LRUCache) *SimpleClient { - p := make(map[lockservice.Descriptors][]string) + p := make(map[lockservice.ObjectDescriptor][]string) return &SimpleClient{ config: config, cache: cache, @@ -39,7 +39,7 @@ var _ Client = (*SimpleClient)(nil) // Acquire internally calls Pounce in order to follow the FIFO order. func (sc *SimpleClient) Acquire(d lockservice.Descriptors) error { - return sc.Pounce(d, nil, false) + return sc.Pounce(lockservice.ObjectDescriptor{ObjectID: d.ID()}, d.Owner(), nil, false) } // acquire makes an HTTP call to the lockserver and acquires the lock. @@ -162,11 +162,11 @@ func (sc *SimpleClient) StartService(cfg Config) error { // } // } // -func (sc *SimpleClient) Watch(d lockservice.Descriptors, quit chan struct{}) (chan Lock, error) { +func (sc *SimpleClient) Watch(d lockservice.ObjectDescriptor, quit chan struct{}) (chan Lock, error) { stateChan := make(chan Lock, 1) // releaseNotification is true if the last notification wasn't a release. releaseNotification := false - owner, err := sc.Checkacquire(d) + owner, err := sc.Checkacquire(&lockservice.LockDescriptor{FileID: d.ObjectID}) if err != nil { if err != lockservice.ErrCheckacquireFailure { return nil, err @@ -177,7 +177,7 @@ func (sc *SimpleClient) Watch(d lockservice.Descriptors, quit chan struct{}) (ch stateChan <- Lock{"", Release} log.Debug(). Str("process", "lock watching"). - Str("lock", d.ID()). + Str("lock", d.ObjectID). Msg("lock is in released state") } } @@ -189,7 +189,7 @@ func (sc *SimpleClient) Watch(d lockservice.Descriptors, quit chan struct{}) (ch stateChan <- Lock{owner, acquire} log.Debug(). Str("process", "lock watching"). - Str("lock", d.ID()). + Str("lock", d.ObjectID). Str("owner", owner). Msg("lock is in acquired state") } @@ -202,7 +202,7 @@ func (sc *SimpleClient) Watch(d lockservice.Descriptors, quit chan struct{}) (ch log.Debug().Msg("stopped watching") return default: - newOwner, err := sc.Checkacquire(d) + newOwner, err := sc.Checkacquire(&lockservice.LockDescriptor{FileID: d.ObjectID}) if err != nil { if err != lockservice.ErrCheckacquireFailure { return @@ -212,7 +212,7 @@ func (sc *SimpleClient) Watch(d lockservice.Descriptors, quit chan struct{}) (ch stateChan <- Lock{"", Release} log.Debug(). Str("process", "lock watching"). - Str("lock", d.ID()). + Str("lock", d.ObjectID). Msg("lock is in released state") } } else { @@ -223,7 +223,7 @@ func (sc *SimpleClient) Watch(d lockservice.Descriptors, quit chan struct{}) (ch stateChan <- Lock{owner, acquire} log.Debug(). Str("process", "lock watching"). - Str("lock", d.ID()). + Str("lock", d.ObjectID). Str("owner", owner). Msg("lock is in acquired state") } @@ -250,7 +250,7 @@ func (sc *SimpleClient) Watch(d lockservice.Descriptors, quit chan struct{}) (ch // when there is an existng "pouncer", "true" for pounce even with "pouncers". // // The pounce returns on achieving its goal of acquiring the lock. -func (sc *SimpleClient) Pounce(d lockservice.Descriptors, quit chan struct{}, instant bool) error { +func (sc *SimpleClient) Pounce(d lockservice.ObjectDescriptor, owner string, quit chan struct{}, instant bool) error { // Reject the pounce if the client doesn't want to pounce on // pre-pounced objects. @@ -262,12 +262,12 @@ func (sc *SimpleClient) Pounce(d lockservice.Descriptors, quit chan struct{}, in // If there are no pouncers on the object, grant the lock // to the client and return. if len(sc.Pouncers(d)) == 0 { - return sc.acquire(d) + return sc.acquire(&lockservice.LockDescriptor{FileID: d.ObjectID, UserID: owner}) } // When the pre-requisites are out of the way, the client // process can be added to the queue of pouncers. - sc.pouncers[d] = append(sc.pouncers[d], d.Owner()) + sc.pouncers[d] = append(sc.pouncers[d], owner) // Here we start waiting for the quit signal in order to // end on command or wait on the lock state to grant access @@ -295,7 +295,7 @@ func (sc *SimpleClient) Pounce(d lockservice.Descriptors, quit chan struct{}, in op := sc.Pouncers(d)[0] // Remove the first element from the slice. sc.pouncers[d] = append(sc.pouncers[d][:0], sc.pouncers[d][1:]...) - desc := lockservice.NewLockDescriptor(d.ID(), op) + desc := lockservice.NewLockDescriptor(d.ObjectID, op) _ = sc.Acquire(desc) } } @@ -307,7 +307,7 @@ func (sc *SimpleClient) Pounce(d lockservice.Descriptors, quit chan struct{}, in } // Pouncers returns the active "pouncers" on a descriptor. -func (sc *SimpleClient) Pouncers(d lockservice.Descriptors) []string { +func (sc *SimpleClient) Pouncers(d lockservice.ObjectDescriptor) []string { sc.mu.Lock() defer sc.mu.Unlock() return sc.pouncers[d] diff --git a/internal/lockclient/simple_client_test.go b/internal/lockclient/simple_client_test.go index 6b66ca3..babe868 100644 --- a/internal/lockclient/simple_client_test.go +++ b/internal/lockclient/simple_client_test.go @@ -144,7 +144,7 @@ func TestLockService(t *testing.T) { // start watching the lock. quit := make(chan struct{}, 1) - stateChan, err := sc.Watch(d, quit) + stateChan, err := sc.Watch(lockservice.ObjectDescriptor{ObjectID: d.ID()}, quit) assert.Nil(err) states := []Lock{} @@ -191,7 +191,7 @@ func TestLockService(t *testing.T) { // start watching the lock. quit := make(chan struct{}, 1) - stateChan, err := sc.Watch(d, quit) + stateChan, err := sc.Watch(lockservice.ObjectDescriptor{ObjectID: d.ID()}, quit) assert.Nil(err) states := []Lock{} diff --git a/internal/lockservice/simpleLockService.go b/internal/lockservice/simpleLockService.go index ef39ad8..23a0f0f 100644 --- a/internal/lockservice/simpleLockService.go +++ b/internal/lockservice/simpleLockService.go @@ -56,6 +56,12 @@ type SimpleLockService struct { var _ Descriptors = (*LockDescriptor)(nil) +// ObjectDescriptor describes the object that is subjected to +// lock operations. +type ObjectDescriptor struct { + ObjectID string +} + // LockDescriptor implements the Descriptors interface. // Many descriptors can be added to this struct and the ID // can be a combination of all those descriptors. @@ -91,6 +97,13 @@ func NewLockDescriptor(FileID, UserID string) *LockDescriptor { } } +// NewObjectDescriptor returns an instance of the ObjectDescriptor. +func NewObjectDescriptor(ObjectID string) *ObjectDescriptor { + return &ObjectDescriptor{ + ObjectID: ObjectID, + } +} + // NewSimpleLockService creates and returns a new lock service ready to use. func NewSimpleLockService(log zerolog.Logger) *SimpleLockService { safeLockMap := &SafeLockMap{ From ed4600671f9053dfd1780b7b0b341da9d6af9db0 Mon Sep 17 00:00:00 2001 From: SUMUKHA-PK Date: Wed, 19 Aug 2020 20:34:50 +0530 Subject: [PATCH 12/20] this commit has the POC of lock pouncing, tests will be implemented soon --- internal/lockclient/client.go | 14 ++++++++------ internal/lockclient/simple_client.go | 6 ++++++ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/internal/lockclient/client.go b/internal/lockclient/client.go index 38a610e..bec68dc 100644 --- a/internal/lockclient/client.go +++ b/internal/lockclient/client.go @@ -4,15 +4,18 @@ import "github.com/SystemBuilders/LocKey/internal/lockservice" // Client describes a client that can be used to interact with // the Lockey lockservice. The client can start the lockservice -// and interact acquire and release locks by making calls to it. +// and interact by making calls to it. // // The client has the ability to start the lockservice from its // in-built function or it can be started separately. // +// The client offers the user to Acquire a lock, Release a lock, +// and Watch or Pounce on any object using it's descriptor. +// // To acquire a lock on an object, the user is forced to go via // the Pounce function in order to maintain the order of lock -// acquisition. No other function is exposed to the user for the -// same. +// acquisition. The Acquire function that is exposed must cleverly +// handle this problem. type Client interface { // StartService starts the lockservice Lockey using the given // configuration. It provides an appropriate error on failing @@ -38,9 +41,8 @@ type Client interface { // opted to pounce, they will be provided first access by having // a queue of pouncers. // The second, third and fourth arguments dictate the end of the pouncing - // reign, the owner willig to pounce and allows pouncing on pre-pounced - // objects respectively. - // True bool allows pouncing on pre-pounced objects. + // reign, the owner willing to pounce and allows pouncing on pre-pounced + // objects respectively. True bool allows pouncing on pre-pounced objects. Pounce(lockservice.ObjectDescriptor, string, chan struct{}, bool) error // Pouncers returns the current pouncers on any particular lock. Pouncers(lockservice.ObjectDescriptor) []string diff --git a/internal/lockclient/simple_client.go b/internal/lockclient/simple_client.go index 8a07c99..e28502e 100644 --- a/internal/lockclient/simple_client.go +++ b/internal/lockclient/simple_client.go @@ -296,7 +296,13 @@ func (sc *SimpleClient) Pounce(d lockservice.ObjectDescriptor, owner string, qui // Remove the first element from the slice. sc.pouncers[d] = append(sc.pouncers[d][:0], sc.pouncers[d][1:]...) desc := lockservice.NewLockDescriptor(d.ObjectID, op) + // Errors arising here aren't propagated because this + // process doesn't care about it. _ = sc.Acquire(desc) + // Exit condition is the pouncer getting access to the lock. + if op == owner { + return nil + } } } break From 5056971c45724d142eb53f3a8400c9771491e09c Mon Sep 17 00:00:00 2001 From: SUMUKHA-PK Date: Sat, 22 Aug 2020 20:05:23 +0530 Subject: [PATCH 13/20] this commit resolves #17, implements lock-watching and lock-pouncing --- go.sum | 1 + internal/lockclient/simple_client.go | 139 ++++++++++++----- internal/lockclient/simple_client_test.go | 180 ++++++++++++++++++++++ 3 files changed, 279 insertions(+), 41 deletions(-) diff --git a/go.sum b/go.sum index af664ed..ea032bc 100644 --- a/go.sum +++ b/go.sum @@ -25,6 +25,7 @@ github.com/rs/zerolog v1.19.0 h1:hYz4ZVdUgjXTBUmrkrw55j1nHx68LfOKIQk5IYtyScg= github.com/rs/zerolog v1.19.0/go.mod h1:IzD0RJ65iWH0w97OQQebJEvTZYvsCUm9WVLWBQrJRjo= github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= diff --git a/internal/lockclient/simple_client.go b/internal/lockclient/simple_client.go index e28502e..966428f 100644 --- a/internal/lockclient/simple_client.go +++ b/internal/lockclient/simple_client.go @@ -38,17 +38,21 @@ func NewSimpleClient(config *lockservice.SimpleConfig, cache *cache.LRUCache) *S var _ Client = (*SimpleClient)(nil) // Acquire internally calls Pounce in order to follow the FIFO order. +// Acquire assumes that the process will wait for the lock until it's released. func (sc *SimpleClient) Acquire(d lockservice.Descriptors) error { - return sc.Pounce(lockservice.ObjectDescriptor{ObjectID: d.ID()}, d.Owner(), nil, false) + return sc.Pounce(lockservice.ObjectDescriptor{ObjectID: d.ID()}, d.Owner(), nil, true) } // acquire makes an HTTP call to the lockserver and acquires the lock. // The errors involved may be due the HTTP errors or the lockservice errors. +// +// acquire can ONLY be called by Pouncer when it's sure that this was the +// process next in line to acquire the lock. func (sc *SimpleClient) acquire(d lockservice.Descriptors) error { // Check for existance of a cache and check // if the element is in the cache. if sc.cache != nil { - _, err := sc.getFromCache(d) + _, err := sc.getFromCache(lockservice.ObjectDescriptor{ObjectID: d.ID()}) // Since there can be network errors, we have this double check. if err != nil && err != lockservice.ErrCheckacquireFailure { return err @@ -166,7 +170,7 @@ func (sc *SimpleClient) Watch(d lockservice.ObjectDescriptor, quit chan struct{} stateChan := make(chan Lock, 1) // releaseNotification is true if the last notification wasn't a release. releaseNotification := false - owner, err := sc.Checkacquire(&lockservice.LockDescriptor{FileID: d.ObjectID}) + owner, err := sc.Checkacquire(d) if err != nil { if err != lockservice.ErrCheckacquireFailure { return nil, err @@ -202,7 +206,7 @@ func (sc *SimpleClient) Watch(d lockservice.ObjectDescriptor, quit chan struct{} log.Debug().Msg("stopped watching") return default: - newOwner, err := sc.Checkacquire(&lockservice.LockDescriptor{FileID: d.ObjectID}) + newOwner, err := sc.Checkacquire(d) if err != nil { if err != lockservice.ErrCheckacquireFailure { return @@ -234,41 +238,55 @@ func (sc *SimpleClient) Watch(d lockservice.ObjectDescriptor, quit chan struct{} return stateChan, nil } -// Pounce can be used to pounce on a waiting lock. -// -// This can be basically used as a reservation on any given -// pre-acquired lock which can be acquired as soon as it's released. +// Pounce can be used to acquire a lock that has already been acquired. +// It allows the process to wait for the lock in a queue and obtain it +// in FCFS order. // // One lock can have many pouncers. The "pouncer" can choose to -// wait on the "pounce" until it gets the lock or return if there was +// wait on the object until it gets the lock or return if there was // a preceding "pouncer" for the lock. // // The "pouncer" can stop "pouncing" at any time by signalling through // the channel passed as the argument. // -// The third boolean argument dictates the function to pounce or not +// The boolean argument dictates the function to pounce or not // when there is an existng "pouncer", "true" for pounce even with "pouncers". // -// The pounce returns on achieving its goal of acquiring the lock. +// The pounce returns on achieving its goal of acquiring the lock or when +// there are no more pouncers to be served. +// +// Pounce usage: +// go func() { +// err := sc.Pounce(objectDesc,owner,quitChan,instantPounce) +// // errcheck +// } +// Pounce must be used inside a goroutine as it's a blocking process. +// Handling of ErrObjectHasBeenPouncedOn is necesssary. func (sc *SimpleClient) Pounce(d lockservice.ObjectDescriptor, owner string, quit chan struct{}, instant bool) error { + log.Debug(). + Str("object", d.ObjectID). + Str("pouncer", owner). + Msg("beginning pounce") + // Reject the pounce if the client doesn't want to pounce on // pre-pounced objects. - if !instant && len(sc.Pouncers(d)) > 1 { + if !instant && (len(sc.Pouncers(d)) > 0) { log.Debug().Msg("stopped pounce activity, object already under pounce") return ErrorObjectAlreadyPouncedOn } - // If there are no pouncers on the object, grant the lock - // to the client and return. - if len(sc.Pouncers(d)) == 0 { + // If the lock is already acquired, the pouncee is added to the waiting list of + // pouncers, else, the process gets access to the lock immidiately. + _, err := sc.Checkacquire(d) + if err == nil { + sc.mu.Lock() + sc.pouncers[d] = append(sc.pouncers[d], owner) + sc.mu.Unlock() + } else { return sc.acquire(&lockservice.LockDescriptor{FileID: d.ObjectID, UserID: owner}) } - // When the pre-requisites are out of the way, the client - // process can be added to the queue of pouncers. - sc.pouncers[d] = append(sc.pouncers[d], owner) - // Here we start waiting for the quit signal in order to // end on command or wait on the lock state to grant access // to the pouncer. @@ -276,43 +294,64 @@ func (sc *SimpleClient) Pounce(d lockservice.ObjectDescriptor, owner string, qui // released the first pouncer obtains the lock. q := make(chan struct{}) stateChan, err := sc.Watch(d, q) + if err != nil { + return err + } for { select { case <-quit: - log.Debug().Msg("stop signal received, stopped pouncing activity") + // This owner will be added to the pouncer's queue, + // it must be removed + sc.removeOwner(d, owner) + log.Debug().Msg("stop signal received, stopped pouncing process") default: - - if err != nil { - return err - } - // Just check for one state change and then wait for state := <-stateChan // When there's a release operation that occurred, a // new client process can get access to the lock. // Always the first element in the slice is granted access // to the lock on the object. if state.LockState == Release { - op := sc.Pouncers(d)[0] - // Remove the first element from the slice. - sc.pouncers[d] = append(sc.pouncers[d][:0], sc.pouncers[d][1:]...) - desc := lockservice.NewLockDescriptor(d.ObjectID, op) + var op string + if len(sc.Pouncers(d)) > 0 { + op = sc.Pouncers(d)[0] + } + // Errors arising here aren't propagated because this // process doesn't care about it. - _ = sc.Acquire(desc) - // Exit condition is the pouncer getting access to the lock. - if op == owner { - return nil + curOwner, err := sc.Checkacquire(d) + if curOwner == "" && err != nil { + desc := lockservice.NewLockDescriptor(d.ObjectID, op) + err = sc.acquire(desc) + if err == nil { + sc.mu.Lock() + // Once the task of acquiring is complete, remove + // the first element from the slice as it was granted the lock. + sc.pouncers[d] = append(sc.pouncers[d][:0], sc.pouncers[d][1:]...) + sc.mu.Unlock() + + log.Debug(). + Str("lock granted through pounce to", op). + Msg("pounce success") + + // Exit condition is the pouncer getting access to the lock. + if op == owner || len(sc.Pouncers(d)) == 0 { + log.Debug(). + Str("owner", owner). + Msg("stopping pouncing process, pouncer availed lock") + q <- struct{}{} + close(q) + return nil + } + } } + } } - break } - q <- struct{}{} - close(q) - return nil } // Pouncers returns the active "pouncers" on a descriptor. +// This is safe to read concurrently. func (sc *SimpleClient) Pouncers(d lockservice.ObjectDescriptor) []string { sc.mu.Lock() defer sc.mu.Unlock() @@ -321,7 +360,10 @@ func (sc *SimpleClient) Pouncers(d lockservice.ObjectDescriptor) []string { // Checkacquire checks for acquisition of lock and returns the owner if the lock // is already acquired. -func (sc *SimpleClient) Checkacquire(d lockservice.Descriptors) (string, error) { +// The errors returned can be due to HTTP errors or marshalling errors. +// A "file is not acquired" error is returned if so and no error and an owner is +// returned if the object is acquired. +func (sc *SimpleClient) Checkacquire(d lockservice.ObjectDescriptor) (string, error) { if sc.cache != nil { owner, err := sc.getFromCache(d) if err != nil { @@ -331,7 +373,7 @@ func (sc *SimpleClient) Checkacquire(d lockservice.Descriptors) (string, error) } endPoint := sc.config.IPAddr + ":" + sc.config.PortAddr + "/checkacquire" - data := lockservice.LockCheckRequest{FileID: d.ID()} + data := lockservice.LockCheckRequest{FileID: d.ObjectID} requestJSON, err := json.Marshal(data) if err != nil { return "", err @@ -371,9 +413,9 @@ func (sc *SimpleClient) Checkacquire(d lockservice.Descriptors) (string, error) // getFromCache checks the lock status on the descriptor in the cache. // This function returns an error if the cache doesn't exist or the // file is NOT acquired. -func (sc *SimpleClient) getFromCache(d lockservice.Descriptors) (string, error) { +func (sc *SimpleClient) getFromCache(d lockservice.ObjectDescriptor) (string, error) { if sc.cache != nil { - owner, err := sc.cache.GetElement(cache.NewSimpleKey(d.ID(), d.Owner())) + owner, err := sc.cache.GetElement(cache.NewSimpleKey(d.ObjectID, "")) if err != nil { return "", lockservice.ErrCheckacquireFailure } @@ -403,3 +445,18 @@ func (sc *SimpleClient) releaseFromCache(d lockservice.Descriptors) error { } return cache.ErrCacheDoesntExist } + +func (sc *SimpleClient) removeOwner(d lockservice.ObjectDescriptor, owner string) { + index := -1 + sc.mu.Lock() + for i := 0; i < len(sc.pouncers[d]); i++ { + if sc.pouncers[d][i] == owner { + index = i + break + } + } + if index != -1 { + sc.pouncers[d] = append(sc.pouncers[d][:index], sc.pouncers[d][index+1:]...) + } + sc.mu.Unlock() +} diff --git a/internal/lockclient/simple_client_test.go b/internal/lockclient/simple_client_test.go index babe868..fd66a55 100644 --- a/internal/lockclient/simple_client_test.go +++ b/internal/lockclient/simple_client_test.go @@ -224,6 +224,186 @@ func TestLockService(t *testing.T) { // wait to stop watching gracefully. <-time.After(10 * time.Millisecond) }) + + // This test first makes a process acquire a lock. + // Later, pounces using 3 different owners on the same object, + // and then release one by one and observe the behaviour and + // assert the expected behaviour. + // Time waits are added in order to maintain the sequence of + // pounces and have a deterministic test. + t.Run("pounce test without quitting in between, always wait for object", func(t *testing.T) { + size := 5 + cache := cache.NewLRUCache(size) + sc := NewSimpleClient(scfg, cache) + + assert := assert.New(t) + d := lockservice.NewLockDescriptor("test", "owner") + err := sc.Acquire(d) + assert.NoError(err) + + objD := lockservice.NewObjectDescriptor("test") + + go func() { + err = sc.Pounce(*objD, "owner1", nil, true) + assert.NoError(err) + }() + + go func() { + <-time.After(100 * time.Millisecond) + err = sc.Pounce(*objD, "owner2", nil, true) + assert.NoError(err) + }() + + go func() { + <-time.After(500 * time.Millisecond) + err = sc.Pounce(*objD, "owner3", nil, true) + assert.NoError(err) + }() + + pouncersBeforeFirstRelease := []string{"owner1", "owner2", "owner3"} + pouncersAfterFirstRelease := []string{"owner2", "owner3"} + pouncersAfterSecondRelease := []string{"owner3"} + pouncersAfterThirdRelease := []string{} + + <-time.After(1 * time.Second) + assert.Equal(sc.Pouncers(*objD), pouncersBeforeFirstRelease) + + err = sc.Release(d) + assert.NoError(err) + <-time.After(1 * time.Second) + assert.Equal(sc.Pouncers(*objD), pouncersAfterFirstRelease) + + <-time.After(1 * time.Second) + owner, err := sc.Checkacquire(*objD) + if owner == "owner1" { + err = sc.Release(&lockservice.LockDescriptor{FileID: objD.ObjectID, UserID: "owner1"}) + assert.NoError(err) + } + + <-time.After(1 * time.Second) + assert.Equal(sc.Pouncers(*objD), pouncersAfterSecondRelease) + + <-time.After(1 * time.Second) + owner, err = sc.Checkacquire(*objD) + if owner == "owner2" { + err = sc.Release(&lockservice.LockDescriptor{FileID: objD.ObjectID, UserID: "owner2"}) + assert.NoError(err) + } + + <-time.After(1 * time.Second) + assert.Equal(sc.Pouncers(*objD), pouncersAfterThirdRelease) + }) + + // This test is very similar to the one above but owner2 doensn't wait for its pounce. + t.Run("pounce test without quitting in between, without waiting for object", func(t *testing.T) { + size := 5 + cache := cache.NewLRUCache(size) + sc := NewSimpleClient(scfg, cache) + + assert := assert.New(t) + d := lockservice.NewLockDescriptor("test1", "owner") + err := sc.Acquire(d) + assert.NoError(err) + + objD := lockservice.NewObjectDescriptor("test1") + + go func() { + err = sc.Pounce(*objD, "owner1", nil, true) + assert.NoError(err) + }() + + go func() { + <-time.After(100 * time.Millisecond) + err = sc.Pounce(*objD, "owner2", nil, false) + if err != ErrorObjectAlreadyPouncedOn { + assert.NoError(err) + } + }() + + go func() { + <-time.After(500 * time.Millisecond) + err = sc.Pounce(*objD, "owner3", nil, true) + assert.NoError(err) + }() + + pouncersBeforeFirstRelease := []string{"owner1", "owner3"} + pouncersAfterFirstRelease := []string{"owner3"} + pouncersAfterSecondRelease := []string{} + + <-time.After(1 * time.Second) + assert.Equal(sc.Pouncers(*objD), pouncersBeforeFirstRelease) + + err = sc.Release(d) + assert.NoError(err) + <-time.After(1 * time.Second) + assert.Equal(sc.Pouncers(*objD), pouncersAfterFirstRelease) + + <-time.After(1 * time.Second) + owner, err := sc.Checkacquire(*objD) + if owner == "owner1" { + err = sc.Release(&lockservice.LockDescriptor{FileID: objD.ObjectID, UserID: "owner1"}) + assert.NoError(err) + } + + <-time.After(2 * time.Second) + assert.Equal(sc.Pouncers(*objD), pouncersAfterSecondRelease) + }) + + // This test is very similar to the one above but a quit signal is sent to owner2's pounce. + t.Run("pounce test without quitting in between, without waiting for object", func(t *testing.T) { + size := 5 + cache := cache.NewLRUCache(size) + sc := NewSimpleClient(scfg, cache) + + assert := assert.New(t) + d := lockservice.NewLockDescriptor("testx", "owner") + + quitChan := make(chan struct{}, 1) + err := sc.Acquire(d) + assert.NoError(err) + + objD := lockservice.NewObjectDescriptor("testx") + + go func() { + err = sc.Pounce(*objD, "owner1", nil, true) + assert.NoError(err) + }() + + go func() { + <-time.After(100 * time.Millisecond) + err = sc.Pounce(*objD, "owner2", quitChan, true) + }() + + go func() { + <-time.After(500 * time.Millisecond) + err = sc.Pounce(*objD, "owner3", nil, true) + assert.NoError(err) + }() + + pouncersBeforeFirstRelease := []string{"owner1", "owner2", "owner3"} + pouncersAfterFirstRelease := []string{"owner3"} + pouncersAfterSecondRelease := []string{} + + <-time.After(1 * time.Second) + assert.Equal(sc.Pouncers(*objD), pouncersBeforeFirstRelease) + + quitChan <- struct{}{} + err = sc.Release(d) + assert.NoError(err) + <-time.After(1 * time.Second) + assert.Equal(sc.Pouncers(*objD), pouncersAfterFirstRelease) + + <-time.After(1 * time.Second) + owner, err := sc.Checkacquire(*objD) + if owner == "owner1" { + err = sc.Release(&lockservice.LockDescriptor{FileID: objD.ObjectID, UserID: "owner1"}) + assert.NoError(err) + } + + <-time.After(2 * time.Second) + assert.Equal(sc.Pouncers(*objD), pouncersAfterSecondRelease) + }) + quit <- true return } From 45c6b67070ec82277cd8477d6600487869fc45d4 Mon Sep 17 00:00:00 2001 From: SUMUKHA-PK Date: Sat, 22 Aug 2020 20:14:58 +0530 Subject: [PATCH 14/20] this commit fixes a race condition on the err variables in the test file --- internal/lockclient/simple_client_test.go | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/internal/lockclient/simple_client_test.go b/internal/lockclient/simple_client_test.go index fd66a55..fd740b5 100644 --- a/internal/lockclient/simple_client_test.go +++ b/internal/lockclient/simple_client_test.go @@ -244,19 +244,19 @@ func TestLockService(t *testing.T) { objD := lockservice.NewObjectDescriptor("test") go func() { - err = sc.Pounce(*objD, "owner1", nil, true) + err := sc.Pounce(*objD, "owner1", nil, true) assert.NoError(err) }() go func() { <-time.After(100 * time.Millisecond) - err = sc.Pounce(*objD, "owner2", nil, true) + err := sc.Pounce(*objD, "owner2", nil, true) assert.NoError(err) }() go func() { <-time.After(500 * time.Millisecond) - err = sc.Pounce(*objD, "owner3", nil, true) + err := sc.Pounce(*objD, "owner3", nil, true) assert.NoError(err) }() @@ -308,13 +308,13 @@ func TestLockService(t *testing.T) { objD := lockservice.NewObjectDescriptor("test1") go func() { - err = sc.Pounce(*objD, "owner1", nil, true) + err := sc.Pounce(*objD, "owner1", nil, true) assert.NoError(err) }() go func() { <-time.After(100 * time.Millisecond) - err = sc.Pounce(*objD, "owner2", nil, false) + err := sc.Pounce(*objD, "owner2", nil, false) if err != ErrorObjectAlreadyPouncedOn { assert.NoError(err) } @@ -322,7 +322,7 @@ func TestLockService(t *testing.T) { go func() { <-time.After(500 * time.Millisecond) - err = sc.Pounce(*objD, "owner3", nil, true) + err := sc.Pounce(*objD, "owner3", nil, true) assert.NoError(err) }() @@ -365,18 +365,19 @@ func TestLockService(t *testing.T) { objD := lockservice.NewObjectDescriptor("testx") go func() { - err = sc.Pounce(*objD, "owner1", nil, true) + err := sc.Pounce(*objD, "owner1", nil, true) assert.NoError(err) }() go func() { <-time.After(100 * time.Millisecond) - err = sc.Pounce(*objD, "owner2", quitChan, true) + err := sc.Pounce(*objD, "owner2", quitChan, true) + assert.NoError(err) }() go func() { <-time.After(500 * time.Millisecond) - err = sc.Pounce(*objD, "owner3", nil, true) + err := sc.Pounce(*objD, "owner3", nil, true) assert.NoError(err) }() From c4169b1d86b052b9c93f2547bc303b7b7aae6dd5 Mon Sep 17 00:00:00 2001 From: SUMUKHA-PK Date: Sat, 22 Aug 2020 20:19:26 +0530 Subject: [PATCH 15/20] this commit fixes a weird test fail --- internal/lockclient/simple_client_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/lockclient/simple_client_test.go b/internal/lockclient/simple_client_test.go index fd740b5..fa9e315 100644 --- a/internal/lockclient/simple_client_test.go +++ b/internal/lockclient/simple_client_test.go @@ -350,7 +350,7 @@ func TestLockService(t *testing.T) { }) // This test is very similar to the one above but a quit signal is sent to owner2's pounce. - t.Run("pounce test without quitting in between, without waiting for object", func(t *testing.T) { + t.Run("pounce test with quitting in between, without waiting for object", func(t *testing.T) { size := 5 cache := cache.NewLRUCache(size) sc := NewSimpleClient(scfg, cache) From a6b1173db2072322063779ad1ac68cb77a77f222 Mon Sep 17 00:00:00 2001 From: SUMUKHA-PK Date: Sun, 23 Aug 2020 16:10:18 +0530 Subject: [PATCH 16/20] this commit fixes failing CI --- internal/lockclient/simple_client.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/internal/lockclient/simple_client.go b/internal/lockclient/simple_client.go index 966428f..ba81a50 100644 --- a/internal/lockclient/simple_client.go +++ b/internal/lockclient/simple_client.go @@ -312,8 +312,9 @@ func (sc *SimpleClient) Pounce(d lockservice.ObjectDescriptor, owner string, qui // to the lock on the object. if state.LockState == Release { var op string - if len(sc.Pouncers(d)) > 0 { - op = sc.Pouncers(d)[0] + pouncers := sc.Pouncers(d) + if len(pouncers) > 0 { + op = pouncers[0] } // Errors arising here aren't propagated because this @@ -354,8 +355,12 @@ func (sc *SimpleClient) Pounce(d lockservice.ObjectDescriptor, owner string, qui // This is safe to read concurrently. func (sc *SimpleClient) Pouncers(d lockservice.ObjectDescriptor) []string { sc.mu.Lock() - defer sc.mu.Unlock() - return sc.pouncers[d] + var x = make([]string, len(sc.pouncers[d])) + copy(x, sc.pouncers[d]) + sc.mu.Unlock() + // fmt.Println(x) + // fmt.Println(sc.pouncers[d]) + return x } // Checkacquire checks for acquisition of lock and returns the owner if the lock From 7891b60d9f7f0ca7b6df5b716814a5c271e71103 Mon Sep 17 00:00:00 2001 From: SUMUKHA-PK Date: Sun, 23 Aug 2020 21:32:36 +0530 Subject: [PATCH 17/20] this commit moves the timers outside the goroutines to have a deterministic test --- internal/lockclient/1.bash | 4 + internal/lockclient/logs | 2890 +++++++++++++++++++++ internal/lockclient/simple_client_test.go | 12 +- 3 files changed, 2900 insertions(+), 6 deletions(-) create mode 100644 internal/lockclient/1.bash create mode 100644 internal/lockclient/logs diff --git a/internal/lockclient/1.bash b/internal/lockclient/1.bash new file mode 100644 index 0000000..41fdcac --- /dev/null +++ b/internal/lockclient/1.bash @@ -0,0 +1,4 @@ +for i in {1..10} +do + go test -race -run TestLockService >> logs +done diff --git a/internal/lockclient/logs b/internal/lockclient/logs new file mode 100644 index 0000000..f4fd23b --- /dev/null +++ b/internal/lockclient/logs @@ -0,0 +1,2890 @@ +2020/08/23 16:24:02 Starting Server on 127.0.0.1:1234 +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't release, unauthorized access"} +{"level":"debug","descriptor":"test2","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:24:02+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:02+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:24:02+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:02+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:24:02+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:02+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T16:24:02+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:24:02+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:02+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:24:02+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:02+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:24:02+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:02+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T16:24:02+05:30","message":"stopped watching"} +{"level":"debug","object":"test","pouncer":"owner","time":"2020-08-23T16:24:02+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","object":"test","pouncer":"owner1","time":"2020-08-23T16:24:02+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T16:24:02+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner2","time":"2020-08-23T16:24:02+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T16:24:02+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner3","time":"2020-08-23T16:24:03+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T16:24:03+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:03+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:03+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:03+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:24:03+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:24:03+05:30","message":"lock is in acquired state"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T16:24:03+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:24:03+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:05+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner2","time":"2020-08-23T16:24:05+05:30","message":"pounce success"} +{"level":"debug","owner":"owner2","time":"2020-08-23T16:24:05+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:24:05+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:24:05+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:05+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T16:24:05+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:07+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:07+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T16:24:07+05:30","message":"pounce success"} +{"level":"debug","owner":"owner3","time":"2020-08-23T16:24:07+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:24:07+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:24:07+05:30","message":"stopped watching"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:24:07+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","object":"test1","pouncer":"owner","time":"2020-08-23T16:24:08+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","object":"test1","pouncer":"owner1","time":"2020-08-23T16:24:08+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T16:24:08+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test1","pouncer":"owner2","time":"2020-08-23T16:24:08+05:30","message":"beginning pounce"} +{"level":"debug","time":"2020-08-23T16:24:08+05:30","message":"stopped pounce activity, object already under pounce"} +{"level":"debug","object":"test1","pouncer":"owner3","time":"2020-08-23T16:24:09+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T16:24:09+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:24:09+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:24:09+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test1","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T16:24:09+05:30","message":"lock is in acquired state"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T16:24:09+05:30","message":"pounce success"} +{"level":"debug","owner":"owner1","time":"2020-08-23T16:24:09+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T16:24:09+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:24:09+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:24:12+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner3","time":"2020-08-23T16:24:12+05:30","message":"lock is in acquired state"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T16:24:12+05:30","message":"pounce success"} +{"level":"debug","owner":"owner3","time":"2020-08-23T16:24:12+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","time":"2020-08-23T16:24:12+05:30","message":"stopped watching"} +{"level":"debug","object":"testx","pouncer":"owner","time":"2020-08-23T16:24:14+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"locked"} +{"level":"debug","object":"testx","pouncer":"owner1","time":"2020-08-23T16:24:14+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T16:24:14+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner2","time":"2020-08-23T16:24:14+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T16:24:14+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner3","time":"2020-08-23T16:24:16+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T16:24:16+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:24:16+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:24:16+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","time":"2020-08-23T16:24:16+05:30","message":"stop signal received, stopped pouncing process"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:24:16+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T16:24:16+05:30","message":"lock is in acquired state"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T16:24:16+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T16:24:16+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T16:24:16+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:24:20+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:24:20+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:24:20+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T16:24:20+05:30","message":"pounce success"} +{"level":"debug","owner":"owner3","time":"2020-08-23T16:24:20+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T16:24:20+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T16:24:20+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T16:24:20+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:24:20+05:30","message":"stopped watching"} +--- FAIL: TestLockService (19.79s) + --- FAIL: TestLockService/pounce_test_with_quitting_in_between,_without_waiting_for_object (7.83s) + simple_client_test.go:390: + Error Trace: simple_client_test.go:390 + Error: Not equal: + expected: []string{"owner1", "owner2"} + actual : []string{"owner1", "owner2", "owner3"} + + Diff: + --- Expected + +++ Actual + @@ -1,4 +1,5 @@ + -([]string) (len=2) { + +([]string) (len=3) { + (string) (len=6) "owner1", + - (string) (len=6) "owner2" + + (string) (len=6) "owner2", + + (string) (len=6) "owner3" + } + Test: TestLockService/pounce_test_with_quitting_in_between,_without_waiting_for_object +FAIL +exit status 1 +FAIL github.com/SystemBuilders/LocKey/internal/lockclient 19.907s +2020/08/23 16:24:23 Starting Server on 127.0.0.1:1234 +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't release, unauthorized access"} +{"level":"debug","descriptor":"test2","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:24:23+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:23+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:24:23+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:23+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:24:23+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:23+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T16:24:23+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:24:23+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:23+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:24:23+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:23+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:24:23+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:23+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T16:24:23+05:30","message":"stopped watching"} +{"level":"debug","object":"test","pouncer":"owner","time":"2020-08-23T16:24:23+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","object":"test","pouncer":"owner1","time":"2020-08-23T16:24:23+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T16:24:23+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner2","time":"2020-08-23T16:24:23+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T16:24:23+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner3","time":"2020-08-23T16:24:24+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T16:24:24+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:25+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:25+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:25+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:24:25+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:24:25+05:30","message":"lock is in acquired state"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T16:24:25+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:24:25+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:27+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner2","time":"2020-08-23T16:24:27+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:27+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:24:27+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:27+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:24:27+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:24:27+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:29+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:29+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:29+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T16:24:29+05:30","message":"pounce success"} +{"level":"debug","owner":"owner1","time":"2020-08-23T16:24:29+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:24:29+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:24:29+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:24:29+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:24:29+05:30","message":"stopped watching"} +{"level":"debug","object":"test1","pouncer":"owner","time":"2020-08-23T16:24:30+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","object":"test1","pouncer":"owner1","time":"2020-08-23T16:24:30+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T16:24:30+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test1","pouncer":"owner2","time":"2020-08-23T16:24:30+05:30","message":"beginning pounce"} +{"level":"debug","time":"2020-08-23T16:24:30+05:30","message":"stopped pounce activity, object already under pounce"} +{"level":"debug","object":"test1","pouncer":"owner3","time":"2020-08-23T16:24:30+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T16:24:30+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:24:31+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:24:31+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test1","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T16:24:31+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T16:24:31+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T16:24:31+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:24:33+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:24:33+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"test1","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T16:24:33+05:30","message":"pounce success"} +{"level":"debug","owner":"owner1","time":"2020-08-23T16:24:33+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner3","time":"2020-08-23T16:24:33+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:24:33+05:30","message":"stopped watching"} +{"level":"debug","object":"testx","pouncer":"owner","time":"2020-08-23T16:24:36+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"locked"} +{"level":"debug","object":"testx","pouncer":"owner1","time":"2020-08-23T16:24:36+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T16:24:36+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner2","time":"2020-08-23T16:24:36+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T16:24:36+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner3","time":"2020-08-23T16:24:37+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T16:24:37+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:24:37+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:24:37+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:24:37+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T16:24:37+05:30","message":"pounce success"} +{"level":"debug","owner":"owner1","time":"2020-08-23T16:24:37+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","time":"2020-08-23T16:24:37+05:30","message":"stop signal received, stopped pouncing process"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T16:24:37+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T16:24:37+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T16:24:37+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:24:37+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:24:39+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:24:40+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T16:24:40+05:30","message":"pounce success"} +{"level":"debug","owner":"owner3","time":"2020-08-23T16:24:40+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T16:24:40+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:24:40+05:30","message":"stopped watching"} +PASS +ok github.com/SystemBuilders/LocKey/internal/lockclient 21.075s +2020/08/23 16:24:45 Starting Server on 127.0.0.1:1234 +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't release, unauthorized access"} +{"level":"debug","descriptor":"test2","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:24:45+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:45+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:24:45+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:45+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:24:45+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:24:45+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:24:45+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:45+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:24:45+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:45+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:24:45+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:45+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T16:24:45+05:30","message":"stopped watching"} +{"level":"debug","object":"test","pouncer":"owner","time":"2020-08-23T16:24:45+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","object":"test","pouncer":"owner1","time":"2020-08-23T16:24:45+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T16:24:45+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner2","time":"2020-08-23T16:24:45+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T16:24:45+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner3","time":"2020-08-23T16:24:46+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T16:24:46+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:47+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:47+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T16:24:47+05:30","message":"pounce success"} +{"level":"debug","owner":"owner1","time":"2020-08-23T16:24:47+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:24:47+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:24:47+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:47+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:24:47+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:49+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:49+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner2","time":"2020-08-23T16:24:49+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:24:49+05:30","message":"lock is in acquired state"} +{"level":"debug","owner":"owner2","time":"2020-08-23T16:24:49+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:24:49+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:24:49+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:24:51+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T16:24:51+05:30","message":"pounce success"} +{"level":"debug","owner":"owner3","time":"2020-08-23T16:24:51+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:24:51+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:24:51+05:30","message":"stopped watching"} +{"level":"debug","object":"test1","pouncer":"owner","time":"2020-08-23T16:24:52+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","object":"test1","pouncer":"owner1","time":"2020-08-23T16:24:52+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T16:24:52+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test1","pouncer":"owner2","time":"2020-08-23T16:24:52+05:30","message":"beginning pounce"} +{"level":"debug","time":"2020-08-23T16:24:52+05:30","message":"stopped pounce activity, object already under pounce"} +{"level":"debug","object":"test1","pouncer":"owner3","time":"2020-08-23T16:24:52+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T16:24:52+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:24:53+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:24:53+05:30","message":"lock is in released state"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T16:24:53+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T16:24:53+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T16:24:53+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:24:55+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:24:55+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner3","time":"2020-08-23T16:24:55+05:30","message":"lock is in acquired state"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T16:24:55+05:30","message":"pounce success"} +{"level":"debug","owner":"owner3","time":"2020-08-23T16:24:55+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner3","time":"2020-08-23T16:24:55+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:24:55+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test1","message":"can't acquire, already been acquired"} +{"level":"debug","object":"testx","pouncer":"owner","time":"2020-08-23T16:24:57+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"locked"} +{"level":"debug","object":"testx","pouncer":"owner1","time":"2020-08-23T16:24:57+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T16:24:57+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner2","time":"2020-08-23T16:24:57+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T16:24:57+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner3","time":"2020-08-23T16:24:58+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T16:24:58+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:24:58+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:24:58+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:24:58+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T16:24:58+05:30","message":"pounce success"} +{"level":"debug","time":"2020-08-23T16:24:58+05:30","message":"stop signal received, stopped pouncing process"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T16:24:58+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T16:24:58+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T16:24:58+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:25:00+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:25:00+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:25:00+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner3","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T16:25:00+05:30","message":"pounce success"} +{"level":"debug","owner":"owner2","time":"2020-08-23T16:25:00+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T16:25:00+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T16:25:00+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:25:00+05:30","message":"stopped watching"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T16:25:00+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +PASS +ok github.com/SystemBuilders/LocKey/internal/lockclient 17.427s +2020/08/23 16:25:03 Starting Server on 127.0.0.1:1234 +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't release, unauthorized access"} +{"level":"debug","descriptor":"test2","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:25:04+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:25:04+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","time":"2020-08-23T16:25:04+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:25:04+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:25:04+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:25:04+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:25:04+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:25:04+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:25:04+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T16:25:04+05:30","message":"stopped watching"} +{"level":"debug","object":"test","pouncer":"owner","time":"2020-08-23T16:25:04+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","object":"test","pouncer":"owner1","time":"2020-08-23T16:25:04+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T16:25:04+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner2","time":"2020-08-23T16:25:04+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T16:25:04+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner3","time":"2020-08-23T16:25:04+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T16:25:04+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:25:05+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:25:05+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:25:05+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T16:25:05+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:25:05+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:25:05+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:25:05+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:25:07+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner2","time":"2020-08-23T16:25:07+05:30","message":"pounce success"} +{"level":"debug","owner":"owner2","time":"2020-08-23T16:25:07+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:25:07+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:25:07+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:25:07+05:30","message":"stopped watching"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:25:07+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:25:09+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:25:09+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:25:09+05:30","message":"lock is in acquired state"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T16:25:09+05:30","message":"pounce success"} +{"level":"debug","owner":"owner3","time":"2020-08-23T16:25:09+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","time":"2020-08-23T16:25:09+05:30","message":"stopped watching"} +{"level":"debug","object":"test1","pouncer":"owner","time":"2020-08-23T16:25:10+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","object":"test1","pouncer":"owner1","time":"2020-08-23T16:25:10+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T16:25:10+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test1","pouncer":"owner2","time":"2020-08-23T16:25:10+05:30","message":"beginning pounce"} +{"level":"debug","time":"2020-08-23T16:25:10+05:30","message":"stopped pounce activity, object already under pounce"} +{"level":"debug","object":"test1","pouncer":"owner3","time":"2020-08-23T16:25:10+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T16:25:10+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:25:11+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:25:11+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T16:25:11+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T16:25:11+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T16:25:11+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:25:14+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:25:14+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner3","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T16:25:14+05:30","message":"pounce success"} +{"level":"debug","owner":"owner1","time":"2020-08-23T16:25:14+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner3","time":"2020-08-23T16:25:14+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:25:14+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test1","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner3","time":"2020-08-23T16:25:14+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner","time":"2020-08-23T16:25:16+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"locked"} +{"level":"debug","object":"testx","pouncer":"owner1","time":"2020-08-23T16:25:16+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T16:25:16+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner2","time":"2020-08-23T16:25:16+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T16:25:16+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner3","time":"2020-08-23T16:25:17+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T16:25:17+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:25:17+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:25:17+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:25:17+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T16:25:17+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T16:25:17+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","time":"2020-08-23T16:25:18+05:30","message":"stop signal received, stopped pouncing process"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T16:25:18+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T16:25:18+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:25:19+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:25:19+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner3","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T16:25:20+05:30","message":"pounce success"} +{"level":"debug","owner":"owner1","time":"2020-08-23T16:25:20+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:25:20+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T16:25:20+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:25:20+05:30","message":"stopped watching"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T16:25:20+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +PASS +ok github.com/SystemBuilders/LocKey/internal/lockclient 18.087s +2020/08/23 16:25:23 Starting Server on 127.0.0.1:1234 +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't release, unauthorized access"} +{"level":"debug","descriptor":"test2","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:25:23+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:25:23+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:25:23+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:25:23+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:25:23+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:25:23+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","time":"2020-08-23T16:25:23+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:25:23+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:25:23+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:25:23+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:25:23+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:25:23+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:25:23+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T16:25:23+05:30","message":"stopped watching"} +{"level":"debug","object":"test","pouncer":"owner","time":"2020-08-23T16:25:23+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","object":"test","pouncer":"owner1","time":"2020-08-23T16:25:23+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T16:25:23+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner2","time":"2020-08-23T16:25:23+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T16:25:23+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner3","time":"2020-08-23T16:25:23+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T16:25:23+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:25:24+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:25:24+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T16:25:24+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:25:24+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:25:24+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:25:24+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:25:26+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:25:26+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner2","time":"2020-08-23T16:25:26+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:25:26+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:25:26+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:25:26+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:25:28+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:25:28+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:25:28+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T16:25:28+05:30","message":"pounce success"} +{"level":"debug","owner":"owner2","time":"2020-08-23T16:25:28+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:25:28+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:25:28+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:25:28+05:30","message":"stopped watching"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:25:28+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test1","pouncer":"owner","time":"2020-08-23T16:25:29+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","object":"test1","pouncer":"owner1","time":"2020-08-23T16:25:29+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T16:25:29+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test1","pouncer":"owner2","time":"2020-08-23T16:25:29+05:30","message":"beginning pounce"} +{"level":"debug","time":"2020-08-23T16:25:29+05:30","message":"stopped pounce activity, object already under pounce"} +{"level":"debug","object":"test1","pouncer":"owner3","time":"2020-08-23T16:25:29+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T16:25:29+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:25:30+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:25:30+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T16:25:30+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T16:25:30+05:30","message":"lock is in acquired state"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T16:25:30+05:30","message":"pounce success"} +{"level":"debug","descriptor":"test1","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:25:32+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:25:32+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"test1","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner3","time":"2020-08-23T16:25:32+05:30","message":"lock is in acquired state"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T16:25:32+05:30","message":"pounce success"} +{"level":"debug","owner":"owner1","time":"2020-08-23T16:25:32+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner3","time":"2020-08-23T16:25:32+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:25:32+05:30","message":"stopped watching"} +{"level":"debug","object":"testx","pouncer":"owner","time":"2020-08-23T16:25:34+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"locked"} +{"level":"debug","object":"testx","pouncer":"owner1","time":"2020-08-23T16:25:34+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T16:25:34+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner2","time":"2020-08-23T16:25:36+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T16:25:36+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner3","time":"2020-08-23T16:25:36+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T16:25:36+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:25:36+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:25:36+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:25:36+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T16:25:36+05:30","message":"pounce success"} +{"level":"debug","owner":"owner1","time":"2020-08-23T16:25:36+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T16:25:36+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:25:36+05:30","message":"stopped watching"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T16:25:36+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:25:36+05:30","message":"stop signal received, stopped pouncing process"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T16:25:36+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:25:39+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:25:39+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T16:25:40+05:30","message":"pounce success"} +{"level":"debug","owner":"owner3","time":"2020-08-23T16:25:40+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T16:25:40+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T16:25:40+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:25:40+05:30","message":"stopped watching"} +PASS +ok github.com/SystemBuilders/LocKey/internal/lockclient 18.952s +2020/08/23 16:25:43 Starting Server on 127.0.0.1:1234 +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't release, unauthorized access"} +{"level":"debug","descriptor":"test2","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:25:43+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:25:43+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:25:43+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:25:43+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:25:43+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T16:25:43+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:25:43+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:25:43+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:25:43+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:25:43+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:25:43+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:25:43+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T16:25:43+05:30","message":"stopped watching"} +{"level":"debug","object":"test","pouncer":"owner","time":"2020-08-23T16:25:43+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","object":"test","pouncer":"owner1","time":"2020-08-23T16:25:43+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T16:25:43+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner2","time":"2020-08-23T16:25:43+05:30","message":"beginning pounce"} +{"level":"debug","object":"test","pouncer":"owner3","time":"2020-08-23T16:25:43+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T16:25:43+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T16:25:43+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:25:44+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T16:25:44+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:25:44+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:25:44+05:30","message":"lock is in acquired state"} +{"level":"debug","owner":"owner1","time":"2020-08-23T16:25:44+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:25:44+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:25:44+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:25:46+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:25:46+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner2","time":"2020-08-23T16:25:46+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:25:46+05:30","message":"lock is in acquired state"} +{"level":"debug","owner":"owner2","time":"2020-08-23T16:25:46+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:25:46+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:25:46+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:25:48+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T16:25:48+05:30","message":"pounce success"} +{"level":"debug","owner":"owner3","time":"2020-08-23T16:25:48+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:25:48+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:25:48+05:30","message":"stopped watching"} +{"level":"debug","object":"test1","pouncer":"owner","time":"2020-08-23T16:25:49+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","object":"test1","pouncer":"owner1","time":"2020-08-23T16:25:49+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T16:25:49+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test1","pouncer":"owner2","time":"2020-08-23T16:25:49+05:30","message":"beginning pounce"} +{"level":"debug","time":"2020-08-23T16:25:49+05:30","message":"stopped pounce activity, object already under pounce"} +{"level":"debug","object":"test1","pouncer":"owner3","time":"2020-08-23T16:25:50+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T16:25:50+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:25:50+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:25:50+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T16:25:50+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T16:25:50+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T16:25:50+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:25:52+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner3","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T16:25:52+05:30","message":"pounce success"} +{"level":"debug","owner":"owner1","time":"2020-08-23T16:25:52+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner3","time":"2020-08-23T16:25:52+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:25:52+05:30","message":"stopped watching"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner3","time":"2020-08-23T16:25:52+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner","time":"2020-08-23T16:25:54+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"locked"} +{"level":"debug","object":"testx","pouncer":"owner1","time":"2020-08-23T16:25:54+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T16:25:54+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner2","time":"2020-08-23T16:25:54+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T16:25:54+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner3","time":"2020-08-23T16:25:55+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T16:25:55+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:25:55+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:25:55+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:25:55+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T16:25:55+05:30","message":"lock is in acquired state"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T16:25:55+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T16:25:55+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T16:25:55+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:25:55+05:30","message":"stop signal received, stopped pouncing process"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:25:57+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:25:57+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:25:57+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T16:25:59+05:30","message":"pounce success"} +{"level":"debug","owner":"owner2","time":"2020-08-23T16:25:59+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T16:25:59+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:25:59+05:30","message":"stopped watching"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T16:25:59+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T16:25:59+05:30","message":"lock is in acquired state"} +PASS +ok github.com/SystemBuilders/LocKey/internal/lockclient 16.644s +2020/08/23 16:26:01 Starting Server on 127.0.0.1:1234 +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't release, unauthorized access"} +{"level":"debug","descriptor":"test2","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:26:01+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:01+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","time":"2020-08-23T16:26:01+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:26:01+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:01+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:26:01+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:01+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:26:01+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:01+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T16:26:01+05:30","message":"stopped watching"} +{"level":"debug","object":"test","pouncer":"owner","time":"2020-08-23T16:26:01+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","object":"test","pouncer":"owner1","time":"2020-08-23T16:26:01+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T16:26:01+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner2","time":"2020-08-23T16:26:01+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T16:26:01+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner3","time":"2020-08-23T16:26:02+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T16:26:02+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:02+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:02+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T16:26:02+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:26:02+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:26:02+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:26:02+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:04+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:04+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:04+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner2","time":"2020-08-23T16:26:04+05:30","message":"pounce success"} +{"level":"debug","owner":"owner2","time":"2020-08-23T16:26:04+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:26:04+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:26:04+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:26:04+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:26:04+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:06+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:06+05:30","message":"lock is in released state"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T16:26:06+05:30","message":"pounce success"} +{"level":"debug","owner":"owner1","time":"2020-08-23T16:26:06+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:26:06+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:26:06+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:26:06+05:30","message":"stopped watching"} +{"level":"debug","object":"test1","pouncer":"owner","time":"2020-08-23T16:26:07+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","object":"test1","pouncer":"owner1","time":"2020-08-23T16:26:07+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T16:26:07+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test1","pouncer":"owner2","time":"2020-08-23T16:26:07+05:30","message":"beginning pounce"} +{"level":"debug","time":"2020-08-23T16:26:07+05:30","message":"stopped pounce activity, object already under pounce"} +{"level":"debug","object":"test1","pouncer":"owner3","time":"2020-08-23T16:26:07+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T16:26:07+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:26:08+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:26:08+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T16:26:08+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T16:26:08+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T16:26:08+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:26:10+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:26:10+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner3","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T16:26:10+05:30","message":"pounce success"} +{"level":"debug","owner":"owner1","time":"2020-08-23T16:26:10+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner3","time":"2020-08-23T16:26:10+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:26:10+05:30","message":"stopped watching"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner3","time":"2020-08-23T16:26:10+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner","time":"2020-08-23T16:26:14+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"locked"} +{"level":"debug","object":"testx","pouncer":"owner1","time":"2020-08-23T16:26:14+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T16:26:14+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner2","time":"2020-08-23T16:26:14+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T16:26:14+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner3","time":"2020-08-23T16:26:14+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T16:26:14+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:26:17+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:26:17+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:26:17+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T16:26:17+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T16:26:17+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T16:26:17+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:26:17+05:30","message":"stop signal received, stopped pouncing process"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T16:26:17+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:26:23+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:26:23+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:26:23+05:30","message":"lock is in released state"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T16:26:23+05:30","message":"pounce success"} +{"level":"debug","owner":"owner3","time":"2020-08-23T16:26:23+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T16:26:23+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T16:26:23+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T16:26:23+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:26:23+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +PASS +ok github.com/SystemBuilders/LocKey/internal/lockclient 24.554s +2020/08/23 16:26:27 Starting Server on 127.0.0.1:1234 +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't release, unauthorized access"} +{"level":"debug","descriptor":"test2","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:26:27+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:27+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","time":"2020-08-23T16:26:27+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:26:27+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:27+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:26:27+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:27+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:26:27+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:27+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T16:26:27+05:30","message":"stopped watching"} +{"level":"debug","object":"test","pouncer":"owner","time":"2020-08-23T16:26:27+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","object":"test","pouncer":"owner1","time":"2020-08-23T16:26:27+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T16:26:27+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner2","time":"2020-08-23T16:26:28+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T16:26:28+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner3","time":"2020-08-23T16:26:28+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T16:26:28+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:28+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:28+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:28+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T16:26:28+05:30","message":"pounce success"} +{"level":"debug","owner":"owner1","time":"2020-08-23T16:26:28+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:26:28+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:26:28+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:26:28+05:30","message":"stopped watching"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:26:28+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:30+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:30+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner2","time":"2020-08-23T16:26:30+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:26:30+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:26:30+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:32+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:26:32+05:30","message":"lock is in acquired state"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T16:26:32+05:30","message":"pounce success"} +{"level":"debug","owner":"owner3","time":"2020-08-23T16:26:32+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:32+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T16:26:32+05:30","message":"stopped watching"} +{"level":"debug","object":"test1","pouncer":"owner","time":"2020-08-23T16:26:33+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","object":"test1","pouncer":"owner1","time":"2020-08-23T16:26:33+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T16:26:33+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test1","pouncer":"owner2","time":"2020-08-23T16:26:34+05:30","message":"beginning pounce"} +{"level":"debug","time":"2020-08-23T16:26:34+05:30","message":"stopped pounce activity, object already under pounce"} +{"level":"debug","object":"test1","pouncer":"owner3","time":"2020-08-23T16:26:34+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T16:26:34+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:26:35+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:26:35+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test1","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T16:26:35+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T16:26:35+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T16:26:35+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:26:37+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:26:37+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"test1","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T16:26:37+05:30","message":"pounce success"} +{"level":"debug","owner":"owner3","time":"2020-08-23T16:26:37+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner3","time":"2020-08-23T16:26:37+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner3","time":"2020-08-23T16:26:37+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:26:37+05:30","message":"stopped watching"} +{"level":"debug","object":"testx","pouncer":"owner","time":"2020-08-23T16:26:40+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"locked"} +{"level":"debug","object":"testx","pouncer":"owner1","time":"2020-08-23T16:26:40+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T16:26:40+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner2","time":"2020-08-23T16:26:40+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T16:26:40+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner3","time":"2020-08-23T16:26:41+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T16:26:41+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:26:41+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:26:41+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:26:41+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","time":"2020-08-23T16:26:42+05:30","message":"stop signal received, stopped pouncing process"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T16:26:42+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T16:26:42+05:30","message":"lock is in acquired state"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T16:26:42+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T16:26:42+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:26:44+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:26:44+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:26:44+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner3","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T16:26:44+05:30","message":"pounce success"} +{"level":"debug","owner":"owner2","time":"2020-08-23T16:26:44+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T16:26:44+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T16:26:44+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:26:44+05:30","message":"stopped watching"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T16:26:44+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +PASS +ok github.com/SystemBuilders/LocKey/internal/lockclient 18.614s +2020/08/23 16:26:47 Starting Server on 127.0.0.1:1234 +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't release, unauthorized access"} +{"level":"debug","descriptor":"test2","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:26:47+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:47+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:26:47+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:47+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:26:47+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:47+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T16:26:47+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:26:47+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:47+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:26:47+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:47+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:26:47+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:47+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T16:26:47+05:30","message":"stopped watching"} +{"level":"debug","object":"test","pouncer":"owner","time":"2020-08-23T16:26:47+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","object":"test","pouncer":"owner1","time":"2020-08-23T16:26:47+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T16:26:47+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner2","time":"2020-08-23T16:26:47+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T16:26:47+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner3","time":"2020-08-23T16:26:48+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T16:26:48+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:48+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:48+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:48+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T16:26:48+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:26:48+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:26:48+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:26:48+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:50+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:50+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:50+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner2","time":"2020-08-23T16:26:50+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:26:50+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:26:50+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:26:50+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:53+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T16:26:53+05:30","message":"pounce success"} +{"level":"debug","owner":"owner2","time":"2020-08-23T16:26:53+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:26:53+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:26:53+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T16:26:53+05:30","message":"stopped watching"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:26:53+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test1","pouncer":"owner","time":"2020-08-23T16:26:54+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","object":"test1","pouncer":"owner1","time":"2020-08-23T16:26:54+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T16:26:54+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test1","pouncer":"owner2","time":"2020-08-23T16:26:54+05:30","message":"beginning pounce"} +{"level":"debug","time":"2020-08-23T16:26:54+05:30","message":"stopped pounce activity, object already under pounce"} +{"level":"debug","object":"test1","pouncer":"owner3","time":"2020-08-23T16:26:55+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T16:26:55+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:26:55+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:26:55+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T16:26:55+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T16:26:55+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T16:26:55+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:26:57+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:26:57+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner3","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T16:26:57+05:30","message":"pounce success"} +{"level":"debug","owner":"owner1","time":"2020-08-23T16:26:57+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner3","time":"2020-08-23T16:26:57+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner3","time":"2020-08-23T16:26:57+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:26:57+05:30","message":"stopped watching"} +{"level":"debug","object":"testx","pouncer":"owner","time":"2020-08-23T16:26:59+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"locked"} +{"level":"debug","object":"testx","pouncer":"owner1","time":"2020-08-23T16:26:59+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T16:26:59+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner2","time":"2020-08-23T16:26:59+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T16:26:59+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner3","time":"2020-08-23T16:27:00+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T16:27:00+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:27:00+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:27:00+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:27:00+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T16:27:00+05:30","message":"pounce success"} +{"level":"debug","owner":"owner1","time":"2020-08-23T16:27:00+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T16:27:00+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T16:27:00+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:27:00+05:30","message":"stopped watching"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T16:27:00+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","time":"2020-08-23T16:27:00+05:30","message":"stop signal received, stopped pouncing process"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:27:02+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:27:02+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T16:27:02+05:30","message":"pounce success"} +{"level":"debug","owner":"owner3","time":"2020-08-23T16:27:02+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T16:27:02+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:27:02+05:30","message":"stopped watching"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T16:27:02+05:30","message":"lock is in acquired state"} +PASS +ok github.com/SystemBuilders/LocKey/internal/lockclient 17.658s +2020/08/23 16:27:06 Starting Server on 127.0.0.1:1234 +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't release, unauthorized access"} +{"level":"debug","descriptor":"test2","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:27:06+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:27:06+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","time":"2020-08-23T16:27:06+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:27:06+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:27:06+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:27:06+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:27:06+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:27:06+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:27:06+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T16:27:06+05:30","message":"stopped watching"} +{"level":"debug","object":"test","pouncer":"owner","time":"2020-08-23T16:27:06+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","object":"test","pouncer":"owner1","time":"2020-08-23T16:27:06+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T16:27:06+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner2","time":"2020-08-23T16:27:06+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T16:27:06+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner3","time":"2020-08-23T16:27:06+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T16:27:06+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:27:07+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:27:07+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T16:27:07+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:27:07+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:27:07+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T16:27:07+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:27:09+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:27:09+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:27:09+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner2","time":"2020-08-23T16:27:09+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:27:09+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:27:09+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T16:27:09+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:27:11+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:27:11+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T16:27:11+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:27:11+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:27:11+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T16:27:11+05:30","message":"lock is in acquired state"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T16:27:11+05:30","message":"pounce success"} +{"level":"debug","owner":"owner2","time":"2020-08-23T16:27:11+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","time":"2020-08-23T16:27:11+05:30","message":"stopped watching"} +{"level":"debug","object":"test1","pouncer":"owner","time":"2020-08-23T16:27:12+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","object":"test1","pouncer":"owner1","time":"2020-08-23T16:27:12+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T16:27:12+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test1","pouncer":"owner2","time":"2020-08-23T16:27:12+05:30","message":"beginning pounce"} +{"level":"debug","time":"2020-08-23T16:27:12+05:30","message":"stopped pounce activity, object already under pounce"} +{"level":"debug","object":"test1","pouncer":"owner3","time":"2020-08-23T16:27:12+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T16:27:12+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:27:13+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:27:13+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T16:27:13+05:30","message":"lock is in acquired state"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T16:27:13+05:30","message":"pounce success"} +{"level":"debug","owner":"owner1","time":"2020-08-23T16:27:13+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","time":"2020-08-23T16:27:13+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T16:27:15+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner3","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T16:27:15+05:30","message":"pounce success"} +{"level":"debug","owner":"owner3","time":"2020-08-23T16:27:15+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","time":"2020-08-23T16:27:15+05:30","message":"stopped watching"} +{"level":"debug","object":"testx","pouncer":"owner","time":"2020-08-23T16:27:17+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"locked"} +{"level":"debug","object":"testx","pouncer":"owner1","time":"2020-08-23T16:27:17+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T16:27:17+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner2","time":"2020-08-23T16:27:18+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T16:27:18+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner3","time":"2020-08-23T16:27:18+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T16:27:18+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:27:18+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:27:18+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T16:27:19+05:30","message":"pounce success"} +{"level":"debug","time":"2020-08-23T16:27:19+05:30","message":"stop signal received, stopped pouncing process"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T16:27:19+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T16:27:19+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T16:27:19+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:27:22+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:27:22+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T16:27:22+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T16:27:22+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T16:27:22+05:30","message":"pounce success"} +{"level":"debug","owner":"owner2","time":"2020-08-23T16:27:22+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T16:27:22+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T16:27:22+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T16:27:22+05:30","message":"stopped watching"} +PASS +ok github.com/SystemBuilders/LocKey/internal/lockclient 19.866s +2020/08/23 19:08:37 Starting Server on 127.0.0.1:1234 +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't release, unauthorized access"} +{"level":"debug","descriptor":"test2","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:08:37+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:08:37+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:08:37+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:08:37+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:08:37+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T19:08:37+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:08:37+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:08:37+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:08:37+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:08:37+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:08:37+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:08:37+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T19:08:37+05:30","message":"stopped watching"} +{"level":"debug","object":"test","pouncer":"owner","time":"2020-08-23T19:08:37+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","object":"test","pouncer":"owner1","time":"2020-08-23T19:08:37+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T19:08:37+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner2","time":"2020-08-23T19:08:37+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T19:08:37+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner3","time":"2020-08-23T19:08:37+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T19:08:37+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:08:38+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:08:38+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:08:38+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T19:08:38+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:08:38+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:08:38+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:08:38+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:08:40+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:08:40+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:08:40+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner2","time":"2020-08-23T19:08:40+05:30","message":"pounce success"} +{"level":"debug","owner":"owner2","time":"2020-08-23T19:08:40+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:08:40+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:08:40+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:08:40+05:30","message":"stopped watching"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:08:40+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:08:42+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:08:42+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T19:08:42+05:30","message":"pounce success"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","owner":"owner1","time":"2020-08-23T19:08:42+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:08:42+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:08:42+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:08:42+05:30","message":"stopped watching"} +{"level":"debug","object":"test1","pouncer":"owner","time":"2020-08-23T19:08:43+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","object":"test1","pouncer":"owner1","time":"2020-08-23T19:08:43+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T19:08:43+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test1","pouncer":"owner2","time":"2020-08-23T19:08:43+05:30","message":"beginning pounce"} +{"level":"debug","time":"2020-08-23T19:08:43+05:30","message":"stopped pounce activity, object already under pounce"} +{"level":"debug","object":"test1","pouncer":"owner3","time":"2020-08-23T19:08:44+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T19:08:44+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:08:44+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:08:44+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test1","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T19:08:44+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T19:08:44+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T19:08:44+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:08:46+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:08:46+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"test1","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T19:08:46+05:30","message":"pounce success"} +{"level":"debug","owner":"owner1","time":"2020-08-23T19:08:46+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner3","time":"2020-08-23T19:08:46+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:08:46+05:30","message":"stopped watching"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner3","time":"2020-08-23T19:08:46+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner","time":"2020-08-23T19:08:48+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"locked"} +{"level":"debug","object":"testx","pouncer":"owner1","time":"2020-08-23T19:08:48+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T19:08:48+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner2","time":"2020-08-23T19:08:48+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T19:08:48+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner3","time":"2020-08-23T19:08:49+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T19:08:49+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:08:49+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:08:49+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:08:49+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T19:08:49+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T19:08:49+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T19:08:49+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T19:08:49+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","time":"2020-08-23T19:08:50+05:30","message":"stop signal received, stopped pouncing process"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:08:52+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:08:52+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:08:52+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T19:08:52+05:30","message":"pounce success"} +{"level":"debug","owner":"owner2","time":"2020-08-23T19:08:52+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T19:08:52+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T19:08:52+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T19:08:52+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:08:52+05:30","message":"stopped watching"} +PASS +ok github.com/SystemBuilders/LocKey/internal/lockclient 17.858s +2020/08/23 19:08:56 Starting Server on 127.0.0.1:1234 +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't release, unauthorized access"} +{"level":"debug","descriptor":"test2","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:08:56+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:08:56+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:08:56+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:08:56+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","time":"2020-08-23T19:08:56+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:08:56+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:08:56+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:08:56+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:08:56+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:08:56+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:08:56+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T19:08:56+05:30","message":"stopped watching"} +{"level":"debug","object":"test","pouncer":"owner","time":"2020-08-23T19:08:56+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","object":"test","pouncer":"owner1","time":"2020-08-23T19:08:56+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T19:08:56+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner2","time":"2020-08-23T19:08:56+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T19:08:56+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner3","time":"2020-08-23T19:08:57+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T19:08:57+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:08:57+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:08:57+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T19:08:57+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:08:57+05:30","message":"lock is in acquired state"} +{"level":"debug","owner":"owner1","time":"2020-08-23T19:08:57+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:08:57+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:08:57+05:30","message":"stopped watching"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:08:57+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:08:59+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:08:59+05:30","message":"lock is in released state"} +{"level":"debug","lock granted through pounce to":"owner2","time":"2020-08-23T19:08:59+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:08:59+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:08:59+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:01+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:01+05:30","message":"lock is in released state"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T19:09:01+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:09:01+05:30","message":"lock is in acquired state"} +{"level":"debug","owner":"owner2","time":"2020-08-23T19:09:01+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:09:01+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:09:01+05:30","message":"stopped watching"} +{"level":"debug","object":"test1","pouncer":"owner","time":"2020-08-23T19:09:02+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","object":"test1","pouncer":"owner1","time":"2020-08-23T19:09:02+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T19:09:02+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test1","pouncer":"owner3","time":"2020-08-23T19:09:03+05:30","message":"beginning pounce"} +{"level":"debug","object":"test1","pouncer":"owner2","time":"2020-08-23T19:09:03+05:30","message":"beginning pounce"} +{"level":"debug","time":"2020-08-23T19:09:03+05:30","message":"stopped pounce activity, object already under pounce"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:09:03+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test1","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T19:09:03+05:30","message":"pounce success"} +{"level":"debug","owner":"owner1","time":"2020-08-23T19:09:03+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T19:09:03+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:09:03+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"released"} +{"level":"debug","object":"testx","pouncer":"owner","time":"2020-08-23T19:09:07+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"locked"} +{"level":"debug","object":"testx","pouncer":"owner1","time":"2020-08-23T19:09:07+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T19:09:07+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner2","time":"2020-08-23T19:09:07+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T19:09:07+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner3","time":"2020-08-23T19:09:08+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T19:09:08+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:09:08+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:09:08+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:09:08+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T19:09:08+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T19:09:08+05:30","message":"lock is in acquired state"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T19:09:08+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T19:09:08+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:09:08+05:30","message":"stop signal received, stopped pouncing process"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:09:10+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:09:10+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:09:10+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner3","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T19:09:10+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T19:09:10+05:30","message":"lock is in acquired state"} +{"level":"debug","owner":"owner1","time":"2020-08-23T19:09:10+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T19:09:10+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:09:10+05:30","message":"stopped watching"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T19:09:10+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +--- FAIL: TestLockService (16.57s) + --- FAIL: TestLockService/pounce_test_without_quitting_in_between,_without_waiting_for_object (5.14s) + simple_client_test.go:335: + Error Trace: simple_client_test.go:335 + Error: Not equal: + expected: []string{"owner1"} + actual : []string{"owner1", "owner3"} + + Diff: + --- Expected + +++ Actual + @@ -1,3 +1,4 @@ + -([]string) (len=1) { + - (string) (len=6) "owner1" + +([]string) (len=2) { + + (string) (len=6) "owner1", + + (string) (len=6) "owner3" + } + Test: TestLockService/pounce_test_without_quitting_in_between,_without_waiting_for_object + simple_client_test.go:327: + Error Trace: simple_client_test.go:327 + asm_amd64.s:1373 + Error: Received unexpected error: + file already acquired + Test: TestLockService/pounce_test_without_quitting_in_between,_without_waiting_for_object + simple_client_test.go:340: + Error Trace: simple_client_test.go:340 + Error: Not equal: + expected: []string{} + actual : []string{"owner3"} + + Diff: + --- Expected + +++ Actual + @@ -1,2 +1,3 @@ + -([]string) { + +([]string) (len=1) { + + (string) (len=6) "owner3" + } + Test: TestLockService/pounce_test_without_quitting_in_between,_without_waiting_for_object +FAIL +exit status 1 +FAIL github.com/SystemBuilders/LocKey/internal/lockclient 16.713s +2020/08/23 19:09:14 Starting Server on 127.0.0.1:1234 +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't release, unauthorized access"} +{"level":"debug","descriptor":"test2","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:09:14+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:09:14+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:14+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:09:14+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:14+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T19:09:14+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:09:14+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:14+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:09:14+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:14+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:09:14+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:14+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T19:09:14+05:30","message":"stopped watching"} +{"level":"debug","object":"test","pouncer":"owner","time":"2020-08-23T19:09:14+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","object":"test","pouncer":"owner1","time":"2020-08-23T19:09:14+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T19:09:14+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner2","time":"2020-08-23T19:09:14+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T19:09:14+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner3","time":"2020-08-23T19:09:14+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T19:09:14+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:15+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T19:09:15+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:09:15+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:09:15+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:15+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:09:15+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:17+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:17+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:17+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner2","time":"2020-08-23T19:09:17+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:09:17+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:09:17+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:09:17+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:19+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:19+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:19+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T19:09:19+05:30","message":"pounce success"} +{"level":"debug","owner":"owner3","time":"2020-08-23T19:09:19+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:09:19+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:09:19+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:09:19+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:09:19+05:30","message":"stopped watching"} +{"level":"debug","object":"test1","pouncer":"owner","time":"2020-08-23T19:09:20+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","object":"test1","pouncer":"owner1","time":"2020-08-23T19:09:20+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T19:09:20+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test1","pouncer":"owner2","time":"2020-08-23T19:09:20+05:30","message":"beginning pounce"} +{"level":"debug","time":"2020-08-23T19:09:20+05:30","message":"stopped pounce activity, object already under pounce"} +{"level":"debug","object":"test1","pouncer":"owner3","time":"2020-08-23T19:09:20+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T19:09:20+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:09:21+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:09:21+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test1","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T19:09:21+05:30","message":"lock is in acquired state"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T19:09:21+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T19:09:21+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:09:23+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:09:23+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"test1","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner3","time":"2020-08-23T19:09:23+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner3","time":"2020-08-23T19:09:23+05:30","message":"lock is in acquired state"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T19:09:23+05:30","message":"pounce success"} +{"level":"debug","owner":"owner3","time":"2020-08-23T19:09:23+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","time":"2020-08-23T19:09:23+05:30","message":"stopped watching"} +{"level":"debug","object":"testx","pouncer":"owner","time":"2020-08-23T19:09:25+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"locked"} +{"level":"debug","object":"testx","pouncer":"owner1","time":"2020-08-23T19:09:25+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T19:09:25+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner2","time":"2020-08-23T19:09:25+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T19:09:25+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner3","time":"2020-08-23T19:09:26+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T19:09:26+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:09:26+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:09:26+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:09:26+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","time":"2020-08-23T19:09:26+05:30","message":"stop signal received, stopped pouncing process"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T19:09:26+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T19:09:26+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T19:09:26+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T19:09:26+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:09:28+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:09:28+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner3","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T19:09:28+05:30","message":"pounce success"} +{"level":"debug","owner":"owner2","time":"2020-08-23T19:09:28+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:09:28+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T19:09:28+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T19:09:28+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:09:28+05:30","message":"stopped watching"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T19:09:28+05:30","message":"lock is in acquired state"} +PASS +ok github.com/SystemBuilders/LocKey/internal/lockclient 17.319s +2020/08/23 19:09:32 Starting Server on 127.0.0.1:1234 +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't release, unauthorized access"} +{"level":"debug","descriptor":"test2","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:09:32+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:32+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:09:32+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:32+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:09:32+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:32+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T19:09:32+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:09:32+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:32+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:09:32+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:32+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:09:32+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:32+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T19:09:32+05:30","message":"stopped watching"} +{"level":"debug","object":"test","pouncer":"owner","time":"2020-08-23T19:09:32+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","object":"test","pouncer":"owner1","time":"2020-08-23T19:09:32+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T19:09:32+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner2","time":"2020-08-23T19:09:32+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T19:09:32+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner3","time":"2020-08-23T19:09:33+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T19:09:33+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:33+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:33+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:33+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:09:33+05:30","message":"lock is in acquired state"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T19:09:33+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:09:33+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:09:33+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:35+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner2","time":"2020-08-23T19:09:35+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:09:35+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:09:35+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:09:35+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:37+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:37+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:09:37+05:30","message":"lock is in acquired state"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T19:09:37+05:30","message":"pounce success"} +{"level":"debug","owner":"owner1","time":"2020-08-23T19:09:37+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","time":"2020-08-23T19:09:37+05:30","message":"stopped watching"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:09:37+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:09:37+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test1","pouncer":"owner","time":"2020-08-23T19:09:38+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","object":"test1","pouncer":"owner1","time":"2020-08-23T19:09:38+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T19:09:38+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test1","pouncer":"owner2","time":"2020-08-23T19:09:38+05:30","message":"beginning pounce"} +{"level":"debug","time":"2020-08-23T19:09:38+05:30","message":"stopped pounce activity, object already under pounce"} +{"level":"debug","object":"test1","pouncer":"owner3","time":"2020-08-23T19:09:39+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T19:09:39+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:09:39+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:09:39+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T19:09:39+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T19:09:39+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T19:09:39+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:09:41+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:09:42+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner3","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T19:09:42+05:30","message":"pounce success"} +{"level":"debug","owner":"owner3","time":"2020-08-23T19:09:42+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner3","time":"2020-08-23T19:09:42+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner3","time":"2020-08-23T19:09:42+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:09:42+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test1","message":"can't acquire, already been acquired"} +{"level":"debug","object":"testx","pouncer":"owner","time":"2020-08-23T19:09:44+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"locked"} +{"level":"debug","object":"testx","pouncer":"owner1","time":"2020-08-23T19:09:44+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T19:09:44+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner2","time":"2020-08-23T19:09:44+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T19:09:44+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner3","time":"2020-08-23T19:09:44+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T19:09:44+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:09:45+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:09:45+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:09:45+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T19:09:45+05:30","message":"pounce success"} +{"level":"debug","owner":"owner1","time":"2020-08-23T19:09:45+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","time":"2020-08-23T19:09:45+05:30","message":"stop signal received, stopped pouncing process"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T19:09:45+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:09:45+05:30","message":"stopped watching"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T19:09:45+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T19:09:45+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:09:47+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:09:47+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T19:09:47+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T19:09:47+05:30","message":"lock is in acquired state"} +{"level":"debug","owner":"owner3","time":"2020-08-23T19:09:47+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T19:09:47+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:09:47+05:30","message":"stopped watching"} +PASS +ok github.com/SystemBuilders/LocKey/internal/lockclient 16.984s +2020/08/23 19:09:50 Starting Server on 127.0.0.1:1234 +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't release, unauthorized access"} +{"level":"debug","descriptor":"test2","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:09:50+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:50+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:09:50+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:50+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","time":"2020-08-23T19:09:50+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:09:50+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:50+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:09:50+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:50+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:09:50+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:50+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T19:09:50+05:30","message":"stopped watching"} +{"level":"debug","object":"test","pouncer":"owner","time":"2020-08-23T19:09:50+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","object":"test","pouncer":"owner1","time":"2020-08-23T19:09:50+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T19:09:50+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner2","time":"2020-08-23T19:09:50+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T19:09:50+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner3","time":"2020-08-23T19:09:51+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T19:09:51+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:51+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:51+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:51+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T19:09:51+05:30","message":"pounce success"} +{"level":"debug","owner":"owner1","time":"2020-08-23T19:09:51+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:09:51+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:09:51+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:09:51+05:30","message":"stopped watching"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:09:51+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:54+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:54+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner2","time":"2020-08-23T19:09:54+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:09:54+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:09:54+05:30","message":"lock is in acquired state"} +{"level":"debug","owner":"owner2","time":"2020-08-23T19:09:54+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","time":"2020-08-23T19:09:54+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:09:56+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T19:09:56+05:30","message":"pounce success"} +{"level":"debug","owner":"owner3","time":"2020-08-23T19:09:56+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:09:56+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:09:56+05:30","message":"stopped watching"} +{"level":"debug","object":"test1","pouncer":"owner","time":"2020-08-23T19:09:57+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","object":"test1","pouncer":"owner1","time":"2020-08-23T19:09:57+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T19:09:57+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test1","pouncer":"owner2","time":"2020-08-23T19:09:57+05:30","message":"beginning pounce"} +{"level":"debug","time":"2020-08-23T19:09:57+05:30","message":"stopped pounce activity, object already under pounce"} +{"level":"debug","object":"test1","pouncer":"owner3","time":"2020-08-23T19:09:57+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T19:09:57+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:09:58+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:09:58+05:30","message":"lock is in released state"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T19:09:58+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T19:09:58+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T19:09:58+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:10:00+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner3","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T19:10:00+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner3","time":"2020-08-23T19:10:00+05:30","message":"lock is in acquired state"} +{"level":"debug","owner":"owner1","time":"2020-08-23T19:10:00+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner3","time":"2020-08-23T19:10:00+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:10:00+05:30","message":"stopped watching"} +{"level":"debug","object":"testx","pouncer":"owner","time":"2020-08-23T19:10:02+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"locked"} +{"level":"debug","object":"testx","pouncer":"owner1","time":"2020-08-23T19:10:02+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T19:10:02+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner2","time":"2020-08-23T19:10:02+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T19:10:02+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner3","time":"2020-08-23T19:10:04+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T19:10:04+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:10:04+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:10:04+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:10:04+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","time":"2020-08-23T19:10:04+05:30","message":"stop signal received, stopped pouncing process"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T19:10:04+05:30","message":"pounce success"} +{"level":"debug","owner":"owner1","time":"2020-08-23T19:10:04+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T19:10:04+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T19:10:04+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T19:10:04+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:10:04+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:10:09+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:10:09+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T19:10:09+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T19:10:09+05:30","message":"lock is in acquired state"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T19:10:09+05:30","message":"pounce success"} +{"level":"debug","owner":"owner2","time":"2020-08-23T19:10:09+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","time":"2020-08-23T19:10:09+05:30","message":"stopped watching"} +--- FAIL: TestLockService (21.99s) + --- FAIL: TestLockService/pounce_test_with_quitting_in_between,_without_waiting_for_object (10.17s) + simple_client_test.go:390: + Error Trace: simple_client_test.go:390 + Error: Not equal: + expected: []string{"owner1", "owner2"} + actual : []string{"owner1", "owner2", "owner3"} + + Diff: + --- Expected + +++ Actual + @@ -1,4 +1,5 @@ + -([]string) (len=2) { + +([]string) (len=3) { + (string) (len=6) "owner1", + - (string) (len=6) "owner2" + + (string) (len=6) "owner2", + + (string) (len=6) "owner3" + } + Test: TestLockService/pounce_test_with_quitting_in_between,_without_waiting_for_object +FAIL +exit status 1 +FAIL github.com/SystemBuilders/LocKey/internal/lockclient 22.126s +2020/08/23 19:10:13 Starting Server on 127.0.0.1:1234 +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't release, unauthorized access"} +{"level":"debug","descriptor":"test2","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:10:13+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:10:13+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:10:13+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:10:13+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T19:10:13+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:10:13+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:10:13+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:10:13+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:10:13+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:10:13+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:10:13+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T19:10:13+05:30","message":"stopped watching"} +{"level":"debug","object":"test","pouncer":"owner","time":"2020-08-23T19:10:13+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","object":"test","pouncer":"owner1","time":"2020-08-23T19:10:13+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T19:10:13+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner2","time":"2020-08-23T19:10:14+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T19:10:14+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner3","time":"2020-08-23T19:10:14+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T19:10:14+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:10:14+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:10:14+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:10:14+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T19:10:15+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:10:15+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:10:15+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:10:15+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:10:17+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:10:17+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:10:17+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner2","time":"2020-08-23T19:10:17+05:30","message":"pounce success"} +{"level":"debug","owner":"owner2","time":"2020-08-23T19:10:17+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:10:17+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:10:17+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:10:17+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:10:17+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:10:19+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:10:19+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T19:10:19+05:30","message":"pounce success"} +{"level":"debug","owner":"owner3","time":"2020-08-23T19:10:19+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:10:19+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:10:19+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:10:19+05:30","message":"stopped watching"} +{"level":"debug","object":"test1","pouncer":"owner","time":"2020-08-23T19:10:20+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","object":"test1","pouncer":"owner1","time":"2020-08-23T19:10:20+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T19:10:20+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test1","pouncer":"owner2","time":"2020-08-23T19:10:20+05:30","message":"beginning pounce"} +{"level":"debug","time":"2020-08-23T19:10:20+05:30","message":"stopped pounce activity, object already under pounce"} +{"level":"debug","object":"test1","pouncer":"owner3","time":"2020-08-23T19:10:20+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T19:10:20+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:10:21+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:10:21+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test1","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T19:10:21+05:30","message":"pounce success"} +{"level":"debug","owner":"owner1","time":"2020-08-23T19:10:21+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T19:10:21+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:10:21+05:30","message":"stopped watching"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T19:10:21+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:10:23+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner3","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T19:10:23+05:30","message":"pounce success"} +{"level":"debug","owner":"owner3","time":"2020-08-23T19:10:23+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner3","time":"2020-08-23T19:10:23+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:10:23+05:30","message":"stopped watching"} +{"level":"debug","object":"testx","pouncer":"owner","time":"2020-08-23T19:10:25+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"locked"} +{"level":"debug","object":"testx","pouncer":"owner1","time":"2020-08-23T19:10:25+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T19:10:25+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner2","time":"2020-08-23T19:10:25+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T19:10:25+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner3","time":"2020-08-23T19:10:25+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T19:10:25+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:10:27+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:10:27+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:10:27+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T19:10:27+05:30","message":"pounce success"} +{"level":"debug","owner":"owner1","time":"2020-08-23T19:10:27+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T19:10:27+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T19:10:27+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","time":"2020-08-23T19:10:27+05:30","message":"stop signal received, stopped pouncing process"} +{"level":"debug","time":"2020-08-23T19:10:27+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:10:29+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:10:29+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T19:10:29+05:30","message":"pounce success"} +{"level":"debug","owner":"owner3","time":"2020-08-23T19:10:29+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T19:10:29+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:10:29+05:30","message":"stopped watching"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T19:10:29+05:30","message":"lock is in acquired state"} +PASS +ok github.com/SystemBuilders/LocKey/internal/lockclient 18.119s +2020/08/23 19:10:32 Starting Server on 127.0.0.1:1234 +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't release, unauthorized access"} +{"level":"debug","descriptor":"test2","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:10:33+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:10:33+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:10:33+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:10:33+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:10:33+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T19:10:33+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:10:33+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:10:33+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:10:33+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:10:33+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:10:33+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:10:33+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T19:10:33+05:30","message":"stopped watching"} +{"level":"debug","object":"test","pouncer":"owner","time":"2020-08-23T19:10:33+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","object":"test","pouncer":"owner1","time":"2020-08-23T19:10:33+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T19:10:33+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner2","time":"2020-08-23T19:10:33+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T19:10:33+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner3","time":"2020-08-23T19:10:33+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T19:10:33+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:10:34+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:10:34+05:30","message":"lock is in released state"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T19:10:34+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:10:34+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:10:34+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:10:34+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:10:36+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:10:36+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:10:36+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner2","time":"2020-08-23T19:10:36+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:10:36+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:10:36+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:10:36+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:10:38+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:10:38+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T19:10:38+05:30","message":"pounce success"} +{"level":"debug","owner":"owner2","time":"2020-08-23T19:10:38+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:10:38+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:10:38+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:10:38+05:30","message":"stopped watching"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:10:38+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test1","pouncer":"owner","time":"2020-08-23T19:10:39+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","object":"test1","pouncer":"owner1","time":"2020-08-23T19:10:39+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T19:10:39+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test1","pouncer":"owner2","time":"2020-08-23T19:10:39+05:30","message":"beginning pounce"} +{"level":"debug","time":"2020-08-23T19:10:39+05:30","message":"stopped pounce activity, object already under pounce"} +{"level":"debug","object":"test1","pouncer":"owner3","time":"2020-08-23T19:10:40+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T19:10:40+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:10:40+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:10:40+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T19:10:40+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T19:10:40+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T19:10:40+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:10:42+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:10:42+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"test1","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T19:10:42+05:30","message":"pounce success"} +{"level":"debug","owner":"owner1","time":"2020-08-23T19:10:42+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner3","time":"2020-08-23T19:10:42+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:10:42+05:30","message":"stopped watching"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner3","time":"2020-08-23T19:10:42+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner","time":"2020-08-23T19:10:44+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"locked"} +{"level":"debug","object":"testx","pouncer":"owner1","time":"2020-08-23T19:10:44+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T19:10:44+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner2","time":"2020-08-23T19:10:44+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T19:10:44+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner3","time":"2020-08-23T19:10:45+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T19:10:45+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:10:47+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:10:47+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T19:10:47+05:30","message":"pounce success"} +{"level":"debug","owner":"owner1","time":"2020-08-23T19:10:47+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T19:10:47+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:10:47+05:30","message":"stopped watching"} +{"level":"debug","time":"2020-08-23T19:10:47+05:30","message":"stop signal received, stopped pouncing process"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T19:10:47+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T19:10:47+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:10:50+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:10:50+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T19:10:50+05:30","message":"pounce success"} +{"level":"debug","owner":"owner2","time":"2020-08-23T19:10:50+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T19:10:50+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:10:50+05:30","message":"stopped watching"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T19:10:50+05:30","message":"lock is in acquired state"} +--- FAIL: TestLockService (21.82s) + --- FAIL: TestLockService/pounce_test_without_quitting_in_between,_without_waiting_for_object (5.38s) + simple_client_test.go:335: + Error Trace: simple_client_test.go:335 + Error: Not equal: + expected: []string{"owner1"} + actual : []string{"owner1", "owner3"} + + Diff: + --- Expected + +++ Actual + @@ -1,3 +1,4 @@ + -([]string) (len=1) { + - (string) (len=6) "owner1" + +([]string) (len=2) { + + (string) (len=6) "owner1", + + (string) (len=6) "owner3" + } + Test: TestLockService/pounce_test_without_quitting_in_between,_without_waiting_for_object +FAIL +exit status 1 +FAIL github.com/SystemBuilders/LocKey/internal/lockclient 22.222s +2020/08/23 19:11:13 Starting Server on 127.0.0.1:1234 +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't release, unauthorized access"} +{"level":"debug","descriptor":"test2","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:11:13+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:13+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:11:13+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:13+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","time":"2020-08-23T19:11:13+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:11:13+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:13+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:11:13+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:13+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:11:13+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:13+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T19:11:13+05:30","message":"stopped watching"} +{"level":"debug","object":"test","pouncer":"owner","time":"2020-08-23T19:11:13+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","object":"test","pouncer":"owner1","time":"2020-08-23T19:11:13+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T19:11:13+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner2","time":"2020-08-23T19:11:13+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T19:11:13+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner3","time":"2020-08-23T19:11:14+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T19:11:14+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:14+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:14+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:14+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T19:11:14+05:30","message":"pounce success"} +{"level":"debug","owner":"owner1","time":"2020-08-23T19:11:14+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:11:14+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:11:14+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:11:14+05:30","message":"stopped watching"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:11:14+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:16+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:16+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner2","time":"2020-08-23T19:11:16+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:11:16+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:11:16+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:18+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:18+05:30","message":"lock is in released state"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T19:11:18+05:30","message":"pounce success"} +{"level":"debug","owner":"owner2","time":"2020-08-23T19:11:18+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:11:18+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:11:18+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:11:18+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test1","pouncer":"owner","time":"2020-08-23T19:11:19+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","object":"test1","pouncer":"owner1","time":"2020-08-23T19:11:19+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T19:11:19+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test1","pouncer":"owner2","time":"2020-08-23T19:11:19+05:30","message":"beginning pounce"} +{"level":"debug","time":"2020-08-23T19:11:19+05:30","message":"stopped pounce activity, object already under pounce"} +{"level":"debug","object":"test1","pouncer":"owner3","time":"2020-08-23T19:11:20+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T19:11:20+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:11:21+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:11:21+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test1","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T19:11:21+05:30","message":"lock is in acquired state"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T19:11:21+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T19:11:21+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:11:23+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:11:23+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner3","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T19:11:23+05:30","message":"pounce success"} +{"level":"debug","owner":"owner1","time":"2020-08-23T19:11:23+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner3","time":"2020-08-23T19:11:23+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:11:23+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test1","message":"can't acquire, already been acquired"} +{"level":"debug","object":"testx","pouncer":"owner","time":"2020-08-23T19:11:25+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"locked"} +{"level":"debug","object":"testx","pouncer":"owner1","time":"2020-08-23T19:11:25+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T19:11:25+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner2","time":"2020-08-23T19:11:26+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T19:11:26+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner3","time":"2020-08-23T19:11:26+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T19:11:26+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:11:27+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:11:27+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:11:27+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T19:11:27+05:30","message":"lock is in acquired state"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T19:11:27+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T19:11:27+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T19:11:27+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","time":"2020-08-23T19:11:27+05:30","message":"stop signal received, stopped pouncing process"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:11:29+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:11:29+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:11:29+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T19:11:29+05:30","message":"pounce success"} +{"level":"debug","owner":"owner3","time":"2020-08-23T19:11:29+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T19:11:29+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:11:29+05:30","message":"stopped watching"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T19:11:29+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +PASS +ok github.com/SystemBuilders/LocKey/internal/lockclient 18.090s +2020/08/23 19:11:32 Starting Server on 127.0.0.1:1234 +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't release, unauthorized access"} +{"level":"debug","descriptor":"test2","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:11:33+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:33+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:11:33+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:33+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:11:33+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:33+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T19:11:33+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:11:33+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:33+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:11:33+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:33+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:11:33+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","time":"2020-08-23T19:11:33+05:30","message":"stopped watching"} +{"level":"debug","object":"test","pouncer":"owner","time":"2020-08-23T19:11:33+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","object":"test","pouncer":"owner1","time":"2020-08-23T19:11:33+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T19:11:33+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner2","time":"2020-08-23T19:11:33+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T19:11:33+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner3","time":"2020-08-23T19:11:33+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T19:11:33+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:34+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:34+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:34+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:11:34+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:11:34+05:30","message":"lock is in acquired state"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T19:11:34+05:30","message":"pounce success"} +{"level":"debug","owner":"owner1","time":"2020-08-23T19:11:34+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:11:34+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:11:34+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:36+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:36+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner2","time":"2020-08-23T19:11:36+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:11:36+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:11:36+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:38+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:38+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T19:11:38+05:30","message":"pounce success"} +{"level":"debug","owner":"owner2","time":"2020-08-23T19:11:38+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:11:38+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:11:38+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:11:38+05:30","message":"stopped watching"} +{"level":"debug","object":"test1","pouncer":"owner","time":"2020-08-23T19:11:39+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","object":"test1","pouncer":"owner1","time":"2020-08-23T19:11:39+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T19:11:39+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test1","pouncer":"owner2","time":"2020-08-23T19:11:40+05:30","message":"beginning pounce"} +{"level":"debug","time":"2020-08-23T19:11:40+05:30","message":"stopped pounce activity, object already under pounce"} +{"level":"debug","object":"test1","pouncer":"owner3","time":"2020-08-23T19:11:40+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T19:11:40+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:11:40+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:11:40+05:30","message":"lock is in released state"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T19:11:40+05:30","message":"pounce success"} +{"level":"debug","owner":"owner1","time":"2020-08-23T19:11:40+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T19:11:40+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:11:40+05:30","message":"stopped watching"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T19:11:40+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:11:42+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner3","time":"2020-08-23T19:11:42+05:30","message":"lock is in acquired state"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T19:11:42+05:30","message":"pounce success"} +{"level":"debug","owner":"owner3","time":"2020-08-23T19:11:42+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","time":"2020-08-23T19:11:42+05:30","message":"stopped watching"} +{"level":"debug","object":"testx","pouncer":"owner","time":"2020-08-23T19:11:44+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"locked"} +{"level":"debug","object":"testx","pouncer":"owner1","time":"2020-08-23T19:11:44+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T19:11:44+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner2","time":"2020-08-23T19:11:44+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T19:11:44+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner3","time":"2020-08-23T19:11:46+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:11:46+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:11:46+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T19:11:46+05:30","message":"pounce success"} +{"level":"debug","time":"2020-08-23T19:11:46+05:30","message":"stop signal received, stopped pouncing process"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T19:11:46+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T19:11:46+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T19:11:46+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:11:48+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:11:48+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:11:48+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner3","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T19:11:48+05:30","message":"pounce success"} +{"level":"debug","owner":"owner2","time":"2020-08-23T19:11:48+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T19:11:48+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T19:11:48+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T19:11:48+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:11:48+05:30","message":"stopped watching"} +--- FAIL: TestLockService (17.70s) + --- FAIL: TestLockService/pounce_test_with_quitting_in_between,_without_waiting_for_object (6.26s) + simple_client_test.go:390: + Error Trace: simple_client_test.go:390 + Error: Not equal: + expected: []string{"owner1", "owner2"} + actual : []string{"owner1", "owner2", "owner3"} + + Diff: + --- Expected + +++ Actual + @@ -1,4 +1,5 @@ + -([]string) (len=2) { + +([]string) (len=3) { + (string) (len=6) "owner1", + - (string) (len=6) "owner2" + + (string) (len=6) "owner2", + + (string) (len=6) "owner3" + } + Test: TestLockService/pounce_test_with_quitting_in_between,_without_waiting_for_object +FAIL +exit status 1 +FAIL github.com/SystemBuilders/LocKey/internal/lockclient 17.795s +2020/08/23 19:11:51 Starting Server on 127.0.0.1:1234 +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't acquire, already been acquired"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"can't release, unauthorized access"} +{"level":"debug","descriptor":"test2","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:11:51+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:11:51+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","descriptor":"test","message":"checkacquire success"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:11:51+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","message":"check acquire failure"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:51+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T19:11:51+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:11:51+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:51+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:11:51+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:51+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:11:51+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:51+05:30","message":"lock is in released state"} +{"level":"debug","time":"2020-08-23T19:11:51+05:30","message":"stopped watching"} +{"level":"debug","object":"test","pouncer":"owner","time":"2020-08-23T19:11:51+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test","owner":"owner","message":"locked"} +{"level":"debug","object":"test","pouncer":"owner1","time":"2020-08-23T19:11:51+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T19:11:51+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner2","time":"2020-08-23T19:11:51+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T19:11:51+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test","pouncer":"owner3","time":"2020-08-23T19:11:52+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner","time":"2020-08-23T19:11:52+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:52+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:52+05:30","message":"lock is in released state"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T19:11:52+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:11:52+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:11:52+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner1","time":"2020-08-23T19:11:52+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:55+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:55+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner2","time":"2020-08-23T19:11:55+05:30","message":"pounce success"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:11:55+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:11:55+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner2","time":"2020-08-23T19:11:55+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test","owner":"owner2","message":"released"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:57+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test","time":"2020-08-23T19:11:57+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:11:57+05:30","message":"lock is in acquired state"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T19:11:57+05:30","message":"pounce success"} +{"level":"debug","owner":"owner2","time":"2020-08-23T19:11:57+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","time":"2020-08-23T19:11:57+05:30","message":"stopped watching"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:11:57+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"test","owner":"owner3","time":"2020-08-23T19:11:57+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test1","pouncer":"owner","time":"2020-08-23T19:11:58+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"locked"} +{"level":"debug","object":"test1","pouncer":"owner1","time":"2020-08-23T19:11:58+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T19:11:58+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"test1","pouncer":"owner2","time":"2020-08-23T19:11:58+05:30","message":"beginning pounce"} +{"level":"debug","time":"2020-08-23T19:11:58+05:30","message":"stopped pounce activity, object already under pounce"} +{"level":"debug","object":"test1","pouncer":"owner3","time":"2020-08-23T19:11:58+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner","time":"2020-08-23T19:11:58+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"test1","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:11:59+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"locked"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:11:59+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T19:11:59+05:30","message":"lock is in acquired state"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T19:11:59+05:30","message":"pounce success"} +{"level":"debug","owner":"owner1","time":"2020-08-23T19:11:59+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"test1","owner":"owner1","time":"2020-08-23T19:11:59+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:11:59+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"test1","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"test1","time":"2020-08-23T19:12:02+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"test1","owner":"owner3","message":"locked"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T19:12:02+05:30","message":"pounce success"} +{"level":"debug","owner":"owner3","time":"2020-08-23T19:12:02+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","time":"2020-08-23T19:12:02+05:30","message":"stopped watching"} +{"level":"debug","object":"testx","pouncer":"owner","time":"2020-08-23T19:12:04+05:30","message":"beginning pounce"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"locked"} +{"level":"debug","object":"testx","pouncer":"owner1","time":"2020-08-23T19:12:04+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T19:12:04+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner2","time":"2020-08-23T19:12:04+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T19:12:04+05:30","message":"lock is in acquired state"} +{"level":"debug","object":"testx","pouncer":"owner3","time":"2020-08-23T19:12:04+05:30","message":"beginning pounce"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner","time":"2020-08-23T19:12:04+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","owner":"owner","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:12:05+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:12:05+05:30","message":"lock is in released state"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:12:05+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"locked"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","lock granted through pounce to":"owner1","time":"2020-08-23T19:12:05+05:30","message":"pounce success"} +{"level":"debug","owner":"owner1","time":"2020-08-23T19:12:05+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T19:12:05+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:12:05+05:30","message":"stopped watching"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner1","time":"2020-08-23T19:12:05+05:30","message":"lock is in acquired state"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +{"level":"debug","time":"2020-08-23T19:12:05+05:30","message":"stop signal received, stopped pouncing process"} +{"level":"debug","descriptor":"testx","owner":"owner1","message":"released"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:12:09+05:30","message":"lock is in released state"} +{"level":"debug","descriptor":"testx","owner":"owner3","message":"locked"} +{"level":"debug","process":"lock watching","lock":"testx","time":"2020-08-23T19:12:09+05:30","message":"lock is in released state"} +{"level":"debug","lock granted through pounce to":"owner3","time":"2020-08-23T19:12:09+05:30","message":"pounce success"} +{"level":"debug","owner":"owner3","time":"2020-08-23T19:12:09+05:30","message":"stopping pouncing process, pouncer availed lock"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T19:12:09+05:30","message":"lock is in acquired state"} +{"level":"debug","process":"lock watching","lock":"testx","owner":"owner3","time":"2020-08-23T19:12:09+05:30","message":"lock is in acquired state"} +{"level":"debug","time":"2020-08-23T19:12:09+05:30","message":"stopped watching"} +{"level":"debug","descriptor":"testx","message":"can't acquire, already been acquired"} +PASS +ok github.com/SystemBuilders/LocKey/internal/lockclient 22.351s diff --git a/internal/lockclient/simple_client_test.go b/internal/lockclient/simple_client_test.go index fa9e315..2428a9d 100644 --- a/internal/lockclient/simple_client_test.go +++ b/internal/lockclient/simple_client_test.go @@ -248,14 +248,14 @@ func TestLockService(t *testing.T) { assert.NoError(err) }() + <-time.After(100 * time.Millisecond) go func() { - <-time.After(100 * time.Millisecond) err := sc.Pounce(*objD, "owner2", nil, true) assert.NoError(err) }() + <-time.After(500 * time.Millisecond) go func() { - <-time.After(500 * time.Millisecond) err := sc.Pounce(*objD, "owner3", nil, true) assert.NoError(err) }() @@ -312,16 +312,16 @@ func TestLockService(t *testing.T) { assert.NoError(err) }() + <-time.After(100 * time.Millisecond) go func() { - <-time.After(100 * time.Millisecond) err := sc.Pounce(*objD, "owner2", nil, false) if err != ErrorObjectAlreadyPouncedOn { assert.NoError(err) } }() + <-time.After(500 * time.Millisecond) go func() { - <-time.After(500 * time.Millisecond) err := sc.Pounce(*objD, "owner3", nil, true) assert.NoError(err) }() @@ -369,14 +369,14 @@ func TestLockService(t *testing.T) { assert.NoError(err) }() + <-time.After(100 * time.Millisecond) go func() { - <-time.After(100 * time.Millisecond) err := sc.Pounce(*objD, "owner2", quitChan, true) assert.NoError(err) }() + <-time.After(500 * time.Millisecond) go func() { - <-time.After(500 * time.Millisecond) err := sc.Pounce(*objD, "owner3", nil, true) assert.NoError(err) }() From 3b9edcfc72028d3159342d61992d32f146b0fcda Mon Sep 17 00:00:00 2001 From: SUMUKHA-PK Date: Thu, 1 Oct 2020 11:02:11 +0530 Subject: [PATCH 18/20] this commit makes watching and pouncing dormant --- internal/lockclient/client.go | 6 +- internal/lockclient/simple_client.go | 44 +-- internal/lockclient/simple_client_test.go | 346 +++++++++++----------- internal/routing/acquire.go | 3 +- internal/routing/routing.go | 2 +- 5 files changed, 201 insertions(+), 200 deletions(-) diff --git a/internal/lockclient/client.go b/internal/lockclient/client.go index bec68dc..eb1a181 100644 --- a/internal/lockclient/client.go +++ b/internal/lockclient/client.go @@ -35,7 +35,7 @@ type Client interface { // will be notified about the change. // The channel passed as the argument can be used to stop watching // at any point of time. - Watch(lockservice.ObjectDescriptor, chan struct{}) (chan Lock, error) + watch(lockservice.ObjectDescriptor, chan struct{}) (chan Lock, error) // Pounce can be used to "pounce" on a lock that has already been // acquired. This is similar to acquire but once a process has // opted to pounce, they will be provided first access by having @@ -43,9 +43,9 @@ type Client interface { // The second, third and fourth arguments dictate the end of the pouncing // reign, the owner willing to pounce and allows pouncing on pre-pounced // objects respectively. True bool allows pouncing on pre-pounced objects. - Pounce(lockservice.ObjectDescriptor, string, chan struct{}, bool) error + pounce(lockservice.ObjectDescriptor, string, chan struct{}, bool) error // Pouncers returns the current pouncers on any particular lock. - Pouncers(lockservice.ObjectDescriptor) []string + pouncers(lockservice.ObjectDescriptor) []string } // Config describes the configuration for the lockservice to run on. diff --git a/internal/lockclient/simple_client.go b/internal/lockclient/simple_client.go index ba81a50..77e614b 100644 --- a/internal/lockclient/simple_client.go +++ b/internal/lockclient/simple_client.go @@ -18,10 +18,10 @@ var _ Config = (*lockservice.SimpleConfig)(nil) // SimpleClient implements Client, the lockclient for LocKey. type SimpleClient struct { - config *lockservice.SimpleConfig - cache *cache.LRUCache - pouncers map[lockservice.ObjectDescriptor][]string - mu sync.Mutex + config *lockservice.SimpleConfig + cache *cache.LRUCache + pouncersMap map[lockservice.ObjectDescriptor][]string + mu sync.Mutex } // NewSimpleClient returns a new SimpleKey of the given value. @@ -29,9 +29,9 @@ type SimpleClient struct { func NewSimpleClient(config *lockservice.SimpleConfig, cache *cache.LRUCache) *SimpleClient { p := make(map[lockservice.ObjectDescriptor][]string) return &SimpleClient{ - config: config, - cache: cache, - pouncers: p, + config: config, + cache: cache, + pouncersMap: p, } } @@ -40,7 +40,7 @@ var _ Client = (*SimpleClient)(nil) // Acquire internally calls Pounce in order to follow the FIFO order. // Acquire assumes that the process will wait for the lock until it's released. func (sc *SimpleClient) Acquire(d lockservice.Descriptors) error { - return sc.Pounce(lockservice.ObjectDescriptor{ObjectID: d.ID()}, d.Owner(), nil, true) + return sc.pounce(lockservice.ObjectDescriptor{ObjectID: d.ID()}, d.Owner(), nil, true) } // acquire makes an HTTP call to the lockserver and acquires the lock. @@ -166,7 +166,7 @@ func (sc *SimpleClient) StartService(cfg Config) error { // } // } // -func (sc *SimpleClient) Watch(d lockservice.ObjectDescriptor, quit chan struct{}) (chan Lock, error) { +func (sc *SimpleClient) watch(d lockservice.ObjectDescriptor, quit chan struct{}) (chan Lock, error) { stateChan := make(chan Lock, 1) // releaseNotification is true if the last notification wasn't a release. releaseNotification := false @@ -262,7 +262,7 @@ func (sc *SimpleClient) Watch(d lockservice.ObjectDescriptor, quit chan struct{} // } // Pounce must be used inside a goroutine as it's a blocking process. // Handling of ErrObjectHasBeenPouncedOn is necesssary. -func (sc *SimpleClient) Pounce(d lockservice.ObjectDescriptor, owner string, quit chan struct{}, instant bool) error { +func (sc *SimpleClient) pounce(d lockservice.ObjectDescriptor, owner string, quit chan struct{}, instant bool) error { log.Debug(). Str("object", d.ObjectID). @@ -271,7 +271,7 @@ func (sc *SimpleClient) Pounce(d lockservice.ObjectDescriptor, owner string, qui // Reject the pounce if the client doesn't want to pounce on // pre-pounced objects. - if !instant && (len(sc.Pouncers(d)) > 0) { + if !instant && (len(sc.pouncers(d)) > 0) { log.Debug().Msg("stopped pounce activity, object already under pounce") return ErrorObjectAlreadyPouncedOn } @@ -281,7 +281,7 @@ func (sc *SimpleClient) Pounce(d lockservice.ObjectDescriptor, owner string, qui _, err := sc.Checkacquire(d) if err == nil { sc.mu.Lock() - sc.pouncers[d] = append(sc.pouncers[d], owner) + sc.pouncersMap[d] = append(sc.pouncersMap[d], owner) sc.mu.Unlock() } else { return sc.acquire(&lockservice.LockDescriptor{FileID: d.ObjectID, UserID: owner}) @@ -293,7 +293,7 @@ func (sc *SimpleClient) Pounce(d lockservice.ObjectDescriptor, owner string, qui // The lock is continously watched and whenever the lock is // released the first pouncer obtains the lock. q := make(chan struct{}) - stateChan, err := sc.Watch(d, q) + stateChan, err := sc.watch(d, q) if err != nil { return err } @@ -312,7 +312,7 @@ func (sc *SimpleClient) Pounce(d lockservice.ObjectDescriptor, owner string, qui // to the lock on the object. if state.LockState == Release { var op string - pouncers := sc.Pouncers(d) + pouncers := sc.pouncers(d) if len(pouncers) > 0 { op = pouncers[0] } @@ -327,7 +327,7 @@ func (sc *SimpleClient) Pounce(d lockservice.ObjectDescriptor, owner string, qui sc.mu.Lock() // Once the task of acquiring is complete, remove // the first element from the slice as it was granted the lock. - sc.pouncers[d] = append(sc.pouncers[d][:0], sc.pouncers[d][1:]...) + sc.pouncersMap[d] = append(sc.pouncersMap[d][:0], sc.pouncersMap[d][1:]...) sc.mu.Unlock() log.Debug(). @@ -335,7 +335,7 @@ func (sc *SimpleClient) Pounce(d lockservice.ObjectDescriptor, owner string, qui Msg("pounce success") // Exit condition is the pouncer getting access to the lock. - if op == owner || len(sc.Pouncers(d)) == 0 { + if op == owner || len(sc.pouncers(d)) == 0 { log.Debug(). Str("owner", owner). Msg("stopping pouncing process, pouncer availed lock") @@ -353,10 +353,10 @@ func (sc *SimpleClient) Pounce(d lockservice.ObjectDescriptor, owner string, qui // Pouncers returns the active "pouncers" on a descriptor. // This is safe to read concurrently. -func (sc *SimpleClient) Pouncers(d lockservice.ObjectDescriptor) []string { +func (sc *SimpleClient) pouncers(d lockservice.ObjectDescriptor) []string { sc.mu.Lock() - var x = make([]string, len(sc.pouncers[d])) - copy(x, sc.pouncers[d]) + var x = make([]string, len(sc.pouncersMap[d])) + copy(x, sc.pouncersMap[d]) sc.mu.Unlock() // fmt.Println(x) // fmt.Println(sc.pouncers[d]) @@ -454,14 +454,14 @@ func (sc *SimpleClient) releaseFromCache(d lockservice.Descriptors) error { func (sc *SimpleClient) removeOwner(d lockservice.ObjectDescriptor, owner string) { index := -1 sc.mu.Lock() - for i := 0; i < len(sc.pouncers[d]); i++ { - if sc.pouncers[d][i] == owner { + for i := 0; i < len(sc.pouncersMap[d]); i++ { + if sc.pouncersMap[d][i] == owner { index = i break } } if index != -1 { - sc.pouncers[d] = append(sc.pouncers[d][:index], sc.pouncers[d][index+1:]...) + sc.pouncersMap[d] = append(sc.pouncersMap[d][:index], sc.pouncersMap[d][index+1:]...) } sc.mu.Unlock() } diff --git a/internal/lockclient/simple_client_test.go b/internal/lockclient/simple_client_test.go index 2428a9d..1ce9227 100644 --- a/internal/lockclient/simple_client_test.go +++ b/internal/lockclient/simple_client_test.go @@ -231,179 +231,179 @@ func TestLockService(t *testing.T) { // assert the expected behaviour. // Time waits are added in order to maintain the sequence of // pounces and have a deterministic test. - t.Run("pounce test without quitting in between, always wait for object", func(t *testing.T) { - size := 5 - cache := cache.NewLRUCache(size) - sc := NewSimpleClient(scfg, cache) - - assert := assert.New(t) - d := lockservice.NewLockDescriptor("test", "owner") - err := sc.Acquire(d) - assert.NoError(err) - - objD := lockservice.NewObjectDescriptor("test") - - go func() { - err := sc.Pounce(*objD, "owner1", nil, true) - assert.NoError(err) - }() - - <-time.After(100 * time.Millisecond) - go func() { - err := sc.Pounce(*objD, "owner2", nil, true) - assert.NoError(err) - }() - - <-time.After(500 * time.Millisecond) - go func() { - err := sc.Pounce(*objD, "owner3", nil, true) - assert.NoError(err) - }() - - pouncersBeforeFirstRelease := []string{"owner1", "owner2", "owner3"} - pouncersAfterFirstRelease := []string{"owner2", "owner3"} - pouncersAfterSecondRelease := []string{"owner3"} - pouncersAfterThirdRelease := []string{} - - <-time.After(1 * time.Second) - assert.Equal(sc.Pouncers(*objD), pouncersBeforeFirstRelease) - - err = sc.Release(d) - assert.NoError(err) - <-time.After(1 * time.Second) - assert.Equal(sc.Pouncers(*objD), pouncersAfterFirstRelease) - - <-time.After(1 * time.Second) - owner, err := sc.Checkacquire(*objD) - if owner == "owner1" { - err = sc.Release(&lockservice.LockDescriptor{FileID: objD.ObjectID, UserID: "owner1"}) - assert.NoError(err) - } - - <-time.After(1 * time.Second) - assert.Equal(sc.Pouncers(*objD), pouncersAfterSecondRelease) - - <-time.After(1 * time.Second) - owner, err = sc.Checkacquire(*objD) - if owner == "owner2" { - err = sc.Release(&lockservice.LockDescriptor{FileID: objD.ObjectID, UserID: "owner2"}) - assert.NoError(err) - } - - <-time.After(1 * time.Second) - assert.Equal(sc.Pouncers(*objD), pouncersAfterThirdRelease) - }) - - // This test is very similar to the one above but owner2 doensn't wait for its pounce. - t.Run("pounce test without quitting in between, without waiting for object", func(t *testing.T) { - size := 5 - cache := cache.NewLRUCache(size) - sc := NewSimpleClient(scfg, cache) - - assert := assert.New(t) - d := lockservice.NewLockDescriptor("test1", "owner") - err := sc.Acquire(d) - assert.NoError(err) - - objD := lockservice.NewObjectDescriptor("test1") - - go func() { - err := sc.Pounce(*objD, "owner1", nil, true) - assert.NoError(err) - }() - - <-time.After(100 * time.Millisecond) - go func() { - err := sc.Pounce(*objD, "owner2", nil, false) - if err != ErrorObjectAlreadyPouncedOn { - assert.NoError(err) - } - }() - - <-time.After(500 * time.Millisecond) - go func() { - err := sc.Pounce(*objD, "owner3", nil, true) - assert.NoError(err) - }() - - pouncersBeforeFirstRelease := []string{"owner1", "owner3"} - pouncersAfterFirstRelease := []string{"owner3"} - pouncersAfterSecondRelease := []string{} - - <-time.After(1 * time.Second) - assert.Equal(sc.Pouncers(*objD), pouncersBeforeFirstRelease) - - err = sc.Release(d) - assert.NoError(err) - <-time.After(1 * time.Second) - assert.Equal(sc.Pouncers(*objD), pouncersAfterFirstRelease) - - <-time.After(1 * time.Second) - owner, err := sc.Checkacquire(*objD) - if owner == "owner1" { - err = sc.Release(&lockservice.LockDescriptor{FileID: objD.ObjectID, UserID: "owner1"}) - assert.NoError(err) - } - - <-time.After(2 * time.Second) - assert.Equal(sc.Pouncers(*objD), pouncersAfterSecondRelease) - }) - - // This test is very similar to the one above but a quit signal is sent to owner2's pounce. - t.Run("pounce test with quitting in between, without waiting for object", func(t *testing.T) { - size := 5 - cache := cache.NewLRUCache(size) - sc := NewSimpleClient(scfg, cache) - - assert := assert.New(t) - d := lockservice.NewLockDescriptor("testx", "owner") - - quitChan := make(chan struct{}, 1) - err := sc.Acquire(d) - assert.NoError(err) - - objD := lockservice.NewObjectDescriptor("testx") - - go func() { - err := sc.Pounce(*objD, "owner1", nil, true) - assert.NoError(err) - }() - - <-time.After(100 * time.Millisecond) - go func() { - err := sc.Pounce(*objD, "owner2", quitChan, true) - assert.NoError(err) - }() - - <-time.After(500 * time.Millisecond) - go func() { - err := sc.Pounce(*objD, "owner3", nil, true) - assert.NoError(err) - }() - - pouncersBeforeFirstRelease := []string{"owner1", "owner2", "owner3"} - pouncersAfterFirstRelease := []string{"owner3"} - pouncersAfterSecondRelease := []string{} - - <-time.After(1 * time.Second) - assert.Equal(sc.Pouncers(*objD), pouncersBeforeFirstRelease) - - quitChan <- struct{}{} - err = sc.Release(d) - assert.NoError(err) - <-time.After(1 * time.Second) - assert.Equal(sc.Pouncers(*objD), pouncersAfterFirstRelease) - - <-time.After(1 * time.Second) - owner, err := sc.Checkacquire(*objD) - if owner == "owner1" { - err = sc.Release(&lockservice.LockDescriptor{FileID: objD.ObjectID, UserID: "owner1"}) - assert.NoError(err) - } - - <-time.After(2 * time.Second) - assert.Equal(sc.Pouncers(*objD), pouncersAfterSecondRelease) - }) + // t.Run("pounce test without quitting in between, always wait for object", func(t *testing.T) { + // size := 5 + // cache := cache.NewLRUCache(size) + // sc := NewSimpleClient(scfg, cache) + + // assert := assert.New(t) + // d := lockservice.NewLockDescriptor("test", "owner") + // err := sc.Acquire(d) + // assert.NoError(err) + + // objD := lockservice.NewObjectDescriptor("test") + + // go func() { + // err := sc.Pounce(*objD, "owner1", nil, true) + // assert.NoError(err) + // }() + + // <-time.After(100 * time.Millisecond) + // go func() { + // err := sc.Pounce(*objD, "owner2", nil, true) + // assert.NoError(err) + // }() + + // <-time.After(500 * time.Millisecond) + // go func() { + // err := sc.Pounce(*objD, "owner3", nil, true) + // assert.NoError(err) + // }() + + // pouncersBeforeFirstRelease := []string{"owner1", "owner2", "owner3"} + // pouncersAfterFirstRelease := []string{"owner2", "owner3"} + // pouncersAfterSecondRelease := []string{"owner3"} + // pouncersAfterThirdRelease := []string{} + + // <-time.After(1 * time.Second) + // assert.Equal(sc.Pouncers(*objD), pouncersBeforeFirstRelease) + + // err = sc.Release(d) + // assert.NoError(err) + // <-time.After(1 * time.Second) + // assert.Equal(sc.Pouncers(*objD), pouncersAfterFirstRelease) + + // <-time.After(1 * time.Second) + // owner, err := sc.Checkacquire(*objD) + // if owner == "owner1" { + // err = sc.Release(&lockservice.LockDescriptor{FileID: objD.ObjectID, UserID: "owner1"}) + // assert.NoError(err) + // } + + // <-time.After(1 * time.Second) + // assert.Equal(sc.Pouncers(*objD), pouncersAfterSecondRelease) + + // <-time.After(1 * time.Second) + // owner, err = sc.Checkacquire(*objD) + // if owner == "owner2" { + // err = sc.Release(&lockservice.LockDescriptor{FileID: objD.ObjectID, UserID: "owner2"}) + // assert.NoError(err) + // } + + // <-time.After(1 * time.Second) + // assert.Equal(sc.Pouncers(*objD), pouncersAfterThirdRelease) + // }) + + // // This test is very similar to the one above but owner2 doensn't wait for its pounce. + // t.Run("pounce test without quitting in between, without waiting for object", func(t *testing.T) { + // size := 5 + // cache := cache.NewLRUCache(size) + // sc := NewSimpleClient(scfg, cache) + + // assert := assert.New(t) + // d := lockservice.NewLockDescriptor("test1", "owner") + // err := sc.Acquire(d) + // assert.NoError(err) + + // objD := lockservice.NewObjectDescriptor("test1") + + // go func() { + // err := sc.Pounce(*objD, "owner1", nil, true) + // assert.NoError(err) + // }() + + // <-time.After(100 * time.Millisecond) + // go func() { + // err := sc.Pounce(*objD, "owner2", nil, false) + // if err != ErrorObjectAlreadyPouncedOn { + // assert.NoError(err) + // } + // }() + + // <-time.After(500 * time.Millisecond) + // go func() { + // err := sc.Pounce(*objD, "owner3", nil, true) + // assert.NoError(err) + // }() + + // pouncersBeforeFirstRelease := []string{"owner1", "owner3"} + // pouncersAfterFirstRelease := []string{"owner3"} + // pouncersAfterSecondRelease := []string{} + + // <-time.After(1 * time.Second) + // assert.Equal(sc.Pouncers(*objD), pouncersBeforeFirstRelease) + + // err = sc.Release(d) + // assert.NoError(err) + // <-time.After(1 * time.Second) + // assert.Equal(sc.Pouncers(*objD), pouncersAfterFirstRelease) + + // <-time.After(1 * time.Second) + // owner, err := sc.Checkacquire(*objD) + // if owner == "owner1" { + // err = sc.Release(&lockservice.LockDescriptor{FileID: objD.ObjectID, UserID: "owner1"}) + // assert.NoError(err) + // } + + // <-time.After(2 * time.Second) + // assert.Equal(sc.Pouncers(*objD), pouncersAfterSecondRelease) + // }) + + // // This test is very similar to the one above but a quit signal is sent to owner2's pounce. + // t.Run("pounce test with quitting in between, without waiting for object", func(t *testing.T) { + // size := 5 + // cache := cache.NewLRUCache(size) + // sc := NewSimpleClient(scfg, cache) + + // assert := assert.New(t) + // d := lockservice.NewLockDescriptor("testx", "owner") + + // quitChan := make(chan struct{}, 1) + // err := sc.Acquire(d) + // assert.NoError(err) + + // objD := lockservice.NewObjectDescriptor("testx") + + // go func() { + // err := sc.Pounce(*objD, "owner1", nil, true) + // assert.NoError(err) + // }() + + // <-time.After(100 * time.Millisecond) + // go func() { + // err := sc.Pounce(*objD, "owner2", quitChan, true) + // assert.NoError(err) + // }() + + // <-time.After(500 * time.Millisecond) + // go func() { + // err := sc.Pounce(*objD, "owner3", nil, true) + // assert.NoError(err) + // }() + + // pouncersBeforeFirstRelease := []string{"owner1", "owner2", "owner3"} + // pouncersAfterFirstRelease := []string{"owner3"} + // pouncersAfterSecondRelease := []string{} + + // <-time.After(1 * time.Second) + // assert.Equal(sc.Pouncers(*objD), pouncersBeforeFirstRelease) + + // quitChan <- struct{}{} + // err = sc.Release(d) + // assert.NoError(err) + // <-time.After(1 * time.Second) + // assert.Equal(sc.Pouncers(*objD), pouncersAfterFirstRelease) + + // <-time.After(1 * time.Second) + // owner, err := sc.Checkacquire(*objD) + // if owner == "owner1" { + // err = sc.Release(&lockservice.LockDescriptor{FileID: objD.ObjectID, UserID: "owner1"}) + // assert.NoError(err) + // } + + // <-time.After(2 * time.Second) + // assert.Equal(sc.Pouncers(*objD), pouncersAfterSecondRelease) + // }) quit <- true return diff --git a/internal/routing/acquire.go b/internal/routing/acquire.go index 7695568..84d2028 100644 --- a/internal/routing/acquire.go +++ b/internal/routing/acquire.go @@ -8,7 +8,8 @@ import ( "github.com/SystemBuilders/LocKey/internal/lockservice" ) -func Acquire(w http.ResponseWriter, r *http.Request, ls *lockservice.SimpleLockService) { +// acquire wraps the lock Acquire function and creates a clean HTTP service. +func acquire(w http.ResponseWriter, r *http.Request, ls *lockservice.SimpleLockService) { body, err := ioutil.ReadAll(r.Body) if err != nil { diff --git a/internal/routing/routing.go b/internal/routing/routing.go index 95008e7..5ae5c61 100644 --- a/internal/routing/routing.go +++ b/internal/routing/routing.go @@ -18,7 +18,7 @@ func SetupRouting(ls *lockservice.SimpleLockService, r *mux.Router) *mux.Router func makeacquireHandler(ls *lockservice.SimpleLockService) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - Acquire(w, r, ls) + acquire(w, r, ls) } } From f88a078843a270e18b2891aec8f1f2db5c25309a Mon Sep 17 00:00:00 2001 From: SUMUKHA-PK Date: Thu, 1 Oct 2020 11:04:12 +0530 Subject: [PATCH 19/20] minor changes to pass tests --- internal/lockclient/simple_client_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/lockclient/simple_client_test.go b/internal/lockclient/simple_client_test.go index 1ce9227..750c846 100644 --- a/internal/lockclient/simple_client_test.go +++ b/internal/lockclient/simple_client_test.go @@ -144,7 +144,7 @@ func TestLockService(t *testing.T) { // start watching the lock. quit := make(chan struct{}, 1) - stateChan, err := sc.Watch(lockservice.ObjectDescriptor{ObjectID: d.ID()}, quit) + stateChan, err := sc.watch(lockservice.ObjectDescriptor{ObjectID: d.ID()}, quit) assert.Nil(err) states := []Lock{} @@ -191,7 +191,7 @@ func TestLockService(t *testing.T) { // start watching the lock. quit := make(chan struct{}, 1) - stateChan, err := sc.Watch(lockservice.ObjectDescriptor{ObjectID: d.ID()}, quit) + stateChan, err := sc.watch(lockservice.ObjectDescriptor{ObjectID: d.ID()}, quit) assert.Nil(err) states := []Lock{} From 64e2cd35ff12ff784027ce5805b593bac49da1bb Mon Sep 17 00:00:00 2001 From: SUMUKHA-PK Date: Thu, 1 Oct 2020 15:43:08 +0530 Subject: [PATCH 20/20] removed unnecessary go mods --- go.mod | 4 +++- go.sum | 53 +++-------------------------------------------------- 2 files changed, 6 insertions(+), 51 deletions(-) diff --git a/go.mod b/go.mod index 2ea9b1e..ae41604 100644 --- a/go.mod +++ b/go.mod @@ -3,8 +3,10 @@ module github.com/SystemBuilders/LocKey go 1.14 require ( + github.com/davecgh/go-spew v1.1.1 // indirect github.com/gorilla/mux v1.7.4 + github.com/kr/pretty v0.1.0 // indirect github.com/rs/zerolog v1.19.0 github.com/stretchr/testify v1.6.1 - golang.org/x/tools/gopls v0.4.4 // indirect + gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect ) diff --git a/go.sum b/go.sum index ea032bc..f5cf236 100644 --- a/go.sum +++ b/go.sum @@ -1,82 +1,35 @@ -github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/gorilla/mux v1.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc= github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.5.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.6.0/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/zerolog v1.19.0 h1:hYz4ZVdUgjXTBUmrkrw55j1nHx68LfOKIQk5IYtyScg= github.com/rs/zerolog v1.19.0/go.mod h1:IzD0RJ65iWH0w97OQQebJEvTZYvsCUm9WVLWBQrJRjo= -github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208 h1:qwRHBd0NqMbJxfbotnDhm2ByMI1Shq4Y6oRJo21SGJA= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/tools v0.0.0-20190828213141-aed303cbaa74/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200626171337-aa94e735be7f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729181040-64cdafbe085c h1:jLQLIAedRoS9I2Py7l/ZAGGzUxLFsdg42JXEpS/a+ow= -golang.org/x/tools v0.0.0-20200729181040-64cdafbe085c/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200814230902-9882f1d1823d h1:XZxUC4/ZNKTjrT4/Oc9gCgIYnzPW3/CefdPjsndrVWM= -golang.org/x/tools/gopls v0.4.4 h1:8djGYsaZ0ByP0vaXg4T+mnyfDcHpWKSZ+tpQSGv9ahk= -golang.org/x/tools/gopls v0.4.4/go.mod h1:zhyGzA+CAtREUwwq/btQxEx2FHnGzDwJvGs5YqdVCbE= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.1-2020.1.4 h1:UoveltGrhghAA7ePc+e+QYDHXrBps2PqFZiHkGR/xK8= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -mvdan.cc/gofumpt v0.0.0-20200709182408-4fd085cb6d5f h1:gi7cb8HTDZ6q8VqsUpkdoFi3vxwHMneQ6+Q5Ap5hjPE= -mvdan.cc/gofumpt v0.0.0-20200709182408-4fd085cb6d5f/go.mod h1:9VQ397fNXEnF84t90W4r4TRCQK+pg9f8ugVfyj+S26w= -mvdan.cc/xurls/v2 v2.2.0 h1:NSZPykBXJFCetGZykLAxaL6SIpvbVy/UFEniIfHAa8A= -mvdan.cc/xurls/v2 v2.2.0/go.mod h1:EV1RMtya9D6G5DMYPGD8zTQzaHet6Jh8gFlRgGRJeO8=