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