You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by hx...@apache.org on 2021/01/05 17:23:30 UTC

[iotdb] branch disable_detailed_log_for_test created (now d2c1c46)

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

hxd pushed a change to branch disable_detailed_log_for_test
in repository https://gitbox.apache.org/repos/asf/iotdb.git.


      at d2c1c46  put all query error caused by incorrect sql to a Logger and disable it for test. All such errors are not Server internal error any more

This branch includes the following new commits:

     new d2c1c46  put all query error caused by incorrect sql to a Logger and disable it for test. All such errors are not Server internal error any more

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[iotdb] 01/01: put all query error caused by incorrect sql to a Logger and disable it for test. All such errors are not Server internal error any more

Posted by hx...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

hxd pushed a commit to branch disable_detailed_log_for_test
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit d2c1c463188d04a2101c0f74dd912815465a7890
Author: xiangdong huang <sa...@gmail.com>
AuthorDate: Wed Jan 6 01:22:49 2021 +0800

    put all query error caused by incorrect sql to a Logger and disable it for test. All such errors are not Server internal error any more
---
 server/src/assembly/resources/conf/logback.xml     |  1 +
 .../db/engine/storagegroup/TsFileResource.java     |  6 +-
 .../db/exception/UDFRegistrationException.java     |  8 +-
 .../query/udf/service/UDFRegistrationService.java  |  2 +-
 .../java/org/apache/iotdb/db/service/IoTDB.java    |  2 +-
 .../apache/iotdb/db/service/RegisterManager.java   |  4 +-
 .../org/apache/iotdb/db/service/TSServiceImpl.java | 85 ++++++++++++++--------
 .../db/integration/IoTDBFlushQueryMergeIT.java     |  2 +-
 .../integration/IoTDBGroupByFillWithRangeIT.java   | 10 ++-
 .../iotdb/db/integration/IoTDBUDFManagementIT.java | 17 ++---
 .../db/integration/IoTDBUDTFHybridQueryIT.java     |  7 +-
 .../db/query/reader/series/SeriesReaderTest.java   |  6 +-
 .../iotdb/db/query/udf/example/Accumulator.java    |  8 +-
 .../apache/iotdb/db/query/udf/example/Adder.java   |  8 +-
 .../SlidingSizeWindowConstructorTester0.java       |  8 +-
 .../SlidingSizeWindowConstructorTester1.java       |  8 +-
 .../SlidingTimeWindowConstructionTester.java       |  8 +-
 .../apache/iotdb/db/utils/EnvironmentUtils.java    |  1 +
 server/src/test/resources/logback.xml              |  1 +
 .../java/org/apache/iotdb/rpc/TSStatusCode.java    |  2 +
 20 files changed, 118 insertions(+), 76 deletions(-)

diff --git a/server/src/assembly/resources/conf/logback.xml b/server/src/assembly/resources/conf/logback.xml
index 44c1fa4..b48c854 100644
--- a/server/src/assembly/resources/conf/logback.xml
+++ b/server/src/assembly/resources/conf/logback.xml
@@ -302,4 +302,5 @@
     <logger level="info" name="QUERY_FREQUENCY">
         <appender-ref ref="QUERY_FREQUENCY"/>
     </logger>
+    <logger level="info" name="DETAILED_FAILUER_QUERY_TRACE"/>
 </configuration>
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResource.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResource.java
index b3fd09f..cab320d 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResource.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResource.java
@@ -575,8 +575,10 @@ public class TsFileResource {
     fsFactory.moveFile(file, fsFactory.getFile(targetDir, file.getName()));
     fsFactory.moveFile(fsFactory.getFile(file.getPath() + RESOURCE_SUFFIX),
         fsFactory.getFile(targetDir, file.getName() + RESOURCE_SUFFIX));
-    fsFactory.moveFile(fsFactory.getFile(file.getPath() + ModificationFile.FILE_SUFFIX),
-        fsFactory.getFile(targetDir, file.getName() + ModificationFile.FILE_SUFFIX));
+    if(fsFactory.getFile(file.getPath() + ModificationFile.FILE_SUFFIX).exists()) {
+      fsFactory.moveFile(fsFactory.getFile(file.getPath() + ModificationFile.FILE_SUFFIX),
+          fsFactory.getFile(targetDir, file.getName() + ModificationFile.FILE_SUFFIX));
+    }
   }
 
   @Override
diff --git a/server/src/main/java/org/apache/iotdb/db/exception/UDFRegistrationException.java b/server/src/main/java/org/apache/iotdb/db/exception/UDFRegistrationException.java
index 14425bc..6aa6b6c 100644
--- a/server/src/main/java/org/apache/iotdb/db/exception/UDFRegistrationException.java
+++ b/server/src/main/java/org/apache/iotdb/db/exception/UDFRegistrationException.java
@@ -19,10 +19,14 @@
 
 package org.apache.iotdb.db.exception;
 
-public class UDFRegistrationException extends StorageEngineException {
+import org.apache.iotdb.db.exception.query.QueryProcessException;
+import org.apache.iotdb.rpc.TSStatusCode;
+
+public class UDFRegistrationException extends QueryProcessException {
 
   public UDFRegistrationException(String message, Throwable cause) {
-    super(message, cause);
+    super(message, TSStatusCode.UDF_NOT_FOUND.getStatusCode());
+    this.initCause(cause);
   }
 
   public UDFRegistrationException(String message) {
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/service/UDFRegistrationService.java b/server/src/main/java/org/apache/iotdb/db/query/udf/service/UDFRegistrationService.java
index 62e82ec..e843a0c 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/service/UDFRegistrationService.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/service/UDFRegistrationService.java
@@ -191,7 +191,7 @@ public class UDFRegistrationService implements IService {
     if (information.isBuiltin()) {
       String errorMessage = String
           .format("Built-in function %s can not be deregistered.", functionName);
-      logger.error(errorMessage);
+      logger.warn(errorMessage);
       throw new UDFRegistrationException(errorMessage);
     }
 
diff --git a/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java b/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java
index 8b03141..81e5e93 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java
@@ -169,7 +169,7 @@ public class IoTDB implements IoTDBMBean {
 
   public void shutdown() throws Exception {
     logger.info("Deactivating IoTDB...");
-    IoTDB.metaManager.clear();
+    //IoTDB.metaManager.clear();
     TracingManager.getInstance().close();
     registerManager.shutdownAll();
     PrimitiveArrayManager.close();
diff --git a/server/src/main/java/org/apache/iotdb/db/service/RegisterManager.java b/server/src/main/java/org/apache/iotdb/db/service/RegisterManager.java
index 7be1939..65bee49 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/RegisterManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/RegisterManager.java
@@ -41,7 +41,7 @@ public class RegisterManager {
   public void register(IService service) throws StartupException {
     for (IService s : iServices) {
       if (s.getID() == service.getID()) {
-        logger.info("{} has already been registered. skip", service.getID().getName());
+        logger.debug("{} has already been registered. skip", service.getID().getName());
         return;
       }
     }
@@ -58,7 +58,7 @@ public class RegisterManager {
     for (IService service : iServices) {
       try {
         service.waitAndStop(10000);
-        logger.info("{} deregistered", service.getID());
+        logger.debug("{} deregistered", service.getID());
       } catch (Exception e) {
         logger.error("Failed to stop {} because:", service.getID().getName(), e);
       }
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 e423b14..b5d556a 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
@@ -54,6 +54,7 @@ import org.apache.iotdb.db.engine.cache.TimeSeriesMetadataCache;
 import org.apache.iotdb.db.exception.BatchProcessException;
 import org.apache.iotdb.db.exception.QueryInBatchStatementException;
 import org.apache.iotdb.db.exception.StorageEngineException;
+import org.apache.iotdb.db.exception.UDFRegistrationException;
 import org.apache.iotdb.db.exception.metadata.IllegalPathException;
 import org.apache.iotdb.db.exception.metadata.MetadataException;
 import org.apache.iotdb.db.exception.metadata.StorageGroupNotSetException;
@@ -154,6 +155,8 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
   private static final Logger logger = LoggerFactory.getLogger(TSServiceImpl.class);
   private static final Logger SLOW_SQL_LOGGER = LoggerFactory.getLogger("SLOW_SQL");
   private static final Logger QUERY_FREQUENCY_LOGGER = LoggerFactory.getLogger("QUERY_FREQUENCY");
+  private static final Logger failuerQueryTraceLogger = LoggerFactory.getLogger("DETAILED_FAILUER_QUERY_TRACE");
+
   private static final String INFO_NOT_LOGIN = "{}: Not login.";
   private static final int MAX_SIZE =
       IoTDBDescriptor.getInstance().getConfig().getQueryCacheSizeInMetric();
@@ -163,6 +166,7 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
       "meet error while parsing SQL to physical plan: {}";
   private static final String SERVER_INTERNAL_ERROR = "{}: server Internal Error: ";
   private static final String CHECK_METADATA_ERROR = "check metadata error: ";
+  private static final String MEET_ERROE_IN_QUERY_PROCESS = "Meet error in query process: ";
 
   private static final List<SqlArgument> sqlArgumentList = new ArrayList<>(MAX_SIZE);
   protected Planner processor;
@@ -204,7 +208,7 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
         .newSingleThreadScheduledExecutor(r -> new Thread(r, "timedQuerySqlCountThread"));
     timedQuerySqlCountThread.scheduleAtFixedRate(() -> {
           if (queryCount.get() != 0) {
-            QUERY_FREQUENCY_LOGGER.info("Query count in current 1 minute: " + queryCount.getAndSet(0));
+            QUERY_FREQUENCY_LOGGER.info("Query count in current 1 minute {} ", queryCount.getAndSet(0));
           }
         },
         config.getFrequencyIntervalInMinute(), config.getFrequencyIntervalInMinute(),
@@ -481,22 +485,23 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
         return false;
       }
     } catch (ParseCancellationException e) {
-      logger.warn(ERROR_PARSING_SQL, statement + " " + e.getMessage());
+      failuerQueryTraceLogger.warn(ERROR_PARSING_SQL, statement + " " + e.getMessage());
       result.add(RpcUtils.getStatus(TSStatusCode.SQL_PARSE_ERROR,
           ERROR_PARSING_SQL + " " + statement + " " + e.getMessage()));
       return false;
     } catch (SQLParserException e) {
-      logger.warn("Error occurred when executing {}, check metadata error: ", statement, e);
+      //why "check metadata error"?
+      failuerQueryTraceLogger.warn("Error occurred when executing {}, check metadata error", statement, e);
       result.add(RpcUtils.getStatus(
           TSStatusCode.SQL_PARSE_ERROR,
           ERROR_PARSING_SQL + " " + statement + " " + e.getMessage()));
       return false;
     } catch (QueryProcessException e) {
-      logger.info(
-          "Error occurred when executing {}, meet error while parsing SQL to physical plan: {}",
-          statement, e.getMessage());
+      failuerQueryTraceLogger.warn(
+          "Error occurred when executing {}, meet error while parsing SQL to physical plan",
+          statement, e);
       result.add(RpcUtils.getStatus(
-          TSStatusCode.QUERY_PROCESS_ERROR, "Meet error in query process: " + e.getMessage()));
+          TSStatusCode.QUERY_PROCESS_ERROR, MEET_ERROE_IN_QUERY_PROCESS + e.getMessage()));
       return false;
     } catch (QueryInBatchStatementException e) {
       logger.info("Error occurred when executing {}, query statement not allowed: ", statement, e);
@@ -535,17 +540,17 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
         return executeUpdateStatement(physicalPlan, req.getSessionId());
       }
     } catch (ParseCancellationException e) {
-      logger.warn(ERROR_PARSING_SQL, req.getStatement() + " " + e.getMessage());
+      failuerQueryTraceLogger.warn(ERROR_PARSING_SQL, req.getStatement() + " " + e.getMessage());
       return RpcUtils.getTSExecuteStatementResp(TSStatusCode.SQL_PARSE_ERROR, e.getMessage());
     } catch (SQLParserException e) {
-      logger.warn(CHECK_METADATA_ERROR, e);
+      failuerQueryTraceLogger.warn(CHECK_METADATA_ERROR, e);
       return RpcUtils.getTSExecuteStatementResp(
           TSStatusCode.METADATA_ERROR, CHECK_METADATA_ERROR + e.getMessage());
     } catch (QueryProcessException e) {
-      logger.info(ERROR_PARSING_SQL, e.getMessage());
+      failuerQueryTraceLogger.warn(MEET_ERROE_IN_QUERY_PROCESS, e);
       return RpcUtils.getTSExecuteStatementResp(
           RpcUtils.getStatus(TSStatusCode.QUERY_PROCESS_ERROR,
-              "Meet error in query process: " + e.getMessage()));
+              MEET_ERROE_IN_QUERY_PROCESS + e.getMessage()));
     } catch (NullPointerException e) {
       logger.error(SERVER_INTERNAL_ERROR, IoTDBConstant.GLOBAL_DB_NAME, e);
       return RpcUtils.getTSExecuteStatementResp(TSStatusCode.INTERNAL_SERVER_ERROR, e.getMessage());
@@ -570,7 +575,7 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
             .parseSQLToPhysicalPlan(statement, sessionIdZoneIdMap.get(req.getSessionId()),
                 req.fetchSize);
       } catch (QueryProcessException | SQLParserException e) {
-        logger.info(ERROR_PARSING_SQL, req.getStatement() + " " + e.getMessage());
+        failuerQueryTraceLogger.info(ERROR_PARSING_SQL, req.getStatement() + " " + e.getMessage());
         return RpcUtils.getTSExecuteStatementResp(TSStatusCode.SQL_PARSE_ERROR, e.getMessage());
       }
 
@@ -583,13 +588,18 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
           sessionIdUsernameMap.get(req.getSessionId()));
 
     } catch (ParseCancellationException e) {
-      logger.warn(ERROR_PARSING_SQL, req.getStatement() + " " + e.getMessage());
+      failuerQueryTraceLogger.warn(ERROR_PARSING_SQL, req.getStatement() + " " + e.getMessage());
       return RpcUtils.getTSExecuteStatementResp(TSStatusCode.SQL_PARSE_ERROR,
           ERROR_PARSING_SQL + e.getMessage());
     } catch (SQLParserException e) {
-      logger.warn(CHECK_METADATA_ERROR, e);
+      failuerQueryTraceLogger.warn(CHECK_METADATA_ERROR, e);
       return RpcUtils.getTSExecuteStatementResp(
           TSStatusCode.METADATA_ERROR, CHECK_METADATA_ERROR + e.getMessage());
+    } catch (QueryProcessException e) {
+      failuerQueryTraceLogger.warn(MEET_ERROE_IN_QUERY_PROCESS, e);
+      return RpcUtils.getTSExecuteStatementResp(
+          RpcUtils.getStatus(TSStatusCode.QUERY_PROCESS_ERROR,
+              MEET_ERROE_IN_QUERY_PROCESS + e.getMessage()));
     } catch (NullPointerException e) {
       logger.error(SERVER_INTERNAL_ERROR, IoTDBConstant.GLOBAL_DB_NAME, e);
       return RpcUtils.getTSExecuteStatementResp(
@@ -614,7 +624,7 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
         physicalPlan = processor
             .rawDataQueryReqToPhysicalPlan(req, sessionIdZoneIdMap.get(req.getSessionId()));
       } catch (QueryProcessException | SQLParserException e) {
-        logger.info(ERROR_PARSING_SQL, e.getMessage());
+        failuerQueryTraceLogger.info(ERROR_PARSING_SQL, e.getMessage());
         return RpcUtils.getTSExecuteStatementResp(TSStatusCode.SQL_PARSE_ERROR, e.getMessage());
       }
 
@@ -627,13 +637,18 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
           sessionIdUsernameMap.get(req.getSessionId()));
 
     } catch (ParseCancellationException e) {
-      logger.warn(ERROR_PARSING_SQL, e.getMessage());
+      failuerQueryTraceLogger.warn(ERROR_PARSING_SQL, e.getMessage());
       return RpcUtils.getTSExecuteStatementResp(TSStatusCode.SQL_PARSE_ERROR,
           ERROR_PARSING_SQL + e.getMessage());
     } catch (SQLParserException e) {
-      logger.warn(CHECK_METADATA_ERROR, e);
+      failuerQueryTraceLogger.warn(CHECK_METADATA_ERROR, e);
       return RpcUtils.getTSExecuteStatementResp(
           TSStatusCode.METADATA_ERROR, CHECK_METADATA_ERROR + e.getMessage());
+    }  catch (QueryProcessException e) {
+      failuerQueryTraceLogger.warn(MEET_ERROE_IN_QUERY_PROCESS, e);
+      return RpcUtils.getTSExecuteStatementResp(
+          RpcUtils.getStatus(TSStatusCode.QUERY_PROCESS_ERROR,
+              MEET_ERROE_IN_QUERY_PROCESS + e.getMessage()));
     } catch (NullPointerException e) {
       logger.error(SERVER_INTERNAL_ERROR, IoTDBConstant.GLOBAL_DB_NAME, e);
       return RpcUtils.getTSExecuteStatementResp(
@@ -651,7 +666,7 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
    */
   @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity warning
   private TSExecuteStatementResp internalExecuteQueryStatement(String statement,
-      long statementId, PhysicalPlan plan, int fetchSize, String username) throws IOException {
+      long statementId, PhysicalPlan plan, int fetchSize, String username) throws QueryProcessException, IOException {
     queryCount.incrementAndGet();
     auditLogger.debug("Session {} execute Query: {}", currSessionId.get(), statement);
     long startTime = System.currentTimeMillis();
@@ -770,19 +785,14 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
       }
 
       return resp;
+    } catch (QueryProcessException e) {
+      releaseQueryResourceWithCatchException(queryId);
+      throw e;
     } catch (Exception e) {
       if (e instanceof NullPointerException) {
         logger.error("{}: Internal server error: ", IoTDBConstant.GLOBAL_DB_NAME, e);
-      } else {
-        logger.warn("{}: Internal server error: ", IoTDBConstant.GLOBAL_DB_NAME, e);
-      }
-      if (queryId != -1) {
-        try {
-          releaseQueryResource(queryId);
-        } catch (StorageEngineException ex) {
-          logger.warn("Error happened while releasing query resource: ", ex);
-        }
       }
+      releaseQueryResourceWithCatchException(queryId);
       Throwable cause = e;
       while (cause.getCause() != null) {
         cause = cause.getCause();
@@ -807,6 +817,16 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
     }
   }
 
+  private void releaseQueryResourceWithCatchException(long queryId) throws IOException {
+    if (queryId != -1) {
+      try {
+        releaseQueryResource(queryId);
+      } catch (StorageEngineException ex) {
+        logger.warn("Error happened while releasing query resource: ", ex);
+      }
+    }
+  }
+
   private TSExecuteStatementResp getListDataSetHeaders(QueryDataSet dataSet) {
     return StaticResps
         .getNoTimeExecuteResp(dataSet.getPaths().stream().map(Path::getFullPath).collect(
@@ -1133,7 +1153,7 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
       physicalPlan = processor
           .parseSQLToPhysicalPlan(statement, sessionIdZoneIdMap.get(sessionId), DEFAULT_FETCH_SIZE);
     } catch (QueryProcessException | SQLParserException e) {
-      logger.warn(ERROR_PARSING_SQL, statement, e);
+      failuerQueryTraceLogger.warn(ERROR_PARSING_SQL, statement, e);
       return RpcUtils.getTSExecuteStatementResp(TSStatusCode.SQL_PARSE_ERROR, e.getMessage());
     }
 
@@ -1777,15 +1797,16 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
       execRet = executeNonQuery(plan);
     } catch (BatchProcessException e) {
       return RpcUtils.getStatus(Arrays.asList(e.getFailingStatus()));
-    } catch (QueryProcessException e) {
-      logger.warn("meet error while processing non-query. ", e);
+    } catch (QueryProcessException | StorageGroupNotSetException e) {
+      failuerQueryTraceLogger.warn("meet error while processing non-query. ", e);
       Throwable cause = e;
       while (cause.getCause() != null) {
         cause = cause.getCause();
       }
       return RpcUtils.getStatus(e.getErrorCode(), cause.getMessage());
-    } catch (Exception e) {
-      logger.warn(SERVER_INTERNAL_ERROR, IoTDBConstant.GLOBAL_DB_NAME, e);
+    }
+    catch (Exception e) {
+      logger.error(SERVER_INTERNAL_ERROR, IoTDBConstant.GLOBAL_DB_NAME, e);
       return RpcUtils.getStatus(TSStatusCode.INTERNAL_SERVER_ERROR, e.getMessage());
     }
 
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBFlushQueryMergeIT.java b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBFlushQueryMergeIT.java
index 00e57e7..a813218 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBFlushQueryMergeIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBFlushQueryMergeIT.java
@@ -196,7 +196,7 @@ public class IoTDBFlushQueryMergeIT {
         StorageGroupNotSetException tmpsgnse = new StorageGroupNotSetException(
             "root.notExistGroup1,root.notExistGroup2");
         SQLException sqlException = new SQLException(
-            TSStatusCode.INTERNAL_SERVER_ERROR.getStatusCode() + ": " +
+            TSStatusCode.METADATA_ERROR.getStatusCode() + ": " +
                 tmpsgnse.getMessage());
         assertEquals(sqlException.getMessage(), sqe.getMessage());
       }
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBGroupByFillWithRangeIT.java b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBGroupByFillWithRangeIT.java
index ec5eb86..84b24bf 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBGroupByFillWithRangeIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBGroupByFillWithRangeIT.java
@@ -34,9 +34,11 @@ import org.apache.iotdb.jdbc.Config;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class IoTDBGroupByFillWithRangeIT {
-
+  private static Logger logger = LoggerFactory.getLogger(IoTDBGroupByFillWithRangeIT.class);
   private static String[] dataSet1 = new String[]{
       "SET STORAGE GROUP TO root.ln.wf01.wt01",
       "CREATE TIMESERIES root.ln.wf01.wt01.temperature WITH DATATYPE=INT32, ENCODING=PLAIN",
@@ -113,7 +115,7 @@ public class IoTDBGroupByFillWithRangeIT {
           String ans = resultSet.getString(TIMESTAMP_STR) + "," + resultSet
               .getString(last_value("root.ln.wf01.wt01.temperature"));
           assertEquals(retArray2[cnt], ans);
-          System.out.println(ans);
+          logger.debug(ans);
           cnt++;
         }
         assertEquals(retArray2.length, cnt);
@@ -131,7 +133,7 @@ public class IoTDBGroupByFillWithRangeIT {
           String ans = resultSet.getString(TIMESTAMP_STR) + "," + resultSet
               .getString(last_value("root.ln.wf01.wt01.temperature"));
           assertEquals(retArray2[cnt], ans);
-          System.out.println(ans);
+          logger.debug(ans);
           cnt++;
         }
         assertEquals(retArray2.length, cnt);
@@ -149,7 +151,7 @@ public class IoTDBGroupByFillWithRangeIT {
           String ans = resultSet.getString(TIMESTAMP_STR) + "," + resultSet
               .getString(last_value("root.ln.wf01.wt01.temperature"));
           assertEquals(retArray2[retArray2.length - cnt - 1], ans);
-          System.out.println(ans);
+          logger.debug(ans);
           cnt++;
         }
         assertEquals(retArray2.length, cnt);
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBUDFManagementIT.java b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBUDFManagementIT.java
index 14923bb..a1b8684 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBUDFManagementIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBUDFManagementIT.java
@@ -104,7 +104,7 @@ public class IoTDBUDFManagementIT {
 
       statement.execute("drop function udf");
     } catch (SQLException throwable) {
-      throwable.printStackTrace();
+      
       fail(throwable.getMessage());
     }
   }
@@ -176,7 +176,7 @@ public class IoTDBUDFManagementIT {
 
       statement.execute("drop function udf");
     } catch (SQLException throwable) {
-      throwable.printStackTrace();
+      
       fail(throwable.getMessage());
     }
   }
@@ -188,7 +188,7 @@ public class IoTDBUDFManagementIT {
         Statement statement = connection.createStatement()) {
       statement.execute("select udf(*, *) from root.vehicle");
     } catch (SQLException throwable) {
-      throwable.printStackTrace();
+      
       assertTrue(throwable.getMessage().contains("Failed to reflect UDF instance"));
     }
   }
@@ -202,7 +202,6 @@ public class IoTDBUDFManagementIT {
       statement.execute("drop function udf");
       statement.execute("select udf(*, *) from root.vehicle");
     } catch (SQLException throwable) {
-      throwable.printStackTrace();
       assertTrue(throwable.getMessage().contains("Failed to reflect UDF instance"));
     }
   }
@@ -215,7 +214,6 @@ public class IoTDBUDFManagementIT {
       statement.execute("create function aVg as \"org.apache.iotdb.db.query.udf.example.Adder\"");
       fail();
     } catch (SQLException throwable) {
-      throwable.printStackTrace();
       assertTrue(throwable.getMessage().contains("expecting ID"));
     }
   }
@@ -229,7 +227,6 @@ public class IoTDBUDFManagementIT {
           .execute("create function MAX_VALUE as \"org.apache.iotdb.db.query.udf.example.Adder\"");
       fail();
     } catch (SQLException throwable) {
-      throwable.printStackTrace();
       assertTrue(throwable.getMessage().contains("expecting ID"));
     }
   }
@@ -343,7 +340,7 @@ public class IoTDBUDFManagementIT {
       statement.execute("create function adder as \"org.apache.iotdb.db.query.udf.example.Adder\"");
       fail();
     } catch (SQLException throwable) {
-      throwable.printStackTrace();
+      
       assertTrue(throwable.getMessage()
           .contains("the given function name is the same as a built-in UDF function name"));
     } finally {
@@ -361,7 +358,7 @@ public class IoTDBUDFManagementIT {
       statement.execute("drop function adder");
       fail();
     } catch (SQLException throwable) {
-      throwable.printStackTrace();
+      
       assertTrue(
           throwable.getMessage().contains("Built-in function adder can not be deregistered"));
     } finally {
@@ -378,7 +375,7 @@ public class IoTDBUDFManagementIT {
         Statement statement = connection.createStatement()) {
       statement.execute("select adder(*, *) from root.vehicle");
     } catch (SQLException throwable) {
-      throwable.printStackTrace();
+      
       fail(throwable.getMessage());
     } finally {
       UDFRegistrationService.getInstance().deregisterBuiltinFunction("adder");
@@ -429,7 +426,7 @@ public class IoTDBUDFManagementIT {
 
       statement.execute("drop function udf");
     } catch (SQLException throwable) {
-      throwable.printStackTrace();
+      
       fail(throwable.getMessage());
     } finally {
       UDFRegistrationService.getInstance().deregisterBuiltinFunction("adder");
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBUDTFHybridQueryIT.java b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBUDTFHybridQueryIT.java
index ec4e299..97db594 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBUDTFHybridQueryIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBUDTFHybridQueryIT.java
@@ -105,7 +105,7 @@ public class IoTDBUDTFHybridQueryIT {
       statement.executeQuery(sql);
       fail();
     } catch (SQLException throwable) {
-      throwable.printStackTrace();
+      
       assertTrue(throwable.getMessage()
           .contains("User-defined and built-in hybrid aggregation is not supported."));
     }
@@ -123,7 +123,7 @@ public class IoTDBUDTFHybridQueryIT {
       statement.executeQuery(sql);
       fail();
     } catch (SQLException throwable) {
-      throwable.printStackTrace();
+      
       assertTrue(
           throwable.getMessage().contains("Fill functions are not supported in UDF queries."));
     }
@@ -141,7 +141,7 @@ public class IoTDBUDTFHybridQueryIT {
       statement.executeQuery(sql);
       fail();
     } catch (SQLException throwable) {
-      throwable.printStackTrace();
+      
       assertTrue(throwable.getMessage().contains("meet error while parsing SQL to physical plan"));
     }
   }
@@ -158,7 +158,6 @@ public class IoTDBUDTFHybridQueryIT {
       statement.executeQuery(sql);
       fail();
     } catch (SQLException throwable) {
-      throwable.printStackTrace();
       assertTrue(throwable.getMessage()
           .contains("ALIGN BY DEVICE clause is not supported in UDF queries."));
     }
diff --git a/server/src/test/java/org/apache/iotdb/db/query/reader/series/SeriesReaderTest.java b/server/src/test/java/org/apache/iotdb/db/query/reader/series/SeriesReaderTest.java
index e6dc2f5..b78de1f 100644
--- a/server/src/test/java/org/apache/iotdb/db/query/reader/series/SeriesReaderTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/query/reader/series/SeriesReaderTest.java
@@ -43,12 +43,14 @@ import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
 
 public class SeriesReaderTest {
-
+  private static Logger logger = LoggerFactory.getLogger(SeriesReaderTest.class);
   private static final String SERIES_READER_TEST_SG = "root.seriesReaderTest";
   private List<String> deviceIds = new ArrayList<>();
   private List<MeasurementSchema> measurementSchemas = new ArrayList<>();
@@ -145,7 +147,7 @@ public class SeriesReaderTest {
       long expectedTime = 499;
       while (pointReader.hasNextTimeValuePair()) {
         TimeValuePair timeValuePair = pointReader.nextTimeValuePair();
-        System.out.println(timeValuePair);
+        logger.debug(timeValuePair.toString());
         assertEquals(expectedTime, timeValuePair.getTimestamp());
         int value = timeValuePair.getValue().getInt();
         if (expectedTime < 200) {
diff --git a/server/src/test/java/org/apache/iotdb/db/query/udf/example/Accumulator.java b/server/src/test/java/org/apache/iotdb/db/query/udf/example/Accumulator.java
index b892e15..7f732de 100644
--- a/server/src/test/java/org/apache/iotdb/db/query/udf/example/Accumulator.java
+++ b/server/src/test/java/org/apache/iotdb/db/query/udf/example/Accumulator.java
@@ -34,9 +34,11 @@ import org.apache.iotdb.db.query.udf.api.customizer.strategy.RowByRowAccessStrat
 import org.apache.iotdb.db.query.udf.api.customizer.strategy.SlidingTimeWindowAccessStrategy;
 import org.apache.iotdb.db.query.udf.api.customizer.strategy.SlidingSizeWindowAccessStrategy;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class Accumulator implements UDTF {
-
+  private static Logger logger = LoggerFactory.getLogger(Accumulator.class);
   @Override
   public void validate(UDFParameterValidator validator) throws Exception {
     validator
@@ -46,7 +48,7 @@ public class Accumulator implements UDTF {
 
   @Override
   public void beforeStart(UDFParameters parameters, UDTFConfigurations configurations) {
-    System.out.println("Accumulator#beforeStart");
+    logger.debug("Accumulator#beforeStart");
     configurations.setOutputDataType(TSDataType.INT32);
     switch (parameters.getStringOrDefault(ACCESS_STRATEGY_KEY, ACCESS_STRATEGY_ROW_BY_ROW)) {
       case ACCESS_STRATEGY_SLIDING_SIZE:
@@ -85,6 +87,6 @@ public class Accumulator implements UDTF {
 
   @Override
   public void beforeDestroy() {
-    System.out.println("Accumulator#beforeDestroy");
+    logger.debug("Accumulator#beforeDestroy");
   }
 }
diff --git a/server/src/test/java/org/apache/iotdb/db/query/udf/example/Adder.java b/server/src/test/java/org/apache/iotdb/db/query/udf/example/Adder.java
index 4b46425..4aec808 100644
--- a/server/src/test/java/org/apache/iotdb/db/query/udf/example/Adder.java
+++ b/server/src/test/java/org/apache/iotdb/db/query/udf/example/Adder.java
@@ -28,9 +28,11 @@ import org.apache.iotdb.db.query.udf.api.customizer.parameter.UDFParameters;
 import org.apache.iotdb.db.query.udf.api.customizer.strategy.RowByRowAccessStrategy;
 import org.apache.iotdb.tsfile.exception.write.UnSupportedDataTypeException;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class Adder implements UDTF {
-
+  private static Logger logger = LoggerFactory.getLogger(Adder.class);
   private double addend;
 
   @Override
@@ -45,7 +47,7 @@ public class Adder implements UDTF {
 
   @Override
   public void beforeStart(UDFParameters parameters, UDTFConfigurations configurations) {
-    System.out.println("Adder#beforeStart");
+    logger.debug("Adder#beforeStart");
     addend = parameters.getFloatOrDefault("addend", 0);
     configurations
         .setOutputDataType(TSDataType.INT64)
@@ -84,6 +86,6 @@ public class Adder implements UDTF {
 
   @Override
   public void beforeDestroy() {
-    System.out.println("Adder#beforeDestroy");
+    logger.debug("Adder#beforeDestroy");
   }
 }
diff --git a/server/src/test/java/org/apache/iotdb/db/query/udf/example/SlidingSizeWindowConstructorTester0.java b/server/src/test/java/org/apache/iotdb/db/query/udf/example/SlidingSizeWindowConstructorTester0.java
index 7cfcae1..a456ec4 100644
--- a/server/src/test/java/org/apache/iotdb/db/query/udf/example/SlidingSizeWindowConstructorTester0.java
+++ b/server/src/test/java/org/apache/iotdb/db/query/udf/example/SlidingSizeWindowConstructorTester0.java
@@ -26,12 +26,14 @@ import org.apache.iotdb.db.query.udf.api.customizer.config.UDTFConfigurations;
 import org.apache.iotdb.db.query.udf.api.customizer.parameter.UDFParameters;
 import org.apache.iotdb.db.query.udf.api.customizer.strategy.SlidingSizeWindowAccessStrategy;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class SlidingSizeWindowConstructorTester0 implements UDTF {
-
+  private static Logger logger = LoggerFactory.getLogger(SlidingSizeWindowConstructorTester0.class);
   @Override
   public void beforeStart(UDFParameters parameters, UDTFConfigurations configurations) {
-    System.out.println("SlidingSizeWindowConstructorTester0#beforeStart");
+    logger.debug("SlidingSizeWindowConstructorTester0#beforeStart");
     int windowSize = parameters.getInt("windowSize");
     int slidingStep = parameters.getInt("slidingStep");
     configurations
@@ -48,6 +50,6 @@ public class SlidingSizeWindowConstructorTester0 implements UDTF {
 
   @Override
   public void beforeDestroy() {
-    System.out.println("SlidingSizeWindowConstructorTester0#beforeDestroy");
+    logger.debug("SlidingSizeWindowConstructorTester0#beforeDestroy");
   }
 }
diff --git a/server/src/test/java/org/apache/iotdb/db/query/udf/example/SlidingSizeWindowConstructorTester1.java b/server/src/test/java/org/apache/iotdb/db/query/udf/example/SlidingSizeWindowConstructorTester1.java
index 0ec5e3e..43bdd49 100644
--- a/server/src/test/java/org/apache/iotdb/db/query/udf/example/SlidingSizeWindowConstructorTester1.java
+++ b/server/src/test/java/org/apache/iotdb/db/query/udf/example/SlidingSizeWindowConstructorTester1.java
@@ -27,9 +27,11 @@ import org.apache.iotdb.db.query.udf.api.customizer.parameter.UDFParameterValida
 import org.apache.iotdb.db.query.udf.api.customizer.parameter.UDFParameters;
 import org.apache.iotdb.db.query.udf.api.customizer.strategy.RowByRowAccessStrategy;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class SlidingSizeWindowConstructorTester1 implements UDTF {
-
+  private static Logger logger = LoggerFactory.getLogger(SlidingSizeWindowConstructorTester1.class);
   private int consumptionPoint;
 
   @Override
@@ -41,7 +43,7 @@ public class SlidingSizeWindowConstructorTester1 implements UDTF {
 
   @Override
   public void beforeStart(UDFParameters parameters, UDTFConfigurations configurations) {
-    System.out.println("SlidingSizeWindowConstructorTester1#beforeStart");
+    logger.debug("SlidingSizeWindowConstructorTester1#beforeStart");
     consumptionPoint = parameters.getInt("consumptionPoint");
     configurations
         .setOutputDataType(TSDataType.INT32)
@@ -57,6 +59,6 @@ public class SlidingSizeWindowConstructorTester1 implements UDTF {
 
   @Override
   public void beforeDestroy() {
-    System.out.println("SlidingSizeWindowConstructorTester1#beforeDestroy");
+    logger.debug("SlidingSizeWindowConstructorTester1#beforeDestroy");
   }
 }
diff --git a/server/src/test/java/org/apache/iotdb/db/query/udf/example/SlidingTimeWindowConstructionTester.java b/server/src/test/java/org/apache/iotdb/db/query/udf/example/SlidingTimeWindowConstructionTester.java
index 49ed420..9f5370d 100644
--- a/server/src/test/java/org/apache/iotdb/db/query/udf/example/SlidingTimeWindowConstructionTester.java
+++ b/server/src/test/java/org/apache/iotdb/db/query/udf/example/SlidingTimeWindowConstructionTester.java
@@ -31,9 +31,11 @@ import org.apache.iotdb.db.query.udf.api.customizer.parameter.UDFParameterValida
 import org.apache.iotdb.db.query.udf.api.customizer.parameter.UDFParameters;
 import org.apache.iotdb.db.query.udf.api.customizer.strategy.SlidingTimeWindowAccessStrategy;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class SlidingTimeWindowConstructionTester implements UDTF {
-
+  private static Logger logger = LoggerFactory.getLogger(SlidingTimeWindowConstructionTester.class);
   @Override
   public void validate(UDFParameterValidator validator) throws Exception {
     validator
@@ -43,7 +45,7 @@ public class SlidingTimeWindowConstructionTester implements UDTF {
 
   @Override
   public void beforeStart(UDFParameters parameters, UDTFConfigurations configurations) {
-    System.out.println("SlidingTimeWindowConstructionTester#beforeStart");
+    logger.debug("SlidingTimeWindowConstructionTester#beforeStart");
     long timeInterval = parameters.getLong(TIME_INTERVAL_KEY);
     configurations
         .setOutputDataType(TSDataType.INT32)
@@ -64,6 +66,6 @@ public class SlidingTimeWindowConstructionTester implements UDTF {
 
   @Override
   public void beforeDestroy() {
-    System.out.println("SlidingTimeWindowConstructionTester#beforeDestroy");
+    logger.debug("SlidingTimeWindowConstructionTester#beforeDestroy");
   }
 }
diff --git a/server/src/test/java/org/apache/iotdb/db/utils/EnvironmentUtils.java b/server/src/test/java/org/apache/iotdb/db/utils/EnvironmentUtils.java
index 5551376..68d5b45 100644
--- a/server/src/test/java/org/apache/iotdb/db/utils/EnvironmentUtils.java
+++ b/server/src/test/java/org/apache/iotdb/db/utils/EnvironmentUtils.java
@@ -284,6 +284,7 @@ public class EnvironmentUtils {
   public static void restartDaemon() throws Exception {
     shutdownDaemon();
     stopDaemon();
+    IoTDB.metaManager.clear();
     reactiveDaemon();
   }
 
diff --git a/server/src/test/resources/logback.xml b/server/src/test/resources/logback.xml
index 72a549e..c06b1ed 100644
--- a/server/src/test/resources/logback.xml
+++ b/server/src/test/resources/logback.xml
@@ -54,4 +54,5 @@
     <root level="WARN">
         <appender-ref ref="stdout"/>
     </root>
+    <logger level="ERROR" name="DETAILED_FAILUER_QUERY_TRACE"/>
 </configuration>
diff --git a/service-rpc/src/main/java/org/apache/iotdb/rpc/TSStatusCode.java b/service-rpc/src/main/java/org/apache/iotdb/rpc/TSStatusCode.java
index b839c53..edc52c7 100644
--- a/service-rpc/src/main/java/org/apache/iotdb/rpc/TSStatusCode.java
+++ b/service-rpc/src/main/java/org/apache/iotdb/rpc/TSStatusCode.java
@@ -64,6 +64,8 @@ public enum TSStatusCode {
   UNSUPPORTED_INDEX_FUNC_ERROR(421),
   UNSUPPORTED_INDEX_TYPE_ERROR(422),
 
+  UDF_NOT_FOUND(440),
+
 
   INTERNAL_SERVER_ERROR(500),
   CLOSE_OPERATION_ERROR(501),