Merge pull request #28128 from hashicorp/jbardin/etcdv3
StateMgr must be able to return with locked state
This commit is contained in:
commit
017633f000
|
@ -58,16 +58,8 @@ func (b *Backend) StateMgr(name string) (statemgr.Full, error) {
|
||||||
|
|
||||||
lockInfo := statemgr.NewLockInfo()
|
lockInfo := statemgr.NewLockInfo()
|
||||||
lockInfo.Operation = "init"
|
lockInfo.Operation = "init"
|
||||||
lockId, err := stateMgr.Lock(lockInfo)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("Failed to lock state in etcd: %s.", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
lockUnlock := func(parent error) error {
|
lockUnlock := func(parent error) error {
|
||||||
if err := stateMgr.Unlock(lockId); err != nil {
|
return nil
|
||||||
return fmt.Errorf(strings.TrimSpace(errStateUnlock), lockId, err)
|
|
||||||
}
|
|
||||||
return parent
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := stateMgr.RefreshState(); err != nil {
|
if err := stateMgr.RefreshState(); err != nil {
|
||||||
|
@ -76,6 +68,18 @@ func (b *Backend) StateMgr(name string) (statemgr.Full, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if v := stateMgr.State(); v == nil {
|
if v := stateMgr.State(); v == nil {
|
||||||
|
lockId, err := stateMgr.Lock(lockInfo)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("Failed to lock state in etcd: %s.", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
lockUnlock = func(parent error) error {
|
||||||
|
if err := stateMgr.Unlock(lockId); err != nil {
|
||||||
|
return fmt.Errorf(strings.TrimSpace(errStateUnlock), lockId, err)
|
||||||
|
}
|
||||||
|
return parent
|
||||||
|
}
|
||||||
|
|
||||||
if err := stateMgr.WriteState(states.NewState()); err != nil {
|
if err := stateMgr.WriteState(states.NewState()); err != nil {
|
||||||
err = lockUnlock(err)
|
err = lockUnlock(err)
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
Loading…
Reference in New Issue