diff --git a/etcdserver2/server.go b/etcdserver2/server.go index 6d2188bad..c6465dc09 100644 --- a/etcdserver2/server.go +++ b/etcdserver2/server.go @@ -2,6 +2,7 @@ package etcdserver import ( "errors" + "time" "code.google.com/p/go.net/context" "github.com/coreos/etcd/raft" @@ -52,9 +53,7 @@ func (s *Server) Run(ctx context.Context) { s.Send(rd.Messages) go func() { for _, e := range rd.CommittedEntries { - var r Request - r.Unmarshal(e.Data) - s.w.Trigger(r.Id, s.apply(r)) + s.apply(rd, e) } }() case <-ctx.Done(): @@ -104,7 +103,27 @@ func (s *Server) Do(ctx context.Context, r Request) (Response, error) { } } -// apply interprets r as a call to store.X and returns an Response interpreted from store.Event -func (s *Server) apply(r Request) Response { - panic("not implmented") +func respond(rd Ready, ev *store.Event, err error) Response { + return Response{Term: rd.Term, Index: rd.Index, Event: ev, err: err} +} + +// apply interprets r as a call to store.X and returns an Response interpreted from store.Event +func (s *Server) apply(rd Ready, e raft.Entry) Response { + resp := Response{Term: rd.Term, Index: rd.Index} + + var r Request + if resp.err = r.Unmarshal(e.Data); resp.err != nil { + return resp + } + + + switch r.Method { + case "POST": + resp.Event, resp.err = st.Create(r.Path, r.Dir, r.Val, true, time.Unix(0, r.Expiration)) + return resp + case "PUT": + case "DELETE": + default: + return Response{err: ErrUnknownMethod} + } }