Skip to content

Commit a32cec8

Browse files
committed
use feature flags
Signed-off-by: Shijie Sheng <liouvetren@gmail.com>
1 parent 1e0c2ca commit a32cec8

File tree

6 files changed

+8
-119
lines changed

6 files changed

+8
-119
lines changed

common/headers.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,4 @@ const (
5959

6060
// CallerTypeHeaderName refers to the name of the header that contains the caller type (CLI, UI, SDK, internal, etc.)
6161
CallerTypeHeaderName = types.CallerTypeHeaderName
62-
63-
// QueryConsistencyLevelHeaderName refers to the name of the header that contains the query consistency level (EVENTUAL, STRONG)
64-
QueryConsistencyLevelHeaderName = "cadence-query-consistency-level"
6562
)

common/rpc/middleware.go

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,6 @@ import (
3838
"github.com/uber/cadence/common/types"
3939
)
4040

41-
var _ middleware.UnaryInbound = &QueryConsistencyLevelInboundMiddleware{}
42-
4341
type authOutboundMiddleware struct {
4442
authProvider worker.AuthorizationProvider
4543
}
@@ -266,18 +264,3 @@ func (m *ClientPartitionConfigMiddleware) Handle(ctx context.Context, req *trans
266264
}
267265
return h.Handle(ctx, req, resw)
268266
}
269-
270-
type QueryConsistencyLevelInboundMiddleware struct{}
271-
272-
func (m *QueryConsistencyLevelInboundMiddleware) Handle(ctx context.Context, req *transport.Request, resw transport.ResponseWriter, h transport.UnaryHandler) error {
273-
queryConsistencyLevel, ok := req.Headers.Get(common.QueryConsistencyLevelHeaderName)
274-
if ok {
275-
var level types.QueryConsistencyLevel
276-
err := level.UnmarshalText([]byte(queryConsistencyLevel))
277-
if err != nil {
278-
return fmt.Errorf("failed to parse query consistency level: %w", err)
279-
}
280-
ctx = context.WithValue(ctx, common.QueryConsistencyLevelHeaderName, level)
281-
}
282-
return h.Handle(ctx, req, resw)
283-
}

common/rpc/middleware_test.go

Lines changed: 0 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -381,99 +381,6 @@ func TestCallerInfoMiddleware(t *testing.T) {
381381
})
382382
}
383383

384-
func TestQueryConsistencyLevelInboundMiddleware(t *testing.T) {
385-
tests := []struct {
386-
name string
387-
headerValue string
388-
hasHeader bool
389-
expectedLevel types.QueryConsistencyLevel
390-
expectError bool
391-
}{
392-
{
393-
name: "parses EVENTUAL consistency level",
394-
headerValue: "EVENTUAL",
395-
hasHeader: true,
396-
expectedLevel: types.QueryConsistencyLevelEventual,
397-
expectError: false,
398-
},
399-
{
400-
name: "parses STRONG consistency level",
401-
headerValue: "STRONG",
402-
hasHeader: true,
403-
expectedLevel: types.QueryConsistencyLevelStrong,
404-
expectError: false,
405-
},
406-
{
407-
name: "parses lowercase eventual",
408-
headerValue: "eventual",
409-
hasHeader: true,
410-
expectedLevel: types.QueryConsistencyLevelEventual,
411-
expectError: false,
412-
},
413-
{
414-
name: "parses lowercase strong",
415-
headerValue: "strong",
416-
hasHeader: true,
417-
expectedLevel: types.QueryConsistencyLevelStrong,
418-
expectError: false,
419-
},
420-
{
421-
name: "parses numeric value 0",
422-
headerValue: "0",
423-
hasHeader: true,
424-
expectedLevel: types.QueryConsistencyLevelEventual,
425-
expectError: false,
426-
},
427-
{
428-
name: "parses numeric value 1",
429-
headerValue: "1",
430-
hasHeader: true,
431-
expectedLevel: types.QueryConsistencyLevelStrong,
432-
expectError: false,
433-
},
434-
{
435-
name: "returns error for invalid value",
436-
headerValue: "INVALID",
437-
hasHeader: true,
438-
expectError: true,
439-
},
440-
{
441-
name: "no header - noop",
442-
hasHeader: false,
443-
expectError: false,
444-
},
445-
}
446-
447-
for _, tt := range tests {
448-
t.Run(tt.name, func(t *testing.T) {
449-
m := &QueryConsistencyLevelInboundMiddleware{}
450-
h := &fakeHandler{}
451-
headers := transport.NewHeaders()
452-
if tt.hasHeader {
453-
headers = headers.With(common.QueryConsistencyLevelHeaderName, tt.headerValue)
454-
}
455-
456-
err := m.Handle(context.Background(), &transport.Request{Headers: headers}, nil, h)
457-
458-
if tt.expectError {
459-
assert.Error(t, err)
460-
assert.Contains(t, err.Error(), "failed to parse query consistency level")
461-
return
462-
}
463-
464-
assert.NoError(t, err)
465-
if tt.hasHeader {
466-
level, ok := h.ctx.Value(common.QueryConsistencyLevelHeaderName).(types.QueryConsistencyLevel)
467-
assert.True(t, ok, "expected query consistency level to be set in context")
468-
assert.Equal(t, tt.expectedLevel, level)
469-
} else {
470-
// When no header is present, context value should not be set
471-
assert.Nil(t, h.ctx.Value(common.QueryConsistencyLevelHeaderName))
472-
}
473-
})
474-
}
475-
}
476-
477384
func TestCallerInfoOutboundMiddleware(t *testing.T) {
478385
t.Run("sets internal caller type when no inbound call and header is missing", func(t *testing.T) {
479386
m := &CallerInfoOutboundMiddleware{}

common/rpc/params.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ func NewParams(serviceName string, config *config.Config, dc *dynamicconfig.Coll
170170
OutboundTLS: outboundTLS,
171171
InboundMiddleware: yarpc.InboundMiddleware{
172172
// order matters: ForwardPartitionConfigMiddleware must be applied after ClientPartitionConfigMiddleware
173-
Unary: yarpc.UnaryInboundMiddleware(&InboundMetricsMiddleware{}, &CallerInfoMiddleware{}, &ClientPartitionConfigMiddleware{}, &ForwardPartitionConfigMiddleware{}, &QueryConsistencyLevelInboundMiddleware{}),
173+
Unary: yarpc.UnaryInboundMiddleware(&InboundMetricsMiddleware{}, &CallerInfoMiddleware{}, &ClientPartitionConfigMiddleware{}, &ForwardPartitionConfigMiddleware{}),
174174
},
175175
OutboundMiddleware: yarpc.OutboundMiddleware{
176176
Unary: yarpc.UnaryOutboundMiddleware(&HeaderForwardingMiddleware{

host/onebox.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1159,7 +1159,7 @@ func (c *cadenceImpl) newRPCFactory(serviceName string, host membership.HostInfo
11591159
TChannelAddress: tchannelAddress,
11601160
GRPCAddress: grpcAddress,
11611161
InboundMiddleware: yarpc.InboundMiddleware{
1162-
Unary: yarpc.UnaryInboundMiddleware(&versionMiddleware{}, &rpc.ClientPartitionConfigMiddleware{}, &rpc.ForwardPartitionConfigMiddleware{}, &rpc.QueryConsistencyLevelInboundMiddleware{}),
1162+
Unary: yarpc.UnaryInboundMiddleware(&versionMiddleware{}, &rpc.ClientPartitionConfigMiddleware{}, &rpc.ForwardPartitionConfigMiddleware{}),
11631163
},
11641164
OutboundMiddleware: yarpc.OutboundMiddleware{
11651165
Unary: &rpc.ForwardPartitionConfigMiddleware{},

service/frontend/wrappers/clusterredirection/utils.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,16 @@ package clusterredirection
33
import (
44
"context"
55

6-
"github.com/uber/cadence/common"
6+
"github.com/uber/cadence/common/client"
77
"github.com/uber/cadence/common/types"
8+
"go.uber.org/yarpc"
89
)
910

1011
func getRequestedConsistencyLevelFromContext(ctx context.Context) types.QueryConsistencyLevel {
11-
requestedConsistencyLevelFromCtx, ok := ctx.Value(common.QueryConsistencyLevelHeaderName).(types.QueryConsistencyLevel)
12-
if ok {
13-
return requestedConsistencyLevelFromCtx
12+
call := yarpc.CallFromContext(ctx)
13+
featureFlags := client.GetFeatureFlagsFromHeader(call)
14+
if featureFlags.AutoforwardingEnabled {
15+
return types.QueryConsistencyLevelStrong
1416
}
1517
return types.QueryConsistencyLevelEventual
1618
}

0 commit comments

Comments
 (0)