remote.cache remote.uncache supports all mounted directories

This commit is contained in:
Chris Lu 2021-09-05 14:47:06 -07:00
parent 28f45f8fa6
commit 57a95887d2
2 changed files with 46 additions and 21 deletions

View file

@ -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

View file

@ -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