mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-09-26 18:04:33 +00:00
ec: dynamically discover disk types from topology for evacuation
Disk types are free-form tags (e.g., 'ssd', 'nvme', 'archive') that come from the topology, not a hardcoded set. Only 'hdd' (or empty) is the default disk type. Use collectVolumeDiskTypes() to discover all disk types present in the cluster topology instead of hardcoding [HardDriveType, SsdType].
This commit is contained in:
@@ -1282,7 +1282,7 @@ func TestECDiskTypeSupport(t *testing.T) {
|
||||
args := []string{
|
||||
"-collection", "ssd_test",
|
||||
"-sourceDiskType", "ssd", // Filter source volumes by SSD
|
||||
"-diskType", "ssd", // Place EC shards on SSD
|
||||
"-diskType", "ssd", // Place EC shards on SSD
|
||||
"-force",
|
||||
}
|
||||
|
||||
|
||||
@@ -156,12 +156,13 @@ func (c *commandVolumeServerEvacuate) evacuateNormalVolumes(commandEnv *CommandE
|
||||
}
|
||||
|
||||
func (c *commandVolumeServerEvacuate) evacuateEcVolumes(commandEnv *CommandEnv, volumeServer string, skipNonMoveable, applyChange bool, writer io.Writer) error {
|
||||
// Evacuate EC volumes for all disk types
|
||||
// Evacuate EC volumes for all disk types discovered from topology
|
||||
// Disk types are free-form tags (e.g., "", "hdd", "ssd", "nvme", etc.)
|
||||
// We need to handle each disk type separately because shards should be moved to nodes with the same disk type
|
||||
// We collect topology once at the start and track capacity changes ourselves
|
||||
// (via freeEcSlot decrement after each move) rather than repeatedly refreshing,
|
||||
// which would give a false sense of correctness since topology could be stale.
|
||||
diskTypes := []types.DiskType{types.HardDriveType, types.SsdType}
|
||||
diskTypes := collectVolumeDiskTypes(c.topologyInfo)
|
||||
|
||||
for _, diskType := range diskTypes {
|
||||
ecNodes, _ := collectEcVolumeServersByDc(c.topologyInfo, "", diskType)
|
||||
|
||||
Reference in New Issue
Block a user