From a95b09d30d9aeb480d7e0344ad4497ad3c5a0aae Mon Sep 17 00:00:00 2001 From: Yuce Tekol Date: Wed, 4 Oct 2017 15:29:00 +0300 Subject: [PATCH] more host string to uri changes --- client_test.go | 3 +++ cluster.go | 10 ++++++++++ ctl/backup_test.go | 6 +++++- ctl/export_test.go | 8 ++++++-- ctl/import_test.go | 12 ++++++++++-- ctl/restore_test.go | 6 +++++- executor.go | 10 ++++------ executor_test.go | 1 + handler_test.go | 2 +- holder_test.go | 7 ++++++- server.go | 1 + server/server_test.go | 4 ++-- test/cluster.go | 1 + test/executor.go | 1 + uri.go | 10 +++++++++- 15 files changed, 65 insertions(+), 17 deletions(-) diff --git a/client_test.go b/client_test.go index 9fedb01ab..e4f834184 100644 --- a/client_test.go +++ b/client_test.go @@ -56,6 +56,7 @@ func TestClient_MultiNode(t *testing.T) { s[0].Handler.Executor.ExecuteFn = func(ctx context.Context, index string, query *pql.Query, slices []uint64, opt *pilosa.ExecOptions) ([]interface{}, error) { e := pilosa.NewExecutor() e.Holder = hldr[0].Holder + e.Scheme = cluster.Nodes[0].Scheme e.Host = cluster.Nodes[0].Host e.Cluster = cluster return e.Execute(ctx, index, query, slices, opt) @@ -63,6 +64,7 @@ func TestClient_MultiNode(t *testing.T) { s[1].Handler.Executor.ExecuteFn = func(ctx context.Context, index string, query *pql.Query, slices []uint64, opt *pilosa.ExecOptions) ([]interface{}, error) { e := pilosa.NewExecutor() e.Holder = hldr[1].Holder + e.Scheme = cluster.Nodes[1].Scheme e.Host = cluster.Nodes[1].Host e.Cluster = cluster return e.Execute(ctx, index, query, slices, opt) @@ -70,6 +72,7 @@ func TestClient_MultiNode(t *testing.T) { s[2].Handler.Executor.ExecuteFn = func(ctx context.Context, index string, query *pql.Query, slices []uint64, opt *pilosa.ExecOptions) ([]interface{}, error) { e := pilosa.NewExecutor() e.Holder = hldr[2].Holder + e.Scheme = cluster.Nodes[2].Scheme e.Host = cluster.Nodes[2].Host e.Cluster = cluster return e.Execute(ctx, index, query, slices, opt) diff --git a/cluster.go b/cluster.go index 397c6f309..820349ded 100644 --- a/cluster.go +++ b/cluster.go @@ -57,6 +57,16 @@ func (n *Node) SetState(s string) { n.status.State = s } +// URI returns the pilosa.URI corresponding to this node +func (n *Node) URI() (*URI, error) { + uri, err := NewURIFromAddress(n.Host) + if err != nil { + return nil, err + } + uri.SetScheme(n.Scheme) + return uri, nil +} + // Nodes represents a list of nodes. type Nodes []*Node diff --git a/ctl/backup_test.go b/ctl/backup_test.go index 1c292685b..4b7fc816e 100644 --- a/ctl/backup_test.go +++ b/ctl/backup_test.go @@ -46,7 +46,11 @@ func TestBackupCommand_Run(t *testing.T) { s := test.NewServer() defer s.Close() - s.Handler.Host = s.Host() + uri, err := pilosa.NewURIFromAddress(s.Host()) + if err != nil { + t.Fatal(err) + } + s.Handler.Host = uri s.Handler.Cluster = test.NewCluster(1) s.Handler.Cluster.Nodes[0].Host = s.Host() s.Handler.Holder = hldr.Holder diff --git a/ctl/export_test.go b/ctl/export_test.go index 4f9d9b184..21f00d81d 100644 --- a/ctl/export_test.go +++ b/ctl/export_test.go @@ -59,7 +59,11 @@ func TestExportCommand_Run(t *testing.T) { defer hldr.Close() s := test.NewServer() defer s.Close() - s.Handler.Host = s.Host() + uri, err := pilosa.NewURIFromAddress(s.Host()) + if err != nil { + t.Fatal(err) + } + s.Handler.Host = uri s.Handler.Cluster = test.NewCluster(1) s.Handler.Cluster.Nodes[0].Host = s.Host() s.Handler.Holder = hldr.Holder @@ -71,7 +75,7 @@ func TestExportCommand_Run(t *testing.T) { cm.Index = "i" cm.Frame = "f" cm.View = pilosa.ViewStandard - err := cm.Run(context.Background()) + err = cm.Run(context.Background()) if err != nil { t.Fatalf("Export Run doesn't work: %s", err) } diff --git a/ctl/import_test.go b/ctl/import_test.go index c9c36d5c8..e9bb4d57e 100644 --- a/ctl/import_test.go +++ b/ctl/import_test.go @@ -65,7 +65,11 @@ func TestImportCommand_Run(t *testing.T) { defer hldr.Close() s := test.NewServer() defer s.Close() - s.Handler.Host = s.Host() + uri, err := pilosa.NewURIFromAddress(s.Host()) + if err != nil { + t.Fatal(err) + } + s.Handler.Host = uri s.Handler.Cluster = test.NewCluster(1) s.Handler.Cluster.Nodes[0].Host = s.Host() s.Handler.Holder = hldr.Holder @@ -101,7 +105,11 @@ func TestImportCommand_RunValue(t *testing.T) { defer hldr.Close() s := test.NewServer() defer s.Close() - s.Handler.Host = s.Host() + uri, err := pilosa.NewURIFromAddress(s.Host()) + if err != nil { + t.Fatal(err) + } + s.Handler.Host = uri s.Handler.Cluster = test.NewCluster(1) s.Handler.Cluster.Nodes[0].Host = s.Host() s.Handler.Holder = hldr.Holder diff --git a/ctl/restore_test.go b/ctl/restore_test.go index 39ac92388..ad3644841 100644 --- a/ctl/restore_test.go +++ b/ctl/restore_test.go @@ -48,7 +48,11 @@ func TestRestoreCommand_Run(t *testing.T) { s := test.NewServer() defer s.Close() - s.Handler.Host = s.Host() + uri, err := pilosa.NewURIFromAddress(s.Host()) + if err != nil { + t.Fatal(err) + } + s.Handler.Host = uri s.Handler.Cluster = test.NewCluster(1) s.Handler.Cluster.Nodes[0].Host = s.Host() s.Handler.Holder = hldr.Holder diff --git a/executor.go b/executor.go index 5380b3f47..de1385101 100644 --- a/executor.go +++ b/executor.go @@ -21,7 +21,6 @@ import ( "fmt" "io/ioutil" "net/http" - "net/url" "sort" "time" @@ -44,6 +43,7 @@ type Executor struct { Holder *Holder // Local hostname & cluster configuration. + Scheme string Host string Cluster *Cluster @@ -1337,11 +1337,9 @@ func (e *Executor) exec(ctx context.Context, node *Node, index string, q *pql.Qu } // Create HTTP request. - req, err := http.NewRequest("POST", (&url.URL{ - Scheme: node.Scheme, - Host: node.Host, - Path: fmt.Sprintf("/index/%s/query", index), - }).String(), bytes.NewReader(buf)) + u := nodePathToURL(node, fmt.Sprintf("/index/%s/query", index)) + u.Scheme = e.Scheme + req, err := http.NewRequest("POST", (&u).String(), bytes.NewReader(buf)) if err != nil { return nil, err } diff --git a/executor_test.go b/executor_test.go index 482903bc2..91c4b3c89 100644 --- a/executor_test.go +++ b/executor_test.go @@ -832,6 +832,7 @@ func TestExecutor_Execute_Remote_Bitmap(t *testing.T) { // Create secondary server and update second cluster node. s := test.NewServer() defer s.Close() + c.Nodes[1].Scheme = "http" c.Nodes[1].Host = s.Host() // Mock secondary server's executor to verify arguments and return a bitmap. diff --git a/handler_test.go b/handler_test.go index 6e8ebab88..44733a85d 100644 --- a/handler_test.go +++ b/handler_test.go @@ -1183,7 +1183,7 @@ func TestHandler_Fragment_Nodes(t *testing.T) { h.ServeHTTP(w, r) if w.Code != http.StatusOK { t.Fatalf("unexpected status code: %d", w.Code) - } else if w.Body.String() != `[{"host":"host2"},{"host":"host0"}]`+"\n" { + } else if w.Body.String() != `[{"scheme":"http","host":"host2"},{"scheme":"http","host":"host0"}]`+"\n" { t.Fatalf("unexpected body: %q", w.Body.String()) } } diff --git a/holder_test.go b/holder_test.go index b3947abb8..f1a14df3d 100644 --- a/holder_test.go +++ b/holder_test.go @@ -316,6 +316,7 @@ func TestHolderSyncer_SyncHolder(t *testing.T) { s.Handler.Executor.ExecuteFn = func(ctx context.Context, index string, query *pql.Query, slices []uint64, opt *pilosa.ExecOptions) ([]interface{}, error) { e := pilosa.NewExecutor() e.Holder = hldr1.Holder + e.Scheme = cluster.Nodes[1].Scheme e.Host = cluster.Nodes[1].Host e.Cluster = cluster return e.Execute(ctx, index, query, slices, opt) @@ -376,9 +377,13 @@ func TestHolderSyncer_SyncHolder(t *testing.T) { hldr0.Index("y").SetRemoteMaxSlice(3) // Set up syncer. + uri, err := cluster.Nodes[0].URI() + if err != nil { + t.Fatal(err) + } syncer := pilosa.HolderSyncer{ Holder: hldr0.Holder, - Host: cluster.Nodes[0].Host, + Host: uri, Cluster: cluster, } diff --git a/server.go b/server.go index c17331618..384289a04 100644 --- a/server.go +++ b/server.go @@ -172,6 +172,7 @@ func (s *Server) Open() error { // Create executor for executing queries. e := NewExecutor() e.Holder = s.Holder + e.Scheme = s.Host.Scheme() e.Host = s.Host.HostPort() e.Cluster = s.Cluster e.MaxWritesPerRequest = s.MaxWritesPerRequest diff --git a/server/server_test.go b/server/server_test.go index 070704132..d6254f459 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -288,8 +288,8 @@ func TestMain_FrameRestore(t *testing.T) { // Update cluster config. m0.Server.Cluster.Nodes = []*pilosa.Node{ - {Host: m0.Server.Host.HostPort()}, - {Host: m1.Server.Host.HostPort()}, + {Scheme: "http", Host: m0.Server.Host.HostPort()}, + {Scheme: "http", Host: m1.Server.Host.HostPort()}, } m1.Server.Cluster.Nodes = m0.Server.Cluster.Nodes diff --git a/test/cluster.go b/test/cluster.go index 557aff559..c45b1c989 100644 --- a/test/cluster.go +++ b/test/cluster.go @@ -14,6 +14,7 @@ func NewCluster(n int) *pilosa.Cluster { for i := 0; i < n; i++ { c.Nodes = append(c.Nodes, &pilosa.Node{ + Scheme: "http", Host: fmt.Sprintf("host%d", i), }) } diff --git a/test/executor.go b/test/executor.go index af5a248f6..de051075e 100644 --- a/test/executor.go +++ b/test/executor.go @@ -18,6 +18,7 @@ func NewExecutor(holder *pilosa.Holder, cluster *pilosa.Cluster) *Executor { e := &Executor{Executor: pilosa.NewExecutor()} e.Holder = holder e.Cluster = cluster + e.Scheme = cluster.Nodes[0].Scheme e.Host = cluster.Nodes[0].Host return e } diff --git a/uri.go b/uri.go index 9b29fa87b..fb8158941 100644 --- a/uri.go +++ b/uri.go @@ -72,6 +72,10 @@ func (u *URI) Scheme() string { return u.scheme } +func (u *URI) SetScheme(scheme string) { + u.scheme = scheme +} + // Host returns the host of this URI. func (u *URI) Host() string { return u.host @@ -99,7 +103,11 @@ func (u *URI) Normalize() string { // HostPort returns the address suitable for passing to `net.Listener.Listen` func (u *URI) HostPort() string { - return fmt.Sprintf("%s:%d", u.host, u.port) + if u == nil { + return "" + } + s := fmt.Sprintf("%s:%d", u.host, u.port) + return s } // Equals returns true if the checked URI is equivalent to this URI.