diff options
author | Laria Carolin Chabowski <laria@laria.me> | 2017-09-29 07:57:09 +0200 |
---|---|---|
committer | Laria Carolin Chabowski <laria@laria.me> | 2017-10-03 15:01:38 +0200 |
commit | c04bbf9c82f216891ba44b8b5b621b8020963086 (patch) | |
tree | a2e0809ea5e4a0cf2dfd921b6b6c79e48a9d5de7 /storage | |
parent | 55053d116a79d681dc10d0e905371533e1a43299 (diff) | |
download | petrific-c04bbf9c82f216891ba44b8b5b621b8020963086.tar.gz petrific-c04bbf9c82f216891ba44b8b5b621b8020963086.tar.bz2 petrific-c04bbf9c82f216891ba44b8b5b621b8020963086.zip |
Restructure package storage
Diffstat (limited to 'storage')
-rw-r--r-- | storage/local/local.go (renamed from storage/local_storage.go) | 11 | ||||
-rw-r--r-- | storage/memory/memory.go (renamed from storage/memory_storage.go) | 9 | ||||
-rw-r--r-- | storage/registry/registry.go | 58 |
3 files changed, 67 insertions, 11 deletions
diff --git a/storage/local_storage.go b/storage/local/local.go index c080564..4869bb2 100644 --- a/storage/local_storage.go +++ b/storage/local/local.go @@ -1,9 +1,10 @@ -package storage +package local import ( "bytes" "code.laria.me/petrific/config" "code.laria.me/petrific/objects" + "code.laria.me/petrific/storage" "encoding/hex" "fmt" "io" @@ -21,10 +22,10 @@ func objectDir(id objects.ObjectId) string { type LocalStorage struct { Path string - index Index + index storage.Index } -func LocalStorageFromConfig(conf config.Config, name string) (Storage, error) { +func LocalStorageFromConfig(conf config.Config, name string) (storage.Storage, error) { var path string if err := conf.Storage[name].Get("path", &path); err != nil { return nil, err @@ -35,7 +36,7 @@ func LocalStorageFromConfig(conf config.Config, name string) (Storage, error) { func OpenLocalStorage(path string) (l LocalStorage, err error) { l.Path = path - l.index = NewIndex() + l.index = storage.NewIndex() if fi, err := os.Stat(path); os.IsNotExist(err) { if err := os.MkdirAll(path, 0755); err != nil { @@ -70,7 +71,7 @@ func objectPath(id objects.ObjectId) string { func (l LocalStorage) Get(id objects.ObjectId) ([]byte, error) { f, err := os.Open(joinPath(l.Path, objectPath(id))) if os.IsNotExist(err) { - return []byte{}, ObjectNotFound + return []byte{}, storage.ObjectNotFound } else if err != nil { return []byte{}, err } diff --git a/storage/memory_storage.go b/storage/memory/memory.go index b9ed54a..456049b 100644 --- a/storage/memory_storage.go +++ b/storage/memory/memory.go @@ -1,8 +1,9 @@ -package storage +package memory import ( "code.laria.me/petrific/config" "code.laria.me/petrific/objects" + "code.laria.me/petrific/storage" ) type MemoryStorage struct { @@ -10,21 +11,21 @@ type MemoryStorage struct { bytype map[objects.ObjectType][]objects.ObjectId } -func NewMemoryStorage() Storage { +func NewMemoryStorage() storage.Storage { return MemoryStorage{ objects: make(map[string][]byte), bytype: make(map[objects.ObjectType][]objects.ObjectId), } } -func MemoryStorageFromConfig(conf config.Config, name string) (Storage, error) { +func MemoryStorageFromConfig(conf config.Config, name string) (storage.Storage, error) { return NewMemoryStorage(), nil } func (ms MemoryStorage) Get(id objects.ObjectId) ([]byte, error) { b, ok := ms.objects[id.String()] if !ok { - return nil, ObjectNotFound + return nil, storage.ObjectNotFound } return b, nil } diff --git a/storage/registry/registry.go b/storage/registry/registry.go index dec7c32..ad66c6a 100644 --- a/storage/registry/registry.go +++ b/storage/registry/registry.go @@ -1,13 +1,67 @@ package registry import ( + "code.laria.me/petrific/config" "code.laria.me/petrific/storage" "code.laria.me/petrific/storage/cloud" + "code.laria.me/petrific/storage/local" + "code.laria.me/petrific/storage/memory" + "errors" + "fmt" ) // List af all available storage types var StorageTypes = map[string]storage.CreateStorageFromConfig{ - "local": storage.LocalStorageFromConfig, - "memory": storage.MemoryStorageFromConfig, + "local": local.LocalStorageFromConfig, + "memory": memory.MemoryStorageFromConfig, "openstack-swift": cloud.SwiftStorageCreator(), } + +var notFoundErr = errors.New("Storage not found") + +type unknownMethodErr string + +func (method unknownMethodErr) Error() string { + return fmt.Sprintf("Method %s unknown", string(method)) +} + +type storageConfErr struct { + name string + err error +} + +func (e storageConfErr) Error() string { + return fmt.Sprintf("Failed setting up storage %s: %s", e.name, e.err.Error()) +} + +func loadStorage(conf config.Config, storageName string) (storage.Storage, error) { + storageOptions, ok := conf.Storage[storageName] + if !ok { + return nil, notFoundErr + } + + var method string + if err := storageOptions.Get("method", &method); err != nil { + return nil, err + } + + st, ok := StorageTypes[method] + if !ok { + return nil, unknownMethodErr(method) + } + + s, err := st(conf, storageName) + if err != nil { + return nil, err + } + + return s, nil +} + +func LoadStorage(conf config.Config, storageName string) (storage.Storage, error) { + s, err := loadStorage(conf, storageName) + if err != nil { + return nil, storageConfErr{storageName, err} + } + return s, nil +} |