You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

82 lines
1.9 KiB

package topology
import (
"fmt"
"testing"
"github.com/seaweedfs/seaweedfs/weed/pb/master_pb"
)
func TestGetDisksWithEffectiveCapacityNotCappedAtTenByLoad(t *testing.T) {
t.Parallel()
activeTopology := NewActiveTopology(0)
if err := activeTopology.UpdateTopology(singleDiskTopologyInfoForCapacityTest()); err != nil {
t.Fatalf("UpdateTopology: %v", err)
}
const pendingTasks = 32
for i := 0; i < pendingTasks; i++ {
taskID := fmt.Sprintf("ec-capacity-%d", i)
err := activeTopology.AddPendingTask(TaskSpec{
TaskID: taskID,
TaskType: TaskTypeErasureCoding,
VolumeID: uint32(i + 1),
VolumeSize: 1,
Sources: []TaskSourceSpec{
{
ServerID: "node-a",
DiskID: 0,
StorageImpact: &StorageSlotChange{},
},
},
Destinations: []TaskDestinationSpec{
{
ServerID: "node-a",
DiskID: 0,
StorageImpact: &StorageSlotChange{},
},
},
})
if err != nil {
t.Fatalf("AddPendingTask(%s): %v", taskID, err)
}
}
disks := activeTopology.GetDisksWithEffectiveCapacity(TaskTypeErasureCoding, "", 1)
if len(disks) != 1 {
t.Fatalf("expected disk to remain available after %d pending tasks, got %d", pendingTasks, len(disks))
}
if disks[0].LoadCount != pendingTasks {
t.Fatalf("unexpected load count: got=%d want=%d", disks[0].LoadCount, pendingTasks)
}
}
func singleDiskTopologyInfoForCapacityTest() *master_pb.TopologyInfo {
return &master_pb.TopologyInfo{
Id: "topology-test",
DataCenterInfos: []*master_pb.DataCenterInfo{
{
Id: "dc1",
RackInfos: []*master_pb.RackInfo{
{
Id: "rack1",
DataNodeInfos: []*master_pb.DataNodeInfo{
{
Id: "node-a",
DiskInfos: map[string]*master_pb.DiskInfo{
"hdd": {
DiskId: 0,
Type: "hdd",
VolumeCount: 0,
MaxVolumeCount: 1000,
},
},
},
},
},
},
},
},
}
}