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

qiaojialin pushed a commit to branch rel/0.13
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/rel/0.13 by this push:
     new 9952463823 [To rel/0.13] Add getBackupConfiguration rpc (#7695)
9952463823 is described below

commit 9952463823845e77401fe3840bda69fbca80af9f
Author: Beyyes <[email protected]>
AuthorDate: Mon Oct 24 09:00:23 2022 +0800

    [To rel/0.13] Add getBackupConfiguration rpc (#7695)
---
 .../java/org/apache/iotdb/session/SessionTest.java | 13 +++++++++++++
 .../db/service/thrift/impl/TSServiceImpl.java      | 12 ++++++++++++
 .../java/org/apache/iotdb/session/Session.java     |  6 ++++++
 .../apache/iotdb/session/SessionConnection.java    | 22 ++++++++++++++++++++++
 .../org/apache/iotdb/session/pool/SessionPool.java | 20 ++++++++++++++++++++
 thrift/src/main/thrift/rpc.thrift                  |  9 +++++++++
 6 files changed, 82 insertions(+)

diff --git 
a/integration/src/test/java/org/apache/iotdb/session/SessionTest.java 
b/integration/src/test/java/org/apache/iotdb/session/SessionTest.java
index 563c54e148..17bc79625f 100644
--- a/integration/src/test/java/org/apache/iotdb/session/SessionTest.java
+++ b/integration/src/test/java/org/apache/iotdb/session/SessionTest.java
@@ -22,6 +22,7 @@ import org.apache.iotdb.db.conf.IoTDBConstant;
 import org.apache.iotdb.db.utils.EnvironmentUtils;
 import org.apache.iotdb.rpc.IoTDBConnectionException;
 import org.apache.iotdb.rpc.StatementExecutionException;
+import org.apache.iotdb.service.rpc.thrift.TSBackupConfigurationResp;
 import org.apache.iotdb.session.template.InternalNode;
 import org.apache.iotdb.session.template.MeasurementNode;
 import org.apache.iotdb.session.template.Template;
@@ -670,4 +671,16 @@ public class SessionTest {
       assertEquals("326: Template is in use on root.sg.1.cd", e.getMessage());
     }
   }
+
+  @Test
+  public void testGetBackupConfiguration() throws IoTDBConnectionException {
+    session = new Session("127.0.0.1", 6667, "root", "root", 
ZoneId.of("+05:00"));
+    session.open();
+    try {
+      TSBackupConfigurationResp resp = session.getBackupConfiguration();
+      assertEquals("127.0.0.1", resp.getSecondaryAddress());
+    } catch (Exception e) {
+      fail();
+    }
+  }
 }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/TSServiceImpl.java
 
b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/TSServiceImpl.java
index 7e862e532f..2e82d95f22 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/TSServiceImpl.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/TSServiceImpl.java
@@ -86,6 +86,7 @@ import org.apache.iotdb.rpc.TSStatusCode;
 import org.apache.iotdb.service.rpc.thrift.EndPoint;
 import org.apache.iotdb.service.rpc.thrift.ServerProperties;
 import org.apache.iotdb.service.rpc.thrift.TSAppendSchemaTemplateReq;
+import org.apache.iotdb.service.rpc.thrift.TSBackupConfigurationResp;
 import org.apache.iotdb.service.rpc.thrift.TSCancelOperationReq;
 import org.apache.iotdb.service.rpc.thrift.TSCloseOperationReq;
 import org.apache.iotdb.service.rpc.thrift.TSCloseSessionReq;
@@ -2193,6 +2194,17 @@ public class TSServiceImpl implements TSIService.Iface {
     }
   }
 
+  @Override
+  public TSBackupConfigurationResp getBackupConfiguration() {
+    IoTDBConfig conf = IoTDBDescriptor.getInstance().getConfig();
+    TSBackupConfigurationResp syncConf =
+        new 
TSBackupConfigurationResp(RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS));
+    syncConf.setEnableOperationSync(conf.isEnableOperationSync());
+    syncConf.setSecondaryAddress(conf.getSecondaryAddress());
+    syncConf.setSecondaryPort(conf.getSecondaryPort());
+    return syncConf;
+  }
+
   protected TSStatus executeNonQueryPlan(PhysicalPlan plan) {
     try {
       if (isEnableOperationSync) {
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 99fe43b1d8..ba7e1fce6b 100644
--- a/session/src/main/java/org/apache/iotdb/session/Session.java
+++ b/session/src/main/java/org/apache/iotdb/session/Session.java
@@ -25,6 +25,7 @@ import org.apache.iotdb.rpc.RedirectException;
 import org.apache.iotdb.rpc.StatementExecutionException;
 import org.apache.iotdb.service.rpc.thrift.EndPoint;
 import org.apache.iotdb.service.rpc.thrift.TSAppendSchemaTemplateReq;
+import org.apache.iotdb.service.rpc.thrift.TSBackupConfigurationResp;
 import org.apache.iotdb.service.rpc.thrift.TSCreateAlignedTimeseriesReq;
 import org.apache.iotdb.service.rpc.thrift.TSCreateMultiTimeseriesReq;
 import org.apache.iotdb.service.rpc.thrift.TSCreateSchemaTemplateReq;
@@ -3104,6 +3105,11 @@ public class Session {
     this.enableCacheLeader = enableCacheLeader;
   }
 
+  public TSBackupConfigurationResp getBackupConfiguration()
+      throws IoTDBConnectionException, StatementExecutionException {
+    return defaultSessionConnection.getBackupConfiguration();
+  }
+
   public static class Builder {
     private String host = Config.DEFAULT_HOST;
     private int rpcPort = Config.DEFAULT_PORT;
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 9b0d2ee1d6..f2316f3651 100644
--- a/session/src/main/java/org/apache/iotdb/session/SessionConnection.java
+++ b/session/src/main/java/org/apache/iotdb/session/SessionConnection.java
@@ -27,6 +27,7 @@ import org.apache.iotdb.rpc.SessionTimeoutException;
 import org.apache.iotdb.rpc.StatementExecutionException;
 import org.apache.iotdb.service.rpc.thrift.EndPoint;
 import org.apache.iotdb.service.rpc.thrift.TSAppendSchemaTemplateReq;
+import org.apache.iotdb.service.rpc.thrift.TSBackupConfigurationResp;
 import org.apache.iotdb.service.rpc.thrift.TSCloseSessionReq;
 import org.apache.iotdb.service.rpc.thrift.TSCreateAlignedTimeseriesReq;
 import org.apache.iotdb.service.rpc.thrift.TSCreateMultiTimeseriesReq;
@@ -1050,6 +1051,27 @@ public class SessionConnection {
     }
   }
 
+  protected TSBackupConfigurationResp getBackupConfiguration()
+      throws StatementExecutionException, IoTDBConnectionException {
+    TSBackupConfigurationResp execResp;
+    try {
+      execResp = client.getBackupConfiguration();
+      verifySuccessWrapper(execResp.getStatus());
+    } catch (TException e) {
+      if (reconnect()) {
+        try {
+          execResp = client.getBackupConfiguration();
+          verifySuccessWrapper(execResp.getStatus());
+        } catch (TException tException) {
+          throw new IoTDBConnectionException(tException);
+        }
+      } else {
+        throw new IoTDBConnectionException(logForReconnectionFailure());
+      }
+    }
+    return execResp;
+  }
+
   public boolean isEnableRedirect() {
     return enableRedirect;
   }
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 326f6c4030..031ce64d6b 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
@@ -20,6 +20,7 @@ package org.apache.iotdb.session.pool;
 
 import org.apache.iotdb.rpc.IoTDBConnectionException;
 import org.apache.iotdb.rpc.StatementExecutionException;
+import org.apache.iotdb.service.rpc.thrift.TSBackupConfigurationResp;
 import org.apache.iotdb.session.Config;
 import org.apache.iotdb.session.Session;
 import org.apache.iotdb.session.SessionDataSet;
@@ -2341,6 +2342,25 @@ public class SessionPool {
     return null;
   }
 
+  public TSBackupConfigurationResp getBackupConfiguration()
+      throws IoTDBConnectionException, StatementExecutionException {
+    for (int i = 0; i < RETRY; i++) {
+      Session session = getSession();
+      try {
+        TSBackupConfigurationResp resp = session.getBackupConfiguration();
+        putBack(session);
+        return resp;
+      } catch (IoTDBConnectionException e) {
+        // TException means the connection is broken, remove it and get a new 
one.
+        cleanSessionAndMayThrowConnectionException(session, i, e);
+      } catch (RuntimeException e) {
+        putBack(session);
+        throw e;
+      }
+    }
+    return null;
+  }
+
   public int getMaxSize() {
     return maxSize;
   }
diff --git a/thrift/src/main/thrift/rpc.thrift 
b/thrift/src/main/thrift/rpc.thrift
index fbcabef7f2..43d79d23b4 100644
--- a/thrift/src/main/thrift/rpc.thrift
+++ b/thrift/src/main/thrift/rpc.thrift
@@ -432,6 +432,13 @@ struct TSOperationSyncWriteReq {
   3: required binary physicalPlan
 }
 
+struct TSBackupConfigurationResp {
+  1: required TSStatus status
+  2: optional bool enableOperationSync
+  3: optional string secondaryAddress
+  4: optional i32 secondaryPort
+}
+
 service TSIService {
   TSOpenSessionResp openSession(1:TSOpenSessionReq req);
 
@@ -530,4 +537,6 @@ service TSIService {
   TSStatus dropSchemaTemplate(1:TSDropSchemaTemplateReq req);
 
   TSStatus executeOperationSync(1:TSOperationSyncWriteReq req);
+
+  TSBackupConfigurationResp getBackupConfiguration();
 }
\ No newline at end of file

Reply via email to