Skip to content

Commit

Permalink
allow specifying http ports for multi-node setup
Browse files Browse the repository at this point in the history
  • Loading branch information
RichardJCai committed Sep 7, 2022
1 parent 0ed81c0 commit 1da40a5
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 25 deletions.
35 changes: 25 additions & 10 deletions testserver/testserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ type testServerArgs struct {
rootPW string // if nonempty, set as pw for root
storeOnDisk bool // to save database in disk
storeMemSize float64 // the proportion of available memory allocated to test server
httpPort int
httpPorts []int
listenAddrPorts []int
testConfig TestConfig
nonStableDB bool
Expand Down Expand Up @@ -288,17 +288,27 @@ func NonStableDbOpt() TestServerOpt {

// ExposeConsoleOpt is a TestServer option that can be passed to NewTestServer to
// expose the console of the server on the given port.
// Warning: This is kept around for backwards compatibility, use AddHttpPortOpt
// instead.
func ExposeConsoleOpt(port int) TestServerOpt {
return func(args *testServerArgs) {
args.httpPort = port
args.httpPorts = []int{port}
}
}

// AddPortOpt is a TestServer option that can be passed to NewTestServer to
// AddHttpPortOpt is a TestServer option that can be passed to NewTestServer to
// specify the http ports for the Cockroach nodes.
func AddHttpPortOpt(port int) TestServerOpt {
return func(args *testServerArgs) {
args.httpPorts = append(args.httpPorts, port)
}
}

// AddListenAddrPortOpt is a TestServer option that can be passed to NewTestServer to
// specify the ports for the Cockroach nodes.
// In the case of restarting nodes, it is up to the user of TestServer to make
// sure the port used here cannot be re-used.
func AddPortOpt(port int) TestServerOpt {
func AddListenAddrPortOpt(port int) TestServerOpt {
return func(args *testServerArgs) {
args.listenAddrPorts = append(args.listenAddrPorts, port)
}
Expand Down Expand Up @@ -353,7 +363,7 @@ func NewTestServer(opts ...TestServerOpt) (TestServer, error) {
if serverArgs.numNodes == 3 && len(serverArgs.listenAddrPorts) == 0 {
serverArgs.listenAddrPorts = []int{26257, 26258, 26259}
} else if serverArgs.numNodes != 1 && len(serverArgs.listenAddrPorts) != serverArgs.numNodes {
panic(fmt.Sprintf("need to specify a port for each node using AddPortOpt, got %d nodes, need %d ports",
panic(fmt.Sprintf("need to specify a port for each node using AddListenAddrPortOpt, got %d nodes, need %d ports",
serverArgs.numNodes, len(serverArgs.listenAddrPorts)))
}

Expand Down Expand Up @@ -469,23 +479,28 @@ func NewTestServer(opts ...TestServerOpt) (TestServer, error) {

nodes := make([]nodeInfo, serverArgs.numNodes)
var initArgs []string
portArgsStr := make([]string, 3)
joinAddrs := make([]string, 3)
hostPort := serverArgs.listenAddrPorts[0]
for i, port := range serverArgs.listenAddrPorts {
portArgsStr[i] = fmt.Sprint(port)
joinAddrs[i] = fmt.Sprintf("localhost:%d", port)
}

if len(serverArgs.httpPorts) == 0 {
serverArgs.httpPorts = make([]int, serverArgs.numNodes)
}

for i := 0; i < serverArgs.numNodes; i++ {
nodes[i].state = stateNew
nodes[i].listeningURLFile = filepath.Join(baseDir, fmt.Sprintf("listen-url%d", i))
if serverArgs.numNodes > 1 {
joinArg := fmt.Sprintf("--join=localhost:%s", strings.Join(portArgsStr, ",localhost:"))
joinArg := fmt.Sprintf("--join=%s", strings.Join(joinAddrs, ","))
nodes[i].startCmdArgs = []string{
serverArgs.cockroachBinary,
startCmd,
secureOpt,
storeArg + strconv.Itoa(i),
fmt.Sprintf("--listen-addr=localhost:%d", serverArgs.listenAddrPorts[i]),
fmt.Sprintf("--http-addr=localhost:%d", 0),
fmt.Sprintf("--http-addr=localhost:%d", serverArgs.httpPorts[i]),
"--listening-url-file=" + nodes[i].listeningURLFile,
joinArg,
}
Expand All @@ -497,7 +512,7 @@ func NewTestServer(opts ...TestServerOpt) (TestServer, error) {
secureOpt,
"--host=localhost",
"--port=0",
"--http-port=" + strconv.Itoa(serverArgs.httpPort),
"--http-port=" + strconv.Itoa(serverArgs.httpPorts[0]),
storeArg,
"--listening-url-file=" + nodes[i].listeningURLFile,
}
Expand Down
39 changes: 24 additions & 15 deletions testserver/testserver_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -187,19 +187,19 @@ func TestRunServer(t *testing.T) {
name: "Insecure 3 Node",
instantiation: func(t *testing.T) (*sql.DB, func()) {
return testserver.NewDBForTest(t, testserver.ThreeNodeOpt(),
testserver.AddPortOpt(26257),
testserver.AddPortOpt(26258),
testserver.AddPortOpt(26259))
testserver.AddListenAddrPortOpt(26257),
testserver.AddListenAddrPortOpt(26258),
testserver.AddListenAddrPortOpt(26259))
},
},
{
name: "Insecure 3 Node On Disk",
instantiation: func(t *testing.T) (*sql.DB, func()) {
return testserver.NewDBForTest(t, testserver.ThreeNodeOpt(),
testserver.StoreOnDiskOpt(),
testserver.AddPortOpt(26257),
testserver.AddPortOpt(26258),
testserver.AddPortOpt(26259))
testserver.AddListenAddrPortOpt(26257),
testserver.AddListenAddrPortOpt(26258),
testserver.AddListenAddrPortOpt(26259))
},
},
{
Expand All @@ -209,6 +209,17 @@ func TestRunServer(t *testing.T) {
testserver.StoreOnDiskOpt())
},
},
{
name: "Insecure 3 Node With Http Ports",
instantiation: func(t *testing.T) (*sql.DB, func()) {
return testserver.NewDBForTest(t, testserver.ThreeNodeOpt(),
testserver.StoreOnDiskOpt(),
testserver.AddHttpPortOpt(8080),
testserver.AddHttpPortOpt(8081),
testserver.AddHttpPortOpt(8082),
)
},
},
} {
t.Run(tc.name, func(t *testing.T) {
db, stop := tc.instantiation(t)
Expand Down Expand Up @@ -365,9 +376,9 @@ func TestRestartNode(t *testing.T) {
ts, err := testserver.NewTestServer(
testserver.ThreeNodeOpt(),
testserver.StoreOnDiskOpt(),
testserver.AddPortOpt(26257),
testserver.AddPortOpt(26258),
testserver.AddPortOpt(26259))
testserver.AddListenAddrPortOpt(26257),
testserver.AddListenAddrPortOpt(26258),
testserver.AddListenAddrPortOpt(26259))
require.NoError(t, err)
defer ts.Stop()
for i := 0; i < 3; i++ {
Expand Down Expand Up @@ -459,9 +470,7 @@ func TestUpgradeNode(t *testing.T) {
}

defer func() {
if err := exec.Command("rm", "-rf", "./temp_binaries").Run(); err != nil {
t.Log(err)
}
require.NoError(t, exec.Command("rm", "-rf", "./temp_binaries").Run())
}()

getBinary(oldVersionBinary)
Expand All @@ -478,9 +487,9 @@ func TestUpgradeNode(t *testing.T) {
testserver.CockroachBinaryPathOpt(absPathOldBinary),
testserver.UpgradeCockroachBinaryPathOpt(absPathNewBinary),
testserver.StoreOnDiskOpt(),
testserver.AddPortOpt(26257),
testserver.AddPortOpt(26258),
testserver.AddPortOpt(26259),
testserver.AddListenAddrPortOpt(26257),
testserver.AddListenAddrPortOpt(26258),
testserver.AddListenAddrPortOpt(26259),
)
require.NoError(t, err)
defer ts.Stop()
Expand Down

0 comments on commit 1da40a5

Please sign in to comment.