Browse Source

etcdserver: need to add id to proposal :/

Blake Mizerany 11 years ago
parent
commit
3dd6280df5
1 changed files with 24 additions and 5 deletions
  1. 24 5
      etcdserver2/server.go

+ 24 - 5
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) {
 	}
 }
 
+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(r Request) Response {
-	panic("not implmented")
+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}
+	}
 }