|  | @@ -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
 |