test and set creates the key if key does not exists. fixes #96

This commit is contained in:
Fabrizio (Misto) Milo 2013-08-22 15:04:17 -07:00
parent 91aed9e232
commit 6345e02d20

View File

@ -465,12 +465,16 @@ func (s *Store) TestAndSet(key string, prevValue string, value string, expireTim
resp := s.internalGet(key)
if resp == nil {
return nil, etcdErr.NewError(100, "testandset: "+key)
if prevValue != "" {
errmsg := fmt.Sprintf("TestAndSet: key not found and previousValue is not empty %s:%s ", key, prevValue)
return nil, etcdErr.NewError(100, errmsg)
}
return s.internalSet(key, value, expireTime, index)
}
if resp.Value == prevValue {
// If test success, do set
// If test succeed, do set
return s.internalSet(key, value, expireTime, index)
} else {