mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-01-19 02:48:24 +00:00
remote.cache remote.uncache supports all mounted directories
This commit is contained in:
parent
28f45f8fa6
commit
57a95887d2
|
@ -50,7 +50,7 @@ func (c *commandRemoteCache) Do(args []string, commandEnv *CommandEnv, writer io
|
||||||
|
|
||||||
remoteMountCommand := flag.NewFlagSet(c.Name(), flag.ContinueOnError)
|
remoteMountCommand := flag.NewFlagSet(c.Name(), flag.ContinueOnError)
|
||||||
|
|
||||||
dir := remoteMountCommand.String("dir", "", "a directory in filer")
|
dir := remoteMountCommand.String("dir", "", "a mounted directory or one of its sub folders in filer")
|
||||||
concurrency := remoteMountCommand.Int("concurrent", 32, "concurrent file downloading")
|
concurrency := remoteMountCommand.Int("concurrent", 32, "concurrent file downloading")
|
||||||
fileFiler := newFileFilter(remoteMountCommand)
|
fileFiler := newFileFilter(remoteMountCommand)
|
||||||
|
|
||||||
|
@ -58,15 +58,37 @@ func (c *commandRemoteCache) Do(args []string, commandEnv *CommandEnv, writer io
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
mappings, localMountedDir, remoteStorageMountedLocation, remoteStorageConf, detectErr := detectMountInfo(commandEnv, writer, *dir)
|
if *dir != "" {
|
||||||
|
if err := c.doCacheOneDirectory(commandEnv, writer, *dir, fileFiler, *concurrency); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
mappings, err := filer.ReadMountMappings(commandEnv.option.GrpcDialOption, commandEnv.option.FilerAddress)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
for key, _ := range mappings.Mappings {
|
||||||
|
if err := c.doCacheOneDirectory(commandEnv, writer, key, fileFiler, *concurrency); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *commandRemoteCache) doCacheOneDirectory(commandEnv *CommandEnv, writer io.Writer, dir string, fileFiler *FileFilter, concurrency int) (error) {
|
||||||
|
mappings, localMountedDir, remoteStorageMountedLocation, remoteStorageConf, detectErr := detectMountInfo(commandEnv, writer, dir)
|
||||||
if detectErr != nil {
|
if detectErr != nil {
|
||||||
jsonPrintln(writer, mappings)
|
jsonPrintln(writer, mappings)
|
||||||
return detectErr
|
return detectErr
|
||||||
}
|
}
|
||||||
|
|
||||||
// pull content from remote
|
// pull content from remote
|
||||||
if err = c.cacheContentData(commandEnv, writer, util.FullPath(localMountedDir), remoteStorageMountedLocation, util.FullPath(*dir), fileFiler, remoteStorageConf, *concurrency); err != nil {
|
if err := c.cacheContentData(commandEnv, writer, util.FullPath(localMountedDir), remoteStorageMountedLocation, util.FullPath(dir), fileFiler, remoteStorageConf, concurrency); err != nil {
|
||||||
return fmt.Errorf("cache content data: %v", err)
|
return fmt.Errorf("cache content data on %s: %v", localMountedDir, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -54,27 +54,30 @@ func (c *commandRemoteUncache) Do(args []string, commandEnv *CommandEnv, writer
|
||||||
if listErr != nil {
|
if listErr != nil {
|
||||||
return listErr
|
return listErr
|
||||||
}
|
}
|
||||||
if *dir == "" {
|
if *dir != "" {
|
||||||
jsonPrintln(writer, mappings)
|
var localMountedDir string
|
||||||
fmt.Fprintln(writer, "need to specify '-dir' option")
|
for k := range mappings.Mappings {
|
||||||
return nil
|
if strings.HasPrefix(*dir, k) {
|
||||||
}
|
localMountedDir = k
|
||||||
|
}
|
||||||
var localMountedDir string
|
}
|
||||||
for k := range mappings.Mappings {
|
if localMountedDir == "" {
|
||||||
if strings.HasPrefix(*dir, k) {
|
jsonPrintln(writer, mappings)
|
||||||
localMountedDir = k
|
fmt.Fprintf(writer, "%s is not mounted\n", *dir)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// pull content from remote
|
||||||
|
if err = c.uncacheContentData(commandEnv, writer, util.FullPath(*dir), fileFiler); err != nil {
|
||||||
|
return fmt.Errorf("uncache content data: %v", err)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if localMountedDir == "" {
|
|
||||||
jsonPrintln(writer, mappings)
|
|
||||||
fmt.Fprintf(writer, "%s is not mounted\n", *dir)
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// pull content from remote
|
for key, _ := range mappings.Mappings {
|
||||||
if err = c.uncacheContentData(commandEnv, writer, util.FullPath(*dir), fileFiler); err != nil {
|
if err := c.uncacheContentData(commandEnv, writer, util.FullPath(key), fileFiler); err != nil {
|
||||||
return fmt.Errorf("uncache content data: %v", err)
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
Loading…
Reference in a new issue