more host string to uri changes

This commit is contained in:
Yuce Tekol 2017-10-04 15:29:00 +03:00
parent 1bedfd6585
commit a95b09d30d
No known key found for this signature in database
GPG key ID: CB59E46D2FB90573
15 changed files with 65 additions and 17 deletions

View file

@ -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)

View file

@ -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

View file

@ -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

View file

@ -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)
}

View file

@ -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

View file

@ -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

View file

@ -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
}

View file

@ -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.

View file

@ -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())
}
}

View file

@ -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,
}

View file

@ -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

View file

@ -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

View file

@ -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),
})
}

View file

@ -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
}

10
uri.go
View file

@ -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.