Skip to content

Commit 05a2412

Browse files
authored
feat(shard-distributor): integrate dynamic config for spectator (#7722)
**What changed?** Integrated dynamic config check for spectator enablement and exported ModeKey constants in membership package **Why?** The spectator client needs to respond to dynamic config changes for MatchingShardDistributionMode. Previously, ModeKey constants were private in the membership package, preventing external packages from checking the current mode. This change exports the ModeKey type and constants, and adds an Enabled function to spectator params that dynamically checks if the mode is not hash_ring. This allows the spectator to automatically enable/disable based on the dynamic config without requiring restarts. **How did you test it?** - Unit tests: `go test -v ./common/membership -run TestShardDistributorResolver` - All tests pass with the exported constants **Potential risks** - API change: Exported previously private ModeKey type and constants (ModeKeyHashRing, ModeKeyShardDistributor, ModeKeyHashRingShadowShardDistributor, ModeKeyShardDistributorShadowHashRing). This is backwards compatible as it only adds public visibility without breaking existing code. - Behavior change: Spectator now dynamically responds to config changes rather than using a static configuration **Release notes** N/A - internal improvement to spectator configuration handling **Documentation Changes** N/A --------- Signed-off-by: Jakob Haahr Taankvist <jht@uber.com>
1 parent 078daf9 commit 05a2412

File tree

3 files changed

+25
-16
lines changed

3 files changed

+25
-16
lines changed

cmd/server/cadence/server.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,12 +179,17 @@ func (s *server) startService() common.Daemon {
179179
if len(s.cfg.ShardDistributorMatchingConfig.Namespaces) > 1 {
180180
s.logger.Fatal("spectator does not support multiple namespaces", tag.Value(s.cfg.ShardDistributorMatchingConfig.Namespaces))
181181
}
182+
matchingShardDistributionMode := dc.GetStringProperty(dynamicproperties.MatchingShardDistributionMode)
183+
182184
spectatorParams := spectatorclient.Params{
183185
Client: shardDistributorClient,
184186
MetricsScope: params.MetricScope,
185187
Logger: params.Logger,
186188
Config: s.cfg.ShardDistributorMatchingConfig,
187189
TimeSource: clock.NewRealTimeSource(),
190+
Enabled: func() bool {
191+
return membership.ModeKey(matchingShardDistributionMode()) != membership.ModeKeyHashRing
192+
},
188193
}
189194
namespace := s.cfg.ShardDistributorMatchingConfig.Namespaces[0].Namespace
190195
spectator, err = spectatorclient.NewSpectatorWithNamespace(

common/membership/sharddistributorresolver.go

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,17 @@ import (
3535
"github.com/uber/cadence/service/sharddistributor/client/spectatorclient"
3636
)
3737

38-
type modeKey string
39-
40-
var (
41-
modeKeyHashRing modeKey = "hash_ring"
42-
modeKeyShardDistributor modeKey = "shard_distributor"
43-
modeKeyHashRingShadowShardDistributor modeKey = "hash_ring-shadow-shard_distributor"
44-
modeKeyShardDistributorShadowHashRing modeKey = "shard_distributor-shadow-hash_ring"
38+
type ModeKey string
39+
40+
const (
41+
// ModeKeyHashRing represents the hash ring shard distribution mode
42+
ModeKeyHashRing ModeKey = "hash_ring"
43+
// ModeKeyShardDistributor represents the shard distributor mode
44+
ModeKeyShardDistributor ModeKey = "shard_distributor"
45+
// ModeKeyHashRingShadowShardDistributor represents hash ring mode with shard distributor shadow
46+
ModeKeyHashRingShadowShardDistributor ModeKey = "hash_ring-shadow-shard_distributor"
47+
// ModeKeyShardDistributorShadowHashRing represents shard distributor mode with hash ring shadow
48+
ModeKeyShardDistributorShadowHashRing ModeKey = "shard_distributor-shadow-hash_ring"
4549
)
4650

4751
type shardDistributorResolver struct {
@@ -87,12 +91,12 @@ func (s shardDistributorResolver) Lookup(key string) (HostInfo, error) {
8791
return s.ring.Lookup(key)
8892
}
8993

90-
switch modeKey(s.shardDistributionMode()) {
91-
case modeKeyHashRing:
94+
switch ModeKey(s.shardDistributionMode()) {
95+
case ModeKeyHashRing:
9296
return s.ring.Lookup(key)
93-
case modeKeyShardDistributor:
97+
case ModeKeyShardDistributor:
9498
return s.lookUpInShardDistributor(key)
95-
case modeKeyHashRingShadowShardDistributor:
99+
case ModeKeyHashRingShadowShardDistributor:
96100
hashRingResult, err := s.ring.Lookup(key)
97101
if err != nil {
98102
return HostInfo{}, err
@@ -108,7 +112,7 @@ func (s shardDistributorResolver) Lookup(key string) (HostInfo, error) {
108112
}()
109113

110114
return hashRingResult, nil
111-
case modeKeyShardDistributorShadowHashRing:
115+
case ModeKeyShardDistributorShadowHashRing:
112116
shardDistributorResult, err := s.lookUpInShardDistributor(key)
113117
if err != nil {
114118
return HostInfo{}, err

common/membership/sharddistributorresolver_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ import (
3838
func TestShardDistributorResolver_Lookup_modeHashRing(t *testing.T) {
3939
resolver, ring, _ := newShardDistributorResolver(t)
4040
resolver.shardDistributionMode = func(...dynamicproperties.FilterOption) string {
41-
return string(modeKeyHashRing)
41+
return string(ModeKeyHashRing)
4242
}
4343

4444
ring.EXPECT().Lookup("test-key").Return(HostInfo{addr: "test-addr"}, nil)
@@ -51,7 +51,7 @@ func TestShardDistributorResolver_Lookup_modeHashRing(t *testing.T) {
5151
func TestShardDistributorResolver_Lookup_modeShardDistributor(t *testing.T) {
5252
resolver, _, shardDistributorMock := newShardDistributorResolver(t)
5353
resolver.shardDistributionMode = func(...dynamicproperties.FilterOption) string {
54-
return string(modeKeyShardDistributor)
54+
return string(ModeKeyShardDistributor)
5555
}
5656

5757
shardDistributorMock.EXPECT().GetShardOwner(gomock.Any(), "test-key").
@@ -72,7 +72,7 @@ func TestShardDistributorResolver_Lookup_modeShardDistributor(t *testing.T) {
7272
func TestShardDistributorResolver_Lookup_modeHashRingShadowShardDistributor(t *testing.T) {
7373
resolver, ring, shardDistributorMock := newShardDistributorResolver(t)
7474
resolver.shardDistributionMode = func(...dynamicproperties.FilterOption) string {
75-
return string(modeKeyHashRingShadowShardDistributor)
75+
return string(ModeKeyHashRingShadowShardDistributor)
7676
}
7777

7878
cases := []struct {
@@ -158,7 +158,7 @@ func TestShardDistributorResolver_Lookup_modeHashRingShadowShardDistributor(t *t
158158
func TestShardDistributorResolver_Lookup_modeShardDistributorShadowHashRing(t *testing.T) {
159159
resolver, ring, shardDistributorMock := newShardDistributorResolver(t)
160160
resolver.shardDistributionMode = func(...dynamicproperties.FilterOption) string {
161-
return string(modeKeyShardDistributorShadowHashRing)
161+
return string(ModeKeyShardDistributorShadowHashRing)
162162
}
163163

164164
cases := []struct {

0 commit comments

Comments
 (0)