Browse Source

Feature/2.2.0 (#401)

* 1.add get loading process interface;2.add uri param in connect.

Signed-off-by: xun.huang@zilliz.com <xun.huang@zilliz.com>

* add and modify testcases (#398)

* 1.fix default index bug; 2.add bulk insert doc;

Signed-off-by: xun.huang@zilliz.com <xun.huang@zilliz.com>
Co-authored-by: yongpengli-z <yongpeng.li@zilliz.com>
yelusion 2 years ago
parent
commit
e30d1730d7

+ 304 - 0
doc/io/milvus/response/BulkInsertResponseWrapper.html

@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="zh">
+<head>
+<!-- Generated by javadoc (1.8.0_345) on Wed Nov 02 11:32:45 CST 2022 -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>BulkInsertResponseWrapper (io.milvus:milvus-sdk-java 2.2.0-beta2-SNAPSHOT API)</title>
+<meta name="date" content="2022-11-02">
+<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="BulkInsertResponseWrapper (io.milvus:milvus-sdk-java 2.2.0-beta2-SNAPSHOT API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10,"i1":10};
+var tabs = {65535:["t0","所有方法"],2:["t2","实例方法"],8:["t4","具体方法"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>您的浏览器已禁用 JavaScript。</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="跳过导航链接">跳过导航链接</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="导航">
+<li><a href="../../../overview-summary.html">概览</a></li>
+<li><a href="package-summary.html">程序包</a></li>
+<li class="navBarCell1Rev">类</li>
+<li><a href="class-use/BulkInsertResponseWrapper.html">使用</a></li>
+<li><a href="package-tree.html">树</a></li>
+<li><a href="../../../deprecated-list.html">已过时</a></li>
+<li><a href="../../../index-all.html">索引</a></li>
+<li><a href="../../../help-doc.html">帮助</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>上一个类</li>
+<li><a href="../../../io/milvus/response/DescCollResponseWrapper.html" title="io.milvus.response中的类"><span class="typeNameLink">下一个类</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?io/milvus/response/BulkInsertResponseWrapper.html" target="_top">框架</a></li>
+<li><a href="BulkInsertResponseWrapper.html" target="_top">无框架</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../allclasses-noframe.html">所有类</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>概要:&nbsp;</li>
+<li>嵌套&nbsp;|&nbsp;</li>
+<li>字段&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">构造器</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">方法</a></li>
+</ul>
+<ul class="subNavList">
+<li>详细资料:&nbsp;</li>
+<li>字段&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">构造器</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">方法</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">io.milvus.response</div>
+<h2 title="类 BulkInsertResponseWrapper" class="title">类 BulkInsertResponseWrapper</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="java.lang中的类或接口">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>io.milvus.response.BulkInsertResponseWrapper</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <span class="typeNameLabel">BulkInsertResponseWrapper</span>
+extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="java.lang中的类或接口">Object</a></pre>
+<div class="block">Util class to wrap response of <code>bulkInsert</code> interface.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>构造器概要</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="构造器概要表, 列表构造器和解释">
+<caption><span>构造器</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">构造器和说明</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../io/milvus/response/BulkInsertResponseWrapper.html#BulkInsertResponseWrapper-io.milvus.grpc.ImportResponse-">BulkInsertResponseWrapper</a></span>(@NonNull <a href="../../../io/milvus/grpc/ImportResponse.html" title="io.milvus.grpc中的类">ImportResponse</a>&nbsp;response)</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>方法概要</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="方法概要表, 列表方法和解释">
+<caption><span id="t0" class="activeTableTab"><span>所有方法</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">实例方法</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">具体方法</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">限定符和类型</th>
+<th class="colLast" scope="col">方法和说明</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../io/milvus/response/BulkInsertResponseWrapper.html#getTaskID--">getTaskID</a></span>()</code>
+<div class="block">Gets ID of the bulk insert task.</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="java.lang中的类或接口">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../io/milvus/response/BulkInsertResponseWrapper.html#toString--">toString</a></span>()</code>
+<div class="block">Construct a <code>String</code> by <a href="../../../io/milvus/response/BulkInsertResponseWrapper.html" title="io.milvus.response中的类"><code>BulkInsertResponseWrapper</code></a> instance.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>从类继承的方法&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="java.lang中的类或接口">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="java.lang中的类或接口">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="java.lang中的类或接口">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="java.lang中的类或接口">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="java.lang中的类或接口">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="java.lang中的类或接口">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="java.lang中的类或接口">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="java.lang中的类或接口">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="java.lang中的类或接口">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="java.lang中的类或接口">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="java.lang中的类或接口">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>构造器详细资料</h3>
+<a name="BulkInsertResponseWrapper-io.milvus.grpc.ImportResponse-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>BulkInsertResponseWrapper</h4>
+<pre>public&nbsp;BulkInsertResponseWrapper(@NonNull
+                                 @NonNull <a href="../../../io/milvus/grpc/ImportResponse.html" title="io.milvus.grpc中的类">ImportResponse</a>&nbsp;response)</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>方法详细资料</h3>
+<a name="getTaskID--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getTaskID</h4>
+<pre>public&nbsp;long&nbsp;getTaskID()</pre>
+<div class="block">Gets ID of the bulk insert task.</div>
+<dl>
+<dt><span class="returnLabel">返回:</span></dt>
+<dd>Long ID of the bulk insert task</dd>
+</dl>
+</li>
+</ul>
+<a name="toString--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>toString</h4>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="java.lang中的类或接口">String</a>&nbsp;toString()</pre>
+<div class="block">Construct a <code>String</code> by <a href="../../../io/milvus/response/BulkInsertResponseWrapper.html" title="io.milvus.response中的类"><code>BulkInsertResponseWrapper</code></a> instance.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">覆盖:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="java.lang中的类或接口">toString</a></code>&nbsp;在类中&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="java.lang中的类或接口">Object</a></code></dd>
+<dt><span class="returnLabel">返回:</span></dt>
+<dd><code>String</code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="跳过导航链接">跳过导航链接</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="导航">
+<li><a href="../../../overview-summary.html">概览</a></li>
+<li><a href="package-summary.html">程序包</a></li>
+<li class="navBarCell1Rev">类</li>
+<li><a href="class-use/BulkInsertResponseWrapper.html">使用</a></li>
+<li><a href="package-tree.html">树</a></li>
+<li><a href="../../../deprecated-list.html">已过时</a></li>
+<li><a href="../../../index-all.html">索引</a></li>
+<li><a href="../../../help-doc.html">帮助</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>上一个类</li>
+<li><a href="../../../io/milvus/response/DescCollResponseWrapper.html" title="io.milvus.response中的类"><span class="typeNameLink">下一个类</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?io/milvus/response/BulkInsertResponseWrapper.html" target="_top">框架</a></li>
+<li><a href="BulkInsertResponseWrapper.html" target="_top">无框架</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../allclasses-noframe.html">所有类</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>概要:&nbsp;</li>
+<li>嵌套&nbsp;|&nbsp;</li>
+<li>字段&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">构造器</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">方法</a></li>
+</ul>
+<ul class="subNavList">
+<li>详细资料:&nbsp;</li>
+<li>字段&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">构造器</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">方法</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2022. All rights reserved.</small></p>
+</body>
+</html>

+ 4 - 5
src/main/java/io/milvus/client/AbstractMilvusGrpcClient.java

@@ -301,7 +301,7 @@ public abstract class AbstractMilvusGrpcClient implements MilvusClient {
             if ((tsNow - tsBegin) >= timeout * 1000) {
             if ((tsNow - tsBegin) >= timeout * 1000) {
                 String msg = "Waiting index thread is timeout, index process may not be finished";
                 String msg = "Waiting index thread is timeout, index process may not be finished";
                 logWarning(msg);
                 logWarning(msg);
-                return R.failed(R.Status.Success, msg);
+                return R.failed(R.Status.UnexpectedError, msg);
             }
             }
 
 
             GetIndexStateRequest request = GetIndexStateRequest.newBuilder()
             GetIndexStateRequest request = GetIndexStateRequest.newBuilder()
@@ -311,7 +311,7 @@ public abstract class AbstractMilvusGrpcClient implements MilvusClient {
 
 
             GetIndexStateResponse response = blockingStub().getIndexState(request);
             GetIndexStateResponse response = blockingStub().getIndexState(request);
             if (response.getState() == IndexState.Finished) {
             if (response.getState() == IndexState.Finished) {
-                break;
+                return R.success(true);
             } else if (response.getState() == IndexState.Failed) {
             } else if (response.getState() == IndexState.Failed) {
                 String msg = "Get index state failed: " + response.toString();
                 String msg = "Get index state failed: " + response.toString();
                 logError(msg);
                 logError(msg);
@@ -328,8 +328,6 @@ public abstract class AbstractMilvusGrpcClient implements MilvusClient {
                 return R.failed(R.Status.Success, msg);
                 return R.failed(R.Status.Success, msg);
             }
             }
         }
         }
-
-        return R.failed(R.Status.Success, "Waiting index thread exist");
     }
     }
 
 
     private <T> R<T> failedStatus(String requestName, io.milvus.grpc.Status status) {
     private <T> R<T> failedStatus(String requestName, io.milvus.grpc.Status status) {
@@ -1074,7 +1072,8 @@ public abstract class AbstractMilvusGrpcClient implements MilvusClient {
                 R<Boolean> res = waitForIndex(requestParam.getCollectionName(), requestParam.getIndexName(),
                 R<Boolean> res = waitForIndex(requestParam.getCollectionName(), requestParam.getIndexName(),
                         requestParam.getSyncWaitingInterval(), requestParam.getSyncWaitingTimeout());
                         requestParam.getSyncWaitingInterval(), requestParam.getSyncWaitingTimeout());
                 if (res.getStatus() != R.Status.Success.getCode()) {
                 if (res.getStatus() != R.Status.Success.getCode()) {
-                    return failedStatus("CreateIndexRequest in sync mode", response);
+                    logError("CreateIndexRequest in sync mode" + " failed:\n{}", res.getMessage());
+                    return R.failed(R.Status.valueOf(res.getStatus()), res.getMessage());
                 }
                 }
             }
             }
             logDebug("CreateIndexRequest successfully! Collection name:{} Field name:{}",
             logDebug("CreateIndexRequest successfully! Collection name:{} Field name:{}",

+ 1 - 1
src/main/java/io/milvus/param/Constant.java

@@ -39,7 +39,7 @@ public class Constant {
     public static final String IMPORT_FILES = "files";
     public static final String IMPORT_FILES = "files";
     public static final String IMPORT_COLLECTION = "collection";
     public static final String IMPORT_COLLECTION = "collection";
     public static final String IMPORT_PARTITION = "partition";
     public static final String IMPORT_PARTITION = "partition";
-    public static final String DEFAULT_INDEX_NAME = "_default_idx";
+    public static final String DEFAULT_INDEX_NAME = "";
 
 
     // max value for waiting loading collection/partition interval, unit: millisecond
     // max value for waiting loading collection/partition interval, unit: millisecond
     public static final Long MAX_WAITING_LOADING_INTERVAL = 2000L;
     public static final Long MAX_WAITING_LOADING_INTERVAL = 2000L;

+ 4 - 4
src/main/java/io/milvus/param/index/DescribeIndexParam.java

@@ -49,7 +49,7 @@ public class DescribeIndexParam {
      */
      */
     public static final class Builder {
     public static final class Builder {
         private String collectionName;
         private String collectionName;
-        private String indexName = Constant.DEFAULT_INDEX_NAME;
+        private String indexName = "";
 
 
         private Builder() {
         private Builder() {
         }
         }
@@ -66,12 +66,12 @@ public class DescribeIndexParam {
         }
         }
 
 
         /**
         /**
-         * Sets the target index name. Index name cannot be empty or null.
-         *
+         * Sets the target index name. Index name can be empty or null.
+         * If no index name is specified, then return all this collection indexes.
          * @param indexName field name
          * @param indexName field name
          * @return <code>Builder</code>
          * @return <code>Builder</code>
          */
          */
-        public Builder withIndexName(@NonNull String indexName) {
+        public Builder withIndexName(String indexName) {
             this.indexName = indexName;
             this.indexName = indexName;
             return this;
             return this;
         }
         }

+ 40 - 0
src/main/java/io/milvus/response/BulkInsertResponseWrapper.java

@@ -0,0 +1,40 @@
+package io.milvus.response;
+
+import io.milvus.exception.IllegalResponseException;
+import io.milvus.grpc.ImportResponse;
+import lombok.NonNull;
+
+/**
+ * Util class to wrap response of <code>bulkInsert</code> interface.
+ */
+public class BulkInsertResponseWrapper {
+    private final ImportResponse response;
+
+    public BulkInsertResponseWrapper(@NonNull ImportResponse response) {
+        this.response = response;
+    }
+
+    /**
+     * Gets ID of the bulk insert task.
+     *
+     * @return Long ID of the bulk insert task
+     */
+    public long getTaskID() {
+        if (response.getTasksCount() == 0) {
+            throw new IllegalResponseException("no task id returned from server");
+        }
+        return response.getTasks(0);
+    }
+
+    /**
+     * Construct a <code>String</code> by {@link BulkInsertResponseWrapper} instance.
+     *
+     * @return <code>String</code>
+     */
+    @Override
+    public String toString() {
+        return "bulk insert task state{" +
+                ", taskId:" + getTaskID() +
+                '}';
+    }
+}