diff options
| author | Chris Lu <chris.lu@gmail.com> | 2021-07-26 22:53:44 -0700 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2021-07-26 22:53:44 -0700 |
| commit | 99b599aa8a674ccd584d612e8e871fdca7670620 (patch) | |
| tree | e2d16070d21c4ecfa68509b095d21c7232b348fa /weed/filer | |
| parent | 35f70c51b0ff1ca71fec6c0194086329ef9e3e86 (diff) | |
| download | seaweedfs-99b599aa8a674ccd584d612e8e871fdca7670620.tar.xz seaweedfs-99b599aa8a674ccd584d612e8e871fdca7670620.zip | |
remote.mount
Diffstat (limited to 'weed/filer')
| -rw-r--r-- | weed/filer/entry.go | 6 | ||||
| -rw-r--r-- | weed/filer/filer_remote_storage.go | 47 |
2 files changed, 50 insertions, 3 deletions
diff --git a/weed/filer/entry.go b/weed/filer/entry.go index ede58a384..7673365fb 100644 --- a/weed/filer/entry.go +++ b/weed/filer/entry.go @@ -42,7 +42,7 @@ type Entry struct { HardLinkId HardLinkId HardLinkCounter int32 Content []byte - Remote *filer_pb.Entry_Remote + Remote *filer_pb.RemoteEntry } func (entry *Entry) Size() uint64 { @@ -78,7 +78,7 @@ func (entry *Entry) ToExistingProtoEntry(message *filer_pb.Entry) { message.HardLinkId = entry.HardLinkId message.HardLinkCounter = entry.HardLinkCounter message.Content = entry.Content - message.Remote = entry.Remote + message.RemoteEntry = entry.Remote } func FromPbEntryToExistingEntry(message *filer_pb.Entry, fsEntry *Entry) { @@ -88,7 +88,7 @@ func FromPbEntryToExistingEntry(message *filer_pb.Entry, fsEntry *Entry) { fsEntry.HardLinkId = HardLinkId(message.HardLinkId) fsEntry.HardLinkCounter = message.HardLinkCounter fsEntry.Content = message.Content - fsEntry.Remote = message.Remote + fsEntry.Remote = message.RemoteEntry } func (entry *Entry) ToProtoFullEntry() *filer_pb.FullEntry { diff --git a/weed/filer/filer_remote_storage.go b/weed/filer/filer_remote_storage.go new file mode 100644 index 000000000..8b136a763 --- /dev/null +++ b/weed/filer/filer_remote_storage.go @@ -0,0 +1,47 @@ +package filer + +import ( + "bytes" + "context" + "fmt" + "github.com/golang/protobuf/proto" + "io" + "math" + + "github.com/chrislusf/seaweedfs/weed/glog" + "github.com/chrislusf/seaweedfs/weed/pb/filer_pb" + "github.com/chrislusf/seaweedfs/weed/util" + "github.com/golang/protobuf/jsonpb" + "github.com/viant/ptrie" +) + +type FilerRemoteStorage struct { + rules ptrie.Trie +} + +func NewFilerRemoteStorage() (fc *FilerRemoteStorage) { + fc = &FilerRemoteStorage{ + rules: ptrie.New(), + } + return fc +} + +func (fc *FilerRemoteStorage) loadFromFiler(filer *Filer) (err error) { + entries, _, err := filer.ListDirectoryEntries(context.Background(), DirectoryEtcRemote, "", false, math.MaxInt64, "", "", "") + if err != nil { + if err == filer_pb.ErrNotFound { + return nil + } + glog.Errorf("read remote storage %s: %v", DirectoryEtcRemote, err) + return + } + + for _, entry := range entries { + conf := &filer_pb.RemoteConf{} + if err := proto.Unmarshal(entry.Content, conf); err != nil { + return fmt.Errorf("unmarshal %s/%s: %v", DirectoryEtcRemote, entry.Name, err) + } + fc.MountRemoteStorage(dir, conf) + } + return nil +} |
