|
|
@@ -42,13 +42,25 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
public void testModelThatDoesNotFitInMemory() {
|
|
|
{ // Without perDeploymentMemory and perAllocationMemory specified
|
|
|
List<Node> nodes = List.of(new Node("n_1", scaleNodeSize(50), 4));
|
|
|
- Deployment deployment = new AssignmentPlan.Deployment("m_1", ByteSizeValue.ofMb(51).getBytes(), 4, 1, Map.of(), 0, null, 0, 0);
|
|
|
+ Deployment deployment = new AssignmentPlan.Deployment(
|
|
|
+ "m_1",
|
|
|
+ "m_1",
|
|
|
+ ByteSizeValue.ofMb(51).getBytes(),
|
|
|
+ 4,
|
|
|
+ 1,
|
|
|
+ Map.of(),
|
|
|
+ 0,
|
|
|
+ null,
|
|
|
+ 0,
|
|
|
+ 0
|
|
|
+ );
|
|
|
AssignmentPlan plan = new AssignmentPlanner(nodes, List.of(deployment)).computePlan();
|
|
|
assertThat(plan.assignments(deployment), isEmpty());
|
|
|
}
|
|
|
{ // With perDeploymentMemory and perAllocationMemory specified
|
|
|
List<Node> nodes = List.of(new Node("n_1", scaleNodeSize(55), 4));
|
|
|
Deployment deployment = new AssignmentPlan.Deployment(
|
|
|
+ "m_1",
|
|
|
"m_1",
|
|
|
ByteSizeValue.ofMb(50).getBytes(),
|
|
|
4,
|
|
|
@@ -66,7 +78,18 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
|
|
|
public void testModelWithThreadsPerAllocationNotFittingOnAnyNode() {
|
|
|
List<Node> nodes = List.of(new Node("n_1", scaleNodeSize(100), 4), new Node("n_2", scaleNodeSize(100), 5));
|
|
|
- Deployment deployment = new AssignmentPlan.Deployment("m_1", ByteSizeValue.ofMb(1).getBytes(), 1, 6, Map.of(), 0, null, 0, 0);
|
|
|
+ Deployment deployment = new AssignmentPlan.Deployment(
|
|
|
+ "m_1",
|
|
|
+ "m_1",
|
|
|
+ ByteSizeValue.ofMb(1).getBytes(),
|
|
|
+ 1,
|
|
|
+ 6,
|
|
|
+ Map.of(),
|
|
|
+ 0,
|
|
|
+ null,
|
|
|
+ 0,
|
|
|
+ 0
|
|
|
+ );
|
|
|
AssignmentPlan plan = new AssignmentPlanner(nodes, List.of(deployment)).computePlan();
|
|
|
assertThat(plan.assignments(deployment), isEmpty());
|
|
|
}
|
|
|
@@ -74,19 +97,31 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
public void testSingleModelThatFitsFullyOnSingleNode() {
|
|
|
{
|
|
|
Node node = new Node("n_1", scaleNodeSize(100), 4);
|
|
|
- Deployment deployment = new AssignmentPlan.Deployment("m_1", ByteSizeValue.ofMb(100).getBytes(), 1, 1, Map.of(), 0, null, 0, 0);
|
|
|
+ Deployment deployment = new AssignmentPlan.Deployment(
|
|
|
+ "m_1",
|
|
|
+ "m_1",
|
|
|
+ ByteSizeValue.ofMb(100).getBytes(),
|
|
|
+ 1,
|
|
|
+ 1,
|
|
|
+ Map.of(),
|
|
|
+ 0,
|
|
|
+ null,
|
|
|
+ 0,
|
|
|
+ 0
|
|
|
+ );
|
|
|
AssignmentPlan plan = new AssignmentPlanner(List.of(node), List.of(deployment)).computePlan();
|
|
|
assertModelFullyAssignedToNode(plan, deployment, node);
|
|
|
}
|
|
|
{
|
|
|
Node node = new Node("n_1", scaleNodeSize(1000), 8);
|
|
|
- Deployment deployment = new Deployment("m_1", ByteSizeValue.ofMb(1000).getBytes(), 8, 1, Map.of(), 0, null, 0, 0);
|
|
|
+ Deployment deployment = new Deployment("m_1", "m_1", ByteSizeValue.ofMb(1000).getBytes(), 8, 1, Map.of(), 0, null, 0, 0);
|
|
|
AssignmentPlan plan = new AssignmentPlanner(List.of(node), List.of(deployment)).computePlan();
|
|
|
assertModelFullyAssignedToNode(plan, deployment, node);
|
|
|
}
|
|
|
{
|
|
|
Node node = new Node("n_1", scaleNodeSize(10000), 16);
|
|
|
AssignmentPlan.Deployment deployment = new AssignmentPlan.Deployment(
|
|
|
+ "m_1",
|
|
|
"m_1",
|
|
|
ByteSizeValue.ofMb(10000).getBytes(),
|
|
|
1,
|
|
|
@@ -102,7 +137,18 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
}
|
|
|
{
|
|
|
Node node = new Node("n_1", scaleNodeSize(100), 4);
|
|
|
- Deployment deployment = new AssignmentPlan.Deployment("m_1", ByteSizeValue.ofMb(100).getBytes(), 1, 1, Map.of(), 0, null, 0, 0);
|
|
|
+ Deployment deployment = new AssignmentPlan.Deployment(
|
|
|
+ "m_1",
|
|
|
+ "m_1",
|
|
|
+ ByteSizeValue.ofMb(100).getBytes(),
|
|
|
+ 1,
|
|
|
+ 1,
|
|
|
+ Map.of(),
|
|
|
+ 0,
|
|
|
+ null,
|
|
|
+ 0,
|
|
|
+ 0
|
|
|
+ );
|
|
|
AssignmentPlan plan = new AssignmentPlanner(List.of(node), List.of(deployment)).computePlan();
|
|
|
assertModelFullyAssignedToNode(plan, deployment, node);
|
|
|
}
|
|
|
@@ -112,6 +158,7 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
{
|
|
|
Node node = new Node("n_1", ByteSizeValue.ofMb(500).getBytes(), 4);
|
|
|
Deployment deployment = new AssignmentPlan.Deployment(
|
|
|
+ "m_1",
|
|
|
"m_1",
|
|
|
ByteSizeValue.ofMb(100).getBytes(),
|
|
|
1,
|
|
|
@@ -128,6 +175,7 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
{
|
|
|
Node node = new Node("n_1", ByteSizeValue.ofMb(1000).getBytes(), 8);
|
|
|
Deployment deployment = new Deployment(
|
|
|
+ "m_1",
|
|
|
"m_1",
|
|
|
ByteSizeValue.ofMb(100).getBytes(),
|
|
|
8,
|
|
|
@@ -146,7 +194,18 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
public void testSingleModelThatFitsFullyOnSingleNode_GivenTwoNodes_ShouldBeFullyAssignedOnOneNode() {
|
|
|
Node node1 = new Node("n_1", scaleNodeSize(100), 4);
|
|
|
Node node2 = new Node("n_2", scaleNodeSize(100), 4);
|
|
|
- AssignmentPlan.Deployment deployment = new Deployment("m_1", ByteSizeValue.ofMb(100).getBytes(), 4, 1, Map.of(), 0, null, 0, 0);
|
|
|
+ AssignmentPlan.Deployment deployment = new Deployment(
|
|
|
+ "m_1",
|
|
|
+ "m_1",
|
|
|
+ ByteSizeValue.ofMb(100).getBytes(),
|
|
|
+ 4,
|
|
|
+ 1,
|
|
|
+ Map.of(),
|
|
|
+ 0,
|
|
|
+ null,
|
|
|
+ 0,
|
|
|
+ 0
|
|
|
+ );
|
|
|
|
|
|
AssignmentPlan plan = new AssignmentPlanner(List.of(node1, node2), List.of(deployment)).computePlan();
|
|
|
|
|
|
@@ -162,6 +221,7 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
Node node1 = new Node("n_1", ByteSizeValue.ofMb(1000).getBytes(), 4);
|
|
|
Node node2 = new Node("n_2", ByteSizeValue.ofMb(1000).getBytes(), 4);
|
|
|
AssignmentPlan.Deployment deployment = new Deployment(
|
|
|
+ "m_1",
|
|
|
"m_1",
|
|
|
ByteSizeValue.ofMb(100).getBytes(),
|
|
|
4,
|
|
|
@@ -184,7 +244,18 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
}
|
|
|
|
|
|
public void testModelWithMoreAllocationsThanAvailableCores_GivenSingleThreadPerAllocation() {
|
|
|
- AssignmentPlan.Deployment deployment = new Deployment("m_1", ByteSizeValue.ofMb(30).getBytes(), 10, 1, Map.of(), 0, null, 0, 0);
|
|
|
+ AssignmentPlan.Deployment deployment = new Deployment(
|
|
|
+ "m_1",
|
|
|
+ "m_1",
|
|
|
+ ByteSizeValue.ofMb(30).getBytes(),
|
|
|
+ 10,
|
|
|
+ 1,
|
|
|
+ Map.of(),
|
|
|
+ 0,
|
|
|
+ null,
|
|
|
+ 0,
|
|
|
+ 0
|
|
|
+ );
|
|
|
// Single node
|
|
|
{
|
|
|
Node node = new Node("n_1", scaleNodeSize(100), 4);
|
|
|
@@ -219,6 +290,7 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
|
|
|
public void testModelWithMoreAllocationsThanAvailableCores_GivenSingleThreadPerAllocation_NewMemoryFields() {
|
|
|
AssignmentPlan.Deployment deployment = new Deployment(
|
|
|
+ "m_1",
|
|
|
"m_1",
|
|
|
ByteSizeValue.ofMb(100).getBytes(),
|
|
|
10,
|
|
|
@@ -266,10 +338,10 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
Node node2 = new Node("n_2", 2 * scaleNodeSize(50), 7);
|
|
|
Node node3 = new Node("n_3", 2 * scaleNodeSize(50), 2);
|
|
|
Node node4 = new Node("n_4", 2 * scaleNodeSize(50), 2);
|
|
|
- Deployment deployment1 = new Deployment("m_1", ByteSizeValue.ofMb(50).getBytes(), 2, 4, Map.of(), 0, null, 0, 0);
|
|
|
- Deployment deployment2 = new Deployment("m_2", ByteSizeValue.ofMb(50).getBytes(), 2, 3, Map.of(), 0, null, 0, 0);
|
|
|
- Deployment deployment3 = new Deployment("m_3", ByteSizeValue.ofMb(50).getBytes(), 1, 2, Map.of(), 0, null, 0, 0);
|
|
|
- Deployment deployment4 = new Deployment("m_4", ByteSizeValue.ofMb(50).getBytes(), 2, 1, Map.of(), 0, null, 0, 0);
|
|
|
+ Deployment deployment1 = new Deployment("m_1", "m_1", ByteSizeValue.ofMb(50).getBytes(), 2, 4, Map.of(), 0, null, 0, 0);
|
|
|
+ Deployment deployment2 = new Deployment("m_2", "m_2", ByteSizeValue.ofMb(50).getBytes(), 2, 3, Map.of(), 0, null, 0, 0);
|
|
|
+ Deployment deployment3 = new Deployment("m_3", "m_3", ByteSizeValue.ofMb(50).getBytes(), 1, 2, Map.of(), 0, null, 0, 0);
|
|
|
+ Deployment deployment4 = new Deployment("m_4", "m_4", ByteSizeValue.ofMb(50).getBytes(), 2, 1, Map.of(), 0, null, 0, 0);
|
|
|
|
|
|
AssignmentPlan plan = new AssignmentPlanner(
|
|
|
List.of(node1, node2, node3, node4),
|
|
|
@@ -322,6 +394,7 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
Node node3 = new Node("n_3", ByteSizeValue.ofMb(900).getBytes(), 2);
|
|
|
Node node4 = new Node("n_4", ByteSizeValue.ofMb(900).getBytes(), 2);
|
|
|
Deployment deployment1 = new Deployment(
|
|
|
+ "m_1",
|
|
|
"m_1",
|
|
|
ByteSizeValue.ofMb(50).getBytes(),
|
|
|
2,
|
|
|
@@ -333,6 +406,7 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
ByteSizeValue.ofMb(50).getBytes()
|
|
|
);
|
|
|
Deployment deployment2 = new Deployment(
|
|
|
+ "m_2",
|
|
|
"m_2",
|
|
|
ByteSizeValue.ofMb(50).getBytes(),
|
|
|
2,
|
|
|
@@ -344,6 +418,7 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
ByteSizeValue.ofMb(50).getBytes()
|
|
|
);
|
|
|
Deployment deployment3 = new Deployment(
|
|
|
+ "m_3",
|
|
|
"m_3",
|
|
|
ByteSizeValue.ofMb(50).getBytes(),
|
|
|
1,
|
|
|
@@ -355,6 +430,7 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
ByteSizeValue.ofMb(50).getBytes()
|
|
|
);
|
|
|
Deployment deployment4 = new Deployment(
|
|
|
+ "m_4",
|
|
|
"m_4",
|
|
|
ByteSizeValue.ofMb(50).getBytes(),
|
|
|
2,
|
|
|
@@ -412,7 +488,18 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
}
|
|
|
|
|
|
public void testModelWithMoreAllocationsThanAvailableCores_GivenThreeThreadsPerAllocation() {
|
|
|
- Deployment deployment = new AssignmentPlan.Deployment("m_1", ByteSizeValue.ofMb(30).getBytes(), 10, 3, Map.of(), 0, null, 0, 0);
|
|
|
+ Deployment deployment = new AssignmentPlan.Deployment(
|
|
|
+ "m_1",
|
|
|
+ "m_1",
|
|
|
+ ByteSizeValue.ofMb(30).getBytes(),
|
|
|
+ 10,
|
|
|
+ 3,
|
|
|
+ Map.of(),
|
|
|
+ 0,
|
|
|
+ null,
|
|
|
+ 0,
|
|
|
+ 0
|
|
|
+ );
|
|
|
// Single node
|
|
|
{
|
|
|
Node node = new Node("n_1", scaleNodeSize(100), 4);
|
|
|
@@ -447,6 +534,7 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
|
|
|
public void testModelWithMoreAllocationsThanAvailableCores_GivenThreeThreadsPerAllocation_NewMemoryFields() {
|
|
|
Deployment deployment = new AssignmentPlan.Deployment(
|
|
|
+ "m_1",
|
|
|
"m_1",
|
|
|
ByteSizeValue.ofMb(50).getBytes(),
|
|
|
10,
|
|
|
@@ -492,6 +580,7 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
public void testModelWithPreviousAssignmentAndNoMoreCoresAvailable() {
|
|
|
Node node = new Node("n_1", scaleNodeSize(100), 4);
|
|
|
AssignmentPlan.Deployment deployment = new AssignmentPlan.Deployment(
|
|
|
+ "m_1",
|
|
|
"m_1",
|
|
|
ByteSizeValue.ofMb(30).getBytes(),
|
|
|
4,
|
|
|
@@ -518,18 +607,18 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
new Node("n_6", ByteSizeValue.ofGb(32).getBytes(), 16)
|
|
|
);
|
|
|
List<Deployment> deployments = List.of(
|
|
|
- new Deployment("m_1", ByteSizeValue.ofGb(4).getBytes(), 10, 1, Map.of("n_1", 5), 0, null, 0, 0),
|
|
|
- new AssignmentPlan.Deployment("m_2", ByteSizeValue.ofGb(2).getBytes(), 3, 1, Map.of("n_3", 2), 0, null, 0, 0),
|
|
|
- new AssignmentPlan.Deployment("m_3", ByteSizeValue.ofGb(3).getBytes(), 3, 1, Map.of(), 0, null, 0, 0),
|
|
|
- new Deployment("m_4", ByteSizeValue.ofGb(1).getBytes(), 4, 1, Map.of("n_3", 2), 0, null, 0, 0),
|
|
|
- new Deployment("m_5", ByteSizeValue.ofGb(6).getBytes(), 2, 1, Map.of(), 0, null, 0, 0),
|
|
|
- new Deployment("m_6", ByteSizeValue.ofGb(1).getBytes(), 12, 1, Map.of(), 0, null, 0, 0),
|
|
|
- new AssignmentPlan.Deployment("m_7", ByteSizeValue.ofGb(1).getBytes() / 2, 12, 1, Map.of("n_2", 6), 0, null, 0, 0),
|
|
|
- new Deployment("m_8", ByteSizeValue.ofGb(2).getBytes(), 4, 1, Map.of(), 0, null, 0, 0),
|
|
|
- new Deployment("m_9", ByteSizeValue.ofGb(1).getBytes(), 4, 1, Map.of(), 0, null, 0, 0),
|
|
|
- new AssignmentPlan.Deployment("m_10", ByteSizeValue.ofGb(7).getBytes(), 7, 1, Map.of(), 0, null, 0, 0),
|
|
|
- new Deployment("m_11", ByteSizeValue.ofGb(2).getBytes(), 3, 1, Map.of(), 0, null, 0, 0),
|
|
|
- new Deployment("m_12", ByteSizeValue.ofGb(1).getBytes(), 10, 1, Map.of(), 0, null, 0, 0)
|
|
|
+ new Deployment("m_1", "m_1", ByteSizeValue.ofGb(4).getBytes(), 10, 1, Map.of("n_1", 5), 0, null, 0, 0),
|
|
|
+ new AssignmentPlan.Deployment("m_2", "m_2", ByteSizeValue.ofGb(2).getBytes(), 3, 1, Map.of("n_3", 2), 0, null, 0, 0),
|
|
|
+ new AssignmentPlan.Deployment("m_3", "m_4", ByteSizeValue.ofGb(3).getBytes(), 3, 1, Map.of(), 0, null, 0, 0),
|
|
|
+ new Deployment("m_4", "m_4", ByteSizeValue.ofGb(1).getBytes(), 4, 1, Map.of("n_3", 2), 0, null, 0, 0),
|
|
|
+ new Deployment("m_5", "m_5", ByteSizeValue.ofGb(6).getBytes(), 2, 1, Map.of(), 0, null, 0, 0),
|
|
|
+ new Deployment("m_6", "m_6", ByteSizeValue.ofGb(1).getBytes(), 12, 1, Map.of(), 0, null, 0, 0),
|
|
|
+ new AssignmentPlan.Deployment("m_7", "m_7", ByteSizeValue.ofGb(1).getBytes() / 2, 12, 1, Map.of("n_2", 6), 0, null, 0, 0),
|
|
|
+ new Deployment("m_8", "m_8", ByteSizeValue.ofGb(2).getBytes(), 4, 1, Map.of(), 0, null, 0, 0),
|
|
|
+ new Deployment("m_9", "m_9", ByteSizeValue.ofGb(1).getBytes(), 4, 1, Map.of(), 0, null, 0, 0),
|
|
|
+ new AssignmentPlan.Deployment("m_10", "m_10", ByteSizeValue.ofGb(7).getBytes(), 7, 1, Map.of(), 0, null, 0, 0),
|
|
|
+ new Deployment("m_11", "m_11", ByteSizeValue.ofGb(2).getBytes(), 3, 1, Map.of(), 0, null, 0, 0),
|
|
|
+ new Deployment("m_12", "m_12", ByteSizeValue.ofGb(1).getBytes(), 10, 1, Map.of(), 0, null, 0, 0)
|
|
|
);
|
|
|
|
|
|
AssignmentPlan assignmentPlan = new AssignmentPlanner(nodes, deployments).computePlan();
|
|
|
@@ -556,6 +645,7 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
// Use mix of old and new memory fields
|
|
|
List<Deployment> deployments = List.of(
|
|
|
new Deployment(
|
|
|
+ "m_1",
|
|
|
"m_1",
|
|
|
ByteSizeValue.ofMb(100).getBytes(),
|
|
|
10,
|
|
|
@@ -566,8 +656,9 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
ByteSizeValue.ofMb(400).getBytes(),
|
|
|
ByteSizeValue.ofMb(100).getBytes()
|
|
|
),
|
|
|
- new Deployment("m_2", ByteSizeValue.ofMb(100).getBytes(), 3, 1, Map.of("n_3", 2), 0, null, 0, 0),
|
|
|
+ new Deployment("m_2", "m_2", ByteSizeValue.ofMb(100).getBytes(), 3, 1, Map.of("n_3", 2), 0, null, 0, 0),
|
|
|
new Deployment(
|
|
|
+ "m_3",
|
|
|
"m_3",
|
|
|
ByteSizeValue.ofMb(50).getBytes(),
|
|
|
3,
|
|
|
@@ -579,6 +670,7 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
ByteSizeValue.ofMb(50).getBytes()
|
|
|
),
|
|
|
new Deployment(
|
|
|
+ "m_4",
|
|
|
"m_4",
|
|
|
ByteSizeValue.ofMb(50).getBytes(),
|
|
|
4,
|
|
|
@@ -590,6 +682,7 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
ByteSizeValue.ofMb(100).getBytes()
|
|
|
),
|
|
|
new Deployment(
|
|
|
+ "m_5",
|
|
|
"m_5",
|
|
|
ByteSizeValue.ofMb(500).getBytes(),
|
|
|
2,
|
|
|
@@ -601,6 +694,7 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
ByteSizeValue.ofMb(100).getBytes()
|
|
|
),
|
|
|
new Deployment(
|
|
|
+ "m_6",
|
|
|
"m_6",
|
|
|
ByteSizeValue.ofMb(50).getBytes(),
|
|
|
12,
|
|
|
@@ -612,6 +706,7 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
ByteSizeValue.ofMb(20).getBytes()
|
|
|
),
|
|
|
new Deployment(
|
|
|
+ "m_7",
|
|
|
"m_7",
|
|
|
ByteSizeValue.ofMb(50).getBytes(),
|
|
|
12,
|
|
|
@@ -622,11 +717,11 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
ByteSizeValue.ofMb(300).getBytes(),
|
|
|
ByteSizeValue.ofMb(50).getBytes()
|
|
|
),
|
|
|
- new Deployment("m_8", ByteSizeValue.ofGb(2).getBytes(), 4, 1, Map.of(), 0, null, 0, 0),
|
|
|
- new Deployment("m_9", ByteSizeValue.ofGb(1).getBytes(), 4, 1, Map.of(), 0, null, 0, 0),
|
|
|
- new Deployment("m_10", ByteSizeValue.ofGb(7).getBytes(), 7, 1, Map.of(), 0, null, 0, 0),
|
|
|
- new Deployment("m_11", ByteSizeValue.ofGb(2).getBytes(), 3, 1, Map.of(), 0, null, 0, 0),
|
|
|
- new Deployment("m_12", ByteSizeValue.ofGb(1).getBytes(), 10, 1, Map.of(), 0, null, 0, 0)
|
|
|
+ new Deployment("m_8", "m_8", ByteSizeValue.ofGb(2).getBytes(), 4, 1, Map.of(), 0, null, 0, 0),
|
|
|
+ new Deployment("m_9", "m_9", ByteSizeValue.ofGb(1).getBytes(), 4, 1, Map.of(), 0, null, 0, 0),
|
|
|
+ new Deployment("m_10", "m_10", ByteSizeValue.ofGb(7).getBytes(), 7, 1, Map.of(), 0, null, 0, 0),
|
|
|
+ new Deployment("m_11", "m_11", ByteSizeValue.ofGb(2).getBytes(), 3, 1, Map.of(), 0, null, 0, 0),
|
|
|
+ new Deployment("m_12", "m_12", ByteSizeValue.ofGb(1).getBytes(), 10, 1, Map.of(), 0, null, 0, 0)
|
|
|
);
|
|
|
|
|
|
AssignmentPlan assignmentPlan = new AssignmentPlanner(nodes, deployments).computePlan();
|
|
|
@@ -731,6 +826,7 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
previousModelsPlusNew.add(
|
|
|
new AssignmentPlan.Deployment(
|
|
|
m.deploymentId(),
|
|
|
+ m.modelId(),
|
|
|
m.memoryBytes(),
|
|
|
m.allocations(),
|
|
|
m.threadsPerAllocation(),
|
|
|
@@ -754,6 +850,7 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
Node node2 = new Node("n_2", scaleNodeSize(ByteSizeValue.ofGb(2).getMb()), 2);
|
|
|
Node node3 = new Node("n_3", scaleNodeSize(ByteSizeValue.ofGb(2).getMb()), 2);
|
|
|
Deployment deployment1 = new AssignmentPlan.Deployment(
|
|
|
+ "m_1",
|
|
|
"m_1",
|
|
|
ByteSizeValue.ofMb(1200).getBytes(),
|
|
|
3,
|
|
|
@@ -764,7 +861,7 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
0,
|
|
|
0
|
|
|
);
|
|
|
- Deployment deployment2 = new Deployment("m_2", ByteSizeValue.ofMb(1100).getBytes(), 2, 1, Map.of(), 0, null, 0, 0);
|
|
|
+ Deployment deployment2 = new Deployment("m_2", "m_2", ByteSizeValue.ofMb(1100).getBytes(), 2, 1, Map.of(), 0, null, 0, 0);
|
|
|
AssignmentPlan assignmentPlan = new AssignmentPlanner(List.of(node1, node2, node3), List.of(deployment1, deployment2))
|
|
|
.computePlan();
|
|
|
assertThat(assignmentPlan.getRemainingNodeMemory("n_1"), greaterThanOrEqualTo(0L));
|
|
|
@@ -790,6 +887,7 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
Node node1 = new Node("n_1", ByteSizeValue.ofGb(6).getBytes(), 2);
|
|
|
Node node2 = new Node("n_2", ByteSizeValue.ofGb(6).getBytes(), 2);
|
|
|
AssignmentPlan.Deployment deployment1 = new Deployment(
|
|
|
+ "m_1",
|
|
|
"m_1",
|
|
|
ByteSizeValue.ofMb(1200).getBytes(),
|
|
|
3,
|
|
|
@@ -801,6 +899,7 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
0
|
|
|
);
|
|
|
AssignmentPlan.Deployment deployment2 = new AssignmentPlan.Deployment(
|
|
|
+ "m_2",
|
|
|
"m_2",
|
|
|
ByteSizeValue.ofMb(1100).getBytes(),
|
|
|
1,
|
|
|
@@ -829,8 +928,30 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
|
|
|
public void testGivenPreviouslyAssignedDeployments_CannotAllBeAllocated() {
|
|
|
Node node1 = new Node("n_1", scaleNodeSize(ByteSizeValue.ofGb(2).getMb()), 2);
|
|
|
- AssignmentPlan.Deployment deployment1 = new Deployment("m_1", ByteSizeValue.ofMb(1200).getBytes(), 1, 1, Map.of(), 1, null, 0, 0);
|
|
|
- AssignmentPlan.Deployment deployment2 = new Deployment("m_2", ByteSizeValue.ofMb(1100).getBytes(), 1, 1, Map.of(), 1, null, 0, 0);
|
|
|
+ AssignmentPlan.Deployment deployment1 = new Deployment(
|
|
|
+ "m_1",
|
|
|
+ "m_1",
|
|
|
+ ByteSizeValue.ofMb(1200).getBytes(),
|
|
|
+ 1,
|
|
|
+ 1,
|
|
|
+ Map.of(),
|
|
|
+ 1,
|
|
|
+ null,
|
|
|
+ 0,
|
|
|
+ 0
|
|
|
+ );
|
|
|
+ AssignmentPlan.Deployment deployment2 = new Deployment(
|
|
|
+ "m_2",
|
|
|
+ "m_2",
|
|
|
+ ByteSizeValue.ofMb(1100).getBytes(),
|
|
|
+ 1,
|
|
|
+ 1,
|
|
|
+ Map.of(),
|
|
|
+ 1,
|
|
|
+ null,
|
|
|
+ 0,
|
|
|
+ 0
|
|
|
+ );
|
|
|
|
|
|
AssignmentPlan assignmentPlan = new AssignmentPlanner(List.of(node1), List.of(deployment1, deployment2)).computePlan();
|
|
|
|
|
|
@@ -840,9 +961,20 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
public void testGivenClusterResize_AllocationShouldNotExceedMemoryConstraints() {
|
|
|
Node node1 = new Node("n_1", ByteSizeValue.ofMb(1840).getBytes(), 2);
|
|
|
Node node2 = new Node("n_2", ByteSizeValue.ofMb(2580).getBytes(), 2);
|
|
|
- Deployment deployment1 = new Deployment("m_1", ByteSizeValue.ofMb(800).getBytes(), 2, 1, Map.of(), 0, null, 0, 0);
|
|
|
- Deployment deployment2 = new AssignmentPlan.Deployment("m_2", ByteSizeValue.ofMb(800).getBytes(), 1, 1, Map.of(), 0, null, 0, 0);
|
|
|
- Deployment deployment3 = new Deployment("m_3", ByteSizeValue.ofMb(250).getBytes(), 4, 1, Map.of(), 0, null, 0, 0);
|
|
|
+ Deployment deployment1 = new Deployment("m_1", "m_1", ByteSizeValue.ofMb(800).getBytes(), 2, 1, Map.of(), 0, null, 0, 0);
|
|
|
+ Deployment deployment2 = new AssignmentPlan.Deployment(
|
|
|
+ "m_2",
|
|
|
+ "m_2",
|
|
|
+ ByteSizeValue.ofMb(800).getBytes(),
|
|
|
+ 1,
|
|
|
+ 1,
|
|
|
+ Map.of(),
|
|
|
+ 0,
|
|
|
+ null,
|
|
|
+ 0,
|
|
|
+ 0
|
|
|
+ );
|
|
|
+ Deployment deployment3 = new Deployment("m_3", "m_3", ByteSizeValue.ofMb(250).getBytes(), 4, 1, Map.of(), 0, null, 0, 0);
|
|
|
|
|
|
// First only start m_1
|
|
|
AssignmentPlan assignmentPlan = new AssignmentPlanner(List.of(node1, node2), List.of(deployment1)).computePlan();
|
|
|
@@ -882,9 +1014,9 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
public void testGivenClusterResize_ShouldAllocateEachModelAtLeastOnce() {
|
|
|
Node node1 = new Node("n_1", ByteSizeValue.ofMb(2600).getBytes(), 2);
|
|
|
Node node2 = new Node("n_2", ByteSizeValue.ofMb(2600).getBytes(), 2);
|
|
|
- Deployment deployment1 = new Deployment("m_1", ByteSizeValue.ofMb(800).getBytes(), 2, 1, Map.of(), 0, null, 0, 0);
|
|
|
- Deployment deployment2 = new Deployment("m_2", ByteSizeValue.ofMb(800).getBytes(), 1, 1, Map.of(), 0, null, 0, 0);
|
|
|
- Deployment deployment3 = new Deployment("m_3", ByteSizeValue.ofMb(250).getBytes(), 4, 1, Map.of(), 0, null, 0, 0);
|
|
|
+ Deployment deployment1 = new Deployment("m_1", "m_1", ByteSizeValue.ofMb(800).getBytes(), 2, 1, Map.of(), 0, null, 0, 0);
|
|
|
+ Deployment deployment2 = new Deployment("m_2", "m_2", ByteSizeValue.ofMb(800).getBytes(), 1, 1, Map.of(), 0, null, 0, 0);
|
|
|
+ Deployment deployment3 = new Deployment("m_3", "m_3", ByteSizeValue.ofMb(250).getBytes(), 4, 1, Map.of(), 0, null, 0, 0);
|
|
|
|
|
|
// First only start m_1
|
|
|
AssignmentPlan assignmentPlan = new AssignmentPlanner(List.of(node1, node2), List.of(deployment1)).computePlan();
|
|
|
@@ -953,9 +1085,9 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
// Ensure that plan is removing previously allocated models if not enough memory is available
|
|
|
Node node1 = new Node("n_1", ByteSizeValue.ofMb(1840).getBytes(), 2);
|
|
|
Node node2 = new Node("n_2", ByteSizeValue.ofMb(2580).getBytes(), 2);
|
|
|
- Deployment deployment1 = new Deployment("m_1", ByteSizeValue.ofMb(800).getBytes(), 2, 1, Map.of(), 0, null, 0, 0);
|
|
|
- Deployment deployment2 = new Deployment("m_2", ByteSizeValue.ofMb(800).getBytes(), 1, 1, Map.of(), 0, null, 0, 0);
|
|
|
- Deployment deployment3 = new Deployment("m_3", ByteSizeValue.ofMb(250).getBytes(), 1, 1, Map.of(), 0, null, 0, 0);
|
|
|
+ Deployment deployment1 = new Deployment("m_1", "m_1", ByteSizeValue.ofMb(800).getBytes(), 2, 1, Map.of(), 0, null, 0, 0);
|
|
|
+ Deployment deployment2 = new Deployment("m_2", "m_2", ByteSizeValue.ofMb(800).getBytes(), 1, 1, Map.of(), 0, null, 0, 0);
|
|
|
+ Deployment deployment3 = new Deployment("m_3", "m_3", ByteSizeValue.ofMb(250).getBytes(), 1, 1, Map.of(), 0, null, 0, 0);
|
|
|
|
|
|
// Create a plan where all deployments are assigned at least once
|
|
|
AssignmentPlan assignmentPlan = new AssignmentPlanner(List.of(node1, node2), List.of(deployment1, deployment2, deployment3))
|
|
|
@@ -981,6 +1113,7 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
Node node1 = new Node("n_1", ByteSizeValue.ofMb(700).getBytes(), 2);
|
|
|
Node node2 = new Node("n_2", ByteSizeValue.ofMb(1000).getBytes(), 2);
|
|
|
Deployment deployment1 = new Deployment(
|
|
|
+ "m_1",
|
|
|
"m_1",
|
|
|
ByteSizeValue.ofMb(100).getBytes(),
|
|
|
2,
|
|
|
@@ -992,6 +1125,7 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
ByteSizeValue.ofMb(100).getBytes()
|
|
|
);
|
|
|
Deployment deployment2 = new Deployment(
|
|
|
+ "m_2",
|
|
|
"m_2",
|
|
|
ByteSizeValue.ofMb(100).getBytes(),
|
|
|
1,
|
|
|
@@ -1003,6 +1137,7 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
ByteSizeValue.ofMb(150).getBytes()
|
|
|
);
|
|
|
Deployment deployment3 = new Deployment(
|
|
|
+ "m_3",
|
|
|
"m_3",
|
|
|
ByteSizeValue.ofMb(50).getBytes(),
|
|
|
1,
|
|
|
@@ -1048,6 +1183,7 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
deployments.add(
|
|
|
new Deployment(
|
|
|
m.deploymentId(),
|
|
|
+ m.modelId(),
|
|
|
m.memoryBytes(),
|
|
|
m.allocations(),
|
|
|
m.threadsPerAllocation(),
|
|
|
@@ -1116,6 +1252,7 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
// randomly choose between old and new memory fields format
|
|
|
if (randomBoolean()) {
|
|
|
return new Deployment(
|
|
|
+ "m_" + idSuffix,
|
|
|
"m_" + idSuffix,
|
|
|
randomLongBetween(ByteSizeValue.ofMb(100).getBytes(), ByteSizeValue.ofGb(10).getBytes()),
|
|
|
randomIntBetween(1, 32),
|
|
|
@@ -1128,6 +1265,7 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
);
|
|
|
} else {
|
|
|
return new Deployment(
|
|
|
+ "m_" + idSuffix,
|
|
|
"m_" + idSuffix,
|
|
|
randomLongBetween(ByteSizeValue.ofMb(100).getBytes(), ByteSizeValue.ofGb(1).getBytes()),
|
|
|
randomIntBetween(1, 32),
|
|
|
@@ -1165,7 +1303,7 @@ public class AssignmentPlannerTests extends ESTestCase {
|
|
|
}
|
|
|
List<Deployment> deployments = new ArrayList<>();
|
|
|
for (int i = 0; i < modelsSize; i++) {
|
|
|
- deployments.add(new Deployment("m_" + i, ByteSizeValue.ofMb(200).getBytes(), 2, 1, Map.of(), 0, null, 0, 0));
|
|
|
+ deployments.add(new Deployment("m_" + i, "m_" + i, ByteSizeValue.ofMb(200).getBytes(), 2, 1, Map.of(), 0, null, 0, 0));
|
|
|
}
|
|
|
|
|
|
// Check plan is computed without OOM exception
|