StateMgr must be able to return with locked state
The current usage of internal remote state backends requires that `StateMgr` be able to return an instance of `statemgr.Full` even if the state is currently locked.
This commit is contained in:
parent
6d65c19134
commit
9c20ed6185
|
@ -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