diff --git a/common/src/main/java/org/opensearch/ml/common/CommonValue.java b/common/src/main/java/org/opensearch/ml/common/CommonValue.java index 93564a7d4b..b4a1a665a5 100644 --- a/common/src/main/java/org/opensearch/ml/common/CommonValue.java +++ b/common/src/main/java/org/opensearch/ml/common/CommonValue.java @@ -13,6 +13,9 @@ import java.util.Set; +import static org.opensearch.ml.common.MLConfig.CONFIG_TYPE_FIELD; +import static org.opensearch.ml.common.MLConfig.LAST_UPDATED_TIME_FIELD; +import static org.opensearch.ml.common.MLConfig.ML_CONFIGURATION_FIELD; import static org.opensearch.ml.common.conversation.ConversationalIndexConstants.APPLICATION_TYPE_FIELD; import static org.opensearch.ml.common.conversation.ConversationalIndexConstants.INTERACTIONS_ADDITIONAL_INFO_FIELD; import static org.opensearch.ml.common.conversation.ConversationalIndexConstants.INTERACTIONS_CONVERSATION_ID_FIELD; @@ -407,22 +410,21 @@ public class CommonValue { + " \"_meta\": {\"schema_version\": " + ML_CONFIG_INDEX_SCHEMA_VERSION + "},\n" - + " \"dynamic\": \"strict\",\n" + " \"properties\": {\n" + " \"" + MASTER_KEY + "\": {\"type\": \"keyword\"},\n" + " \"" - + MLConfig.TYPE_FIELD + + CONFIG_TYPE_FIELD + "\" : {\"type\":\"keyword\"},\n" + " \"" - + MLConfig.CONFIGURATION_FIELD + + ML_CONFIGURATION_FIELD + "\" : {\"type\": \"flat_object\"},\n" + " \"" + CREATE_TIME_FIELD + "\": {\"type\": \"date\", \"format\": \"strict_date_time||epoch_millis\"},\n" + " \"" - + LAST_UPDATE_TIME_FIELD + + LAST_UPDATED_TIME_FIELD + "\": {\"type\": \"date\", \"format\": \"strict_date_time||epoch_millis\"}\n" + " }\n" + "}"; diff --git a/common/src/main/java/org/opensearch/ml/common/MLConfig.java b/common/src/main/java/org/opensearch/ml/common/MLConfig.java index c81dddcc9b..bbcbb4aee1 100644 --- a/common/src/main/java/org/opensearch/ml/common/MLConfig.java +++ b/common/src/main/java/org/opensearch/ml/common/MLConfig.java @@ -27,11 +27,18 @@ public class MLConfig implements ToXContentObject, Writeable { public static final String TYPE_FIELD = "type"; + public static final String CONFIG_TYPE_FIELD = "config_type"; + public static final String CONFIGURATION_FIELD = "configuration"; + public static final String ML_CONFIGURATION_FIELD = "ml_configuration"; + public static final String CREATE_TIME_FIELD = "create_time"; public static final String LAST_UPDATE_TIME_FIELD = "last_update_time"; + public static final String LAST_UPDATED_TIME_FIELD = "last_updated_time"; + + @Setter private String type; @@ -78,10 +85,10 @@ public void writeTo(StreamOutput out) throws IOException { public XContentBuilder toXContent(XContentBuilder xContentBuilder, Params params) throws IOException { XContentBuilder builder = xContentBuilder.startObject(); if (type != null) { - builder.field(TYPE_FIELD, type); + builder.field(CONFIG_TYPE_FIELD, type); } if (configuration != null) { - builder.field(CONFIGURATION_FIELD, configuration); + builder.field(ML_CONFIGURATION_FIELD, configuration); } if (createTime != null) { builder.field(CREATE_TIME_FIELD, createTime.toEpochMilli()); @@ -99,9 +106,12 @@ public static MLConfig fromStream(StreamInput in) throws IOException { public static MLConfig parse(XContentParser parser) throws IOException { String type = null; + String configType = null; Configuration configuration = null; + Configuration mlConfiguration = null; Instant createTime = null; Instant lastUpdateTime = null; + Instant lastUpdatedTime = null; ensureExpectedToken(XContentParser.Token.START_OBJECT, parser.currentToken(), parser); while (parser.nextToken() != XContentParser.Token.END_OBJECT) { @@ -112,25 +122,34 @@ public static MLConfig parse(XContentParser parser) throws IOException { case TYPE_FIELD: type = parser.text(); break; + case CONFIG_TYPE_FIELD: + configType = parser.text(); + break; case CONFIGURATION_FIELD: configuration = Configuration.parse(parser); break; + case ML_CONFIGURATION_FIELD: + mlConfiguration = Configuration.parse(parser); + break; case CREATE_TIME_FIELD: createTime = Instant.ofEpochMilli(parser.longValue()); break; case LAST_UPDATE_TIME_FIELD: lastUpdateTime = Instant.ofEpochMilli(parser.longValue()); break; + case LAST_UPDATED_TIME_FIELD: + lastUpdatedTime = Instant.ofEpochMilli(parser.longValue()); + break; default: parser.skipChildren(); break; } } return MLConfig.builder() - .type(type) - .configuration(configuration) + .type(configType == null ? type : configType) + .configuration(mlConfiguration == null ? configuration : mlConfiguration) .createTime(createTime) - .lastUpdateTime(lastUpdateTime) + .lastUpdateTime(lastUpdatedTime == null ? lastUpdateTime : lastUpdatedTime) .build(); } }