Fix a problem that will cause IoTDB socket being reset across different ITs.
authorjt <jt2594838@163.com>
Tue, 29 Jan 2019 07:53:35 +0000 (15:53 +0800)
committerjt <jt2594838@163.com>
Tue, 29 Jan 2019 07:53:35 +0000 (15:53 +0800)
iotdb/src/main/java/org/apache/iotdb/db/postback/receiver/ServerManager.java
iotdb/src/main/java/org/apache/iotdb/db/service/IoTDB.java
iotdb/src/main/java/org/apache/iotdb/db/service/JDBCService.java

index f77c381..3a28438 100644 (file)
@@ -20,6 +20,7 @@ package org.apache.iotdb.db.postback.receiver;
 
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
+import org.apache.iotdb.db.exception.StartupException;
 import org.apache.thrift.TProcessor;
 import org.apache.thrift.protocol.TBinaryProtocol;
 import org.apache.thrift.protocol.TBinaryProtocol.Factory;
@@ -52,7 +53,7 @@ public class ServerManager {
   /**
    * start postback receiver's server.
    */
-  public void startServer() {
+  public void startServer() throws StartupException {
     Factory protocolFactory;
     TProcessor processor;
     TThreadPoolServer.Args poolArgs;
@@ -79,7 +80,7 @@ public class ServerManager {
       Thread thread = new Thread(runnable);
       thread.start();
     } catch (TTransportException e) {
-      LOGGER.error("IoTDB post back receiver: cannot start postback server because {}", e);
+      throw new StartupException("IoTDB post back receiver: cannot start postback server.", e);
     }
   }
 
index 867e4a2..9ab6e8e 100644 (file)
@@ -80,6 +80,7 @@ public class IoTDB implements IoTDBMBean {
   }
 
   private void setUp() throws StartupException {
+    LOGGER.info("Setting up IoTDB...");
     setUncaughtExceptionHandler();
 
     FileNodeManager.getInstance().recovery();
@@ -113,12 +114,15 @@ public class IoTDB implements IoTDBMBean {
     initErrorInformation();
 
     serverManager.startServer();
+    LOGGER.info("IoTDB is set up.");
   }
 
   public void deactivate() {
+    LOGGER.info("Deactivating IoTDB...");
     serverManager.closeServer();
     registerManager.deregisterAll();
     JMXService.deregisterMBean(mbeanName);
+    LOGGER.info("IoTDB is deactivated.");
   }
 
   @Override
index 6781541..edb115e 100644 (file)
@@ -19,6 +19,8 @@
 package org.apache.iotdb.db.service;
 
 import java.io.IOException;
+import java.util.concurrent.locks.ReentrantLock;
+
 import org.apache.iotdb.db.concurrent.IoTDBThreadPoolFactory;
 import org.apache.iotdb.db.concurrent.ThreadName;
 import org.apache.iotdb.db.conf.IoTDBConfig;
@@ -51,9 +53,7 @@ public class JDBCService implements JDBCServiceMBean, IService {
   private boolean isStart;
   private Factory protocolFactory;
   private Processor<TSIService.Iface> processor;
-  private TServerSocket serverTransport;
   private TThreadPoolServer.Args poolArgs;
-  private TServer poolServer;
   private TSServiceImpl impl;
 
   private JDBCService() {
@@ -81,11 +81,8 @@ public class JDBCService implements JDBCServiceMBean, IService {
       JMXService.registerMBean(getInstance(), mbeanName);
       startService();
     } catch (Exception e) {
-      String errorMessage = String
-          .format("Failed to start %s because of %s", this.getID().getName(),
-              e.getMessage());
-      LOGGER.error(errorMessage);
-      throw new StartupException(errorMessage);
+      LOGGER.error("Failed to start {} because: ", this.getID().getName(), e);
+      throw new StartupException(e);
     }
 
   }
@@ -111,7 +108,7 @@ public class JDBCService implements JDBCServiceMBean, IService {
     LOGGER.info("{}: start {}...", IoTDBConstant.GLOBAL_DB_NAME, this.getID().getName());
 
     try {
-      jdbcServiceThread = new Thread(new JDBCServiceThread());
+      jdbcServiceThread = new JDBCServiceThread();
       jdbcServiceThread.setName(ThreadName.JDBC_SERVICE.getName());
     } catch (IOException e) {
       String errorMessage = String
@@ -140,22 +137,13 @@ public class JDBCService implements JDBCServiceMBean, IService {
       return;
     }
     LOGGER.info("{}: closing {}...", IoTDBConstant.GLOBAL_DB_NAME, this.getID().getName());
-    close();
+    if (jdbcServiceThread != null) {
+      ((JDBCServiceThread) jdbcServiceThread).close();
+    }
     LOGGER.info("{}: close {} successfully", IoTDBConstant.GLOBAL_DB_NAME, this.getID().getName());
   }
 
-  private synchronized void close() {
-    if (poolServer != null) {
-      poolServer.stop();
-      poolServer = null;
-    }
 
-    if (serverTransport != null) {
-      serverTransport.close();
-      serverTransport = null;
-    }
-    isStart = false;
-  }
 
   private static class JDBCServiceHolder {
 
@@ -166,7 +154,10 @@ public class JDBCService implements JDBCServiceMBean, IService {
     }
   }
 
-  private class JDBCServiceThread implements Runnable {
+  private class JDBCServiceThread extends Thread {
+
+    private TServerSocket serverTransport;
+    private TServer poolServer;
 
     public JDBCServiceThread() throws IOException {
       protocolFactory = new TBinaryProtocol.Factory();
@@ -198,5 +189,18 @@ public class JDBCService implements JDBCServiceMBean, IService {
             getID().getName());
       }
     }
+
+    private synchronized void close() {
+      if (poolServer != null) {
+        poolServer.stop();
+        poolServer = null;
+      }
+
+      if (serverTransport != null) {
+        serverTransport.close();
+        serverTransport = null;
+      }
+      isStart = false;
+    }
   }
 }