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 <[email protected]> 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),
