diff --git a/backend/remote-state/consul/client.go b/backend/remote-state/consul/client.go index 580789522..a5578a3c1 100644 --- a/backend/remote-state/consul/client.go +++ b/backend/remote-state/consul/client.go @@ -58,14 +58,11 @@ func (c *RemoteClient) Delete() error { return err } -func (c *RemoteClient) putLockInfo(info string) error { - li := &state.LockInfo{ - Path: c.Path, - Created: time.Now().UTC(), - Info: info, - } +func (c *RemoteClient) putLockInfo(info *state.LockInfo) error { + info.Path = c.Path + info.Created = time.Now().UTC() - js, err := json.Marshal(li) + js, err := json.Marshal(info) if err != nil { return err } @@ -98,16 +95,16 @@ func (c *RemoteClient) getLockInfo() (*state.LockInfo, error) { return li, nil } -func (c *RemoteClient) Lock(info string) error { +func (c *RemoteClient) Lock(info *state.LockInfo) (string, error) { select { case <-c.lockCh: // We had a lock, but lost it. // Since we typically only call lock once, we shouldn't ever see this. - return errors.New("lost consul lock") + return "", errors.New("lost consul lock") default: if c.lockCh != nil { // we have an active lock already - return nil + return "", nil } } @@ -123,7 +120,7 @@ func (c *RemoteClient) Lock(info string) error { lock, err := c.Client.LockOpts(opts) if err != nil { - return nil + return "", nil } c.consulLock = lock @@ -131,29 +128,29 @@ func (c *RemoteClient) Lock(info string) error { lockCh, err := c.consulLock.Lock(make(chan struct{})) if err != nil { - return err + return "", err } if lockCh == nil { lockInfo, e := c.getLockInfo() if e != nil { - return e + return "", e } - return lockInfo.Err() + return "", lockInfo.Err() } c.lockCh = lockCh err = c.putLockInfo(info) if err != nil { - err = multierror.Append(err, c.Unlock()) - return err + err = multierror.Append(err, c.Unlock("")) + return "", err } - return nil + return "", nil } -func (c *RemoteClient) Unlock() error { +func (c *RemoteClient) Unlock(id string) error { if c.consulLock == nil || c.lockCh == nil { return nil }