You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by xu...@apache.org on 2020/12/28 07:02:15 UTC

[iotdb] 01/01: add test no reply interface

This is an automated email from the ASF dual-hosted git repository.

xuekaifeng pushed a commit to branch add-void-rpc-interface
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit dbf0cf45845d3628696275a0bebe1b2cc3ffe3ef
Author: 151250176 <15...@smail.nju.edu.cn>
AuthorDate: Mon Dec 28 15:01:40 2020 +0800

    add test no reply interface
---
 .../org/apache/iotdb/db/service/TSServiceImpl.java |  9 ++++++++
 .../java/org/apache/iotdb/session/Session.java     |  7 ++++++
 .../apache/iotdb/session/SessionConnection.java    | 25 ++++++++++++++++++++++
 .../org/apache/iotdb/session/pool/SessionPool.java | 21 ++++++++++++++++++
 .../java/org/apache/iotdb/session/SessionUT.java   |  9 ++++++++
 .../apache/iotdb/session/pool/SessionPoolTest.java |  9 ++++++++
 thrift/rpc-changelist.md                           |  2 ++
 thrift/src/main/thrift/rpc.thrift                  | 12 ++++++++---
 8 files changed, 91 insertions(+), 3 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
index e8ce619..507df60 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
@@ -131,6 +131,7 @@ import org.apache.iotdb.service.rpc.thrift.TSQueryNonAlignDataSet;
 import org.apache.iotdb.service.rpc.thrift.TSRawDataQueryReq;
 import org.apache.iotdb.service.rpc.thrift.TSSetTimeZoneReq;
 import org.apache.iotdb.service.rpc.thrift.TSStatus;
+import org.apache.iotdb.service.rpc.thrift.TSTestNoReplyReq;
 import org.apache.iotdb.tsfile.exception.filter.QueryFilterOptimizationException;
 import org.apache.iotdb.tsfile.exception.write.UnSupportedDataTypeException;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
@@ -1220,6 +1221,14 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
     return properties;
   }
 
+  /**
+   * execute no reply request
+   */
+  @Override
+  public void testNoReply(TSTestNoReplyReq req){
+    logger.info("execute test no reply");
+  }
+
   @Override
   public TSStatus insertRecords(TSInsertRecordsReq req) {
     if (auditLogger.isDebugEnabled()) {
diff --git a/session/src/main/java/org/apache/iotdb/session/Session.java b/session/src/main/java/org/apache/iotdb/session/Session.java
index 472dbe3..872bc86 100644
--- a/session/src/main/java/org/apache/iotdb/session/Session.java
+++ b/session/src/main/java/org/apache/iotdb/session/Session.java
@@ -298,6 +298,13 @@ public class Session {
   }
 
   /**
+   * execute no reply test
+   */
+  public void testNoReply() throws IoTDBConnectionException {
+    defaultSessionConnection.testNoReply();
+  }
+
+  /**
    * query eg. select * from paths where time >= startTime and time < endTime time interval include
    * startTime and exclude endTime
    *
diff --git a/session/src/main/java/org/apache/iotdb/session/SessionConnection.java b/session/src/main/java/org/apache/iotdb/session/SessionConnection.java
index 28b18eb..adcfdcc 100644
--- a/session/src/main/java/org/apache/iotdb/session/SessionConnection.java
+++ b/session/src/main/java/org/apache/iotdb/session/SessionConnection.java
@@ -45,6 +45,7 @@ import org.apache.iotdb.service.rpc.thrift.TSOpenSessionResp;
 import org.apache.iotdb.service.rpc.thrift.TSRawDataQueryReq;
 import org.apache.iotdb.service.rpc.thrift.TSSetTimeZoneReq;
 import org.apache.iotdb.service.rpc.thrift.TSStatus;
+import org.apache.iotdb.service.rpc.thrift.TSTestNoReplyReq;
 import org.apache.thrift.TException;
 import org.apache.thrift.protocol.TBinaryProtocol;
 import org.apache.thrift.protocol.TCompactProtocol;
@@ -601,6 +602,30 @@ public class SessionConnection {
     }
   }
 
+  /**
+   * execute no reply test
+   */
+  protected void testNoReply()
+      throws IoTDBConnectionException {
+    TSTestNoReplyReq request = new TSTestNoReplyReq();
+    request.setSessionId(sessionId);
+    try {
+      client.testNoReply(request);
+    } catch (TException e) {
+      if (reconnect()) {
+        try {
+          request.setSessionId(sessionId);
+          client.testNoReply(request);
+        } catch (TException tException) {
+          throw new IoTDBConnectionException(tException);
+        }
+      } else {
+        throw new IoTDBConnectionException(MSG_RECONNECTION_FAIL);
+      }
+    }
+    logger.info("test no reply successfully! ");
+  }
+
   private boolean reconnect() {
     boolean flag = false;
     for (int i = 1; i <= Config.RETRY_NUM; i++) {
diff --git a/session/src/main/java/org/apache/iotdb/session/pool/SessionPool.java b/session/src/main/java/org/apache/iotdb/session/pool/SessionPool.java
index 0f8bb56..e3c161e 100644
--- a/session/src/main/java/org/apache/iotdb/session/pool/SessionPool.java
+++ b/session/src/main/java/org/apache/iotdb/session/pool/SessionPool.java
@@ -518,6 +518,27 @@ public class SessionPool {
     }
   }
 
+  public void testNoReply()
+      throws IoTDBConnectionException {
+    for (int i = 0; i < RETRY; i++) {
+      Session session = getSession();
+      try {
+        session.testNoReply();
+        putBack(session);
+        return;
+      } catch (IoTDBConnectionException e) {
+        // TException means the connection is broken, remove it and get a new one.
+        logger.warn("testNoReply failed", e);
+        cleanSessionAndMayThrowConnectionException(session, i, e);
+      } catch (RuntimeException e) {
+        putBack(session);
+        throw e;
+      }
+    }
+  }
+
+
+
   /**
    * This method NOT insert data into database and the server just return after accept the request,
    * this method should be used to test other time cost in client
diff --git a/session/src/test/java/org/apache/iotdb/session/SessionUT.java b/session/src/test/java/org/apache/iotdb/session/SessionUT.java
index 24e2ad9..ffeacd3 100644
--- a/session/src/test/java/org/apache/iotdb/session/SessionUT.java
+++ b/session/src/test/java/org/apache/iotdb/session/SessionUT.java
@@ -58,6 +58,15 @@ public class SessionUT {
   }
 
   @Test
+  public void testNoReply() {
+    try{
+      session.testNoReply();
+    } catch (IoTDBConnectionException e) {
+      fail("test no reply failed");
+    }
+  }
+
+  @Test
   public void testSortTablet() {
     /*
     To test sortTablet in Class Session
diff --git a/session/src/test/java/org/apache/iotdb/session/pool/SessionPoolTest.java b/session/src/test/java/org/apache/iotdb/session/pool/SessionPoolTest.java
index c426e90..0aef59a 100644
--- a/session/src/test/java/org/apache/iotdb/session/pool/SessionPoolTest.java
+++ b/session/src/test/java/org/apache/iotdb/session/pool/SessionPoolTest.java
@@ -52,6 +52,15 @@ public class SessionPoolTest {
     EnvironmentUtils.cleanEnv();
   }
 
+  @Test
+  public void testNoReply() {
+    try{
+      SessionPool pool = new SessionPool("127.0.0.1", 6667, "root", "root", 3);
+      pool.testNoReply();
+    } catch (IoTDBConnectionException e) {
+      fail("test no reply failed");
+    }
+  }
 
   @Test
   public void insert() {
diff --git a/thrift/rpc-changelist.md b/thrift/rpc-changelist.md
index 424d39a..6d76289 100644
--- a/thrift/rpc-changelist.md
+++ b/thrift/rpc-changelist.md
@@ -128,6 +128,8 @@ Last Updated on 2019-10-27 by Lei Rui.
 | Add method testInsertBatch(1:TSBatchInsertionReq req);       | Kaifeng Xue |
 | Add struct TSCreateMultiTimeseriesReq                        | qiaojialin |
 | Add method createMultiTimeseries(1:TSCreateMultiTimeseriesReq req);       | qiaojialin |
+| Add struct TSTestNoReplyReq                                  | Kaifeng Xue | 
+| Add method testNoReply                                       | Kaifeng Xue | 
 
 
 ## 3. Update
diff --git a/thrift/src/main/thrift/rpc.thrift b/thrift/src/main/thrift/rpc.thrift
index 7f29bbd..c16025b 100644
--- a/thrift/src/main/thrift/rpc.thrift
+++ b/thrift/src/main/thrift/rpc.thrift
@@ -240,10 +240,14 @@ struct TSInsertStringRecordsReq {
 }
 
 struct TSDeleteDataReq {
+   1: required i64 sessionId
+   2: required list<string> paths
+   3: required i64 startTime
+   4: required i64 endTime
+ }
+
+struct TSTestNoReplyReq {
   1: required i64 sessionId
-  2: required list<string> paths
-  3: required i64 startTime
-  4: required i64 endTime
 }
 
 struct TSCreateTimeseriesReq {
@@ -334,6 +338,8 @@ service TSIService {
 
   TSStatus insertStringRecords(1:TSInsertStringRecordsReq req);
 
+  void testNoReply(1: TSTestNoReplyReq req);
+
   TSStatus testInsertTablet(1:TSInsertTabletReq req);
 
   TSStatus testInsertTablets(1:TSInsertTabletsReq req);