aboutsummaryrefslogtreecommitdiff
path: root/weed/filer
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2021-07-26 22:53:44 -0700
committerChris Lu <chris.lu@gmail.com>2021-07-26 22:53:44 -0700
commit99b599aa8a674ccd584d612e8e871fdca7670620 (patch)
treee2d16070d21c4ecfa68509b095d21c7232b348fa /weed/filer
parent35f70c51b0ff1ca71fec6c0194086329ef9e3e86 (diff)
downloadseaweedfs-99b599aa8a674ccd584d612e8e871fdca7670620.tar.xz
seaweedfs-99b599aa8a674ccd584d612e8e871fdca7670620.zip
remote.mount
Diffstat (limited to 'weed/filer')
-rw-r--r--weed/filer/entry.go6
-rw-r--r--weed/filer/filer_remote_storage.go47
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
+}