Skip to content

[common][dynamicconfig] Revamp dynamicconfig package to provide a cleanier boundaries of functionality #6788

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions client/clientfactory.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ import (
"github.com/uber/cadence/client/wrappers/thrift"
timeoutwrapper "github.com/uber/cadence/client/wrappers/timeout"
"github.com/uber/cadence/common/dynamicconfig"
"github.com/uber/cadence/common/dynamicconfig/dynamicproperties"
"github.com/uber/cadence/common/log"
"github.com/uber/cadence/common/membership"
"github.com/uber/cadence/common/metrics"
Expand Down Expand Up @@ -133,7 +134,7 @@ func (cf *rpcClientFactory) NewHistoryClientWithTimeout(timeout time.Duration) (
peerResolver,
cf.logger,
)
if errorRate := cf.dynConfig.GetFloat64Property(dynamicconfig.HistoryErrorInjectionRate)(); errorRate != 0 {
if errorRate := cf.dynConfig.GetFloat64Property(dynamicproperties.HistoryErrorInjectionRate)(); errorRate != 0 {
client = errorinjectors.NewHistoryClient(client, errorRate, cf.logger)
}
if cf.metricsClient != nil {
Expand Down Expand Up @@ -178,7 +179,7 @@ func (cf *rpcClientFactory) NewMatchingClientWithTimeout(
partitionConfigProvider,
)
client = timeoutwrapper.NewMatchingClient(client, longPollTimeout, timeout)
if errorRate := cf.dynConfig.GetFloat64Property(dynamicconfig.MatchingErrorInjectionRate)(); errorRate != 0 {
if errorRate := cf.dynConfig.GetFloat64Property(dynamicproperties.MatchingErrorInjectionRate)(); errorRate != 0 {
client = errorinjectors.NewMatchingClient(client, errorRate, cf.logger)
}
if cf.metricsClient != nil {
Expand All @@ -200,7 +201,7 @@ func (cf *rpcClientFactory) NewAdminClientWithTimeoutAndConfig(
}

client = timeoutwrapper.NewAdminClient(client, largeTimeout, timeout)
if errorRate := cf.dynConfig.GetFloat64Property(dynamicconfig.AdminErrorInjectionRate)(); errorRate != 0 {
if errorRate := cf.dynConfig.GetFloat64Property(dynamicproperties.AdminErrorInjectionRate)(); errorRate != 0 {
client = errorinjectors.NewAdminClient(client, errorRate, cf.logger)
}
if cf.metricsClient != nil {
Expand All @@ -227,7 +228,7 @@ func (cf *rpcClientFactory) NewFrontendClientWithTimeoutAndConfig(
}

client = timeoutwrapper.NewFrontendClient(client, longPollTimeout, timeout)
if errorRate := cf.dynConfig.GetFloat64Property(dynamicconfig.FrontendErrorInjectionRate)(); errorRate != 0 {
if errorRate := cf.dynConfig.GetFloat64Property(dynamicproperties.FrontendErrorInjectionRate)(); errorRate != 0 {
client = errorinjectors.NewFrontendClient(client, errorRate, cf.logger)
}
if cf.metricsClient != nil {
Expand Down Expand Up @@ -259,7 +260,7 @@ func (cf *rpcClientFactory) NewShardDistributorClientWithTimeout(
)

client = timeoutwrapper.NewShardDistributorClient(client, timeout)
if errorRate := cf.dynConfig.GetFloat64Property(dynamicconfig.ShardDistributorErrorInjectionRate)(); errorRate != 0 {
if errorRate := cf.dynConfig.GetFloat64Property(dynamicproperties.ShardDistributorErrorInjectionRate)(); errorRate != 0 {
client = errorinjectors.NewShardDistributorClient(client, errorRate, cf.logger)
}
if cf.metricsClient != nil {
Expand Down
3 changes: 2 additions & 1 deletion client/matching/isolation_loadbalancer.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import (
"math/rand"

"github.com/uber/cadence/common/dynamicconfig"
"github.com/uber/cadence/common/dynamicconfig/dynamicproperties"
"github.com/uber/cadence/common/isolationgroup"
"github.com/uber/cadence/common/types"
)
Expand All @@ -38,7 +39,7 @@ type isolationLoadBalancer struct {
}

func NewIsolationLoadBalancer(fallback LoadBalancer, provider PartitionConfigProvider, domainIDToName func(string) (string, error), config *dynamicconfig.Collection) LoadBalancer {
isolationEnabled := config.GetBoolPropertyFilteredByDomain(dynamicconfig.EnableTasklistIsolation)
isolationEnabled := config.GetBoolPropertyFilteredByDomain(dynamicproperties.EnableTasklistIsolation)
return &isolationLoadBalancer{
provider: provider,
fallback: fallback,
Expand Down
5 changes: 3 additions & 2 deletions client/matching/multi_loadbalancer.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import (

"github.com/uber/cadence/common/constants"
"github.com/uber/cadence/common/dynamicconfig"
"github.com/uber/cadence/common/dynamicconfig/dynamicproperties"
"github.com/uber/cadence/common/log"
"github.com/uber/cadence/common/log/tag"
"github.com/uber/cadence/common/types"
Expand All @@ -37,7 +38,7 @@ type (
defaultLoadBalancer LoadBalancer
loadBalancers map[string]LoadBalancer
domainIDToName func(string) (string, error)
loadbalancerStrategy dynamicconfig.StringPropertyFnWithTaskListInfoFilters
loadbalancerStrategy dynamicproperties.StringPropertyFnWithTaskListInfoFilters
logger log.Logger
}
)
Expand All @@ -53,7 +54,7 @@ func NewMultiLoadBalancer(
defaultLoadBalancer: defaultLoadBalancer,
loadBalancers: loadBalancers,
domainIDToName: domainIDToName,
loadbalancerStrategy: dc.GetStringPropertyFilteredByTaskListInfo(dynamicconfig.TasklistLoadBalancerStrategy),
loadbalancerStrategy: dc.GetStringPropertyFilteredByTaskListInfo(dynamicproperties.TasklistLoadBalancerStrategy),
logger: logger,
}
}
Expand Down
13 changes: 7 additions & 6 deletions client/matching/partition_config_provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import (

"github.com/uber/cadence/common/cache"
"github.com/uber/cadence/common/dynamicconfig"
"github.com/uber/cadence/common/dynamicconfig/dynamicproperties"
"github.com/uber/cadence/common/log"
"github.com/uber/cadence/common/log/tag"
"github.com/uber/cadence/common/metrics"
Expand Down Expand Up @@ -61,9 +62,9 @@ type (
logger log.Logger
metricsClient metrics.Client
domainIDToName func(string) (string, error)
enableReadFromCache dynamicconfig.BoolPropertyFnWithTaskListInfoFilters
nReadPartitions dynamicconfig.IntPropertyFnWithTaskListInfoFilters
nWritePartitions dynamicconfig.IntPropertyFnWithTaskListInfoFilters
enableReadFromCache dynamicproperties.BoolPropertyFnWithTaskListInfoFilters
nReadPartitions dynamicproperties.IntPropertyFnWithTaskListInfoFilters
nWritePartitions dynamicproperties.IntPropertyFnWithTaskListInfoFilters
}
)

Expand All @@ -89,9 +90,9 @@ func NewPartitionConfigProvider(
logger: logger,
metricsClient: metricsClient,
domainIDToName: domainIDToName,
enableReadFromCache: dc.GetBoolPropertyFilteredByTaskListInfo(dynamicconfig.MatchingEnableGetNumberOfPartitionsFromCache),
nReadPartitions: dc.GetIntPropertyFilteredByTaskListInfo(dynamicconfig.MatchingNumTasklistReadPartitions),
nWritePartitions: dc.GetIntPropertyFilteredByTaskListInfo(dynamicconfig.MatchingNumTasklistWritePartitions),
enableReadFromCache: dc.GetBoolPropertyFilteredByTaskListInfo(dynamicproperties.MatchingEnableGetNumberOfPartitionsFromCache),
nReadPartitions: dc.GetIntPropertyFilteredByTaskListInfo(dynamicproperties.MatchingNumTasklistReadPartitions),
nWritePartitions: dc.GetIntPropertyFilteredByTaskListInfo(dynamicproperties.MatchingNumTasklistWritePartitions),
configCache: cache.New(&cache.Options{
TTL: 0,
InitialCapacity: 100,
Expand Down
7 changes: 4 additions & 3 deletions client/matching/partition_config_provider_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import (

"github.com/uber/cadence/common/cache"
"github.com/uber/cadence/common/dynamicconfig"
"github.com/uber/cadence/common/dynamicconfig/dynamicproperties"
"github.com/uber/cadence/common/log"
"github.com/uber/cadence/common/log/testlogger"
"github.com/uber/cadence/common/metrics"
Expand Down Expand Up @@ -68,9 +69,9 @@ func setUpMocksForPartitionConfigProvider(t *testing.T, enableReadFromCache bool
logger: logger,
metricsClient: metrics.NewNoopMetricsClient(),
domainIDToName: domainIDToName,
enableReadFromCache: dynamicconfig.GetBoolPropertyFilteredByTaskListInfo(enableReadFromCache),
nReadPartitions: dynamicconfig.GetIntPropertyFilteredByTaskListInfo(3),
nWritePartitions: dynamicconfig.GetIntPropertyFilteredByTaskListInfo(5),
enableReadFromCache: dynamicproperties.GetBoolPropertyFilteredByTaskListInfo(enableReadFromCache),
nReadPartitions: dynamicproperties.GetIntPropertyFilteredByTaskListInfo(3),
nWritePartitions: dynamicproperties.GetIntPropertyFilteredByTaskListInfo(5),
}, mockCache
}

Expand Down
17 changes: 9 additions & 8 deletions cmd/server/cadence/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ import (
"github.com/uber/cadence/common/constants"
"github.com/uber/cadence/common/dynamicconfig"
"github.com/uber/cadence/common/dynamicconfig/configstore"
"github.com/uber/cadence/common/dynamicconfig/dynamicproperties"
"github.com/uber/cadence/common/elasticsearch"
"github.com/uber/cadence/common/isolationgroup/isolationgroupapi"
cadencelog "github.com/uber/cadence/common/log"
Expand Down Expand Up @@ -164,7 +165,7 @@ func (s *server) startService() common.Daemon {
dc := dynamicconfig.NewCollection(
params.DynamicConfig,
params.Logger,
dynamicconfig.ClusterNameFilter(clusterGroupMetadata.CurrentClusterName),
dynamicproperties.ClusterNameFilter(clusterGroupMetadata.CurrentClusterName),
)

params.MetricScope = svcCfg.Metrics.NewScope(params.Logger, params.Name)
Expand Down Expand Up @@ -225,13 +226,13 @@ func (s *server) startService() common.Daemon {
clusterGroupMetadata.PrimaryClusterName,
clusterGroupMetadata.CurrentClusterName,
clusterGroupMetadata.ClusterGroup,
dc.GetBoolPropertyFilteredByDomain(dynamicconfig.UseNewInitialFailoverVersion),
dc.GetBoolPropertyFilteredByDomain(dynamicproperties.UseNewInitialFailoverVersion),
params.MetricsClient,
params.Logger,
)

advancedVisMode := dc.GetStringProperty(
dynamicconfig.WriteVisibilityStoreName,
dynamicproperties.WriteVisibilityStoreName,
)()
isAdvancedVisEnabled := common.IsAdvancedVisibilityWritingEnabled(advancedVisMode, params.PersistenceConfig.IsAdvancedVisibilityConfigExist())
if isAdvancedVisEnabled {
Expand Down Expand Up @@ -266,8 +267,8 @@ func (s *server) startService() common.Daemon {
)

params.ArchiverProvider = provider.NewArchiverProvider(s.cfg.Archival.History.Provider, s.cfg.Archival.Visibility.Provider)
params.PersistenceConfig.TransactionSizeLimit = dc.GetIntProperty(dynamicconfig.TransactionSizeLimit)
params.PersistenceConfig.ErrorInjectionRate = dc.GetFloat64Property(dynamicconfig.PersistenceErrorInjectionRate)
params.PersistenceConfig.TransactionSizeLimit = dc.GetIntProperty(dynamicproperties.TransactionSizeLimit)
params.PersistenceConfig.ErrorInjectionRate = dc.GetFloat64Property(dynamicproperties.PersistenceErrorInjectionRate)
params.AuthorizationConfig = s.cfg.Authorization
params.BlobstoreClient, err = filestore.NewFilestoreClient(s.cfg.Blobstore.Filestore)
if err != nil {
Expand Down Expand Up @@ -320,7 +321,7 @@ func (*server) newMethod(
wrappedRings[k] = membership.NewShardDistributorResolver(
sharddistributorconstants.MatchingNamespace,
shardDistributorClient,
dc.GetStringProperty(dynamicconfig.MatchingShardDistributionMode),
dc.GetStringProperty(dynamicproperties.MatchingShardDistributionMode),
v,
logger,
)
Expand All @@ -344,7 +345,7 @@ func (*server) createShardDistributorClient(params resource.Params, dc *dynamicc
)

shardDistributorClient = timeoutwrapper.NewShardDistributorClient(shardDistributorClient, timeoutwrapper.ShardDistributorDefaultTimeout)
if errorRate := dc.GetFloat64Property(dynamicconfig.ShardDistributorErrorInjectionRate)(); errorRate != 0 {
if errorRate := dc.GetFloat64Property(dynamicproperties.ShardDistributorErrorInjectionRate)(); errorRate != 0 {
shardDistributorClient = errorinjectors.NewShardDistributorClient(shardDistributorClient, errorRate, params.Logger)
}
if params.MetricsClient != nil {
Expand Down Expand Up @@ -448,7 +449,7 @@ func validateIndex(config *config.ElasticSearchConfig) {

func getFromDynamicConfig(params resource.Params, dc *dynamicconfig.Collection) func() []string {
return func() []string {
res, err := isolationgroupapi.MapAllIsolationGroupsResponse(dc.GetListProperty(dynamicconfig.AllIsolationGroups)())
res, err := isolationgroupapi.MapAllIsolationGroupsResponse(dc.GetListProperty(dynamicproperties.AllIsolationGroups)())
if err != nil {
params.Logger.Error("failed to get isolation groups from config", tag.Error(err))
return nil
Expand Down
5 changes: 3 additions & 2 deletions cmd/server/cadence/server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import (
"github.com/uber/cadence/common"
"github.com/uber/cadence/common/config"
"github.com/uber/cadence/common/dynamicconfig"
"github.com/uber/cadence/common/dynamicconfig/dynamicproperties"
"github.com/uber/cadence/common/log"
"github.com/uber/cadence/common/log/tag"
"github.com/uber/cadence/common/log/testlogger"
Expand Down Expand Up @@ -128,7 +129,7 @@ func TestSettingGettingZonalIsolationGroupsFromIG(t *testing.T) {

ctrl := gomock.NewController(t)
client := dynamicconfig.NewMockClient(ctrl)
client.EXPECT().GetListValue(dynamicconfig.AllIsolationGroups, gomock.Any()).Return([]interface{}{
client.EXPECT().GetListValue(dynamicproperties.AllIsolationGroups, gomock.Any()).Return([]interface{}{
"zone-1", "zone-2",
}, nil)

Expand All @@ -146,7 +147,7 @@ func TestSettingGettingZonalIsolationGroupsFromIG(t *testing.T) {
func TestSettingGettingZonalIsolationGroupsFromIGError(t *testing.T) {
ctrl := gomock.NewController(t)
client := dynamicconfig.NewMockClient(ctrl)
client.EXPECT().GetListValue(dynamicconfig.AllIsolationGroups, gomock.Any()).Return(nil, assert.AnError)
client.EXPECT().GetListValue(dynamicproperties.AllIsolationGroups, gomock.Any()).Return(nil, assert.AnError)
dc := dynamicconfig.NewCollection(client, log.NewNoop())

assert.NotPanics(t, func() {
Expand Down
17 changes: 9 additions & 8 deletions common/archiver/archivalMetadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import (
"github.com/uber/cadence/common/config"
"github.com/uber/cadence/common/constants"
"github.com/uber/cadence/common/dynamicconfig"
"github.com/uber/cadence/common/dynamicconfig/dynamicproperties"
"github.com/uber/cadence/common/types"
)

Expand Down Expand Up @@ -54,9 +55,9 @@ type (

archivalConfig struct {
staticClusterStatus ArchivalStatus
dynamicClusterStatus dynamicconfig.StringPropertyFn
dynamicClusterStatus dynamicproperties.StringPropertyFn
staticEnableRead bool
dynamicEnableRead dynamicconfig.BoolPropertyFn
dynamicEnableRead dynamicproperties.BoolPropertyFn
domainDefaultStatus types.ArchivalStatus
domainDefaultURI string
}
Expand Down Expand Up @@ -86,18 +87,18 @@ func NewArchivalMetadata(
) ArchivalMetadata {
historyConfig := NewArchivalConfig(
historyStatus,
dc.GetStringProperty(dynamicconfig.HistoryArchivalStatus),
dc.GetStringProperty(dynamicproperties.HistoryArchivalStatus),
historyReadEnabled,
dc.GetBoolProperty(dynamicconfig.EnableReadFromHistoryArchival),
dc.GetBoolProperty(dynamicproperties.EnableReadFromHistoryArchival),
domainDefaults.History.Status,
domainDefaults.History.URI,
)

visibilityConfig := NewArchivalConfig(
visibilityStatus,
dc.GetStringProperty(dynamicconfig.VisibilityArchivalStatus),
dc.GetStringProperty(dynamicproperties.VisibilityArchivalStatus),
visibilityReadEnabled,
dc.GetBoolProperty(dynamicconfig.EnableReadFromVisibilityArchival),
dc.GetBoolProperty(dynamicproperties.EnableReadFromVisibilityArchival),
domainDefaults.Visibility.Status,
domainDefaults.Visibility.URI,
)
Expand All @@ -119,9 +120,9 @@ func (metadata *archivalMetadata) GetVisibilityConfig() ArchivalConfig {
// NewArchivalConfig constructs a new valid ArchivalConfig
func NewArchivalConfig(
staticClusterStatusStr string,
dynamicClusterStatus dynamicconfig.StringPropertyFn,
dynamicClusterStatus dynamicproperties.StringPropertyFn,
staticEnableRead bool,
dynamicEnableRead dynamicconfig.BoolPropertyFn,
dynamicEnableRead dynamicproperties.BoolPropertyFn,
domainDefaultStatusStr string,
domainDefaultURI string,
) ArchivalConfig {
Expand Down
8 changes: 4 additions & 4 deletions common/archiver/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import (

"go.uber.org/cadence/activity"

"github.com/uber/cadence/common/dynamicconfig"
"github.com/uber/cadence/common/dynamicconfig/dynamicproperties"
)

type (
Expand All @@ -39,7 +39,7 @@ type (
ArchiveFeatureCatalog struct {
ProgressManager ProgressManager
NonRetriableError NonRetriableError
ArchiveIncompleteHistory dynamicconfig.BoolPropertyFn
ArchiveIncompleteHistory dynamicproperties.BoolPropertyFn
}

// NonRetriableError returns an error indicating archiver has encountered an non-retriable error
Expand All @@ -57,7 +57,7 @@ type (
// It should be called inside the Archive method.
func GetFeatureCatalog(opts ...ArchiveOption) *ArchiveFeatureCatalog {
catalog := &ArchiveFeatureCatalog{
ArchiveIncompleteHistory: dynamicconfig.GetBoolPropertyFn(false),
ArchiveIncompleteHistory: dynamicproperties.GetBoolPropertyFn(false),
}
for _, opt := range opts {
opt(catalog)
Expand Down Expand Up @@ -102,7 +102,7 @@ func GetNonRetriableErrorOption(nonRetryableErr error) ArchiveOption {
}

// GetArchivingIncompleteHistoryOption returns an ArchiveOption so that archiver would archive incomplete history
func GetArchivingIncompleteHistoryOption(allow dynamicconfig.BoolPropertyFn) ArchiveOption {
func GetArchivingIncompleteHistoryOption(allow dynamicproperties.BoolPropertyFn) ArchiveOption {
return func(catalog *ArchiveFeatureCatalog) {
catalog.ArchiveIncompleteHistory = allow
}
Expand Down
4 changes: 2 additions & 2 deletions common/cache/cache.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import (

"github.com/uber/cadence/common"
"github.com/uber/cadence/common/clock"
"github.com/uber/cadence/common/dynamicconfig"
"github.com/uber/cadence/common/dynamicconfig/dynamicproperties"
"github.com/uber/cadence/common/metrics"
)

Expand Down Expand Up @@ -81,7 +81,7 @@ type Options struct {
// MaxSize is an optional flag, but it has to be used along with a value that implements Sizeable() interface
// to control the max size in bytes of the cache
// It is required option if MaxCount is not provided
MaxSize dynamicconfig.IntPropertyFn
MaxSize dynamicproperties.IntPropertyFn

// ActivelyEvict will evict items that has expired TTL at every operation in the cache
// This can be expensive if a lot of items expire at the same time
Expand Down
8 changes: 4 additions & 4 deletions common/cache/lru.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import (
"time"

"github.com/uber/cadence/common/clock"
"github.com/uber/cadence/common/dynamicconfig"
"github.com/uber/cadence/common/dynamicconfig/dynamicproperties"
"github.com/uber/cadence/common/log"
"github.com/uber/cadence/common/log/tag"
)
Expand All @@ -55,7 +55,7 @@ type (
pin bool
rmFunc RemovedFunc
sizeFunc GetCacheItemSizeFunc
maxSize dynamicconfig.IntPropertyFn
maxSize dynamicproperties.IntPropertyFn
currSize uint64
sizeByKey map[interface{}]uint64
isSizeBased bool
Expand Down Expand Up @@ -178,13 +178,13 @@ func New(opts *Options, logger log.Logger) Cache {
cache.maxSize = opts.MaxSize
if cache.maxSize == nil {
// If maxSize is not defined for size-based cache, set default to cacheCountLimit
cache.maxSize = dynamicconfig.GetIntPropertyFn(cacheDefaultSizeLimit)
cache.maxSize = dynamicproperties.GetIntPropertyFn(cacheDefaultSizeLimit)
}
cache.sizeByKey = make(map[interface{}]uint64, opts.InitialCapacity)
} else {
// cache is count based if max size and sizeFunc are not provided
cache.maxCount = opts.MaxCount
cache.maxSize = dynamicconfig.GetIntPropertyFn(0)
cache.maxSize = dynamicproperties.GetIntPropertyFn(0)
cache.sizeFunc = func(interface{}) uint64 {
return 0
}
Expand Down
Loading