in src/main/java/org/opensearch/knn/plugin/transport/TrainingModelRequest.java [243:295]
public ActionRequestValidationException validate() {
ActionRequestValidationException exception = null;
// Check if model id exists via model metadata
if (modelDao.getMetadata(modelId) != null) {
exception = new ActionRequestValidationException();
exception.addValidationError("Model with id=\"" + modelId + "\" already exists");
return exception;
}
// Confirm that the passed in knnMethodContext is valid and requires training
ValidationException validationException = this.knnMethodContext.validate();
if (validationException != null) {
exception = new ActionRequestValidationException();
exception.addValidationErrors(validationException.validationErrors());
}
if (!this.knnMethodContext.isTrainingRequired()) {
exception = exception == null ? new ActionRequestValidationException() : exception;
exception.addValidationError("Method does not require training.");
}
// Check if preferred node is real
if (preferredNodeId != null && !clusterService.state().nodes().getDataNodes().containsKey(preferredNodeId)) {
exception = exception == null ? new ActionRequestValidationException() : exception;
exception.addValidationError("Preferred node \"" + preferredNodeId + "\" does not exist");
}
// Check if description is too long
if (description != null && description.length() > KNNConstants.MAX_MODEL_DESCRIPTION_LENGTH) {
exception = exception == null ? new ActionRequestValidationException() : exception;
exception.addValidationError("Description exceeds limit of " + KNNConstants.MAX_MODEL_DESCRIPTION_LENGTH +
" characters");
}
// Validate training index exists
IndexMetadata indexMetadata = clusterService.state().metadata().index(trainingIndex);
if (indexMetadata == null) {
exception = exception == null ? new ActionRequestValidationException() : exception;
exception.addValidationError("Index \"" + this.trainingIndex + "\" does not exist.");
return exception;
}
// Validate the training field
ValidationException fieldValidation = IndexUtil.validateKnnField(indexMetadata, this.trainingField,
this.dimension, modelDao);
if (fieldValidation != null) {
exception = exception == null ? new ActionRequestValidationException() : exception;
exception.addValidationErrors(fieldValidation.validationErrors());
}
return exception;
}