Browse Source

No need to specify data type for InsertParam (#351)

Signed-off-by: groot <yihua.mo@zilliz.com>
groot 3 years ago
parent
commit
a0e3695aa0

+ 5 - 5
examples/main/io/milvus/GeneralExample.java

@@ -23,7 +23,7 @@ import io.milvus.client.MilvusServiceClient;
 import io.milvus.grpc.*;
 import io.milvus.param.*;
 import io.milvus.param.collection.*;
-import io.milvus.param.control.ManualCompactionParam;
+import io.milvus.param.control.ManualCompactParam;
 import io.milvus.param.dml.*;
 import io.milvus.param.index.*;
 import io.milvus.param.partition.*;
@@ -410,7 +410,7 @@ public class GeneralExample {
 
     private R<ManualCompactionResponse> compact() {
         System.out.println("========== compact() ==========");
-        R<ManualCompactionResponse> response = milvusClient.manualCompaction(ManualCompactionParam.newBuilder()
+        R<ManualCompactionResponse> response = milvusClient.manualCompact(ManualCompactParam.newBuilder()
                 .withCollectionName(COLLECTION_NAME)
                 .build());
         handleResponseStatus(response);
@@ -429,9 +429,9 @@ public class GeneralExample {
         }
 
         List<InsertParam.Field> fields = new ArrayList<>();
-        fields.add(new InsertParam.Field(AGE_FIELD, DataType.Int8, ages));
-        fields.add(new InsertParam.Field(VECTOR_FIELD, DataType.FloatVector, vectors));
-//        fields.add(new InsertParam.Field(PROFILE_FIELD, DataType.BinaryVector, profiles));
+        fields.add(new InsertParam.Field(AGE_FIELD, ages));
+        fields.add(new InsertParam.Field(VECTOR_FIELD, vectors));
+//        fields.add(new InsertParam.Field(PROFILE_FIELD, profiles));
 
         InsertParam insertParam = InsertParam.newBuilder()
                 .withCollectionName(COLLECTION_NAME)

+ 144 - 25
src/main/java/io/milvus/param/ParamUtils.java

@@ -2,6 +2,7 @@ package io.milvus.param;
 
 import com.google.protobuf.ByteString;
 import io.milvus.common.clientenum.ConsistencyLevelEnum;
+import io.milvus.exception.IllegalResponseException;
 import io.milvus.exception.ParamException;
 import io.milvus.grpc.*;
 import io.milvus.param.collection.FieldType;
@@ -20,6 +21,121 @@ import java.util.stream.Collectors;
  * Utility functions for param classes
  */
 public class ParamUtils {
+    public static HashMap<DataType, String> getTypeErrorMsg() {
+        final HashMap<DataType, String> typeErrMsg = new HashMap<>();
+        typeErrMsg.put(DataType.None, "Type mismatch for field '%s': the field type is illegal");
+        typeErrMsg.put(DataType.Bool, "Type mismatch for field '%s': Bool field value type must be Boolean");
+        typeErrMsg.put(DataType.Int8, "Type mismatch for field '%s': Int32/Int16/Int8 field value type must be Short or Integer");
+        typeErrMsg.put(DataType.Int16, "Type mismatch for field '%s': Int32/Int16/Int8 field value type must be Short or Integer");
+        typeErrMsg.put(DataType.Int32, "Type mismatch for field '%s': Int32/Int16/Int8 field value type must be Short or Integer");
+        typeErrMsg.put(DataType.Int64, "Type mismatch for field '%s': Int64 field value type must be Long");
+        typeErrMsg.put(DataType.Float, "Type mismatch for field '%s': Float field value type must be Float");
+        typeErrMsg.put(DataType.Double, "Type mismatch for field '%s': Double field value type must be Double");
+        typeErrMsg.put(DataType.String, "Type mismatch for field '%s': String field value type must be String");
+        typeErrMsg.put(DataType.VarChar, "Type mismatch for field '%s': VarChar field value type must be String");
+        typeErrMsg.put(DataType.FloatVector, "Type mismatch for field '%s': Float vector field's value type must be List<Float>");
+        typeErrMsg.put(DataType.BinaryVector, "Type mismatch for field '%s': Binary vector field's value type must be ByteBuffer");
+        return typeErrMsg;
+    }
+
+    private static void checkFieldData(FieldType fieldSchema, InsertParam.Field fieldData) {
+        List<?> values = fieldData.getValues();
+        HashMap<DataType, String> errMsgs = getTypeErrorMsg();
+        DataType dataType = fieldSchema.getDataType();
+
+        switch (dataType) {
+            case FloatVector: {
+                int dim = fieldSchema.getDimension();
+                for (int i = 0; i < values.size(); ++i) {
+                    // is List<> ?
+                    Object value  = values.get(i);
+                    if (!(value instanceof List)) {
+                        throw new ParamException(String.format(errMsgs.get(dataType), fieldSchema.getName()));
+                    }
+                    // is List<Float> ?
+                    List<?> temp = (List<?>)value;
+                    for (Object v : temp) {
+                        if (!(v instanceof Float)) {
+                            throw new ParamException(String.format(errMsgs.get(dataType), fieldSchema.getName()));
+                        }
+                    }
+
+                    // check dimension
+                    if (temp.size() != dim) {
+                        String msg = "Incorrect dimension for field '%s': the no.%d vector's dimension: %d is not equal to field's dimension: %d";
+                        throw new ParamException(String.format(msg, fieldSchema.getName(), i, temp.size(), dim));
+                    }
+                }
+            }
+            break;
+            case BinaryVector: {
+                int dim = fieldSchema.getDimension();
+                for (int i = 0; i < values.size(); ++i) {
+                    Object value  = values.get(i);
+                    // is ByteBuffer?
+                    if (!(value instanceof ByteBuffer)) {
+                        throw new ParamException(String.format(errMsgs.get(dataType), fieldSchema.getName()));
+                    }
+
+                    // check dimension
+                    ByteBuffer v = (ByteBuffer)value;
+                    if (v.position()*8 != dim) {
+                        String msg = "Incorrect dimension for field '%s': the no.%d vector's dimension: %d is not equal to field's dimension: %d";
+                        throw new ParamException(String.format(msg, fieldSchema.getName(), i, v.position()*8, dim));
+                    }
+                }
+            }
+            break;
+            case Int64:
+                for (Object value : values) {
+                    if (!(value instanceof Long)) {
+                        throw new ParamException(String.format(errMsgs.get(dataType), fieldSchema.getName()));
+                    }
+                }
+                break;
+            case Int32:
+            case Int16:
+            case Int8:
+                for (Object value : values) {
+                    if (!(value instanceof Short) && !(value instanceof Integer)) {
+                        throw new ParamException(String.format(errMsgs.get(dataType), fieldSchema.getName()));
+                    }
+                }
+                break;
+            case Bool:
+                for (Object value : values) {
+                    if (!(value instanceof Boolean)) {
+                        throw new ParamException(String.format(errMsgs.get(dataType), fieldSchema.getName()));
+                    }
+                }
+                break;
+            case Float:
+                for (Object value : values) {
+                    if (!(value instanceof Float)) {
+                        throw new ParamException(String.format(errMsgs.get(dataType), fieldSchema.getName()));
+                    }
+                }
+                break;
+            case Double:
+                for (Object value : values) {
+                    if (!(value instanceof Double)) {
+                        throw new ParamException(String.format(errMsgs.get(dataType), fieldSchema.getName()));
+                    }
+                }
+                break;
+            case VarChar:
+            case String:
+                for (Object value : values) {
+                    if (!(value instanceof String)) {
+                        throw new ParamException(String.format(errMsgs.get(dataType), fieldSchema.getName()));
+                    }
+                }
+                break;
+            default:
+                throw new IllegalResponseException("Unsupported data type returned by FieldData");
+        }
+    }
+
     /**
      * Checks if a string is empty or null.
      * Throws {@link ParamException} if the string is empty of null.
@@ -52,7 +168,7 @@ public class ParamUtils {
     }
 
     /**
-     * Checks if a index type is for vector.
+     * Checks if an index type is for vector.
      *
      * @param idx index type
      */
@@ -75,7 +191,7 @@ public class ParamUtils {
                 .setNumRows(requestParam.getRowCount());
 
         // gen fieldData
-        // make sure the field order must be consist with collection schema
+        // make sure the field order must be consisted with collection schema
         for (FieldType fieldType : fieldTypes) {
             boolean found = false;
             for (InsertParam.Field field : fields) {
@@ -84,13 +200,10 @@ public class ParamUtils {
                         String msg = "The primary key: " + fieldType.getName() + " is auto generated, no need to input.";
                         throw new ParamException(msg);
                     }
-                    if (fieldType.getDataType() != field.getType()) {
-                        String msg = "The field: " + fieldType.getName() + " data type doesn't match the collection schema.";
-                        throw new ParamException(msg);
-                    }
+                    checkFieldData(fieldType, field);
 
                     found = true;
-                    insertBuilder.addFieldsData(genFieldData(field.getName(), field.getType(), field.getValues()));
+                    insertBuilder.addFieldsData(genFieldData(field.getName(), fieldType.getDataType(), field.getValues()));
                     break;
                 }
 
@@ -289,39 +402,45 @@ public class ParamUtils {
                 case None:
                 case UNRECOGNIZED:
                     throw new ParamException("Cannot support this dataType:" + dataType);
-                case Int64:
+                case Int64: {
                     List<Long> longs = objects.stream().map(p -> (Long) p).collect(Collectors.toList());
                     LongArray longArray = LongArray.newBuilder().addAllData(longs).build();
-                    ScalarField scalarField1 = ScalarField.newBuilder().setLongData(longArray).build();
-                    return builder.setFieldName(fieldName).setType(dataType).setScalars(scalarField1).build();
+                    ScalarField scalarField = ScalarField.newBuilder().setLongData(longArray).build();
+                    return builder.setFieldName(fieldName).setType(dataType).setScalars(scalarField).build();
+                }
                 case Int32:
                 case Int16:
-                case Int8:
+                case Int8: {
                     List<Integer> integers = objects.stream().map(p -> p instanceof Short ? ((Short) p).intValue() : (Integer) p).collect(Collectors.toList());
                     IntArray intArray = IntArray.newBuilder().addAllData(integers).build();
-                    ScalarField scalarField2 = ScalarField.newBuilder().setIntData(intArray).build();
-                    return builder.setFieldName(fieldName).setType(dataType).setScalars(scalarField2).build();
-                case Bool:
+                    ScalarField scalarField = ScalarField.newBuilder().setIntData(intArray).build();
+                    return builder.setFieldName(fieldName).setType(dataType).setScalars(scalarField).build();
+                }
+                case Bool: {
                     List<Boolean> booleans = objects.stream().map(p -> (Boolean) p).collect(Collectors.toList());
                     BoolArray boolArray = BoolArray.newBuilder().addAllData(booleans).build();
-                    ScalarField scalarField3 = ScalarField.newBuilder().setBoolData(boolArray).build();
-                    return builder.setFieldName(fieldName).setType(dataType).setScalars(scalarField3).build();
-                case Float:
+                    ScalarField scalarField = ScalarField.newBuilder().setBoolData(boolArray).build();
+                    return builder.setFieldName(fieldName).setType(dataType).setScalars(scalarField).build();
+                }
+                case Float: {
                     List<Float> floats = objects.stream().map(p -> (Float) p).collect(Collectors.toList());
                     FloatArray floatArray = FloatArray.newBuilder().addAllData(floats).build();
-                    ScalarField scalarField4 = ScalarField.newBuilder().setFloatData(floatArray).build();
-                    return builder.setFieldName(fieldName).setType(dataType).setScalars(scalarField4).build();
-                case Double:
+                    ScalarField scalarField = ScalarField.newBuilder().setFloatData(floatArray).build();
+                    return builder.setFieldName(fieldName).setType(dataType).setScalars(scalarField).build();
+                }
+                case Double: {
                     List<Double> doubles = objects.stream().map(p -> (Double) p).collect(Collectors.toList());
                     DoubleArray doubleArray = DoubleArray.newBuilder().addAllData(doubles).build();
-                    ScalarField scalarField5 = ScalarField.newBuilder().setDoubleData(doubleArray).build();
-                    return builder.setFieldName(fieldName).setType(dataType).setScalars(scalarField5).build();
+                    ScalarField scalarField = ScalarField.newBuilder().setDoubleData(doubleArray).build();
+                    return builder.setFieldName(fieldName).setType(dataType).setScalars(scalarField).build();
+                }
                 case String:
-                case VarChar:
+                case VarChar: {
                     List<String> strings = objects.stream().map(p -> (String) p).collect(Collectors.toList());
                     StringArray stringArray = StringArray.newBuilder().addAllData(strings).build();
-                    ScalarField scalarField6 = ScalarField.newBuilder().setStringData(stringArray).build();
-                    return builder.setFieldName(fieldName).setType(dataType).setScalars(scalarField6).build();
+                    ScalarField scalarField = ScalarField.newBuilder().setStringData(stringArray).build();
+                    return builder.setFieldName(fieldName).setType(dataType).setScalars(scalarField).build();
+                }
             }
         }
 

+ 2 - 2
src/main/java/io/milvus/param/QueryNodeSingleSearch.java

@@ -99,8 +99,8 @@ public class QueryNodeSingleSearch {
          * Sets the target vectors.
          *
          * @param vectors list of target vectors:
-         *                if vector type is FloatVector, vectors is List&lt;List&lt;Float&gt;&gt;;
-         *                if vector type is BinaryVector, vectors is List&lt;ByteBuffer&gt;;
+         *                if vector type is FloatVector, vectors is List of List Float
+         *                if vector type is BinaryVector, vectors is List of ByteBuffer
          * @return <code>Builder</code>
          */
         public Builder withVectors(@NonNull List<?> vectors) {

+ 28 - 102
src/main/java/io/milvus/param/dml/InsertParam.java

@@ -20,12 +20,10 @@
 package io.milvus.param.dml;
 
 import io.milvus.exception.ParamException;
-import io.milvus.grpc.DataType;
 import io.milvus.param.ParamUtils;
 
 import lombok.Getter;
 import lombok.NonNull;
-import java.nio.ByteBuffer;
 import java.util.List;
 
 /**
@@ -101,7 +99,6 @@ public class InsertParam {
          *
          * @return {@link InsertParam}
          */
-        @java.lang.SuppressWarnings("unchecked")
         public InsertParam build() throws ParamException {
             ParamUtils.CheckNullEmptyString(collectionName, "Collection name");
 
@@ -133,89 +130,10 @@ public class InsertParam {
             this.rowCount = count;
 
             if (count == 0) {
-                throw new ParamException("Row count is zero");
-            }
-
-            // check value type and vector dimension
-            for (InsertParam.Field field : fields) {
-                List<?> values = field.getValues();
-                if (field.getType() == DataType.FloatVector) {
-                    for (Object obj : values) {
-                        if (!(obj instanceof List)) {
-                            throw new ParamException("Float vector field's value must be Lst<Float>");
-                        }
-
-                        List<?> temp = (List<?>)obj;
-                        for (Object v : temp) {
-                            if (!(v instanceof Float)) {
-                                throw new ParamException("Float vector's value type must be Float");
-                            }
-                        }
-                    }
-
-                    List<Float> first = (List<Float>) values.get(0);
-                    int dim = first.size();
-                    for (int i = 1; i < values.size(); ++i) {
-                        List<Float> temp = (List<Float>) values.get(i);
-                        if (dim != temp.size()) {
-                            throw new ParamException("Vector dimension must be equal");
-                        }
-                    }
-                } else if (field.getType() == DataType.BinaryVector) {
-                    for (Object obj : values) {
-                        if (!(obj instanceof ByteBuffer)) {
-                            throw new ParamException("Binary vector field's type must be ByteBuffer");
-                        }
-                    }
-
-                    ByteBuffer first = (ByteBuffer) values.get(0);
-                    int dim = first.position();
-                    for (int i = 1; i < values.size(); ++i) {
-                        ByteBuffer temp = (ByteBuffer) values.get(i);
-                        if (dim != temp.position()) {
-                            throw new ParamException("Vector dimension must be equal");
-                        }
-                    }
-                } else if (field.getType() == DataType.Int64) {
-                    for (Object obj : values) {
-                        if (!(obj instanceof Long)) {
-                            throw new ParamException("Int64 field value type must be Long");
-                        }
-                    }
-                } else if (field.getType() == DataType.Int32 || field.getType() == DataType.Int16
-                        || field.getType() == DataType.Int8 ) {
-                    for (Object obj : values) {
-                        if (!(obj instanceof Integer) && !(obj instanceof Short)) {
-                            throw new ParamException("Int32/Int16/Int8 field value type must be Integer or Short");
-                        }
-                    }
-                } else if (field.getType() == DataType.Float) {
-                    for (Object obj : values) {
-                        if (!(obj instanceof Float)) {
-                            throw new ParamException("Float field value type must be Float");
-                        }
-                    }
-                } else if (field.getType() == DataType.Double) {
-                    for (Object obj : values) {
-                        if (!(obj instanceof Double)) {
-                            throw new ParamException("Double field value type must be Double");
-                        }
-                    }
-                } else if (field.getType() == DataType.Bool) {
-                    for (Object obj : values) {
-                        if (!(obj instanceof Boolean)) {
-                            throw new ParamException("Bool field value type must be Boolean");
-                        }
-                    }
-                } else if (field.getType() == DataType.String || field.getType() == DataType.VarChar) {
-                    for (Object obj : values) {
-                        if (!(obj instanceof String)) {
-                            throw new ParamException("String field value type must be String");
-                        }
-                    }
-                }
+                throw new ParamException("Zero row count is not allowed");
             }
 
+            // this method doesn't check data type, the insert() api will do this work
             return new InsertParam(this);
         }
     }
@@ -231,27 +149,31 @@ public class InsertParam {
                 "collectionName='" + collectionName + '\'' +
                 ", partitionName='" + partitionName + '\'' +
                 ", row_count=" + rowCount +
+                ", fields=" + fields +
                 '}';
     }
 
     /**
      * Internal class for insert data.
-     * If dataType is scalar(bool/int/float/double), values is List&lt;Integer&gt;, List&lt;Long&gt;, etc.
-     * If dataType is FloatVector, values is List&lt;Float&gt;.
-     * If dataType is BinaryVector, values is List&lt;ByteBuffer&gt;.
+     * If dataType is Bool, values is List of Boolean
+     * If dataType is Int64, values is List of Long
+     * If dataType is Float, values is List of Float
+     * If dataType is Double, values is List of Double
+     * If dataType is Varchar, values is List of String
+     * If dataType is FloatVector, values is List of List Float
+     * If dataType is BinaryVector, values is List of ByteBuffer
+     *
+     * Note:
+     * If dataType is Int8/Int16/Int32, values is List of Integer or Short
+     * (why? because the rpc proto only support int32/int64 type, actually Int8/Int16/Int32 use int32 type to encode/decode)
+     *
      */
     public static class Field {
         private final String name;
-        private final DataType type;
         private final List<?> values;
 
-        public Field(String name, DataType type, List<?> values) {
-            if (type == DataType.String) {
-                throw new ParamException("String type is not supported, use VarChar instead");
-            }
-
+        public Field(String name, List<?> values) {
             this.name = name;
-            this.type = type;
             this.values = values;
         }
 
@@ -265,21 +187,25 @@ public class InsertParam {
         }
 
         /**
-         * Return data type of the field.
+         * Return data of the field, in column-base.
          *
-         * @return <code>String</code>
+         * @return <code>List</code>
          */
-        public DataType getType() {
-            return type;
+        public List<?> getValues() {
+            return values;
         }
 
         /**
-         * Return data of the field, in column-base.
+         * Constructs a <code>String</code> by {@link InsertParam.Field} instance.
          *
-         * @return <code>List</code>
+         * @return <code>String</code>
          */
-        public List<?> getValues() {
-            return values;
+        @Override
+        public String toString() {
+            return "Field{" +
+                    "fieldName='" + name + '\'' +
+                    ", row_count=" + values.size() +
+                    '}';
         }
     }
 }

+ 2 - 2
src/main/java/io/milvus/param/dml/SearchParam.java

@@ -224,8 +224,8 @@ public class SearchParam {
          * Sets the target vectors.
          *
          * @param vectors list of target vectors:
-         *                if vector type is FloatVector, vectors is List&lt;List&lt;Float&gt;&gt;;
-         *                if vector type is BinaryVector, vectors is List&lt;ByteBuffer&gt;;
+         *                if vector type is FloatVector, vectors is List of List Float
+         *                if vector type is BinaryVector, vectors is List of ByteBuffer
          * @return <code>Builder</code>
          */
         public Builder withVectors(@NonNull List<?> vectors) {

+ 2 - 3
src/main/java/io/milvus/response/DescCollResponseWrapper.java

@@ -3,7 +3,6 @@ package io.milvus.response;
 import io.milvus.grpc.CollectionSchema;
 import io.milvus.grpc.DescribeCollectionResponse;
 import io.milvus.grpc.FieldSchema;
-import io.milvus.grpc.KeyValuePair;
 import io.milvus.param.ParamUtils;
 import io.milvus.param.collection.FieldType;
 import lombok.NonNull;
@@ -71,7 +70,7 @@ public class DescCollResponseWrapper {
     /**
      * Get aliases of the collection.
      *
-     * @return List&lt;String&gt; aliases of the collection
+     * @return List of String, aliases of the collection
      */
     public List<String> getAliases() {
         List<String> aliases = new ArrayList<>();
@@ -85,7 +84,7 @@ public class DescCollResponseWrapper {
     /**
      * Get schema of the collection's fields.
      *
-     * @return List&lt;FieldType&gt; schema of the collection's fields
+     * @return List of FieldType, schema of the collection's fields
      */
     public List<FieldType> getFields() {
         List<FieldType> results = new ArrayList<>();

+ 1 - 1
src/main/java/io/milvus/response/DescIndexResponseWrapper.java

@@ -24,7 +24,7 @@ public class DescIndexResponseWrapper {
     /**
      * Get index description of fields.
      *
-     * @return List&lt;IndexDesc&gt; index description of fields
+     * @return List of IndexDesc, index description of fields
      */
     public List<IndexDesc> getIndexDescriptions() {
         List<IndexDesc> results = new ArrayList<>();

+ 11 - 7
src/main/java/io/milvus/response/FieldDataWrapper.java

@@ -1,5 +1,6 @@
 package io.milvus.response;
 
+import com.google.protobuf.ProtocolStringList;
 import io.milvus.grpc.DataType;
 import io.milvus.grpc.FieldData;
 import io.milvus.exception.IllegalResponseException;
@@ -50,7 +51,6 @@ public class FieldDataWrapper {
         switch (dt) {
             case FloatVector: {
                 int dim = getDim();
-                System.out.println(fieldData.getVectors().getFloatVector().getDataCount());
                 List<Float> data = fieldData.getVectors().getFloatVector().getDataList();
                 if (data.size() % dim != 0) {
                     throw new IllegalResponseException("Returned float vector field data array size doesn't match dimension");
@@ -89,10 +89,14 @@ public class FieldDataWrapper {
 
     /**
      * Returns the field data according to its type:
-     *      float vector field return List&lt;List&lt;Float&gt;&gt;,
-     *      binary vector field return List&lt;ByteBuffer&gt;,
-     *      int64 field return List&lt;Long&gt;,
-     *      boolean field return List&lt;Boolean&gt;,
+     *      float vector field return List of List Float,
+     *      binary vector field return List of ByteBuffer
+     *      int64 field return List of Long
+     *      int32/int16/int8 field return List of Integer
+     *      boolean field return List of Boolean
+     *      float field return List of Float
+     *      double field return List of Double
+     *      varchar field return List of String
      *      etc.
      *
      * Throws {@link IllegalResponseException} if the field type is illegal.
@@ -104,7 +108,6 @@ public class FieldDataWrapper {
         switch (dt) {
             case FloatVector: {
                 int dim = getDim();
-                System.out.println(fieldData.getVectors().getFloatVector().getDataCount());
                 List<Float> data = fieldData.getVectors().getFloatVector().getDataList();
                 if (data.size() % dim != 0) {
                     throw new IllegalResponseException("Returned float vector field data array size doesn't match dimension");
@@ -147,7 +150,8 @@ public class FieldDataWrapper {
                 return fieldData.getScalars().getDoubleData().getDataList();
             case VarChar:
             case String:
-                return fieldData.getScalars().getStringData().getDataList();
+                ProtocolStringList protoStrList = fieldData.getScalars().getStringData().getDataList();
+                return protoStrList.subList(0, protoStrList.size());
             default:
                 throw new IllegalResponseException("Unsupported data type returned by FieldData");
         }

+ 1 - 2
src/main/java/io/milvus/response/GetBulkloadStateWrapper.java

@@ -1,7 +1,6 @@
 package io.milvus.response;
 
 import io.milvus.exception.IllegalResponseException;
-import io.milvus.exception.MilvusException;
 import io.milvus.grpc.GetImportStateResponse;
 import io.milvus.grpc.ImportState;
 import io.milvus.grpc.KeyValuePair;
@@ -33,7 +32,7 @@ public class GetBulkloadStateWrapper {
     /**
      * Gets the long ID array for auto-id primary key, generated by bulk load task.
      *
-     * @return List&lt;Long&gt; ID array returned by bulk load task
+     * @return List of Long, ID array returned by bulk load task
      */
     public List<Long> getAutoGeneratedIDs() {
         // the id list of response is id ranges

+ 3 - 3
src/main/java/io/milvus/response/MutationResultWrapper.java

@@ -30,7 +30,7 @@ public class MutationResultWrapper {
      * Gets the long ID array returned by insert interface.
      * Throw {@link ParamException} if the primary key type is not int64 type.
      *
-     * @return List&lt;Long&gt; ID array returned by insert interface
+     * @return List of Long, ID array returned by insert interface
      */
     public List<Long> getLongIDs() throws ParamException {
         if (result.getIDs().hasIntId()) {
@@ -45,7 +45,7 @@ public class MutationResultWrapper {
      * Throw {@link ParamException} if the primary key type is not string type.
      * Note that current release of Milvus doesn't support string type field, thus this method is reserved.
      *
-     * @return List&lt;String&gt; ID array returned by insert interface
+     * @return List of String, ID array returned by insert interface
      */
     public List<String> getStringIDs() throws ParamException {
         if (result.getIDs().hasStrId()) {
@@ -56,7 +56,7 @@ public class MutationResultWrapper {
     }
 
     /**
-     * Gets the row count of the deleted entities. Currently this value is always equal to input row count
+     * Gets the row count of the deleted entities. Currently, this value is always equal to input row count
      *
      * @return <code>int</code> row count of the deleted entities
      */

+ 1 - 1
src/main/java/io/milvus/response/SearchResultsWrapper.java

@@ -59,7 +59,7 @@ public class SearchResultsWrapper {
      * Throws {@link IllegalResponseException} if the returned results is illegal.
      *
      * @param indexOfTarget which target vector the result belongs to
-     * @return List&lt;IDScore&gt; ID-score pairs returned by search interface
+     * @return List of IDScore, ID-score pairs returned by search interface
      */
     public List<IDScore> getIDScore(int indexOfTarget) throws ParamException, IllegalResponseException {
         Position position = getOffsetByIndex(indexOfTarget);

+ 1 - 1
src/main/java/io/milvus/response/ShowCollResponseWrapper.java

@@ -22,7 +22,7 @@ public class ShowCollResponseWrapper {
     /**
      * Get information of the collections.
      *
-     * @return List&lt;CollectionInfo&gt; information array of the collections
+     * @return List of CollectionInfo, information array of the collections
      */
     public List<CollectionInfo> getCollectionsInfo() throws IllegalResponseException {
         if (response.getCollectionNamesCount() != response.getCollectionIdsCount()

+ 1 - 1
src/main/java/io/milvus/response/ShowPartResponseWrapper.java

@@ -22,7 +22,7 @@ public class ShowPartResponseWrapper {
     /**
      * Get information of the partitions.
      *
-     * @return List&lt;PartitionInfo&gt; information array of the partitions
+     * @return List of PartitionInfo, information array of the partitions
      */
     public List<PartitionInfo> getPartitionsInfo() throws IllegalResponseException {
         if (response.getPartitionNamesCount() != response.getPartitionIDsCount()

+ 11 - 11
src/test/java/io/milvus/client/MilvusClientDockerTest.java

@@ -271,11 +271,11 @@ class MilvusClientDockerTest {
         List<List<Float>> vectors = generateFloatVectors(rowCount);
 
         List<InsertParam.Field> fieldsInsert = new ArrayList<>();
-        fieldsInsert.add(new InsertParam.Field(field1Name, DataType.Int64, ids));
-        fieldsInsert.add(new InsertParam.Field(field5Name, DataType.Int8, ages));
-        fieldsInsert.add(new InsertParam.Field(field4Name, DataType.Double, weights));
-        fieldsInsert.add(new InsertParam.Field(field3Name, DataType.Bool, genders));
-        fieldsInsert.add(new InsertParam.Field(field2Name, DataType.FloatVector, vectors));
+        fieldsInsert.add(new InsertParam.Field(field1Name, ids));
+        fieldsInsert.add(new InsertParam.Field(field5Name, ages));
+        fieldsInsert.add(new InsertParam.Field(field4Name, weights));
+        fieldsInsert.add(new InsertParam.Field(field3Name, genders));
+        fieldsInsert.add(new InsertParam.Field(field2Name, vectors));
 
         InsertParam insertParam = InsertParam.newBuilder()
                 .withCollectionName(randomCollectionName)
@@ -517,7 +517,7 @@ class MilvusClientDockerTest {
 
         List<InsertParam.Field> fields = new ArrayList<>();
         // no need to provide id here since this field is auto_id
-        fields.add(new InsertParam.Field(field2Name, DataType.BinaryVector, vectors));
+        fields.add(new InsertParam.Field(field2Name, vectors));
 
         InsertParam insertParam = InsertParam.newBuilder()
                 .withCollectionName(randomCollectionName)
@@ -672,7 +672,7 @@ class MilvusClientDockerTest {
         for (long i = 0L; i < 10; ++i) {
             List<List<Float>> vectors = normalizeFloatVectors(generateFloatVectors(rowCount));
             List<InsertParam.Field> fieldsInsert = new ArrayList<>();
-            fieldsInsert.add(new InsertParam.Field(field2Name, DataType.FloatVector, vectors));
+            fieldsInsert.add(new InsertParam.Field(field2Name, vectors));
 
             InsertParam insertParam = InsertParam.newBuilder()
                     .withCollectionName(randomCollectionName)
@@ -908,10 +908,10 @@ class MilvusClientDockerTest {
         List<List<Float>> vectors = generateFloatVectors(rowCount);
 
         List<InsertParam.Field> fieldsInsert = new ArrayList<>();
-        fieldsInsert.add(new InsertParam.Field(field1Name, DataType.VarChar, ids));
-        fieldsInsert.add(new InsertParam.Field(field3Name, DataType.VarChar, comments));
-        fieldsInsert.add(new InsertParam.Field(field2Name, DataType.FloatVector, vectors));
-        fieldsInsert.add(new InsertParam.Field(field4Name, DataType.Int64, sequences));
+        fieldsInsert.add(new InsertParam.Field(field1Name, ids));
+        fieldsInsert.add(new InsertParam.Field(field3Name, comments));
+        fieldsInsert.add(new InsertParam.Field(field2Name, vectors));
+        fieldsInsert.add(new InsertParam.Field(field4Name, sequences));
 
         InsertParam insertParam = InsertParam.newBuilder()
                 .withCollectionName(randomCollectionName)

+ 9 - 9
src/test/java/io/milvus/client/MilvusMultiClientDockerTest.java

@@ -123,7 +123,7 @@ class MilvusMultiClientDockerTest {
     }
 
     @BeforeAll
-    public static void setUp() throws InterruptedException {
+    public static void setUp() {
         startDockerContainer();
 
         MultiConnectParam connectParam = multiConnectParamBuilder().withAuthorization("root", "Milvus").build();
@@ -267,11 +267,11 @@ class MilvusMultiClientDockerTest {
         List<List<Float>> vectors = generateFloatVectors(rowCount);
 
         List<InsertParam.Field> fieldsInsert = new ArrayList<>();
-        fieldsInsert.add(new InsertParam.Field(field1Name, DataType.Int64, ids));
-        fieldsInsert.add(new InsertParam.Field(field5Name, DataType.Int8, ages));
-        fieldsInsert.add(new InsertParam.Field(field4Name, DataType.Double, weights));
-        fieldsInsert.add(new InsertParam.Field(field3Name, DataType.Bool, genders));
-        fieldsInsert.add(new InsertParam.Field(field2Name, DataType.FloatVector, vectors));
+        fieldsInsert.add(new InsertParam.Field(field1Name, ids));
+        fieldsInsert.add(new InsertParam.Field(field5Name, ages));
+        fieldsInsert.add(new InsertParam.Field(field4Name, weights));
+        fieldsInsert.add(new InsertParam.Field(field3Name, genders));
+        fieldsInsert.add(new InsertParam.Field(field2Name, vectors));
 
         InsertParam insertParam = InsertParam.newBuilder()
                 .withCollectionName(randomCollectionName)
@@ -507,8 +507,8 @@ class MilvusMultiClientDockerTest {
 
         List<InsertParam.Field> fields = new ArrayList<>();
         // no need to provide id here since this field is auto_id
-        fields.add(new InsertParam.Field(field1Name, DataType.Int64, ids));
-        fields.add(new InsertParam.Field(field2Name, DataType.BinaryVector, vectors));
+        fields.add(new InsertParam.Field(field1Name, ids));
+        fields.add(new InsertParam.Field(field2Name, vectors));
 
         InsertParam insertParam = InsertParam.newBuilder()
                 .withCollectionName(randomCollectionName)
@@ -618,7 +618,7 @@ class MilvusMultiClientDockerTest {
         for (long i = 0L; i < 10; ++i) {
             List<List<Float>> vectors = normalizeFloatVectors(generateFloatVectors(rowCount));
             List<InsertParam.Field> fieldsInsert = new ArrayList<>();
-            fieldsInsert.add(new InsertParam.Field(field2Name, DataType.FloatVector, vectors));
+            fieldsInsert.add(new InsertParam.Field(field2Name, vectors));
 
             InsertParam insertParam = InsertParam.newBuilder()
                     .withCollectionName(randomCollectionName)

+ 181 - 104
src/test/java/io/milvus/client/MilvusServiceClientTest.java

@@ -1388,7 +1388,7 @@ class MilvusServiceClientTest {
         // field name is empty
         fields.clear();
         List<Long> ids = new ArrayList<>();
-        fields.add(new InsertParam.Field("", DataType.Int64, ids));
+        fields.add(new InsertParam.Field("", ids));
         assertThrows(ParamException.class, () -> InsertParam.newBuilder()
                 .withCollectionName("collection1")
                 .withFields(fields)
@@ -1397,7 +1397,7 @@ class MilvusServiceClientTest {
 
         // field row count is 0
         fields.clear();
-        fields.add(new InsertParam.Field("field1", DataType.Int64, ids));
+        fields.add(new InsertParam.Field("field1", ids));
         assertThrows(ParamException.class, () -> InsertParam.newBuilder()
                 .withCollectionName("collection1")
                 .withFields(fields)
@@ -1407,77 +1407,9 @@ class MilvusServiceClientTest {
         // field row count not equal
         fields.clear();
         List<Long> ages = Arrays.asList(1L, 2L);
-        fields.add(new InsertParam.Field("field1", DataType.Int64, ages));
+        fields.add(new InsertParam.Field("field1", ages));
         List<Integer> ports = Arrays.asList(1, 2, 3);
-        fields.add(new InsertParam.Field("field2", DataType.Int32, ports));
-        assertThrows(ParamException.class, () -> InsertParam.newBuilder()
-                .withCollectionName("collection1")
-                .withFields(fields)
-                .build()
-        );
-
-        // wrong type
-        fields.clear();
-        List<String> fakeVectors1 = Arrays.asList("1", "2", "3");
-        fields.add(new InsertParam.Field("field2", DataType.FloatVector, fakeVectors1));
-        assertThrows(ParamException.class, () -> InsertParam.newBuilder()
-                .withCollectionName("collection1")
-                .withFields(fields)
-                .build()
-        );
-
-        fields.clear();
-        List<List<String>> fakeVectors2 = new ArrayList<>();
-        fakeVectors2.add(Arrays.asList("1", "2", "3"));
-        fields.add(new InsertParam.Field("field2", DataType.FloatVector, fakeVectors2));
-        assertThrows(ParamException.class, () -> InsertParam.newBuilder()
-                .withCollectionName("collection1")
-                .withFields(fields)
-                .build()
-        );
-
-        List<DataType> testTypes = Arrays.asList(DataType.Int64, DataType.Int32, DataType.Int16, DataType.Int8,
-                DataType.Float, DataType.Double, DataType.Bool, DataType.BinaryVector);
-        testTypes.forEach((tp) -> {
-            fields.clear();
-            List<String> fakeVectors3 = Arrays.asList("1", "2", "3");
-            fields.add(new InsertParam.Field("field3", tp, fakeVectors3));
-            assertThrows(ParamException.class, () -> InsertParam.newBuilder()
-                    .withCollectionName("collection1")
-                    .withFields(fields)
-                    .build()
-            );
-        });
-
-        fields.clear();
-        List<Long> fakeVectors4 = Arrays.asList(1L, 2L, 3L);
-        fields.add(new InsertParam.Field("field4", DataType.VarChar, fakeVectors4));
-        assertThrows(ParamException.class, () -> InsertParam.newBuilder()
-                .withCollectionName("collection1")
-                .withFields(fields)
-                .build()
-        );
-
-        // vector dimension not equal
-        fields.clear();
-        List<Float> vector1 = Arrays.asList(0.1F, 0.2F, 0.3F);
-        List<Float> vector2 = Arrays.asList(0.1F, 0.2F);
-        List<List<Float>> vectors = Arrays.asList(vector1, vector2);
-        fields.add(new InsertParam.Field("field1", DataType.FloatVector, vectors));
-        assertThrows(ParamException.class, () -> InsertParam.newBuilder()
-                .withCollectionName("collection1")
-                .withFields(fields)
-                .build()
-        );
-
-        fields.clear();
-        ByteBuffer buf1 = ByteBuffer.allocate(1);
-        buf1.put((byte) 1);
-        ByteBuffer buf2 = ByteBuffer.allocate(2);
-        buf2.put((byte) 1);
-        buf2.put((byte) 2);
-        List<ByteBuffer> binVectors = Arrays.asList(buf1, buf2);
-        fields.add(new InsertParam.Field("field2", DataType.BinaryVector, binVectors));
+        fields.add(new InsertParam.Field("field2", ports));
         assertThrows(ParamException.class, () -> InsertParam.newBuilder()
                 .withCollectionName("collection1")
                 .withFields(fields)
@@ -1487,7 +1419,64 @@ class MilvusServiceClientTest {
 
     @Test
     void insert() {
-        List<InsertParam.Field> fields = new ArrayList<>();
+        // prepare schema
+        HashMap<String, FieldSchema> fieldsSchema = new HashMap<>();
+        fieldsSchema.put("field0", ParamUtils.ConvertField(FieldType.newBuilder()
+                .withName("field0")
+                .withDataType(DataType.Int64)
+                .withAutoID(false)
+                .withPrimaryKey(true)
+                .build()));
+
+        fieldsSchema.put("field1", ParamUtils.ConvertField(FieldType.newBuilder()
+                .withName("field1")
+                .withDataType(DataType.Int32)
+                .build()));
+
+        fieldsSchema.put("field2", ParamUtils.ConvertField(FieldType.newBuilder()
+                .withName("field2")
+                .withDataType(DataType.Int16)
+                .build()));
+
+        fieldsSchema.put("field3", ParamUtils.ConvertField(FieldType.newBuilder()
+                .withName("field3")
+                .withDataType(DataType.Int8)
+                .build()));
+
+        fieldsSchema.put("field4", ParamUtils.ConvertField(FieldType.newBuilder()
+                .withName("field4")
+                .withDataType(DataType.Bool)
+                .build()));
+
+        fieldsSchema.put("field5", ParamUtils.ConvertField(FieldType.newBuilder()
+                .withName("field5")
+                .withDataType(DataType.Float)
+                .build()));
+
+        fieldsSchema.put("field6", ParamUtils.ConvertField(FieldType.newBuilder()
+                .withName("field6")
+                .withDataType(DataType.Double)
+                .build()));
+
+        fieldsSchema.put("field7", ParamUtils.ConvertField(FieldType.newBuilder()
+                .withName("field7")
+                .withDataType(DataType.VarChar)
+                .withMaxLength(20)
+                .build()));
+
+        fieldsSchema.put("field8", ParamUtils.ConvertField(FieldType.newBuilder()
+                .withName("field8")
+                .withDataType(DataType.FloatVector)
+                .withDimension(2)
+                .build()));
+
+        fieldsSchema.put("field9", ParamUtils.ConvertField(FieldType.newBuilder()
+                .withName("field9")
+                .withDataType(DataType.BinaryVector)
+                .withDimension(16)
+                .build()));
+
+        // prepare raw data
         List<Long> ids = new ArrayList<>();
         List<Integer> nVal = new ArrayList<>();
         List<Boolean> bVal = new ArrayList<>();
@@ -1496,7 +1485,8 @@ class MilvusServiceClientTest {
         List<String> sVal = new ArrayList<>();
         List<ByteBuffer> bVectors = new ArrayList<>();
         List<List<Float>> fVectors = new ArrayList<>();
-        for (int i = 0; i < 3; ++i) {
+        int rowCount = 3;
+        for (int i = 0; i < rowCount; ++i) {
             ids.add((long) i);
             nVal.add(i);
             bVal.add(Boolean.TRUE);
@@ -1510,58 +1500,145 @@ class MilvusServiceClientTest {
             List<Float> vec = Arrays.asList(0.1f, 0.2f);
             fVectors.add(vec);
         }
-        fields.add(new InsertParam.Field("field1", DataType.Int64, ids));
-        fields.add(new InsertParam.Field("field2", DataType.Int8, nVal));
-        fields.add(new InsertParam.Field("field3", DataType.Bool, bVal));
-        fields.add(new InsertParam.Field("field4", DataType.Float, fVal));
-        fields.add(new InsertParam.Field("field5", DataType.Double, dVal));
-        fields.add(new InsertParam.Field("field6", DataType.VarChar, sVal));
-        fields.add(new InsertParam.Field("field7", DataType.FloatVector, fVectors));
-        fields.add(new InsertParam.Field("field8", DataType.BinaryVector, bVectors));
+
+        CollectionSchema.Builder colBuilder = CollectionSchema.newBuilder();
+        colBuilder.addFields(fieldsSchema.get("field0"));
+        colBuilder.addFields(fieldsSchema.get("field1"));
+        colBuilder.addFields(fieldsSchema.get("field2"));
+        colBuilder.addFields(fieldsSchema.get("field3"));
+        colBuilder.addFields(fieldsSchema.get("field4"));
+        colBuilder.addFields(fieldsSchema.get("field5"));
+        colBuilder.addFields(fieldsSchema.get("field6"));
+        colBuilder.addFields(fieldsSchema.get("field7"));
+        colBuilder.addFields(fieldsSchema.get("field8"));
+        colBuilder.addFields(fieldsSchema.get("field9"));
+
+        List<InsertParam.Field> fields = new ArrayList<>();
+        fields.add(new InsertParam.Field("field0", ids));
+        fields.add(new InsertParam.Field("field1", nVal));
+        fields.add(new InsertParam.Field("field2", nVal));
+        fields.add(new InsertParam.Field("field3", nVal));
+        fields.add(new InsertParam.Field("field4", bVal));
+        fields.add(new InsertParam.Field("field5", fVal));
+        fields.add(new InsertParam.Field("field6", dVal));
+        fields.add(new InsertParam.Field("field7", sVal));
+        fields.add(new InsertParam.Field("field8", fVectors));
+        fields.add(new InsertParam.Field("field9", bVectors));
+
         InsertParam param = InsertParam.newBuilder()
                 .withCollectionName("collection1")
                 .withPartitionName("partition1")
                 .withFields(fields)
                 .build();
 
-        CollectionSchema.Builder colBuilder = CollectionSchema.newBuilder();
-        for (int i = fields.size() - 1; i >= 0; i--) {
-            InsertParam.Field field = fields.get(i);
-            boolean primaryKey = field.getName().equals("field1");
-            FieldType.Builder builder = FieldType.newBuilder()
-                    .withName(field.getName())
-                    .withDataType(field.getType())
-                    .withAutoID(false)
-                    .withPrimaryKey(primaryKey);
-            if (field.getType() == DataType.BinaryVector) {
-                builder.withDimension(16);
-            } else if (field.getType() == DataType.FloatVector) {
-                builder.withDimension(2);
-            } else if (field.getType() == DataType.VarChar) {
-                builder.withMaxLength(20);
-            }
-
-            colBuilder.addFields(ParamUtils.ConvertField(builder.build()));
-        }
-
         {
             // start mock server
             MockMilvusServer server = startServer();
             MilvusServiceClient client = startClient();
 
+            // test return ok with correct input
             mockServerImpl.setDescribeCollectionResponse(DescribeCollectionResponse.newBuilder()
                     .setCollectionID(1L)
                     .setShardsNum(2)
                     .setSchema(colBuilder.build())
                     .build());
 
-            // test return ok with correct input
             R<MutationResult> resp = client.insert(param);
             assertEquals(R.Status.Success.getCode(), resp.getStatus());
 
-            server.stop();
+            // test return error with wrong int64 type
+            InsertParam.Builder paramBuilder = InsertParam.newBuilder();
+            paramBuilder.withCollectionName("collection1");
+
+            fields.set(0, new InsertParam.Field("field0", nVal));
+            resp = client.insert(paramBuilder.withFields(fields).build());
+            assertNotEquals(R.Status.Success.getCode(), resp.getStatus());
+
+            // test return error with wrong int32 type
+            fields.set(0, new InsertParam.Field("field0", ids));
+            fields.set(1, new InsertParam.Field("field1", ids));
+            resp = client.insert(paramBuilder.withFields(fields).build());
+            assertNotEquals(R.Status.Success.getCode(), resp.getStatus());
+
+            // test return error with wrong int16 type
+            fields.set(1, new InsertParam.Field("field1", nVal));
+            fields.set(2, new InsertParam.Field("field2", ids));
+            resp = client.insert(paramBuilder.withFields(fields).build());
+            assertNotEquals(R.Status.Success.getCode(), resp.getStatus());
+
+            // test return error with wrong int8 type
+            fields.set(2, new InsertParam.Field("field2", nVal));
+            fields.set(3, new InsertParam.Field("field3", ids));
+            resp = client.insert(paramBuilder.withFields(fields).build());
+            assertNotEquals(R.Status.Success.getCode(), resp.getStatus());
+
+            // test return error with wrong bool type
+            fields.set(3, new InsertParam.Field("field3", nVal));
+            fields.set(4, new InsertParam.Field("field4", nVal));
+            resp = client.insert(paramBuilder.withFields(fields).build());
+            assertNotEquals(R.Status.Success.getCode(), resp.getStatus());
+
+            // test return error with wrong float type
+            fields.set(4, new InsertParam.Field("field4", bVal));
+            fields.set(5, new InsertParam.Field("field5", bVal));
+            resp = client.insert(paramBuilder.withFields(fields).build());
+            assertNotEquals(R.Status.Success.getCode(), resp.getStatus());
+
+            // test return error with wrong double type
+            fields.set(5, new InsertParam.Field("field5", fVal));
+            fields.set(6, new InsertParam.Field("field6", nVal));
+            resp = client.insert(paramBuilder.withFields(fields).build());
+            assertNotEquals(R.Status.Success.getCode(), resp.getStatus());
+
+            // test return error with wrong varchar type
+            fields.set(6, new InsertParam.Field("field6", dVal));
+            fields.set(7, new InsertParam.Field("field7", nVal));
+            resp = client.insert(paramBuilder.withFields(fields).build());
+            assertNotEquals(R.Status.Success.getCode(), resp.getStatus());
+
+            // test return error with wrong float vector type
+            fields.set(7, new InsertParam.Field("field7", sVal));
+            fields.set(8, new InsertParam.Field("field8", nVal));
+            resp = client.insert(paramBuilder.withFields(fields).build());
+            assertNotEquals(R.Status.Success.getCode(), resp.getStatus());
+
+            // test throw exception when row count is not equal
+            List<List<Long>> fakeList = new ArrayList<>();
+            fakeList.add(ids);
+            fields.set(8, new InsertParam.Field("field8", fakeList));
+            assertThrows(ParamException.class, () -> paramBuilder.withFields(fields).build());
+
+            // test return error with wrong dimension of float vector
+            fVectors.remove(rowCount - 1);
+            fVectors.add(fVal);
+            fields.set(8, new InsertParam.Field("field8", fVectors));
+            resp = client.insert(paramBuilder.withFields(fields).build());
+            assertNotEquals(R.Status.Success.getCode(), resp.getStatus());
+
+            // test return error with wrong binary vector type
+            fVectors.remove(rowCount - 1);
+            fVectors.add(Arrays.asList(0.1f, 0.2f));
+            fields.set(8, new InsertParam.Field("field8", fVectors));
+            fields.set(9, new InsertParam.Field("field9", nVal));
+            resp = client.insert(paramBuilder.withFields(fields).build());
+            assertNotEquals(R.Status.Success.getCode(), resp.getStatus());
+
+            // test throw exception when row count is not equal
+            List<ByteBuffer> fakeList2 = new ArrayList<>();
+            fakeList2.add(ByteBuffer.allocate(2));
+            fields.set(9, new InsertParam.Field("field9", fakeList2));
+            assertThrows(ParamException.class, () -> paramBuilder.withFields(fields).build());
+
+            // test return error with wrong dimension of binary vector
+            bVectors.remove(rowCount - 1);
+            bVectors.add(ByteBuffer.allocate(1));
+            fields.set(9, new InsertParam.Field("field9", bVectors));
+            resp = client.insert(paramBuilder.withFields(fields).build());
+            assertNotEquals(R.Status.Success.getCode(), resp.getStatus());
+
 
             // test return error without server
+            server.stop();
             resp = client.insert(param);
             assertNotEquals(R.Status.Success.getCode(), resp.getStatus());
 

+ 5 - 5
src/test/java/io/milvus/server/MockMilvusServer.java

@@ -47,24 +47,24 @@ public class MockMilvusServer {
                     .build()
                     .start();
         } catch (Exception e) {
-            logger.error("Failed to start server on port: " + serverPort);
+            logger.error("Failed to start MockServer on port: " + serverPort);
             return;
         }
 
-        logger.info("Server started on port: " + serverPort);
+        logger.info("MockServer started on port: " + serverPort);
         Runtime.getRuntime().addShutdownHook(new Thread(MockMilvusServer.this::stop));
     }
 
     public void stop() {
         if (rpcServer != null) {
-            logger.info("RPC server is shutting down...");
+            logger.info("MockServer is shutting down...");
             try {
                 rpcServer.shutdown().awaitTermination(10, TimeUnit.SECONDS);
             } catch (Exception e) {
-                logger.error("Failed to shutdown RPC server");
+                logger.error("Failed to shutdown MockServer");
             }
             rpcServer = null;
-            logger.info("Server stopped");
+            logger.info("MockServer stopped");
         }
     }
 }

+ 45 - 45
src/test/java/io/milvus/server/MockMilvusServerImpl.java

@@ -80,7 +80,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void createCollection(io.milvus.grpc.CreateCollectionRequest request,
                                  io.grpc.stub.StreamObserver<io.milvus.grpc.Status> responseObserver) {
-        logger.info("createCollection() call");
+        logger.info("MockServer receive createCollection() call");
 
         responseObserver.onNext(respCreateCollection);
         responseObserver.onCompleted();
@@ -93,7 +93,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void describeCollection(io.milvus.grpc.DescribeCollectionRequest request,
                                    io.grpc.stub.StreamObserver<io.milvus.grpc.DescribeCollectionResponse> responseObserver) {
-        logger.info("describeCollection() call");
+        logger.info("MockServer receive describeCollection() call");
 
         responseObserver.onNext(respDescribeCollection);
         responseObserver.onCompleted();
@@ -106,7 +106,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void dropCollection(io.milvus.grpc.DropCollectionRequest request,
                                io.grpc.stub.StreamObserver<io.milvus.grpc.Status> responseObserver) {
-        logger.info("dropCollection() call");
+        logger.info("MockServer receive dropCollection() call");
 
         responseObserver.onNext(respDropCollection);
         responseObserver.onCompleted();
@@ -119,7 +119,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void getCollectionStatistics(io.milvus.grpc.GetCollectionStatisticsRequest request,
                                         io.grpc.stub.StreamObserver<io.milvus.grpc.GetCollectionStatisticsResponse> responseObserver) {
-        logger.info("getCollectionStatistics() call");
+        logger.info("MockServer receive getCollectionStatistics() call");
 
         responseObserver.onNext(respGetCollectionStatisticsResponse);
         responseObserver.onCompleted();
@@ -132,7 +132,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void hasCollection(io.milvus.grpc.HasCollectionRequest request,
                               io.grpc.stub.StreamObserver<io.milvus.grpc.BoolResponse> responseObserver) {
-        logger.info("hasCollection() call");
+        logger.info("MockServer receive hasCollection() call");
 
         responseObserver.onNext(respHasCollection);
         responseObserver.onCompleted();
@@ -145,7 +145,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void loadCollection(io.milvus.grpc.LoadCollectionRequest request,
                                io.grpc.stub.StreamObserver<io.milvus.grpc.Status> responseObserver) {
-        logger.info("loadCollection() call");
+        logger.info("MockServer receive loadCollection() call");
 
         responseObserver.onNext(respLoadCollection);
         responseObserver.onCompleted();
@@ -158,7 +158,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void releaseCollection(io.milvus.grpc.ReleaseCollectionRequest request,
                                   io.grpc.stub.StreamObserver<io.milvus.grpc.Status> responseObserver) {
-        logger.info("releaseCollection() call");
+        logger.info("MockServer receive releaseCollection() call");
 
         responseObserver.onNext(respReleaseCollection);
         responseObserver.onCompleted();
@@ -171,7 +171,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void showCollections(io.milvus.grpc.ShowCollectionsRequest request,
                                 io.grpc.stub.StreamObserver<io.milvus.grpc.ShowCollectionsResponse> responseObserver) {
-        logger.info("showCollections() call");
+        logger.info("MockServer receive showCollections() call");
 
         responseObserver.onNext(respShowCollections);
         responseObserver.onCompleted();
@@ -184,7 +184,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void createPartition(io.milvus.grpc.CreatePartitionRequest request,
                                 io.grpc.stub.StreamObserver<io.milvus.grpc.Status> responseObserver) {
-        logger.info("createPartition() call");
+        logger.info("MockServer receive createPartition() call");
 
         responseObserver.onNext(respCreatePartition);
         responseObserver.onCompleted();
@@ -197,7 +197,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void dropPartition(io.milvus.grpc.DropPartitionRequest request,
                               io.grpc.stub.StreamObserver<io.milvus.grpc.Status> responseObserver) {
-        logger.info("dropPartition() call");
+        logger.info("MockServer receive dropPartition() call");
 
         responseObserver.onNext(respDropPartition);
         responseObserver.onCompleted();
@@ -210,7 +210,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void hasPartition(io.milvus.grpc.HasPartitionRequest request,
                              io.grpc.stub.StreamObserver<io.milvus.grpc.BoolResponse> responseObserver) {
-        logger.info("hasPartition() call");
+        logger.info("MockServer receive hasPartition() call");
 
         responseObserver.onNext(respHasPartition);
         responseObserver.onCompleted();
@@ -223,7 +223,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void loadPartitions(io.milvus.grpc.LoadPartitionsRequest request,
                                io.grpc.stub.StreamObserver<io.milvus.grpc.Status> responseObserver) {
-        logger.info("loadPartitions() call");
+        logger.info("MockServer receive loadPartitions() call");
 
         responseObserver.onNext(respLoadPartitions);
         responseObserver.onCompleted();
@@ -236,7 +236,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void releasePartitions(io.milvus.grpc.ReleasePartitionsRequest request,
                                   io.grpc.stub.StreamObserver<io.milvus.grpc.Status> responseObserver) {
-        logger.info("releasePartitions() call");
+        logger.info("MockServer receive releasePartitions() call");
 
         responseObserver.onNext(respReleasePartitions);
         responseObserver.onCompleted();
@@ -249,7 +249,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void getPartitionStatistics(io.milvus.grpc.GetPartitionStatisticsRequest request,
                                        io.grpc.stub.StreamObserver<io.milvus.grpc.GetPartitionStatisticsResponse> responseObserver) {
-        logger.info("getPartitionStatistics() call");
+        logger.info("MockServer receive getPartitionStatistics() call");
 
         responseObserver.onNext(respGetPartitionStatistics);
         responseObserver.onCompleted();
@@ -262,7 +262,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void showPartitions(io.milvus.grpc.ShowPartitionsRequest request,
                                io.grpc.stub.StreamObserver<io.milvus.grpc.ShowPartitionsResponse> responseObserver) {
-        logger.info("showPartitions() call");
+        logger.info("MockServer receive showPartitions() call");
 
         responseObserver.onNext(respShowPartitions);
         responseObserver.onCompleted();
@@ -275,7 +275,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void createAlias(io.milvus.grpc.CreateAliasRequest request,
                             io.grpc.stub.StreamObserver<io.milvus.grpc.Status> responseObserver) {
-        logger.info("createAlias() call");
+        logger.info("MockServer receive createAlias() call");
 
         responseObserver.onNext(respCreateAlias);
         responseObserver.onCompleted();
@@ -288,7 +288,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void dropAlias(io.milvus.grpc.DropAliasRequest request,
                           io.grpc.stub.StreamObserver<io.milvus.grpc.Status> responseObserver) {
-        logger.info("dropAlias() call");
+        logger.info("MockServer receive dropAlias() call");
 
         responseObserver.onNext(respDropAlias);
         responseObserver.onCompleted();
@@ -301,7 +301,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void alterAlias(io.milvus.grpc.AlterAliasRequest request,
                            io.grpc.stub.StreamObserver<io.milvus.grpc.Status> responseObserver) {
-        logger.info("alterAlias() call");
+        logger.info("MockServer receive alterAlias() call");
 
         responseObserver.onNext(respAlterAlias);
         responseObserver.onCompleted();
@@ -314,7 +314,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void createIndex(io.milvus.grpc.CreateIndexRequest request,
                             io.grpc.stub.StreamObserver<io.milvus.grpc.Status> responseObserver) {
-        logger.info("createIndex() call");
+        logger.info("MockServer receive createIndex() call");
 
         responseObserver.onNext(respCreateIndex);
         responseObserver.onCompleted();
@@ -327,7 +327,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void describeIndex(io.milvus.grpc.DescribeIndexRequest request,
                               io.grpc.stub.StreamObserver<io.milvus.grpc.DescribeIndexResponse> responseObserver) {
-        logger.info("describeIndex() call");
+        logger.info("MockServer receive describeIndex() call");
 
         responseObserver.onNext(respDescribeIndex);
         responseObserver.onCompleted();
@@ -340,7 +340,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void getIndexState(io.milvus.grpc.GetIndexStateRequest request,
                               io.grpc.stub.StreamObserver<io.milvus.grpc.GetIndexStateResponse> responseObserver) {
-        logger.info("getIndexState() call");
+        logger.info("MockServer receive getIndexState() call");
 
         responseObserver.onNext(respGetIndexState);
         responseObserver.onCompleted();
@@ -353,7 +353,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void getIndexBuildProgress(io.milvus.grpc.GetIndexBuildProgressRequest request,
                                       io.grpc.stub.StreamObserver<io.milvus.grpc.GetIndexBuildProgressResponse> responseObserver) {
-        logger.info("getIndexBuildProgress() call");
+        logger.info("MockServer receive getIndexBuildProgress() call");
 
         responseObserver.onNext(respGetIndexBuildProgress);
         responseObserver.onCompleted();
@@ -366,7 +366,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void dropIndex(io.milvus.grpc.DropIndexRequest request,
                           io.grpc.stub.StreamObserver<io.milvus.grpc.Status> responseObserver) {
-        logger.info("dropIndex() call");
+        logger.info("MockServer receive dropIndex() call");
 
         responseObserver.onNext(respDropIndex);
         responseObserver.onCompleted();
@@ -379,7 +379,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void insert(io.milvus.grpc.InsertRequest request,
                        io.grpc.stub.StreamObserver<io.milvus.grpc.MutationResult> responseObserver) {
-        logger.info("insert() call");
+        logger.info("MockServer receive insert() call");
 
         responseObserver.onNext(respInsert);
         responseObserver.onCompleted();
@@ -392,7 +392,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void delete(io.milvus.grpc.DeleteRequest request,
                        io.grpc.stub.StreamObserver<io.milvus.grpc.MutationResult> responseObserver) {
-        logger.info("delete() call");
+        logger.info("MockServer receive delete() call");
 
         responseObserver.onNext(respDelete);
         responseObserver.onCompleted();
@@ -401,7 +401,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void import_(io.milvus.grpc.ImportRequest request,
                        io.grpc.stub.StreamObserver<io.milvus.grpc.ImportResponse> responseObserver) {
-        logger.info("import() call");
+        logger.info("MockServer receive import() call");
 
         responseObserver.onNext(respImport);
         responseObserver.onCompleted();
@@ -410,7 +410,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void getImportState(io.milvus.grpc.GetImportStateRequest request,
                         io.grpc.stub.StreamObserver<io.milvus.grpc.GetImportStateResponse> responseObserver) {
-        logger.info("getImportState() call");
+        logger.info("MockServer receive getImportState() call");
 
         responseObserver.onNext(respImportState);
         responseObserver.onCompleted();
@@ -419,7 +419,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void listImportTasks(io.milvus.grpc.ListImportTasksRequest request,
                                io.grpc.stub.StreamObserver<io.milvus.grpc.ListImportTasksResponse> responseObserver) {
-        logger.info("listImportTasks() call");
+        logger.info("MockServer receive listImportTasks() call");
 
         responseObserver.onNext(respListImportTasks);
         responseObserver.onCompleted();
@@ -432,7 +432,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void search(io.milvus.grpc.SearchRequest request,
                        io.grpc.stub.StreamObserver<io.milvus.grpc.SearchResults> responseObserver) {
-        logger.info("search() call");
+        logger.info("MockServer receive search() call");
 
         responseObserver.onNext(respSearch);
         responseObserver.onCompleted();
@@ -445,7 +445,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void flush(io.milvus.grpc.FlushRequest request,
                       io.grpc.stub.StreamObserver<io.milvus.grpc.FlushResponse> responseObserver) {
-        logger.info("flush() call");
+        logger.info("MockServer receive flush() call");
 
         responseObserver.onNext(respFlush);
         responseObserver.onCompleted();
@@ -458,7 +458,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void query(io.milvus.grpc.QueryRequest request,
                       io.grpc.stub.StreamObserver<io.milvus.grpc.QueryResults> responseObserver) {
-        logger.info("query() call");
+        logger.info("MockServer receive query() call");
 
         responseObserver.onNext(respQuery);
         responseObserver.onCompleted();
@@ -471,7 +471,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void calcDistance(io.milvus.grpc.CalcDistanceRequest request,
                              io.grpc.stub.StreamObserver<io.milvus.grpc.CalcDistanceResults> responseObserver) {
-        logger.info("calcDistance() call");
+        logger.info("MockServer receive calcDistance() call");
 
         responseObserver.onNext(respCalcDistance);
         responseObserver.onCompleted();
@@ -484,7 +484,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void getFlushState(io.milvus.grpc.GetFlushStateRequest request,
                                          io.grpc.stub.StreamObserver<io.milvus.grpc.GetFlushStateResponse> responseObserver) {
-        logger.info("getFlushState() call");
+        logger.info("MockServer receive getFlushState() call");
 
         responseObserver.onNext(respGetFlushState);
         responseObserver.onCompleted();
@@ -497,7 +497,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void getPersistentSegmentInfo(io.milvus.grpc.GetPersistentSegmentInfoRequest request,
                                          io.grpc.stub.StreamObserver<io.milvus.grpc.GetPersistentSegmentInfoResponse> responseObserver) {
-        logger.info("getPersistentSegmentInfo() call");
+        logger.info("MockServer receive getPersistentSegmentInfo() call");
 
         responseObserver.onNext(respGetPersistentSegmentInfo);
         responseObserver.onCompleted();
@@ -510,7 +510,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void getQuerySegmentInfo(io.milvus.grpc.GetQuerySegmentInfoRequest request,
                                     io.grpc.stub.StreamObserver<io.milvus.grpc.GetQuerySegmentInfoResponse> responseObserver) {
-        logger.info("getQuerySegmentInfo() call");
+        logger.info("MockServer receive getQuerySegmentInfo() call");
 
         responseObserver.onNext(respGetQuerySegmentInfo);
         responseObserver.onCompleted();
@@ -523,7 +523,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void getReplicas(io.milvus.grpc.GetReplicasRequest request,
                                     io.grpc.stub.StreamObserver<io.milvus.grpc.GetReplicasResponse> responseObserver) {
-        logger.info("getReplicas() call");
+        logger.info("MockServer receive getReplicas() call");
 
         responseObserver.onNext(respGetReplicas);
         responseObserver.onCompleted();
@@ -536,7 +536,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void getMetrics(io.milvus.grpc.GetMetricsRequest request,
                            io.grpc.stub.StreamObserver<io.milvus.grpc.GetMetricsResponse> responseObserver) {
-        logger.info("getMetrics() call");
+        logger.info("MockServer receive getMetrics() call");
 
         responseObserver.onNext(respGetMetrics);
         responseObserver.onCompleted();
@@ -549,7 +549,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void loadBalance(io.milvus.grpc.LoadBalanceRequest request,
                             io.grpc.stub.StreamObserver<io.milvus.grpc.Status> responseObserver) {
-        logger.info("getMetrics() call");
+        logger.info("MockServer receive getMetrics() call");
 
         responseObserver.onNext(respLoadBalance);
         responseObserver.onCompleted();
@@ -562,7 +562,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void getCompactionState(io.milvus.grpc.GetCompactionStateRequest request,
                                    io.grpc.stub.StreamObserver<io.milvus.grpc.GetCompactionStateResponse> responseObserver) {
-        logger.info("getMetrics() call");
+        logger.info("MockServer receive getMetrics() call");
 
         responseObserver.onNext(respGetCompactionState);
         responseObserver.onCompleted();
@@ -575,7 +575,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void manualCompaction(io.milvus.grpc.ManualCompactionRequest request,
                                  io.grpc.stub.StreamObserver<io.milvus.grpc.ManualCompactionResponse> responseObserver) {
-        logger.info("getMetrics() call");
+        logger.info("MockServer receive getMetrics() call");
 
         responseObserver.onNext(respManualCompaction);
         responseObserver.onCompleted();
@@ -588,7 +588,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
     @Override
     public void getCompactionStateWithPlans(io.milvus.grpc.GetCompactionPlansRequest request,
                                             io.grpc.stub.StreamObserver<io.milvus.grpc.GetCompactionPlansResponse> responseObserver) {
-        logger.info("getMetrics() call");
+        logger.info("MockServer receive getMetrics() call");
 
         responseObserver.onNext(respGetCompactionPlans);
         responseObserver.onCompleted();
@@ -596,7 +596,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
 
     @Override
     public void createCredential(CreateCredentialRequest request, StreamObserver<Status> responseObserver) {
-        logger.info("createCredential() call");
+        logger.info("MockServer receive createCredential() call");
 
         responseObserver.onNext(respCreateCredential);
         responseObserver.onCompleted();
@@ -608,7 +608,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
 
     @Override
     public void updateCredential(UpdateCredentialRequest request, StreamObserver<Status> responseObserver) {
-        logger.info("updateCredential() call");
+        logger.info("MockServer receive updateCredential() call");
 
         responseObserver.onNext(respUpdateCredential);
         responseObserver.onCompleted();
@@ -620,7 +620,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
 
     @Override
     public void deleteCredential(DeleteCredentialRequest request, StreamObserver<Status> responseObserver) {
-        logger.info("deleteCredential() call");
+        logger.info("MockServer receive deleteCredential() call");
 
         responseObserver.onNext(respDeleteCredential);
         responseObserver.onCompleted();
@@ -632,7 +632,7 @@ public class MockMilvusServerImpl extends MilvusServiceGrpc.MilvusServiceImplBas
 
     @Override
     public void listCredUsers(ListCredUsersRequest request, StreamObserver<ListCredUsersResponse> responseObserver) {
-        logger.info("listCredUsers() call");
+        logger.info("MockServer receive listCredUsers() call");
 
         responseObserver.onNext(respListCredUsers);
         responseObserver.onCompleted();

+ 14 - 14
tests/milvustest/src/main/java/com/zilliz/milvustest/common/CommonFunction.java

@@ -251,11 +251,11 @@ public class CommonFunction {
       book_intro_array.add(vector);
     }
     List<InsertParam.Field> fields = new ArrayList<>();
-    fields.add(new InsertParam.Field("book_id", DataType.Int64, book_id_array));
-    fields.add(new InsertParam.Field("word_count", DataType.Int64, word_count_array));
+    fields.add(new InsertParam.Field("book_id", book_id_array));
+    fields.add(new InsertParam.Field("word_count", word_count_array));
     fields.add(
         new InsertParam.Field(
-            CommonData.defaultVectorField, DataType.FloatVector, book_intro_array));
+            CommonData.defaultVectorField, book_intro_array));
     // logger.info("generateTestData"+ JacksonUtil.serialize(fields));
     return fields;
   }
@@ -272,10 +272,10 @@ public class CommonFunction {
       book_intro_array.add(vector);
     }
     List<InsertParam.Field> fields = new ArrayList<>();
-    fields.add(new InsertParam.Field("word_count", DataType.Int64, word_count_array));
+    fields.add(new InsertParam.Field("word_count", word_count_array));
     fields.add(
             new InsertParam.Field(
-                    CommonData.defaultVectorField, DataType.FloatVector, book_intro_array));
+                    CommonData.defaultVectorField, book_intro_array));
     // logger.info("generateTestData"+ JacksonUtil.serialize(fields));
     return fields;
   }
@@ -329,11 +329,11 @@ public class CommonFunction {
     }
     List<ByteBuffer> book_intro_array = generateBinaryVectors(num, 128);
     List<InsertParam.Field> fields = new ArrayList<>();
-    fields.add(new InsertParam.Field("book_id", DataType.Int64, book_id_array));
-    fields.add(new InsertParam.Field("word_count", DataType.Int64, word_count_array));
+    fields.add(new InsertParam.Field("book_id", book_id_array));
+    fields.add(new InsertParam.Field("word_count", word_count_array));
     fields.add(
         new InsertParam.Field(
-            CommonData.defaultBinaryVectorField, DataType.BinaryVector, book_intro_array));
+            CommonData.defaultBinaryVectorField, book_intro_array));
     //    logger.info("generateTestData" + JacksonUtil.serialize(fields));
     return fields;
   }
@@ -369,11 +369,11 @@ public class CommonFunction {
       book_intro_array.add(vector);
     }
     List<InsertParam.Field> fields = new ArrayList<>();
-    fields.add(new InsertParam.Field("book_name", DataType.VarChar, book_name_array));
-    fields.add(new InsertParam.Field("book_content", DataType.VarChar, book_content_array));
+    fields.add(new InsertParam.Field("book_name", book_name_array));
+    fields.add(new InsertParam.Field("book_content", book_content_array));
     fields.add(
         new InsertParam.Field(
-            CommonData.defaultVectorField, DataType.FloatVector, book_intro_array));
+            CommonData.defaultVectorField, book_intro_array));
     //    logger.info("Generate String and Chinese Data"+ JacksonUtil.serialize(fields));
     return fields;
   }
@@ -388,11 +388,11 @@ public class CommonFunction {
     }
     List<ByteBuffer> book_intro_array = generateBinaryVectors(num, 128);
     List<InsertParam.Field> fields = new ArrayList<>();
-    fields.add(new InsertParam.Field("book_name", DataType.VarChar, book_name_array));
-    fields.add(new InsertParam.Field("book_content", DataType.VarChar, book_content_array));
+    fields.add(new InsertParam.Field("book_name", book_name_array));
+    fields.add(new InsertParam.Field("book_content", book_content_array));
     fields.add(
         new InsertParam.Field(
-            CommonData.defaultBinaryVectorField, DataType.BinaryVector, book_intro_array));
+            CommonData.defaultBinaryVectorField, book_intro_array));
     //    logger.info("generateTestData" + JacksonUtil.serialize(fields));
     return fields;
   }

+ 8 - 8
tests/milvustest/src/test/java/com/zilliz/milvustest/insert/InsertTest.java

@@ -130,11 +130,11 @@ public class InsertTest extends BaseTest {
       book_intro_array.add(vector);
     }
     List<InsertParam.Field> fields = new ArrayList<>();
-    fields.add(new InsertParam.Field("book_id", DataType.VarChar, book_id_array));
-    fields.add(new InsertParam.Field("word_count", DataType.VarChar, word_count_array));
+    fields.add(new InsertParam.Field("book_id", book_id_array));
+    fields.add(new InsertParam.Field("word_count", word_count_array));
     fields.add(
             new InsertParam.Field(
-                    CommonData.defaultVectorField, DataType.FloatVector, book_intro_array));
+                    CommonData.defaultVectorField, book_intro_array));
 
     R<MutationResult> mutationResultR =
             milvusClient.insert(
@@ -163,11 +163,11 @@ public class InsertTest extends BaseTest {
       book_intro_array.add(vector);
     }
     List<InsertParam.Field> fields = new ArrayList<>();
-    fields.add(new InsertParam.Field("book_id", DataType.Int64, book_id_array));
-    fields.add(new InsertParam.Field("word_count", DataType.VarChar, word_count_array));
+    fields.add(new InsertParam.Field("book_id", book_id_array));
+    fields.add(new InsertParam.Field("word_count", word_count_array));
     fields.add(
             new InsertParam.Field(
-                    CommonData.defaultVectorField, DataType.FloatVector, book_intro_array));
+                    CommonData.defaultVectorField, book_intro_array));
 
     R<MutationResult> mutationResultR =
             milvusClient.insert(
@@ -238,10 +238,10 @@ public class InsertTest extends BaseTest {
       book_intro_array.add(vector);
     }
     List<InsertParam.Field> fields = new ArrayList<>();
-    fields.add(new InsertParam.Field("word_count", DataType.Int64, word_count_array));
+    fields.add(new InsertParam.Field("word_count", word_count_array));
     fields.add(
             new InsertParam.Field(
-                    CommonData.defaultVectorField, DataType.FloatVector, book_intro_array));
+                    CommonData.defaultVectorField, book_intro_array));
 
     R<MutationResult> mutationResultR =
             milvusClient.insert(