diff --git a/nomad/rpc.go b/nomad/rpc.go index d888a4f59..d437ebe65 100644 --- a/nomad/rpc.go +++ b/nomad/rpc.go @@ -171,7 +171,7 @@ func (s *Server) forward(method string, info structs.RPCInfo, args interface{}, // Handle region forwarding region := info.RequestRegion() if region != s.config.Region { - err := s.forwardRegion(method, region, args, reply) + err := s.forwardRegion(region, method, args, reply) return true, err } @@ -209,7 +209,7 @@ func (s *Server) forwardLeader(method string, args interface{}, reply interface{ } // forwardRegion is used to forward an RPC call to a remote region, or fail if no servers -func (s *Server) forwardRegion(method, region string, args interface{}, reply interface{}) error { +func (s *Server) forwardRegion(region, method string, args interface{}, reply interface{}) error { // Bail if we can't find any servers s.peerLock.RLock() servers := s.peers[region] diff --git a/nomad/rpc_test.go b/nomad/rpc_test.go new file mode 100644 index 000000000..281c4a7e6 --- /dev/null +++ b/nomad/rpc_test.go @@ -0,0 +1,50 @@ +package nomad + +import ( + "testing" + + "github.com/hashicorp/nomad/testutil" +) + +func TestRPC_forwardLeader(t *testing.T) { + s1 := testServer(t, nil) + defer s1.Shutdown() + s2 := testServer(t, func(c *Config) { + c.DevDisableBootstrap = true + }) + defer s2.Shutdown() + testJoin(t, s1, s2) + testutil.WaitForLeader(t, s1.RPC) + + var out struct{} + err := s1.forwardLeader("Status.Ping", struct{}{}, &out) + if err != nil { + t.Fatalf("err: %v", err) + } + + err = s2.forwardLeader("Status.Ping", struct{}{}, &out) + if err != nil { + t.Fatalf("err: %v", err) + } +} + +func TestRPC_forwardRegion(t *testing.T) { + s1 := testServer(t, nil) + defer s1.Shutdown() + s2 := testServer(t, func(c *Config) { + c.Region = "region2" + }) + defer s2.Shutdown() + testJoin(t, s1, s2) + + var out struct{} + err := s1.forwardRegion("region2", "Status.Ping", struct{}{}, &out) + if err != nil { + t.Fatalf("err: %v", err) + } + + err = s2.forwardRegion("region1", "Status.Ping", struct{}{}, &out) + if err != nil { + t.Fatalf("err: %v", err) + } +}