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:31 UTC

[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

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),