diff --git a/.travis.yml b/.travis.yml index 0b50a02e..3dc148cd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ language: go go: - - 1.8.7 + - 1.9.6 # let us have speedy Docker-based Travis workers sudo: false diff --git a/script/travis_zk.sh b/script/travis_zk.sh index 02405d64..a07f4055 100755 --- a/script/travis_zk.sh +++ b/script/travis_zk.sh @@ -6,7 +6,7 @@ else ZK_VERSION="3.5.4-beta" fi -wget "http://apache.cs.utah.edu/zookeeper/zookeeper-${ZK_VERSION}/zookeeper-${ZK_VERSION}.tar.gz" +wget "https://archive.apache.org/dist/zookeeper/zookeeper-${ZK_VERSION}/zookeeper-${ZK_VERSION}.tar.gz" tar -xvf "zookeeper-${ZK_VERSION}.tar.gz" mv zookeeper-$ZK_VERSION zk mv ./zk/conf/zoo_sample.cfg ./zk/conf/zoo.cfg diff --git a/store/zookeeper/zookeeper.go b/store/zookeeper/zookeeper.go index ff8d4ebe..b8a9ec54 100644 --- a/store/zookeeper/zookeeper.go +++ b/store/zookeeper/zookeeper.go @@ -290,8 +290,12 @@ func (s *Zookeeper) DeleteTree(directory string) error { // AtomicPut put a value at "key" if the key has not been // modified in the meantime, throws an error if this is the case -func (s *Zookeeper) AtomicPut(key string, value []byte, previous *store.KVPair, _ *store.WriteOptions) (bool, *store.KVPair, error) { +func (s *Zookeeper) AtomicPut(key string, value []byte, previous *store.KVPair, opts *store.WriteOptions) (bool, *store.KVPair, error) { var lastIndex uint64 + var flag int32 + if opts != nil && opts.TTL > 0 { + flag = zk.FlagEphemeral + } if previous != nil { meta, err := s.client.Set(s.normalize(key), value, int32(previous.LastIndex)) @@ -305,7 +309,7 @@ func (s *Zookeeper) AtomicPut(key string, value []byte, previous *store.KVPair, lastIndex = uint64(meta.Version) } else { // Interpret previous == nil as create operation. - _, err := s.client.Create(s.normalize(key), value, 0, zk.WorldACL(zk.PermAll)) + _, err := s.client.Create(s.normalize(key), value, flag, zk.WorldACL(zk.PermAll)) if err != nil { // Directory does not exist if err == zk.ErrNoNode { @@ -319,7 +323,7 @@ func (s *Zookeeper) AtomicPut(key string, value []byte, previous *store.KVPair, } // Create the node - if _, err := s.client.Create(s.normalize(key), value, 0, zk.WorldACL(zk.PermAll)); err != nil { + if _, err := s.client.Create(s.normalize(key), value, flag, zk.WorldACL(zk.PermAll)); err != nil { // Node exist error (when previous nil) if err == zk.ErrNodeExists { return false, nil, store.ErrKeyExists