Skip to content

Commit 2165280

Browse files
committed
refactor: change the way one2many proxying is picked
Instead of defaulting to one2many, list explicitly one2many supported APIs. The idea is that any new API will only be "normal" gRPC API, so we can flip the switch, and consider one2many APIs as "legacy". Extracted from #12392 Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
1 parent b1b703d commit 2165280

File tree

5 files changed

+25
-17
lines changed

5 files changed

+25
-17
lines changed

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ DEBUG_TOOLS_SOURCE := scratch
2525
EMBED_TARGET ?= embed
2626

2727
TOOLS_PREFIX ?= ghcr.io/siderolabs/tools
28-
TOOLS ?= v1.13.0-alpha.0-8-g98c699e
28+
TOOLS ?= v1.13.0-alpha.0-11-g0281af0
2929
PKGS_PREFIX ?= ghcr.io/siderolabs
30-
PKGS ?= v1.13.0-alpha.0-40-g553e0fb
30+
PKGS ?= v1.13.0-alpha.0-42-ga63c227
3131
GENERATE_VEX_PREFIX ?= ghcr.io/siderolabs/generate-vex
3232
GENERATE_VEX ?= latest
3333

internal/app/apid/pkg/director/director.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,15 @@ func (r *Router) Director(ctx context.Context, fullMethodName string) (proxy.Mod
7979

8080
switch {
8181
case okNodes:
82-
// COSI methods do not support one-2-many proxying.
83-
if strings.HasPrefix(fullMethodName, "/cosi.") {
84-
return proxy.One2One, nil, status.Error(codes.InvalidArgument, "one-2-many proxying is not supported for COSI methods")
82+
// Explicit list of gRPC methods that support one-2-many proxying.
83+
switch {
84+
case strings.HasPrefix(fullMethodName, "/machine.MachineService/"):
85+
case strings.HasPrefix(fullMethodName, "/cluster.ClusterService/"):
86+
case strings.HasPrefix(fullMethodName, "/inspect.InspectService/"):
87+
case strings.HasPrefix(fullMethodName, "/storage.StorageService/"):
88+
case strings.HasPrefix(fullMethodName, "/time.TimeService/"):
89+
default:
90+
return proxy.One2One, nil, status.Errorf(codes.InvalidArgument, "one-2-many proxying is not supported for method %s", fullMethodName)
8591
}
8692

8793
return r.aggregateDirector(nodes)

internal/app/apid/pkg/director/director_test.go

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -58,20 +58,20 @@ func (suite *DirectorSuite) TestDirectorAggregate() {
5858

5959
md := metadata.New(nil)
6060
md.Set("nodes", "127.0.0.1", "127.0.0.2")
61-
mode, backends, err := suite.router.Director(metadata.NewIncomingContext(ctx, md), "/service.Service/method")
61+
mode, backends, err := suite.router.Director(metadata.NewIncomingContext(ctx, md), "/machine.MachineService/method")
62+
suite.Require().NoError(err)
6263
suite.Assert().Equal(proxy.One2Many, mode)
6364
suite.Assert().Len(backends, 2)
6465
suite.Assert().Equal("127.0.0.1", backends[0].(*mockBackend).target)
6566
suite.Assert().Equal("127.0.0.2", backends[1].(*mockBackend).target)
66-
suite.Assert().NoError(err)
6767

6868
md = metadata.New(nil)
6969
md.Set("nodes", "127.0.0.1")
70-
mode, backends, err = suite.router.Director(metadata.NewIncomingContext(ctx, md), "/service.Service/method")
70+
mode, backends, err = suite.router.Director(metadata.NewIncomingContext(ctx, md), "/machine.MachineService/method")
71+
suite.Require().NoError(err)
7172
suite.Assert().Equal(proxy.One2Many, mode)
7273
suite.Assert().Len(backends, 1)
7374
suite.Assert().Equal("127.0.0.1", backends[0].(*mockBackend).target)
74-
suite.Assert().NoError(err)
7575
}
7676

7777
func (suite *DirectorSuite) TestDirectorSingleNode() {
@@ -120,41 +120,43 @@ func (suite *DirectorSuite) TestDirectorNoRemoteBackend() {
120120
md := metadata.New(nil)
121121
md.Set("node", "127.0.0.1")
122122
_, _, err := router.Director(metadata.NewIncomingContext(ctx, md), "/service.Service/method")
123-
suite.Assert().Error(err)
123+
suite.Require().Error(err)
124124
suite.Assert().Equal(codes.PermissionDenied, status.Code(err))
125125

126126
md = metadata.New(nil)
127127
md.Set("nodes", "127.0.0.1", "127.0.0.2")
128-
_, _, err = router.Director(metadata.NewIncomingContext(ctx, md), "/service.Service/method")
129-
suite.Assert().Error(err)
128+
_, _, err = router.Director(metadata.NewIncomingContext(ctx, md), "/machine.MachineService/method")
129+
suite.Require().Error(err)
130130
suite.Assert().Equal(codes.PermissionDenied, status.Code(err))
131131

132132
// no request forwarding, allowed
133133
md = metadata.New(nil)
134134
mode, backends, err := router.Director(metadata.NewIncomingContext(ctx, md), "/service.Service/method")
135+
suite.Require().NoError(err)
135136
suite.Assert().Equal(proxy.One2One, mode)
136137
suite.Assert().Len(backends, 1)
137138
suite.Assert().Equal(suite.localBackend, backends[0])
138-
suite.Assert().NoError(err)
139139

140140
// request forwarding to local address, allowed
141141
md = metadata.New(nil)
142142
md.Set("node", "localhost")
143143
mode, backends, err = router.Director(metadata.NewIncomingContext(ctx, md), "/service.Service/method")
144+
suite.Require().NoError(err)
144145
suite.Assert().Equal(proxy.One2One, mode)
145146
suite.Assert().Len(backends, 1)
146147
suite.Assert().Equal(suite.localBackend, backends[0])
147-
suite.Assert().NoError(err)
148148

149149
md = metadata.New(nil)
150150
md.Set("nodes", "localhost")
151151
mode, backends, err = router.Director(metadata.NewIncomingContext(ctx, md), "/service.Service/method")
152+
suite.Require().NoError(err)
152153
suite.Assert().Equal(proxy.One2One, mode)
153154
suite.Assert().Len(backends, 1)
154155
suite.Assert().Equal(suite.localBackend, backends[0])
155-
suite.Assert().NoError(err)
156156
}
157157

158158
func TestDirectorSuite(t *testing.T) {
159+
t.Parallel()
160+
159161
suite.Run(t, new(DirectorSuite))
160162
}

pkg/machinery/gendata/data/pkgs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
v1.13.0-alpha.0-40-g553e0fb
1+
v1.13.0-alpha.0-42-ga63c227

pkg/machinery/gendata/data/tools

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
v1.13.0-alpha.0-8-g98c699e
1+
v1.13.0-alpha.0-11-g0281af0

0 commit comments

Comments
 (0)