Browse Source

Support filtering source disk type in volume.tier.upload (#6868)

pull/6871/head
NyaMisty 4 months ago
committed by GitHub
parent
commit
f894e7b7a5
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 8
      weed/shell/command_ec_encode.go
  2. 10
      weed/shell/command_volume_tier_upload.go

8
weed/shell/command_ec_encode.go

@ -4,6 +4,7 @@ import (
"context" "context"
"flag" "flag"
"fmt" "fmt"
"github.com/seaweedfs/seaweedfs/weed/storage/types"
"io" "io"
"time" "time"
@ -107,7 +108,7 @@ func (c *commandEcEncode) Do(args []string, commandEnv *CommandEnv, writer io.Wr
balanceCollections = collectCollectionsForVolumeIds(topologyInfo, volumeIds) balanceCollections = collectCollectionsForVolumeIds(topologyInfo, volumeIds)
} else { } else {
// apply to all volumes for the given collection // 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 { if err != nil {
return err 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 // collect topology information
topologyInfo, volumeSizeLimitMb, err := collectTopologyInfo(commandEnv, 0) topologyInfo, volumeSizeLimitMb, err := collectTopologyInfo(commandEnv, 0)
if err != nil { if err != nil {
@ -270,7 +271,8 @@ func collectVolumeIdsForEcEncode(commandEnv *CommandEnv, selectedCollection stri
if v.RemoteStorageName != "" && v.RemoteStorageKey != "" { if v.RemoteStorageName != "" && v.RemoteStorageKey != "" {
continue 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 float64(v.Size) > fullPercentage/100*float64(volumeSizeLimitMb)*1024*1024 {
if good, found := vidMap[v.Id]; found { if good, found := vidMap[v.Id]; found {
if good { if good {

10
weed/shell/command_volume_tier_upload.go

@ -4,6 +4,7 @@ import (
"context" "context"
"flag" "flag"
"fmt" "fmt"
"github.com/seaweedfs/seaweedfs/weed/storage/types"
"io" "io"
"time" "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") quietPeriod := tierCommand.Duration("quietFor", 24*time.Hour, "select volumes without no writes for this period")
dest := tierCommand.String("dest", "", "the target tier name") dest := tierCommand.String("dest", "", "the target tier name")
keepLocalDatFile := tierCommand.Bool("keepLocalDatFile", false, "whether keep local dat file") keepLocalDatFile := tierCommand.Bool("keepLocalDatFile", false, "whether keep local dat file")
disk := tierCommand.String("disk", "", "[hdd|ssd|<tag>] hard drive or solid state drive or any tag")
if err = tierCommand.Parse(args); err != nil { if err = tierCommand.Parse(args); err != nil {
return nil return nil
} }
@ -84,9 +86,15 @@ func (c *commandVolumeTierUpload) Do(args []string, commandEnv *CommandEnv, writ
return doVolumeTierUpload(commandEnv, writer, *collection, vid, *dest, *keepLocalDatFile) 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 // apply to all volumes in the collection
// reusing collectVolumeIdsForEcEncode for now // reusing collectVolumeIdsForEcEncode for now
volumeIds, err := collectVolumeIdsForEcEncode(commandEnv, *collection, *fullPercentage, *quietPeriod)
volumeIds, err := collectVolumeIdsForEcEncode(commandEnv, *collection, diskType, *fullPercentage, *quietPeriod)
if err != nil { if err != nil {
return err return err
} }

Loading…
Cancel
Save