aboutsummaryrefslogtreecommitdiff
path: root/weed/filer/remote_mapping.go
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2021-09-04 05:09:38 -0700
committerChris Lu <chris.lu@gmail.com>2021-09-04 05:09:38 -0700
commitc3db389e4249f2ab923b6d27fb61d69acc358e1b (patch)
treebbade90c0a861b716d3e4afa8fe26150fab99387 /weed/filer/remote_mapping.go
parente9ce0994537b58a3cc0f88098d9352c18b01ec96 (diff)
downloadseaweedfs-c3db389e4249f2ab923b6d27fb61d69acc358e1b.tar.xz
seaweedfs-c3db389e4249f2ab923b6d27fb61d69acc358e1b.zip
refactor
Diffstat (limited to 'weed/filer/remote_mapping.go')
-rw-r--r--weed/filer/remote_mapping.go66
1 files changed, 65 insertions, 1 deletions
diff --git a/weed/filer/remote_mapping.go b/weed/filer/remote_mapping.go
index c23a60422..96cb6e1e0 100644
--- a/weed/filer/remote_mapping.go
+++ b/weed/filer/remote_mapping.go
@@ -4,6 +4,7 @@ import (
"fmt"
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
"github.com/chrislusf/seaweedfs/weed/pb/remote_pb"
+ "github.com/golang/protobuf/proto"
)
func SaveMountMapping(filerClient filer_pb.FilerClient, dir string, remoteStorageLocation *remote_pb.RemoteStorageLocation) (err error) {
@@ -35,4 +36,67 @@ func SaveMountMapping(filerClient filer_pb.FilerClient, dir string, remoteStorag
}
return nil
-} \ No newline at end of file
+}
+
+func DeleteMountMapping(filerClient filer_pb.FilerClient, dir string) (err error) {
+
+ // read current mapping
+ var oldContent, newContent []byte
+ err = filerClient.WithFilerClient(func(client filer_pb.SeaweedFilerClient) error {
+ oldContent, err = ReadInsideFiler(client, DirectoryEtcRemote, REMOTE_STORAGE_MOUNT_FILE)
+ return err
+ })
+ if err != nil {
+ if err != filer_pb.ErrNotFound {
+ return fmt.Errorf("read existing mapping: %v", err)
+ }
+ }
+
+ // add new mapping
+ newContent, err = RemoveRemoteStorageMapping(oldContent, dir)
+ if err != nil {
+ return fmt.Errorf("delete mount %s: %v", dir, err)
+ }
+
+ // save back
+ err = filerClient.WithFilerClient(func(client filer_pb.SeaweedFilerClient) error {
+ return SaveInsideFiler(client, DirectoryEtcRemote, REMOTE_STORAGE_MOUNT_FILE, newContent)
+ })
+ if err != nil {
+ return fmt.Errorf("save mapping: %v", err)
+ }
+
+ return nil
+}
+
+func AddRemoteStorageMapping(oldContent []byte, dir string, storageLocation *remote_pb.RemoteStorageLocation) (newContent []byte, err error) {
+ mappings, unmarshalErr := UnmarshalRemoteStorageMappings(oldContent)
+ if unmarshalErr != nil {
+ // skip
+ }
+
+ // set the new mapping
+ mappings.Mappings[dir] = storageLocation
+
+ if newContent, err = proto.Marshal(mappings); err != nil {
+ return oldContent, fmt.Errorf("marshal mappings: %v", err)
+ }
+
+ return
+}
+
+func RemoveRemoteStorageMapping(oldContent []byte, dir string) (newContent []byte, err error) {
+ mappings, unmarshalErr := UnmarshalRemoteStorageMappings(oldContent)
+ if unmarshalErr != nil {
+ return nil, unmarshalErr
+ }
+
+ // set the new mapping
+ delete(mappings.Mappings, dir)
+
+ if newContent, err = proto.Marshal(mappings); err != nil {
+ return oldContent, fmt.Errorf("marshal mappings: %v", err)
+ }
+
+ return
+}