mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-01-19 02:48:24 +00:00
refactor
This commit is contained in:
parent
e9ce099453
commit
c3db389e42
|
@ -4,6 +4,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
|
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
|
||||||
"github.com/chrislusf/seaweedfs/weed/pb/remote_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) {
|
func SaveMountMapping(filerClient filer_pb.FilerClient, dir string, remoteStorageLocation *remote_pb.RemoteStorageLocation) (err error) {
|
||||||
|
@ -36,3 +37,66 @@ func SaveMountMapping(filerClient filer_pb.FilerClient, dir string, remoteStorag
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
|
@ -131,38 +131,6 @@ func UnmarshalRemoteStorageMappings(oldContent []byte) (mappings *remote_pb.Remo
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
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
|
|
||||||
}
|
|
||||||
|
|
||||||
func ReadMountMappings(grpcDialOption grpc.DialOption, filerAddress string) (mappings *remote_pb.RemoteStorageMapping, readErr error) {
|
func ReadMountMappings(grpcDialOption grpc.DialOption, filerAddress string) (mappings *remote_pb.RemoteStorageMapping, readErr error) {
|
||||||
var oldContent []byte
|
var oldContent []byte
|
||||||
if readErr = pb.WithFilerClient(filerAddress, grpcDialOption, func(client filer_pb.SeaweedFilerClient) error {
|
if readErr = pb.WithFilerClient(filerAddress, grpcDialOption, func(client filer_pb.SeaweedFilerClient) error {
|
||||||
|
|
|
@ -62,7 +62,7 @@ func (c *commandRemoteUnmount) Do(args []string, commandEnv *CommandEnv, writer
|
||||||
|
|
||||||
// store a mount configuration in filer
|
// store a mount configuration in filer
|
||||||
fmt.Fprintf(writer, "deleting mount for %s ...\n", *dir)
|
fmt.Fprintf(writer, "deleting mount for %s ...\n", *dir)
|
||||||
if err = c.deleteMountMapping(commandEnv, *dir); err != nil {
|
if err = filer.DeleteMountMapping(commandEnv, *dir); err != nil {
|
||||||
return fmt.Errorf("delete mount mapping: %v", err)
|
return fmt.Errorf("delete mount mapping: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,33 +119,3 @@ func (c *commandRemoteUnmount) purgeMountedData(commandEnv *CommandEnv, dir stri
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *commandRemoteUnmount) deleteMountMapping(commandEnv *CommandEnv, dir string) (err error) {
|
|
||||||
|
|
||||||
// read current mapping
|
|
||||||
var oldContent, newContent []byte
|
|
||||||
err = commandEnv.WithFilerClient(func(client filer_pb.SeaweedFilerClient) error {
|
|
||||||
oldContent, err = filer.ReadInsideFiler(client, filer.DirectoryEtcRemote, filer.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 = filer.RemoveRemoteStorageMapping(oldContent, dir)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("delete mount %s: %v", dir, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// save back
|
|
||||||
err = commandEnv.WithFilerClient(func(client filer_pb.SeaweedFilerClient) error {
|
|
||||||
return filer.SaveInsideFiler(client, filer.DirectoryEtcRemote, filer.REMOTE_STORAGE_MOUNT_FILE, newContent)
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("save mapping: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in a new issue