2121
2222import java .io .IOException ;
2323import java .time .Instant ;
24+ import java .util .ArrayList ;
25+ import java .util .List ;
2426
2527import static org .opensearch .common .xcontent .XContentParserUtils .ensureExpectedToken ;
2628import static org .opensearch .ml .common .CommonValue .USER ;
@@ -54,6 +56,7 @@ public class MLModel implements ToXContentObject {
5456 public static final String TOTAL_CHUNKS_FIELD = "total_chunks" ;
5557 public static final String PLANNING_WORKER_NODE_COUNT_FIELD = "planning_worker_node_count" ;
5658 public static final String CURRENT_WORKER_NODE_COUNT_FIELD = "current_worker_node_count" ;
59+ public static final String PLANNING_WORKER_NODES_FIELD = "planning_worker_nodes" ;
5760
5861 private String name ;
5962 private FunctionName algorithm ;
@@ -81,6 +84,7 @@ public class MLModel implements ToXContentObject {
8184 private Integer planningWorkerNodeCount ; // plan to deploy model to how many nodes
8285 private Integer currentWorkerNodeCount ; // model is deployed to how many nodes
8386
87+ private String [] planningWorkerNodes ; // plan to deploy model to these nodes
8488 @ Builder (toBuilder = true )
8589 public MLModel (String name ,
8690 FunctionName algorithm ,
@@ -101,7 +105,8 @@ public MLModel(String name,
101105 String modelId , Integer chunkNumber ,
102106 Integer totalChunks ,
103107 Integer planningWorkerNodeCount ,
104- Integer currentWorkerNodeCount ) {
108+ Integer currentWorkerNodeCount ,
109+ String [] planningWorkerNodes ) {
105110 this .name = name ;
106111 this .algorithm = algorithm ;
107112 this .version = version ;
@@ -123,6 +128,7 @@ public MLModel(String name,
123128 this .totalChunks = totalChunks ;
124129 this .planningWorkerNodeCount = planningWorkerNodeCount ;
125130 this .currentWorkerNodeCount = currentWorkerNodeCount ;
131+ this .planningWorkerNodes = planningWorkerNodes ;
126132 }
127133
128134 public MLModel (StreamInput input ) throws IOException {
@@ -158,6 +164,7 @@ public MLModel(StreamInput input) throws IOException{
158164 totalChunks = input .readOptionalInt ();
159165 planningWorkerNodeCount = input .readOptionalInt ();
160166 currentWorkerNodeCount = input .readOptionalInt ();
167+ planningWorkerNodes = input .readOptionalStringArray ();
161168 }
162169 }
163170
@@ -203,6 +210,7 @@ public void writeTo(StreamOutput out) throws IOException {
203210 out .writeOptionalInt (totalChunks );
204211 out .writeOptionalInt (planningWorkerNodeCount );
205212 out .writeOptionalInt (currentWorkerNodeCount );
213+ out .writeOptionalStringArray (planningWorkerNodes );
206214 }
207215
208216 @ Override
@@ -271,6 +279,9 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws
271279 if (currentWorkerNodeCount != null ) {
272280 builder .field (CURRENT_WORKER_NODE_COUNT_FIELD , currentWorkerNodeCount );
273281 }
282+ if (planningWorkerNodes != null && planningWorkerNodes .length > 0 ) {
283+ builder .field (PLANNING_WORKER_NODES_FIELD , planningWorkerNodes );
284+ }
274285 builder .endObject ();
275286 return builder ;
276287 }
@@ -300,6 +311,7 @@ public static MLModel parse(XContentParser parser) throws IOException {
300311 Integer totalChunks = null ;
301312 Integer planningWorkerNodeCount = null ;
302313 Integer currentWorkerNodeCount = null ;
314+ List <String > planningWorkerNodes = new ArrayList <>();
303315
304316 ensureExpectedToken (XContentParser .Token .START_OBJECT , parser .currentToken (), parser );
305317 while (parser .nextToken () != XContentParser .Token .END_OBJECT ) {
@@ -361,6 +373,12 @@ public static MLModel parse(XContentParser parser) throws IOException {
361373 case CURRENT_WORKER_NODE_COUNT_FIELD :
362374 currentWorkerNodeCount = parser .intValue ();
363375 break ;
376+ case PLANNING_WORKER_NODES_FIELD :
377+ ensureExpectedToken (XContentParser .Token .START_ARRAY , parser .currentToken (), parser );
378+ while (parser .nextToken () != XContentParser .Token .END_ARRAY ) {
379+ planningWorkerNodes .add (parser .text ());
380+ }
381+ break ;
364382 case CREATED_TIME_FIELD :
365383 createdTime = Instant .ofEpochMilli (parser .longValue ());
366384 break ;
@@ -403,6 +421,7 @@ public static MLModel parse(XContentParser parser) throws IOException {
403421 .totalChunks (totalChunks )
404422 .planningWorkerNodeCount (planningWorkerNodeCount )
405423 .currentWorkerNodeCount (currentWorkerNodeCount )
424+ .planningWorkerNodes (planningWorkerNodes .toArray (new String [0 ]))
406425 .build ();
407426 }
408427
0 commit comments