diff --git a/weed/shell/command_ec_encode.go b/weed/shell/command_ec_encode.go index db2fac469..ebdd95b71 100644 --- a/weed/shell/command_ec_encode.go +++ b/weed/shell/command_ec_encode.go @@ -4,6 +4,7 @@ import ( "context" "flag" "fmt" + "github.com/seaweedfs/seaweedfs/weed/storage/types" "io" "time" @@ -107,7 +108,7 @@ func (c *commandEcEncode) Do(args []string, commandEnv *CommandEnv, writer io.Wr balanceCollections = collectCollectionsForVolumeIds(topologyInfo, volumeIds) } else { // apply to all volumes for the given collection - volumeIds, err = collectVolumeIdsForEcEncode(commandEnv, *collection, *fullPercentage, *quietPeriod) + volumeIds, err = collectVolumeIdsForEcEncode(commandEnv, *collection, nil, *fullPercentage, *quietPeriod) if err != nil { return err } @@ -250,7 +251,7 @@ func generateEcShards(grpcDialOption grpc.DialOption, volumeId needle.VolumeId, } -func collectVolumeIdsForEcEncode(commandEnv *CommandEnv, selectedCollection string, fullPercentage float64, quietPeriod time.Duration) (vids []needle.VolumeId, err error) { +func collectVolumeIdsForEcEncode(commandEnv *CommandEnv, selectedCollection string, sourceDiskType *types.DiskType, fullPercentage float64, quietPeriod time.Duration) (vids []needle.VolumeId, err error) { // collect topology information topologyInfo, volumeSizeLimitMb, err := collectTopologyInfo(commandEnv, 0) if err != nil { @@ -270,7 +271,8 @@ func collectVolumeIdsForEcEncode(commandEnv *CommandEnv, selectedCollection stri if v.RemoteStorageName != "" && v.RemoteStorageKey != "" { continue } - if v.Collection == selectedCollection && v.ModifiedAtSecond+quietSeconds < nowUnixSeconds { + if v.Collection == selectedCollection && v.ModifiedAtSecond+quietSeconds < nowUnixSeconds && + (sourceDiskType == nil || types.ToDiskType(v.DiskType) == *sourceDiskType) { if float64(v.Size) > fullPercentage/100*float64(volumeSizeLimitMb)*1024*1024 { if good, found := vidMap[v.Id]; found { if good { diff --git a/weed/shell/command_volume_tier_upload.go b/weed/shell/command_volume_tier_upload.go index 7eff20876..f53256c37 100644 --- a/weed/shell/command_volume_tier_upload.go +++ b/weed/shell/command_volume_tier_upload.go @@ -4,6 +4,7 @@ import ( "context" "flag" "fmt" + "github.com/seaweedfs/seaweedfs/weed/storage/types" "io" "time" @@ -69,6 +70,7 @@ func (c *commandVolumeTierUpload) Do(args []string, commandEnv *CommandEnv, writ quietPeriod := tierCommand.Duration("quietFor", 24*time.Hour, "select volumes without no writes for this period") dest := tierCommand.String("dest", "", "the target tier name") keepLocalDatFile := tierCommand.Bool("keepLocalDatFile", false, "whether keep local dat file") + disk := tierCommand.String("disk", "", "[hdd|ssd|] hard drive or solid state drive or any tag") if err = tierCommand.Parse(args); err != nil { return nil } @@ -84,9 +86,15 @@ func (c *commandVolumeTierUpload) Do(args []string, commandEnv *CommandEnv, writ return doVolumeTierUpload(commandEnv, writer, *collection, vid, *dest, *keepLocalDatFile) } + var diskType *types.DiskType + if disk != nil { + _diskType := types.ToDiskType(*disk) + diskType = &_diskType + } + // apply to all volumes in the collection // reusing collectVolumeIdsForEcEncode for now - volumeIds, err := collectVolumeIdsForEcEncode(commandEnv, *collection, *fullPercentage, *quietPeriod) + volumeIds, err := collectVolumeIdsForEcEncode(commandEnv, *collection, diskType, *fullPercentage, *quietPeriod) if err != nil { return err }