From cb7b321240bb2b4fd12a7bfff7d18af4e2ac674a Mon Sep 17 00:00:00 2001 From: Blake Mizerany Date: Tue, 2 Sep 2014 14:46:07 -0700 Subject: [PATCH] boom --- etcdserver2/etcdhttp/http.go | 30 ++++++++++++++++++++++++++++++ main.go | 29 ++++++++++++++++++++--------- 2 files changed, 50 insertions(+), 9 deletions(-) diff --git a/etcdserver2/etcdhttp/http.go b/etcdserver2/etcdhttp/http.go index 56296a608..1875d7025 100644 --- a/etcdserver2/etcdhttp/http.go +++ b/etcdserver2/etcdhttp/http.go @@ -10,6 +10,7 @@ import ( "io/ioutil" "log" "net/http" + "net/url" "strconv" "strings" "time" @@ -31,6 +32,35 @@ func (ps Peers) Pick(id int64) string { return fmt.Sprintf("http://%s", addrs[rand.Intn(len(addrs))]) } +// Set parses command line sets of names to ips formatted like: +// a=1.1.1.1&a=1.1.1.2&b=2.2.2.2 +func (ps Peers) Set(s string) error { + v, err := url.ParseQuery(s) + if err != nil { + return err + } + for k, v := range v { + id, err := strconv.ParseInt(k, 16, 64) + if err != nil { + return err + } + ps[id] = v + } + return nil +} + +func (ps Peers) String() string { + return "todo" +} + +func (ps Peers) Ids() []int64 { + var ids []int64 + for id, _ := range ps { + ids = append(ids, id) + } + return ids +} + var errClosed = errors.New("etcdhttp: client closed connection") const DefaultTimeout = 500 * time.Millisecond diff --git a/main.go b/main.go index d02cda4ff..0aa87a553 100644 --- a/main.go +++ b/main.go @@ -4,6 +4,8 @@ import ( "flag" "log" "net/http" + "strconv" + "time" etcdserver "github.com/coreos/etcd/etcdserver2" "github.com/coreos/etcd/etcdserver2/etcdhttp" @@ -12,25 +14,34 @@ import ( ) var ( - id = flag.String("id", "default", "The id of this server") + fid = flag.String("id", "default", "Id of this server") + timeout = flag.Duration("timeout", 10*time.Second, "Request Timeout") + laddr = flag.String("l", ":8080", "HTTP service address (e.g., ':8080')") + + peers = etcdhttp.Peers{} ) -func main() { - const V2Prefix = "/v2" +func init() { + flag.Var(peers, "peers", "your peers") +} - peers := etcdhttp.Discover(V2Prefix, peerips) - n := raft.Start(*id, peers.Ids()) +func main() { + id, err := strconv.ParseInt(*fid, 16, 64) + if err != nil { + log.Fatal(err) + } + + n := raft.Start(id, peers.Ids()) s := &etcdserver.Server{ Node: n, Save: func(st raftpb.State, ents []raftpb.Entry) {}, // TODO: use wal - Send: etcdhttp.Sender(V2Prefix), + Send: etcdhttp.Sender(peers), } etcdserver.Start(s) h := &etcdhttp.Handler{ - Timeout: timeout, + Timeout: *timeout, Server: s, - Peers: peers, } - http.Handle(V2Prefix, http.StripPrefix(V2Prefix, h)) + http.Handle("/", h) log.Fatal(http.ListenAndServe(*laddr, nil)) }