diff --git a/etcdserver/server.go b/etcdserver/server.go index a510b649d25..7425bd8e5e1 100644 --- a/etcdserver/server.go +++ b/etcdserver/server.go @@ -30,6 +30,7 @@ import ( "time" "github.com/coreos/etcd/discovery" + etcdErr "github.com/coreos/etcd/error" "github.com/coreos/etcd/etcdserver/etcdhttp/httptypes" pb "github.com/coreos/etcd/etcdserver/etcdserverpb" "github.com/coreos/etcd/etcdserver/stats" @@ -695,6 +696,9 @@ func (s *EtcdServer) applyRequest(r pb.Request) Response { switch { case existsSet: if exists { + if r.Dir && !s.store.IsKeyDir(r.Path) { + return f(nil, etcdErr.NewError(etcdErr.EcodeNotDir, r.Path, s.store.Index())) + } return f(s.store.Update(r.Path, r.Val, expr)) } return f(s.store.Create(r.Path, r.Dir, r.Val, false, expr))