From 60573fd3e29d83a296dd58fed960cb3d13c20dda Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 5 Sep 2021 11:55:52 -0700 Subject: [PATCH] option to map remote bucket to trimmed bucket name --- weed/command/filer_remote_sync_buckets.go | 4 ++++ weed/shell/command_remote_mount.go | 6 ++++-- weed/shell/command_remote_mount_buckets.go | 13 ++++++++++++- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/weed/command/filer_remote_sync_buckets.go b/weed/command/filer_remote_sync_buckets.go index 4059fd228..92383614b 100644 --- a/weed/command/filer_remote_sync_buckets.go +++ b/weed/command/filer_remote_sync_buckets.go @@ -47,6 +47,10 @@ func (option *RemoteSyncOptions) makeBucketedEventProcessor(filerSource *source. if !entry.IsDirectory { return nil } + if entry.RemoteEntry != nil { + // this directory is imported from "remote.mount.buckets" or "remote.mount" + return nil + } remoteConf, found := option.remoteConfs[*option.createBucketAt] if !found { return fmt.Errorf("un-configured remote storage %s", *option.createBucketAt) diff --git a/weed/shell/command_remote_mount.go b/weed/shell/command_remote_mount.go index 8e12ae3d5..c2d9ec6ba 100644 --- a/weed/shell/command_remote_mount.go +++ b/weed/shell/command_remote_mount.go @@ -124,7 +124,7 @@ func syncMetadata(commandEnv *CommandEnv, writer io.Writer, dir string, nonEmpty Name: name, }) if lookupErr != nil { - if !strings.Contains(lookupErr.Error(), filer_pb.ErrNotFound.Error()) { + if strings.Contains(lookupErr.Error(), filer_pb.ErrNotFound.Error()) { _, createErr := client.CreateEntry(context.Background(), &filer_pb.CreateEntryRequest{ Directory: parent, Entry: &filer_pb.Entry{ @@ -135,6 +135,9 @@ func syncMetadata(commandEnv *CommandEnv, writer io.Writer, dir string, nonEmpty Crtime: time.Now().Unix(), FileMode: uint32(0644 | os.ModeDir), }, + RemoteEntry: &filer_pb.RemoteEntry{ + StorageName: remoteConf.Name, + }, }, }) return createErr @@ -171,7 +174,6 @@ func syncMetadata(commandEnv *CommandEnv, writer io.Writer, dir string, nonEmpty return nil } - // if an entry has synchronized metadata but has not synchronized content // entry.Attributes.FileSize == entry.RemoteEntry.RemoteSize // entry.Attributes.Mtime == entry.RemoteEntry.RemoteMtime diff --git a/weed/shell/command_remote_mount_buckets.go b/weed/shell/command_remote_mount_buckets.go index f95143dfd..08a0903f7 100644 --- a/weed/shell/command_remote_mount_buckets.go +++ b/weed/shell/command_remote_mount_buckets.go @@ -9,6 +9,7 @@ import ( "github.com/chrislusf/seaweedfs/weed/util" "io" "path/filepath" + "regexp" ) func init() { @@ -43,6 +44,7 @@ func (c *commandRemoteMountBuckets) Do(args []string, commandEnv *CommandEnv, wr remote := remoteMountBucketsCommand.String("remote", "", "a already configured storage name") bucketPattern := remoteMountBucketsCommand.String("bucketPattern", "", "match existing bucket name with wildcard characters '*' and '?'") + trimBucketSuffix := remoteMountBucketsCommand.Bool("trimBucketSuffix", false, "remote suffix auto generated by 'weed filer.remote.sync'") apply := remoteMountBucketsCommand.Bool("apply", false, "apply the mount for listed buckets") if err = remoteMountBucketsCommand.Parse(args); err != nil { @@ -76,6 +78,8 @@ func (c *commandRemoteMountBuckets) Do(args []string, commandEnv *CommandEnv, wr return fmt.Errorf("read filer buckets path: %v", err) } + hasSuffixPattern, _ := regexp.Compile(".+-[0-9][0-9][0-9][0-9]") + for _, bucket := range buckets { if *bucketPattern != "" { if matched, _ := filepath.Match(*bucketPattern, bucket.Name); !matched { @@ -84,9 +88,16 @@ func (c *commandRemoteMountBuckets) Do(args []string, commandEnv *CommandEnv, wr } fmt.Fprintf(writer, "bucket %s\n", bucket.Name) + localBucketName := bucket.Name + if *trimBucketSuffix { + if hasSuffixPattern.MatchString(localBucketName) { + localBucketName = localBucketName[:len(localBucketName)-5] + fmt.Fprintf(writer, " mount bucket %s as %s\n", bucket.Name, localBucketName) + } + } if *apply { - dir := util.FullPath(fillerBucketsPath).Child(bucket.Name) + dir := util.FullPath(fillerBucketsPath).Child(localBucketName) remoteStorageLocation := &remote_pb.RemoteStorageLocation{ Name: *remote, Bucket: bucket.Name,