Merge pull request #1008 from highlyunavailable/master

Check to see why a lock acquisition failed
This commit is contained in:
Armon Dadgar 2015-06-09 07:59:28 -04:00
commit c2f8f954e2
1 changed files with 16 additions and 4 deletions

View File

@ -183,11 +183,23 @@ WAIT:
// Handle the case of not getting the lock
if !locked {
select {
case <-time.After(DefaultLockRetryTime):
// Determine why the lock failed
qOpts.WaitIndex = 0
pair, meta, err = kv.Get(l.opts.Key, qOpts)
if pair != nil && pair.Session != "" {
//If the session is not null, this means that a wait can safely happen
//using a long poll
qOpts.WaitIndex = meta.LastIndex
goto WAIT
case <-stopCh:
return nil, nil
} else {
// If the session is empty and the lock failed to acquire, then it means
// a lock-delay is in effect and a timed wait must be used
select {
case <-time.After(DefaultLockRetryTime):
goto WAIT
case <-stopCh:
return nil, nil
}
}
}