diff options
| author | Chris Lu <chris.lu@gmail.com> | 2019-11-28 18:33:18 -0800 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2019-11-28 18:33:18 -0800 |
| commit | f60154f330a81354c433da37d612f235d1c0e4e9 (patch) | |
| tree | 5e473f9616e35e525468959496e0448fb505e20a /weed/storage/backend/backend.go | |
| parent | 641b92f53c057a2d0dd957ef2da26aadf0b70419 (diff) | |
| download | seaweedfs-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.go | 43 |
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 + } + } + +} |
