aboutsummaryrefslogtreecommitdiff
path: root/weed/storage/backend/backend.go
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2019-11-28 18:33:18 -0800
committerChris Lu <chris.lu@gmail.com>2019-11-28 18:33:18 -0800
commitf60154f330a81354c433da37d612f235d1c0e4e9 (patch)
tree5e473f9616e35e525468959496e0448fb505e20a /weed/storage/backend/backend.go
parent641b92f53c057a2d0dd957ef2da26aadf0b70419 (diff)
downloadseaweedfs-f60154f330a81354c433da37d612f235d1c0e4e9.tar.xz
seaweedfs-f60154f330a81354c433da37d612f235d1c0e4e9.zip
master load backend storage config from master.toml
Diffstat (limited to 'weed/storage/backend/backend.go')
-rw-r--r--weed/storage/backend/backend.go43
1 files changed, 41 insertions, 2 deletions
diff --git a/weed/storage/backend/backend.go b/weed/storage/backend/backend.go
index 4d72abc87..36631e113 100644
--- a/weed/storage/backend/backend.go
+++ b/weed/storage/backend/backend.go
@@ -4,9 +4,13 @@ import (
"io"
"os"
"time"
+
+ "github.com/chrislusf/seaweedfs/weed/glog"
+ "github.com/chrislusf/seaweedfs/weed/util"
+ "github.com/spf13/viper"
)
-type DataStorageBackend interface {
+type BackendStorageFile interface {
io.ReaderAt
io.WriterAt
Truncate(off int64) error
@@ -16,6 +20,41 @@ type DataStorageBackend interface {
Instantiate(src *os.File) error
}
+type BackendStorage interface {
+ Name() string
+ NewStorageFile(key string) BackendStorageFile
+}
+
+type StorageType string
+type BackendStorageFactory interface {
+ StorageType() StorageType
+ BuildStorage(configuration util.Configuration, id string) (BackendStorage, error)
+}
+
var (
- StorageBackends []DataStorageBackend
+ BackendStorageFactories = make(map[StorageType]BackendStorageFactory)
+ BackendStorages = make(map[string]BackendStorage)
)
+
+func LoadConfiguration(config *viper.Viper) {
+
+ StorageBackendPrefix := "storage.backend"
+
+ backendSub := config.Sub(StorageBackendPrefix)
+
+ for backendTypeName, _ := range config.GetStringMap(StorageBackendPrefix) {
+ backendStorageFactory, found := BackendStorageFactories[StorageType(backendTypeName)]
+ if !found {
+ glog.Fatalf("backend storage type %s not found", backendTypeName)
+ }
+ backendTypeSub := backendSub.Sub(backendTypeName)
+ for backendStorageId, _ := range backendSub.GetStringMap(backendTypeName) {
+ backendStorage, buildErr := backendStorageFactory.BuildStorage(backendTypeSub.Sub(backendStorageId), backendStorageId)
+ if buildErr != nil {
+ glog.Fatalf("fail to create backend storage %s.%s", backendTypeName, backendStorageId)
+ }
+ BackendStorages[backendTypeName+"."+backendStorageId] = backendStorage
+ }
+ }
+
+}