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
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,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
}
|