[#329] Reduce using mutex when update app settings #463
1 changed files with 38 additions and 94 deletions
132
cmd/s3-gw/app.go
132
cmd/s3-gw/app.go
|
@ -234,51 +234,55 @@ func newAppSettings(log *Logger, v *viper.Viper) *appSettings {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *appSettings) update(v *viper.Viper, log *zap.Logger) {
|
func (s *appSettings) update(v *viper.Viper, log *zap.Logger) {
|
||||||
s.updateNamespacesSettings(v, log)
|
namespaceHeader := v.GetString(cfgResolveNamespaceHeader)
|
||||||
s.useDefaultXMLNamespace(v.GetBool(cfgKludgeUseDefaultXMLNS))
|
|
||||||
s.setBypassContentEncodingInChunks(v.GetBool(cfgKludgeBypassContentEncodingCheckInChunks))
|
|
||||||
s.setClientCut(v.GetBool(cfgClientCut))
|
|
||||||
s.setBufferMaxSizeForPut(v.GetUint64(cfgBufferMaxSizeForPut))
|
|
||||||
s.setMD5Enabled(v.GetBool(cfgMD5Enabled))
|
|
||||||
s.setPolicyDenyByDefault(v.GetBool(cfgPolicyDenyByDefault))
|
|
||||||
s.setSourceIPHeader(v.GetString(cfgSourceIPHeader))
|
|
||||||
s.setRetryMaxAttempts(fetchRetryMaxAttempts(v))
|
|
||||||
s.setRetryMaxBackoff(fetchRetryMaxBackoff(v))
|
|
||||||
s.setRetryStrategy(fetchRetryStrategy(v))
|
|
||||||
s.setVHSSettings(v, log)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *appSettings) updateNamespacesSettings(v *viper.Viper, log *zap.Logger) {
|
|
||||||
nsHeader := v.GetString(cfgResolveNamespaceHeader)
|
|
||||||
nsConfig, defaultNamespaces := fetchNamespacesConfig(log, v)
|
nsConfig, defaultNamespaces := fetchNamespacesConfig(log, v)
|
||||||
|
defaultXMLNS := v.GetBool(cfgKludgeUseDefaultXMLNS)
|
||||||
s.mu.Lock()
|
bypassContentEncodingInChunks := v.GetBool(cfgKludgeBypassContentEncodingCheckInChunks)
|
||||||
defer s.mu.Unlock()
|
clientCut := v.GetBool(cfgClientCut)
|
||||||
|
maxBufferSizeForPut := v.GetUint64(cfgBufferMaxSizeForPut)
|
||||||
s.namespaceHeader = nsHeader
|
md5Enabled := v.GetBool(cfgMD5Enabled)
|
||||||
s.defaultNamespaces = defaultNamespaces
|
policyDenyByDefault := v.GetBool(cfgPolicyDenyByDefault)
|
||||||
s.namespaces = nsConfig.Namespaces
|
sourceIPHeader := v.GetString(cfgSourceIPHeader)
|
||||||
}
|
retryMaxAttempts := fetchRetryMaxAttempts(v)
|
||||||
|
retryMaxBackoff := fetchRetryMaxBackoff(v)
|
||||||
func (s *appSettings) setVHSSettings(v *viper.Viper, log *zap.Logger) {
|
retryStrategy := fetchRetryStrategy(v)
|
||||||
domains := fetchDomains(v, log)
|
domains := fetchDomains(v, log)
|
||||||
vhsEnabled := v.GetBool(cfgVHSEnabled)
|
vhsEnabled := v.GetBool(cfgVHSEnabled)
|
||||||
vhsHeader := v.GetString(cfgVHSHeader)
|
vhsHeader := v.GetString(cfgVHSHeader)
|
||||||
servernameHeader := v.GetString(cfgServernameHeader)
|
servernameHeader := v.GetString(cfgServernameHeader)
|
||||||
|
vhsNamespacesEnabled := s.prepareVHSNamespaces(v, log)
|
||||||
|
|
||||||
|
s.mu.Lock()
|
||||||
|
defer s.mu.Unlock()
|
||||||
|
|
||||||
|
s.namespaceHeader = namespaceHeader
|
||||||
|
s.defaultNamespaces = defaultNamespaces
|
||||||
|
s.namespaces = nsConfig.Namespaces
|
||||||
|
s.defaultXMLNS = defaultXMLNS
|
||||||
|
s.bypassContentEncodingInChunks = bypassContentEncodingInChunks
|
||||||
|
s.clientCut = clientCut
|
||||||
|
s.maxBufferSizeForPut = maxBufferSizeForPut
|
||||||
|
s.md5Enabled = md5Enabled
|
||||||
|
s.policyDenyByDefault = policyDenyByDefault
|
||||||
|
s.sourceIPHeader = sourceIPHeader
|
||||||
|
s.retryMaxAttempts = retryMaxAttempts
|
||||||
|
s.retryMaxBackoff = retryMaxBackoff
|
||||||
|
s.retryStrategy = retryStrategy
|
||||||
|
s.domains = domains
|
||||||
|
s.vhsEnabled = vhsEnabled
|
||||||
|
s.vhsHeader = vhsHeader
|
||||||
|
s.servernameHeader = servernameHeader
|
||||||
|
s.vhsNamespacesEnabled = vhsNamespacesEnabled
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *appSettings) prepareVHSNamespaces(v *viper.Viper, log *zap.Logger) map[string]bool {
|
||||||
nsMap := fetchVHSNamespaces(v, log)
|
nsMap := fetchVHSNamespaces(v, log)
|
||||||
vhsNamespaces := make(map[string]bool, len(nsMap))
|
vhsNamespaces := make(map[string]bool, len(nsMap))
|
||||||
for ns, flag := range nsMap {
|
for ns, flag := range nsMap {
|
||||||
vhsNamespaces[s.ResolveNamespaceAlias(ns)] = flag
|
vhsNamespaces[s.ResolveNamespaceAlias(ns)] = flag
|
||||||
}
|
}
|
||||||
|
|
||||||
s.mu.Lock()
|
return vhsNamespaces
|
||||||
defer s.mu.Unlock()
|
|
||||||
|
|
||||||
s.domains = domains
|
|
||||||
s.vhsEnabled = vhsEnabled
|
|
||||||
s.vhsHeader = vhsHeader
|
|
||||||
s.servernameHeader = servernameHeader
|
|
||||||
s.vhsNamespacesEnabled = vhsNamespaces
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *appSettings) Domains() []string {
|
func (s *appSettings) Domains() []string {
|
||||||
|
@ -317,36 +321,18 @@ func (s *appSettings) BypassContentEncodingInChunks() bool {
|
||||||
return s.bypassContentEncodingInChunks
|
return s.bypassContentEncodingInChunks
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *appSettings) setBypassContentEncodingInChunks(bypass bool) {
|
|
||||||
s.mu.Lock()
|
|
||||||
s.bypassContentEncodingInChunks = bypass
|
|
||||||
s.mu.Unlock()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *appSettings) ClientCut() bool {
|
func (s *appSettings) ClientCut() bool {
|
||||||
s.mu.RLock()
|
s.mu.RLock()
|
||||||
defer s.mu.RUnlock()
|
defer s.mu.RUnlock()
|
||||||
return s.clientCut
|
return s.clientCut
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *appSettings) setClientCut(clientCut bool) {
|
|
||||||
s.mu.Lock()
|
|
||||||
s.clientCut = clientCut
|
|
||||||
s.mu.Unlock()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *appSettings) BufferMaxSizeForPut() uint64 {
|
func (s *appSettings) BufferMaxSizeForPut() uint64 {
|
||||||
s.mu.RLock()
|
s.mu.RLock()
|
||||||
defer s.mu.RUnlock()
|
defer s.mu.RUnlock()
|
||||||
return s.maxBufferSizeForPut
|
return s.maxBufferSizeForPut
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *appSettings) setBufferMaxSizeForPut(size uint64) {
|
|
||||||
s.mu.Lock()
|
|
||||||
s.maxBufferSizeForPut = size
|
|
||||||
s.mu.Unlock()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *appSettings) DefaultPlacementPolicy(namespace string) netmap.PlacementPolicy {
|
func (s *appSettings) DefaultPlacementPolicy(namespace string) netmap.PlacementPolicy {
|
||||||
s.mu.RLock()
|
s.mu.RLock()
|
||||||
defer s.mu.RUnlock()
|
defer s.mu.RUnlock()
|
||||||
|
@ -394,12 +380,6 @@ func (s *appSettings) NewXMLDecoder(r io.Reader) *xml.Decoder {
|
||||||
return dec
|
return dec
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *appSettings) useDefaultXMLNamespace(useDefaultNamespace bool) {
|
|
||||||
s.mu.Lock()
|
|
||||||
s.defaultXMLNS = useDefaultNamespace
|
|
||||||
s.mu.Unlock()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *appSettings) DefaultMaxAge() int {
|
func (s *appSettings) DefaultMaxAge() int {
|
||||||
return s.defaultMaxAge
|
return s.defaultMaxAge
|
||||||
}
|
}
|
||||||
|
@ -418,12 +398,6 @@ func (s *appSettings) MD5Enabled() bool {
|
||||||
return s.md5Enabled
|
return s.md5Enabled
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *appSettings) setMD5Enabled(md5Enabled bool) {
|
|
||||||
s.mu.Lock()
|
|
||||||
s.md5Enabled = md5Enabled
|
|
||||||
s.mu.Unlock()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *appSettings) NamespaceHeader() string {
|
func (s *appSettings) NamespaceHeader() string {
|
||||||
s.mu.RLock()
|
s.mu.RLock()
|
||||||
defer s.mu.RUnlock()
|
defer s.mu.RUnlock()
|
||||||
|
@ -459,54 +433,24 @@ func (s *appSettings) PolicyDenyByDefault() bool {
|
||||||
return s.policyDenyByDefault
|
return s.policyDenyByDefault
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *appSettings) setPolicyDenyByDefault(policyDenyByDefault bool) {
|
|
||||||
s.mu.Lock()
|
|
||||||
s.policyDenyByDefault = policyDenyByDefault
|
|
||||||
s.mu.Unlock()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *appSettings) setSourceIPHeader(header string) {
|
|
||||||
s.mu.Lock()
|
|
||||||
s.sourceIPHeader = header
|
|
||||||
s.mu.Unlock()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *appSettings) SourceIPHeader() string {
|
func (s *appSettings) SourceIPHeader() string {
|
||||||
s.mu.RLock()
|
s.mu.RLock()
|
||||||
defer s.mu.RUnlock()
|
defer s.mu.RUnlock()
|
||||||
return s.sourceIPHeader
|
return s.sourceIPHeader
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *appSettings) setRetryMaxAttempts(maxAttempts int) {
|
|
||||||
s.mu.Lock()
|
|
||||||
s.retryMaxAttempts = maxAttempts
|
|
||||||
s.mu.Unlock()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *appSettings) RetryMaxAttempts() int {
|
func (s *appSettings) RetryMaxAttempts() int {
|
||||||
s.mu.RLock()
|
s.mu.RLock()
|
||||||
defer s.mu.RUnlock()
|
defer s.mu.RUnlock()
|
||||||
return s.retryMaxAttempts
|
return s.retryMaxAttempts
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *appSettings) setRetryMaxBackoff(maxBackoff time.Duration) {
|
|
||||||
s.mu.Lock()
|
|
||||||
s.retryMaxBackoff = maxBackoff
|
|
||||||
s.mu.Unlock()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *appSettings) RetryMaxBackoff() time.Duration {
|
func (s *appSettings) RetryMaxBackoff() time.Duration {
|
||||||
s.mu.RLock()
|
s.mu.RLock()
|
||||||
defer s.mu.RUnlock()
|
defer s.mu.RUnlock()
|
||||||
return s.retryMaxBackoff
|
return s.retryMaxBackoff
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *appSettings) setRetryStrategy(strategy handler.RetryStrategy) {
|
|
||||||
s.mu.Lock()
|
|
||||||
s.retryStrategy = strategy
|
|
||||||
s.mu.Unlock()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *appSettings) RetryStrategy() handler.RetryStrategy {
|
func (s *appSettings) RetryStrategy() handler.RetryStrategy {
|
||||||
s.mu.RLock()
|
s.mu.RLock()
|
||||||
defer s.mu.RUnlock()
|
defer s.mu.RUnlock()
|
||||||
|
|
Loading…
Reference in a new issue