aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2021-01-12 02:28:13 -0800
committerChris Lu <chris.lu@gmail.com>2021-01-12 02:28:13 -0800
commitcfb9342a15ce73c1e04c0e690cf87f65133bcf1b (patch)
tree40e68e68d98472e8f942c04a501839a0135ef1c5
parent38d516251eb080e56ee16747684e808a06cb6702 (diff)
downloadseaweedfs-cfb9342a15ce73c1e04c0e690cf87f65133bcf1b.tar.xz
seaweedfs-cfb9342a15ce73c1e04c0e690cf87f65133bcf1b.zip
avoid concurrent map updates to viper
-rw-r--r--weed/command/filer_replication.go3
-rw-r--r--weed/filer/configuration.go6
-rw-r--r--weed/notification/configuration.go5
-rw-r--r--weed/security/tls.go7
-rw-r--r--weed/storage/backend/backend.go4
-rw-r--r--weed/util/config.go18
6 files changed, 26 insertions, 17 deletions
diff --git a/weed/command/filer_replication.go b/weed/command/filer_replication.go
index 40f2b570b..4f698e375 100644
--- a/weed/command/filer_replication.go
+++ b/weed/command/filer_replication.go
@@ -14,7 +14,6 @@ import (
_ "github.com/chrislusf/seaweedfs/weed/replication/sink/s3sink"
"github.com/chrislusf/seaweedfs/weed/replication/sub"
"github.com/chrislusf/seaweedfs/weed/util"
- "github.com/spf13/viper"
)
func init() {
@@ -123,7 +122,7 @@ func runFilerReplicate(cmd *Command, args []string) bool {
}
-func validateOneEnabledInput(config *viper.Viper) {
+func validateOneEnabledInput(config *util.ViperProxy) {
enabledInput := ""
for _, input := range sub.NotificationInputs {
if config.GetBool("notification." + input.GetName() + ".enabled") {
diff --git a/weed/filer/configuration.go b/weed/filer/configuration.go
index a6f18709e..9ef2f3e0f 100644
--- a/weed/filer/configuration.go
+++ b/weed/filer/configuration.go
@@ -2,7 +2,7 @@ package filer
import (
"github.com/chrislusf/seaweedfs/weed/glog"
- "github.com/spf13/viper"
+ "github.com/chrislusf/seaweedfs/weed/util"
"os"
"reflect"
"strings"
@@ -12,7 +12,7 @@ var (
Stores []FilerStore
)
-func (f *Filer) LoadConfiguration(config *viper.Viper) {
+func (f *Filer) LoadConfiguration(config *util.ViperProxy) {
validateOneEnabledStore(config)
@@ -79,7 +79,7 @@ func (f *Filer) LoadConfiguration(config *viper.Viper) {
}
-func validateOneEnabledStore(config *viper.Viper) {
+func validateOneEnabledStore(config *util.ViperProxy) {
enabledStore := ""
for _, store := range Stores {
if config.GetBool(store.GetName() + ".enabled") {
diff --git a/weed/notification/configuration.go b/weed/notification/configuration.go
index 36211692c..541a453e9 100644
--- a/weed/notification/configuration.go
+++ b/weed/notification/configuration.go
@@ -4,7 +4,6 @@ import (
"github.com/chrislusf/seaweedfs/weed/glog"
"github.com/chrislusf/seaweedfs/weed/util"
"github.com/golang/protobuf/proto"
- "github.com/spf13/viper"
)
type MessageQueue interface {
@@ -21,7 +20,7 @@ var (
Queue MessageQueue
)
-func LoadConfiguration(config *viper.Viper, prefix string) {
+func LoadConfiguration(config *util.ViperProxy, prefix string) {
if config == nil {
return
@@ -43,7 +42,7 @@ func LoadConfiguration(config *viper.Viper, prefix string) {
}
-func validateOneEnabledQueue(config *viper.Viper) {
+func validateOneEnabledQueue(config *util.ViperProxy) {
enabledQueue := ""
for _, queue := range MessageQueues {
if config.GetBool(queue.GetName() + ".enabled") {
diff --git a/weed/security/tls.go b/weed/security/tls.go
index 72363768f..b4bf84e2d 100644
--- a/weed/security/tls.go
+++ b/weed/security/tls.go
@@ -3,17 +3,16 @@ package security
import (
"crypto/tls"
"crypto/x509"
+ "github.com/chrislusf/seaweedfs/weed/util"
"io/ioutil"
- "github.com/spf13/viper"
-
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
"github.com/chrislusf/seaweedfs/weed/glog"
)
-func LoadServerTLS(config *viper.Viper, component string) grpc.ServerOption {
+func LoadServerTLS(config *util.ViperProxy, component string) grpc.ServerOption {
if config == nil {
return nil
}
@@ -40,7 +39,7 @@ func LoadServerTLS(config *viper.Viper, component string) grpc.ServerOption {
return grpc.Creds(ta)
}
-func LoadClientTLS(config *viper.Viper, component string) grpc.DialOption {
+func LoadClientTLS(config *util.ViperProxy, component string) grpc.DialOption {
if config == nil {
return grpc.WithInsecure()
}
diff --git a/weed/storage/backend/backend.go b/weed/storage/backend/backend.go
index daab29621..b8b883be6 100644
--- a/weed/storage/backend/backend.go
+++ b/weed/storage/backend/backend.go
@@ -1,6 +1,7 @@
package backend
import (
+ "github.com/chrislusf/seaweedfs/weed/util"
"io"
"os"
"strings"
@@ -9,7 +10,6 @@ import (
"github.com/chrislusf/seaweedfs/weed/glog"
"github.com/chrislusf/seaweedfs/weed/pb/master_pb"
"github.com/chrislusf/seaweedfs/weed/pb/volume_server_pb"
- "github.com/spf13/viper"
)
type BackendStorageFile interface {
@@ -45,7 +45,7 @@ var (
)
// used by master to load remote storage configurations
-func LoadConfiguration(config *viper.Viper) {
+func LoadConfiguration(config *util.ViperProxy) {
StorageBackendPrefix := "storage.backend"
diff --git a/weed/util/config.go b/weed/util/config.go
index 94e621e34..54edf5a3c 100644
--- a/weed/util/config.go
+++ b/weed/util/config.go
@@ -2,6 +2,7 @@ package util
import (
"strings"
+ "sync"
"github.com/spf13/viper"
@@ -46,9 +47,20 @@ func LoadConfiguration(configFileName string, required bool) (loaded bool) {
return true
}
-func GetViper() *viper.Viper {
- v := &viper.Viper{}
- *v = *viper.GetViper()
+type ViperProxy struct {
+ *viper.Viper
+ sync.Mutex
+}
+
+func (vp *ViperProxy) SetDefault(key string, value interface{}) {
+ vp.Lock()
+ defer vp.Unlock()
+ vp.Viper.SetDefault(key, value)
+}
+
+func GetViper() *ViperProxy {
+ v := &ViperProxy{}
+ v.Viper = viper.GetViper()
v.AutomaticEnv()
v.SetEnvPrefix("weed")
v.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))