Skip to content

Commit 09d2c2c

Browse files
committed
Merge pull request #7 from contiv/shaleman
Get current lock holder by reading from statestore
2 parents c03ba09 + 4607285 commit 09d2c2c

File tree

3 files changed

+18
-1
lines changed

3 files changed

+18
-1
lines changed

etcdLock.go

+11-1
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,17 @@ func (ep *Lock) IsAcquired() bool {
124124
func (ep *Lock) GetHolder() string {
125125
ep.mutex.Lock()
126126
defer ep.mutex.Unlock()
127-
return ep.holderID
127+
128+
keyName := "/contiv.io/lock/" + ep.name
129+
130+
// Get the current value
131+
resp, err := ep.client.Get(keyName, false, false)
132+
if err != nil {
133+
log.Warnf("Could not get current holder for lock %s", ep.name)
134+
return ""
135+
}
136+
137+
return resp.Node.Value
128138
}
129139

130140
// *********************** Internal functions *************

etcdService.go

+5
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ func (self *etcdPlugin) RegisterService(serviceInfo ServiceInfo) error {
3232

3333
log.Infof("Registering service key: %s, value: %+v", keyName, serviceInfo)
3434

35+
// if there is a previously registered service, de-register it
36+
if self.serviceDb[keyName] != nil {
37+
self.DeregisterService(serviceInfo)
38+
}
39+
3540
// JSON format the object
3641
jsonVal, err := json.Marshal(serviceInfo)
3742
if err != nil {

objdb.go

+2
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ type LockInterface interface {
5151
// identify an instance of a service
5252
type ServiceInfo struct {
5353
ServiceName string // Name of the service
54+
Role string // Role of the service. (leader, follower etc)
55+
Version string // Version string for the service
5456
HostAddr string // Host name or IP address where its running
5557
Port int // Port number where its listening
5658
}

0 commit comments

Comments
 (0)