From f912272912d257ab7a4d2f0df4e0137349dae044 Mon Sep 17 00:00:00 2001 From: Bel LaPointe Date: Tue, 23 Apr 2019 18:55:48 -0600 Subject: [PATCH] enable single servers with cli/client --- client/cli.go | 29 +++++++++++++---------------- client/client.go | 8 +++++++- server/config/new.go | 23 +++++++++++++++++------ 3 files changed, 37 insertions(+), 23 deletions(-) diff --git a/client/cli.go b/client/cli.go index 831e684..1013a31 100644 --- a/client/cli.go +++ b/client/cli.go @@ -3,30 +3,24 @@ package main import ( "bufio" "fmt" + "local/args" "log" "os" - "strconv" "strings" ) func main() { - rConcernS, ok := os.LookupEnv("RCONCERN") - if !ok { - rConcernS = "1" - } - wConcernS, ok := os.LookupEnv("WCONCERN") - if !ok { - wConcernS = "1" - } - rConcern, err := strconv.Atoi(rConcernS) - if err != nil { + as := args.NewArgSet() + as.Append(args.STRING, "addr", "csv addr(s) of server(s)", "http://localhost:21412") + as.Append(args.INT, "r", "read concern", 1) + as.Append(args.INT, "w", "write concern", 1) + if err := as.Parse(); err != nil { panic(err) } - wConcern, err := strconv.Atoi(wConcernS) - if err != nil { - panic(err) - } - client, err := New(rConcern, wConcern, strings.Split(os.Getenv("ADDR"), ",")...) + rConcern := as.Get("r").GetInt() + wConcern := as.Get("w").GetInt() + addrs := as.Get("addr").GetString() + client, err := New(rConcern, wConcern, strings.Split(addrs, ",")...) if err != nil { panic(err) } @@ -48,6 +42,9 @@ func do(client *Client, line string) { } }() switch strings.ToLower(strings.Split(line, " ")[0]) { + case "help": + log.Printf("get key1") + log.Printf("set key1 value value value...") case "get": get(client, line) case "set": diff --git a/client/client.go b/client/client.go index 461e1ee..b16ac28 100644 --- a/client/client.go +++ b/client/client.go @@ -88,7 +88,13 @@ func New(rConcern, wConcern int, addrs ...string) (*Client, error) { func (c *Client) scatterGather(key string, forEach func(addr string, each chan result), try, need int) ([]byte, error) { final := make(chan result) each := make(chan result) - members, err := c.hash.GetClosestN([]byte(key), try) + var members []consistent.Member + var err error + if try > 1 { + members, err = c.hash.GetClosestN([]byte(key), try) + } else { + members = append(members, c.hash.LocateKey([]byte(key))) + } if err != nil { return nil, err } diff --git a/server/config/new.go b/server/config/new.go index 482f8e5..a3f2609 100644 --- a/server/config/new.go +++ b/server/config/new.go @@ -1,18 +1,29 @@ package config import ( + "local/args" "local/storage" "os" ) func New() error { + as := args.NewArgSet() + as.Append(args.STRING, "addr", "address/path to database/file", "") + as.Append(args.STRING, "user", "username to database", "") + as.Append(args.STRING, "pass", "password to database", "") + as.Append(args.STRING, "port", "port to listen on", "21412") + as.Append(args.STRING, "db", "database type code", storage.MAP.String()) + as.Append(args.STRING, "ns", "namespace", storage.DefaultNamespace) + if err := as.Parse(); err != nil { + return err + } config = Config{ - db: orEnv(storage.MAP.String(), "DB", "DATABASE"), - Addr: orEnv("", "ADDR", "FILE"), - Username: orEnv("", "USER", "USERNAME"), - Password: orEnv("", "PASS", "PASSWORD"), - Port: orEnv("21412", "PORT", "LISTEN"), - DefaultNamespace: orEnv(storage.DefaultNamespace, "NS", "NAMESPACE"), + db: as.Get("db").GetString(), + Addr: as.Get("addr").GetString(), + Username: as.Get("user").GetString(), + Password: as.Get("pass").GetString(), + Port: as.Get("port").GetString(), + DefaultNamespace: as.Get("ns").GetString(), } storage.DefaultNamespace = config.DefaultNamespace DB, err := storage.New(storage.TypeFromString(config.db), config.Addr, config.Username, config.Password)