This is an automated email from the ASF dual-hosted git repository.
tanxinyu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new 4b0fc1d7ec6 [IOTDB-6239] Show regions display error create time
(#11481)
4b0fc1d7ec6 is described below
commit 4b0fc1d7ec6327d2567622b6450bed6110720064
Author: Yongzao <[email protected]>
AuthorDate: Wed Nov 8 10:32:21 2023 +0800
[IOTDB-6239] Show regions display error create time (#11481)
---
.../write/region/CreateRegionGroupsPlan.java | 54 +++++++++++++++-------
.../manager/load/balancer/RegionBalancer.java | 2 +-
.../partition/DatabasePartitionTable.java | 6 +--
.../persistence/partition/PartitionInfo.java | 6 ++-
.../statemachine/CreateRegionGroupsProcedure.java | 12 +++--
.../request/ConfigPhysicalPlanSerDeTest.java | 5 +-
.../confignode/persistence/PartitionInfoTest.java | 5 ++
.../impl/CreateRegionGroupsProcedureTest.java | 4 ++
.../org/apache/iotdb/db/audit/AuditLogger.java | 4 +-
.../java/org/apache/iotdb/db/conf/IoTDBConfig.java | 7 ---
.../db/queryengine/plan/parser/ASTVisitor.java | 19 ++++----
.../planner/plan/parameter/SeriesScanOptions.java | 7 +--
.../db/storageengine/dataregion/DataRegion.java | 17 ++++---
.../dataregion/flush/MemTableFlushTask.java | 4 +-
.../dataregion/tsfile/TsFileResource.java | 4 +-
.../org/apache/iotdb/db/utils/DateTimeUtils.java | 14 ------
.../apache/iotdb/commons/conf/CommonConfig.java | 7 +++
.../iotdb/commons/utils/CommonDateTimeUtils.java | 15 ++++++
18 files changed, 119 insertions(+), 73 deletions(-)
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/region/CreateRegionGroupsPlan.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/region/CreateRegionGroupsPlan.java
index 14f6d851563..8ef18502982 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/region/CreateRegionGroupsPlan.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/region/CreateRegionGroupsPlan.java
@@ -22,6 +22,7 @@ package
org.apache.iotdb.confignode.consensus.request.write.region;
import org.apache.iotdb.common.rpc.thrift.TDataNodeLocation;
import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
import org.apache.iotdb.commons.utils.BasicStructureSerDeUtil;
+import org.apache.iotdb.commons.utils.CommonDateTimeUtils;
import org.apache.iotdb.commons.utils.ThriftCommonsSerDeUtils;
import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlan;
import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlanType;
@@ -39,10 +40,11 @@ import java.util.Map.Entry;
import java.util.Objects;
import java.util.stream.Collectors;
-/** Create regions for specific StorageGroups. */
+/** Create regions for specified Databases. */
public class CreateRegionGroupsPlan extends ConfigPhysicalPlan {
- // Map<StorageGroupName, List<TRegionReplicaSet>>
+ protected long createTime;
+ // Map<Database, List<TRegionReplicaSet>>
protected final Map<String, List<TRegionReplicaSet>> regionGroupMap;
public CreateRegionGroupsPlan() {
@@ -59,20 +61,28 @@ public class CreateRegionGroupsPlan extends
ConfigPhysicalPlan {
return regionGroupMap;
}
- public void addRegionGroup(String storageGroup, TRegionReplicaSet
regionReplicaSet) {
+ public long getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(long createTime) {
+ this.createTime = createTime;
+ }
+
+ public void addRegionGroup(String database, TRegionReplicaSet
regionReplicaSet) {
regionGroupMap
- .computeIfAbsent(storageGroup, regionReplicaSets -> new ArrayList<>())
+ .computeIfAbsent(database, regionReplicaSets -> new ArrayList<>())
.add(regionReplicaSet);
}
public void planLog(Logger logger) {
for (Map.Entry<String, List<TRegionReplicaSet>> regionGroupEntry :
regionGroupMap.entrySet()) {
- String storageGroup = regionGroupEntry.getKey();
+ String database = regionGroupEntry.getKey();
for (TRegionReplicaSet regionReplicaSet : regionGroupEntry.getValue()) {
logger.info(
- "[CreateRegionGroups] RegionGroup: {}, belonged StorageGroup: {},
on DataNodes: {}",
+ "[CreateRegionGroups] RegionGroup: {}, belonged database: {}, on
DataNodes: {}",
regionReplicaSet.getRegionId(),
- storageGroup,
+ database,
regionReplicaSet.getDataNodeLocations().stream()
.map(TDataNodeLocation::getDataNodeId)
.collect(Collectors.toList()));
@@ -96,30 +106,39 @@ public class CreateRegionGroupsPlan extends
ConfigPhysicalPlan {
stream.writeInt(regionGroupMap.size());
for (Entry<String, List<TRegionReplicaSet>> entry :
regionGroupMap.entrySet()) {
- String storageGroup = entry.getKey();
+ String database = entry.getKey();
List<TRegionReplicaSet> regionReplicaSets = entry.getValue();
- BasicStructureSerDeUtil.write(storageGroup, stream);
+ BasicStructureSerDeUtil.write(database, stream);
stream.writeInt(regionReplicaSets.size());
regionReplicaSets.forEach(
regionReplicaSet ->
ThriftCommonsSerDeUtils.serializeTRegionReplicaSet(regionReplicaSet, stream));
}
+
+ stream.writeLong(createTime);
}
@Override
protected void deserializeImpl(ByteBuffer buffer) throws IOException {
- int storageGroupNum = buffer.getInt();
- for (int i = 0; i < storageGroupNum; i++) {
- String storageGroup = BasicStructureSerDeUtil.readString(buffer);
- regionGroupMap.put(storageGroup, new ArrayList<>());
+ int databaseNum = buffer.getInt();
+ for (int i = 0; i < databaseNum; i++) {
+ String database = BasicStructureSerDeUtil.readString(buffer);
+ regionGroupMap.put(database, new ArrayList<>());
int regionReplicaSetNum = buffer.getInt();
for (int j = 0; j < regionReplicaSetNum; j++) {
TRegionReplicaSet regionReplicaSet =
ThriftCommonsSerDeUtils.deserializeTRegionReplicaSet(buffer);
- regionGroupMap.get(storageGroup).add(regionReplicaSet);
+ regionGroupMap.get(database).add(regionReplicaSet);
}
}
+
+ if (buffer.hasRemaining()) {
+ // For compatibility
+ createTime = buffer.getLong();
+ } else {
+ createTime = CommonDateTimeUtils.currentTime();
+ }
}
@Override
@@ -130,12 +149,15 @@ public class CreateRegionGroupsPlan extends
ConfigPhysicalPlan {
if (o == null || getClass() != o.getClass()) {
return false;
}
+ if (!super.equals(o)) {
+ return false;
+ }
CreateRegionGroupsPlan that = (CreateRegionGroupsPlan) o;
- return regionGroupMap.equals(that.regionGroupMap);
+ return createTime == that.createTime && Objects.equals(regionGroupMap,
that.regionGroupMap);
}
@Override
public int hashCode() {
- return Objects.hash(regionGroupMap);
+ return Objects.hash(super.hashCode(), createTime, regionGroupMap);
}
}
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/balancer/RegionBalancer.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/balancer/RegionBalancer.java
index c9965fe036c..dc2c70fc003 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/balancer/RegionBalancer.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/balancer/RegionBalancer.java
@@ -64,7 +64,7 @@ public class RegionBalancer {
/**
* Generate a RegionGroups' allocation plan(CreateRegionGroupsPlan)
*
- * @param allotmentMap Map<StorageGroupName, RegionGroup allotment>
+ * @param allotmentMap Map<DatabaseName, RegionGroup allotment>
* @param consensusGroupType TConsensusGroupType of the new RegionGroups
* @return CreateRegionGroupsPlan
* @throws NotEnoughDataNodeException When the number of DataNodes is not
enough for allocation
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/partition/DatabasePartitionTable.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/partition/DatabasePartitionTable.java
index bdca8aa7959..f50ac1e5e2d 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/partition/DatabasePartitionTable.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/partition/DatabasePartitionTable.java
@@ -90,12 +90,12 @@ public class DatabasePartitionTable {
* Cache allocation result of new RegionGroups.
*
* @param replicaSets List<TRegionReplicaSet>
+ * @param createTime The creation time of RegionGroups
*/
- public void createRegionGroups(List<TRegionReplicaSet> replicaSets) {
+ public void createRegionGroups(List<TRegionReplicaSet> replicaSets, long
createTime) {
replicaSets.forEach(
replicaSet ->
- regionGroupMap.put(
- replicaSet.getRegionId(), new
RegionGroup(System.currentTimeMillis(), replicaSet)));
+ regionGroupMap.put(replicaSet.getRegionId(), new
RegionGroup(createTime, replicaSet)));
}
/** @return Deep copy of all Regions' RegionReplicaSet within one
StorageGroup */
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/partition/PartitionInfo.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/partition/PartitionInfo.java
index 710c4b91ebf..23d35c54097 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/partition/PartitionInfo.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/partition/PartitionInfo.java
@@ -164,8 +164,10 @@ public class PartitionInfo implements SnapshotProcessor {
plan.getRegionGroupMap()
.forEach(
- (storageGroup, regionReplicaSets) -> {
-
databasePartitionTables.get(storageGroup).createRegionGroups(regionReplicaSets);
+ (database, regionReplicaSets) -> {
+ databasePartitionTables
+ .get(database)
+ .createRegionGroups(regionReplicaSets, plan.getCreateTime());
regionReplicaSets.forEach(
regionReplicaSet ->
maxRegionId.set(
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/statemachine/CreateRegionGroupsProcedure.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/statemachine/CreateRegionGroupsProcedure.java
index 9a017a43eba..b114d42ecdf 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/statemachine/CreateRegionGroupsProcedure.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/statemachine/CreateRegionGroupsProcedure.java
@@ -23,6 +23,7 @@ import org.apache.iotdb.common.rpc.thrift.TConsensusGroupId;
import org.apache.iotdb.common.rpc.thrift.TConsensusGroupType;
import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
import org.apache.iotdb.commons.cluster.RegionStatus;
+import org.apache.iotdb.commons.utils.CommonDateTimeUtils;
import org.apache.iotdb.commons.utils.TestOnly;
import org.apache.iotdb.commons.utils.ThriftCommonsSerDeUtils;
import
org.apache.iotdb.confignode.consensus.request.write.region.CreateRegionGroupsPlan;
@@ -90,19 +91,20 @@ public class CreateRegionGroupsProcedure
break;
case SHUNT_REGION_REPLICAS:
persistPlan = new CreateRegionGroupsPlan();
+ persistPlan.setCreateTime(CommonDateTimeUtils.currentTime());
OfferRegionMaintainTasksPlan offerPlan = new
OfferRegionMaintainTasksPlan();
// Filter those RegionGroups that created successfully
createRegionGroupsPlan
.getRegionGroupMap()
.forEach(
- (storageGroup, regionReplicaSets) ->
+ (database, regionReplicaSets) ->
regionReplicaSets.forEach(
regionReplicaSet -> {
if (!failedRegionReplicaSets.containsKey(
regionReplicaSet.getRegionId())) {
// A RegionGroup was created successfully when
// all RegionReplicas were created successfully
- persistPlan.addRegionGroup(storageGroup,
regionReplicaSet);
+ persistPlan.addRegionGroup(database,
regionReplicaSet);
LOGGER.info(
"[CreateRegionGroups] All replicas of
RegionGroup: {} are created successfully!",
regionReplicaSet.getRegionId());
@@ -114,7 +116,7 @@ public class CreateRegionGroupsProcedure
<=
(regionReplicaSet.getDataNodeLocationsSize() - 1) / 2) {
// A RegionGroup can provide service as long as
there are more than
// half of the RegionReplicas created
successfully
- persistPlan.addRegionGroup(storageGroup,
regionReplicaSet);
+ persistPlan.addRegionGroup(database,
regionReplicaSet);
// Build recreate tasks
failedRegionReplicas
@@ -123,11 +125,11 @@ public class CreateRegionGroupsProcedure
targetDataNode -> {
RegionCreateTask createTask =
new RegionCreateTask(
- targetDataNode, storageGroup,
regionReplicaSet);
+ targetDataNode, database,
regionReplicaSet);
if
(TConsensusGroupType.DataRegion.equals(
regionReplicaSet.getRegionId().getType())) {
try {
-
createTask.setTTL(env.getTTL(storageGroup));
+
createTask.setTTL(env.getTTL(database));
} catch (DatabaseNotExistsException
e) {
LOGGER.error("Can't get TTL", e);
}
diff --git
a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanSerDeTest.java
b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanSerDeTest.java
index 82ff95a64af..8554a1c4615 100644
---
a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanSerDeTest.java
+++
b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanSerDeTest.java
@@ -51,6 +51,7 @@ import org.apache.iotdb.commons.sync.PipeStatus;
import org.apache.iotdb.commons.sync.TsFilePipeInfo;
import org.apache.iotdb.commons.trigger.TriggerInformation;
import org.apache.iotdb.commons.udf.UDFInformation;
+import org.apache.iotdb.commons.utils.CommonDateTimeUtils;
import org.apache.iotdb.confignode.consensus.request.auth.AuthorPlan;
import
org.apache.iotdb.confignode.consensus.request.read.database.CountDatabasePlan;
import
org.apache.iotdb.confignode.consensus.request.read.database.GetDatabasePlan;
@@ -346,11 +347,11 @@ public class ConfigPhysicalPlanSerDeTest {
dataNodeLocation.setSchemaRegionConsensusEndPoint(new TEndPoint("0.0.0.0",
10750));
CreateRegionGroupsPlan req0 = new CreateRegionGroupsPlan();
+ req0.setCreateTime(CommonDateTimeUtils.currentTime());
TRegionReplicaSet dataRegionSet = new TRegionReplicaSet();
dataRegionSet.setRegionId(new
TConsensusGroupId(TConsensusGroupType.DataRegion, 0));
dataRegionSet.setDataNodeLocations(Collections.singletonList(dataNodeLocation));
req0.addRegionGroup("root.sg0", dataRegionSet);
-
TRegionReplicaSet schemaRegionSet = new TRegionReplicaSet();
schemaRegionSet.setRegionId(new
TConsensusGroupId(TConsensusGroupType.SchemaRegion, 1));
schemaRegionSet.setDataNodeLocations(Collections.singletonList(dataNodeLocation));
@@ -866,9 +867,11 @@ public class ConfigPhysicalPlanSerDeTest {
failedRegions.put(dataRegionGroupId, dataRegionSet);
failedRegions.put(schemaRegionGroupId, schemaRegionSet);
CreateRegionGroupsPlan createRegionGroupsPlan = new
CreateRegionGroupsPlan();
+ createRegionGroupsPlan.setCreateTime(CommonDateTimeUtils.currentTime());
createRegionGroupsPlan.addRegionGroup("root.sg0", dataRegionSet);
createRegionGroupsPlan.addRegionGroup("root.sg1", schemaRegionSet);
CreateRegionGroupsPlan persistPlan = new CreateRegionGroupsPlan();
+ persistPlan.setCreateTime(CommonDateTimeUtils.currentTime());
persistPlan.addRegionGroup("root.sg0", dataRegionSet);
persistPlan.addRegionGroup("root.sg1", schemaRegionSet);
CreateRegionGroupsProcedure procedure0 =
diff --git
a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/persistence/PartitionInfoTest.java
b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/persistence/PartitionInfoTest.java
index f39dbae6a63..c0761667677 100644
---
a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/persistence/PartitionInfoTest.java
+++
b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/persistence/PartitionInfoTest.java
@@ -29,6 +29,7 @@ import org.apache.iotdb.common.rpc.thrift.TTimePartitionSlot;
import org.apache.iotdb.commons.partition.DataPartitionTable;
import org.apache.iotdb.commons.partition.SchemaPartitionTable;
import org.apache.iotdb.commons.partition.SeriesPartitionTable;
+import org.apache.iotdb.commons.utils.CommonDateTimeUtils;
import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlanType;
import
org.apache.iotdb.confignode.consensus.request.read.region.GetRegionInfoListPlan;
import
org.apache.iotdb.confignode.consensus.request.write.database.DatabaseSchemaPlan;
@@ -108,6 +109,8 @@ public class PartitionInfoTest {
// Create a SchemaRegion
CreateRegionGroupsPlan createRegionGroupsReq = new
CreateRegionGroupsPlan();
+ createRegionGroupsReq.setCreateTime(CommonDateTimeUtils.currentTime());
+
TRegionReplicaSet schemaRegionReplicaSet =
generateTRegionReplicaSet(
testFlag.SchemaPartition.getFlag(),
@@ -163,6 +166,7 @@ public class PartitionInfoTest {
// Create a SchemaRegion
CreateRegionGroupsPlan createRegionGroupsPlan = new
CreateRegionGroupsPlan();
+ createRegionGroupsPlan.setCreateTime(CommonDateTimeUtils.currentTime());
TRegionReplicaSet schemaRegionReplicaSet =
generateTRegionReplicaSet(
testFlag.SchemaPartition.getFlag(),
@@ -173,6 +177,7 @@ public class PartitionInfoTest {
// Create a DataRegion
createRegionGroupsPlan = new CreateRegionGroupsPlan();
+ createRegionGroupsPlan.setCreateTime(CommonDateTimeUtils.currentTime());
TRegionReplicaSet dataRegionReplicaSet =
generateTRegionReplicaSet(
testFlag.DataPartition.getFlag(),
diff --git
a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/procedure/impl/CreateRegionGroupsProcedureTest.java
b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/procedure/impl/CreateRegionGroupsProcedureTest.java
index 9cd9d41301c..c8a0ef129d7 100644
---
a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/procedure/impl/CreateRegionGroupsProcedureTest.java
+++
b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/procedure/impl/CreateRegionGroupsProcedureTest.java
@@ -24,6 +24,7 @@ import org.apache.iotdb.common.rpc.thrift.TConsensusGroupType;
import org.apache.iotdb.common.rpc.thrift.TDataNodeLocation;
import org.apache.iotdb.common.rpc.thrift.TEndPoint;
import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
+import org.apache.iotdb.commons.utils.CommonDateTimeUtils;
import
org.apache.iotdb.confignode.consensus.request.write.region.CreateRegionGroupsPlan;
import
org.apache.iotdb.confignode.procedure.impl.statemachine.CreateRegionGroupsProcedure;
import org.apache.iotdb.confignode.procedure.store.ProcedureFactory;
@@ -91,9 +92,12 @@ public class CreateRegionGroupsProcedureTest {
assertEquals(failedRegions0, failedRegions1);
CreateRegionGroupsPlan createRegionGroupsPlan = new
CreateRegionGroupsPlan();
+ createRegionGroupsPlan.setCreateTime(CommonDateTimeUtils.currentTime());
createRegionGroupsPlan.addRegionGroup("root.sg0", dataRegionSet);
createRegionGroupsPlan.addRegionGroup("root.sg1", schemaRegionSet);
+
CreateRegionGroupsPlan persistPlan = new CreateRegionGroupsPlan();
+ persistPlan.setCreateTime(CommonDateTimeUtils.currentTime());
persistPlan.addRegionGroup("root.sg0", dataRegionSet);
persistPlan.addRegionGroup("root.sg1", schemaRegionSet);
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/audit/AuditLogger.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/audit/AuditLogger.java
index 4db6c11ea33..aad36dbafb1 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/audit/AuditLogger.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/audit/AuditLogger.java
@@ -21,6 +21,7 @@ package org.apache.iotdb.db.audit;
import org.apache.iotdb.commons.conf.IoTDBConstant;
import org.apache.iotdb.commons.exception.IllegalPathException;
+import org.apache.iotdb.commons.utils.CommonDateTimeUtils;
import org.apache.iotdb.db.auth.AuthorityChecker;
import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
@@ -35,7 +36,6 @@ import
org.apache.iotdb.db.queryengine.plan.analyze.cache.schema.DataNodeDeviceP
import org.apache.iotdb.db.queryengine.plan.statement.Statement;
import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertRowStatement;
-import org.apache.iotdb.db.utils.DateTimeUtils;
import org.apache.iotdb.rpc.IoTDBConnectionException;
import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
import org.apache.iotdb.tsfile.enums.TSDataType;
@@ -85,7 +85,7 @@ public class AuditLogger {
InsertRowStatement insertStatement = new InsertRowStatement();
insertStatement.setDevicePath(
DEVICE_PATH_CACHE.getPartialPath(String.format(AUDIT_LOG_DEVICE,
username)));
- insertStatement.setTime(DateTimeUtils.currentTime());
+ insertStatement.setTime(CommonDateTimeUtils.currentTime());
insertStatement.setMeasurements(new String[] {LOG, USERNAME, ADDRESS});
insertStatement.setAligned(false);
insertStatement.setValues(
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
index 1c4028065eb..d4b7dd86440 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
@@ -799,9 +799,6 @@ public class IoTDBConfig {
private float udfCollectorMemoryBudgetInMB = (float) (1.0 / 3 *
udfMemoryBudgetInMB);
- // time in nanosecond precision when starting up
- private long startUpNanosecond = System.nanoTime();
-
/** Unit: byte */
private int thriftMaxFrameSize = 536870912;
@@ -2512,10 +2509,6 @@ public class IoTDBConfig {
this.primitiveArraySize = primitiveArraySize;
}
- public long getStartUpNanosecond() {
- return startUpNanosecond;
- }
-
public int getThriftMaxFrameSize() {
return thriftMaxFrameSize;
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java
index 108534f4bb7..4750d5e60af 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java
@@ -29,6 +29,7 @@ import org.apache.iotdb.commons.cq.TimeoutPolicy;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.schema.filter.SchemaFilter;
import org.apache.iotdb.commons.schema.filter.SchemaFilterFactory;
+import org.apache.iotdb.commons.utils.CommonDateTimeUtils;
import org.apache.iotdb.commons.utils.PathUtils;
import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
@@ -971,7 +972,8 @@ public class ASTVisitor extends
IoTDBSqlParserBaseVisitor<Statement> {
}
if (ctx.BOUNDARY() != null) {
- statement.setBoundaryTime(parseTimeValue(ctx.boundaryTime,
DateTimeUtils.currentTime()));
+ statement.setBoundaryTime(
+ parseTimeValue(ctx.boundaryTime, CommonDateTimeUtils.currentTime()));
}
if (ctx.RANGE() != null) {
@@ -1511,7 +1513,7 @@ public class ASTVisitor extends
IoTDBSqlParserBaseVisitor<Statement> {
*/
private void parseTimeRangeForGroupByTime(
IoTDBSqlParser.TimeRangeContext timeRange, GroupByTimeComponent
groupByClauseComponent) {
- long currentTime = DateTimeUtils.currentTime();
+ long currentTime = CommonDateTimeUtils.currentTime();
long startTime = parseTimeValue(timeRange.timeValue(0), currentTime);
long endTime = parseTimeValue(timeRange.timeValue(1), currentTime);
groupByClauseComponent.setStartTime(startTime);
@@ -1799,10 +1801,11 @@ public class ASTVisitor extends
IoTDBSqlParserBaseVisitor<Statement> {
throw new SemanticException("need timestamps when insert multi
rows");
}
valueList.add(insertMultiValues.get(i).timeValue().getText());
- timestamp = DateTimeUtils.currentTime();
+ timestamp = CommonDateTimeUtils.currentTime();
} else {
timestamp =
- parseTimeValue(insertMultiValues.get(i).timeValue(),
DateTimeUtils.currentTime());
+ parseTimeValue(
+ insertMultiValues.get(i).timeValue(),
CommonDateTimeUtils.currentTime());
TimestampPrecisionUtils.checkTimestampPrecision(timestamp);
}
} else {
@@ -2027,7 +2030,7 @@ public class ASTVisitor extends
IoTDBSqlParserBaseVisitor<Statement> {
throw new SemanticException("input timestamp cannot be empty");
}
if (timestampStr.equalsIgnoreCase(SqlConstant.NOW_FUNC)) {
- return DateTimeUtils.currentTime();
+ return CommonDateTimeUtils.currentTime();
}
try {
return DateTimeUtils.convertDatetimeStrToLong(timestampStr, zoneId);
@@ -3650,7 +3653,7 @@ public class ASTVisitor extends
IoTDBSqlParserBaseVisitor<Statement> {
getRegionIdStatement.setDevice(ctx.device.getText());
}
if (ctx.time != null) {
- long timestamp = parseTimeValue(ctx.time, DateTimeUtils.currentTime());
+ long timestamp = parseTimeValue(ctx.time,
CommonDateTimeUtils.currentTime());
getRegionIdStatement.setTimeStamp(timestamp);
}
return getRegionIdStatement;
@@ -3674,11 +3677,11 @@ public class ASTVisitor extends
IoTDBSqlParserBaseVisitor<Statement> {
getTimeSlotListStatement.setRegionId(Integer.parseInt(ctx.regionId.getText()));
}
if (ctx.startTime != null) {
- long timestamp = parseTimeValue(ctx.startTime,
DateTimeUtils.currentTime());
+ long timestamp = parseTimeValue(ctx.startTime,
CommonDateTimeUtils.currentTime());
getTimeSlotListStatement.setStartTime(timestamp);
}
if (ctx.endTime != null) {
- long timestamp = parseTimeValue(ctx.endTime,
DateTimeUtils.currentTime());
+ long timestamp = parseTimeValue(ctx.endTime,
CommonDateTimeUtils.currentTime());
getTimeSlotListStatement.setEndTime(timestamp);
}
return getTimeSlotListStatement;
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/parameter/SeriesScanOptions.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/parameter/SeriesScanOptions.java
index 82dd3ba5772..f2238efee2c 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/parameter/SeriesScanOptions.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/parameter/SeriesScanOptions.java
@@ -21,7 +21,7 @@ package
org.apache.iotdb.db.queryengine.plan.planner.plan.parameter;
import org.apache.iotdb.commons.path.AlignedPath;
import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.utils.DateTimeUtils;
+import org.apache.iotdb.commons.utils.CommonDateTimeUtils;
import org.apache.iotdb.tsfile.read.filter.TimeFilter;
import org.apache.iotdb.tsfile.read.filter.basic.Filter;
import org.apache.iotdb.tsfile.read.filter.operator.AndFilter;
@@ -100,9 +100,10 @@ public class SeriesScanOptions {
public static Filter updateFilterUsingTTL(Filter filter, long dataTTL) {
if (dataTTL != Long.MAX_VALUE) {
if (filter != null) {
- filter = new AndFilter(filter,
TimeFilter.gtEq(DateTimeUtils.currentTime() - dataTTL));
+ filter =
+ new AndFilter(filter,
TimeFilter.gtEq(CommonDateTimeUtils.currentTime() - dataTTL));
} else {
- filter = TimeFilter.gtEq(DateTimeUtils.currentTime() - dataTTL);
+ filter = TimeFilter.gtEq(CommonDateTimeUtils.currentTime() - dataTTL);
}
}
return filter;
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
index 9ae93b8894a..c0e12fdacdb 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
@@ -849,7 +849,8 @@ public class DataRegion implements IDataRegionForQuery {
public void insert(InsertRowNode insertRowNode) throws WriteProcessException
{
// reject insertions that are out of ttl
if (!isAlive(insertRowNode.getTime())) {
- throw new OutOfTTLException(insertRowNode.getTime(),
(DateTimeUtils.currentTime() - dataTTL));
+ throw new OutOfTTLException(
+ insertRowNode.getTime(), (CommonDateTimeUtils.currentTime() -
dataTTL));
}
if (enableMemControl) {
StorageEngine.blockInsertionIfReject(null);
@@ -930,7 +931,8 @@ public class DataRegion implements IDataRegionForQuery {
String.format(
"Insertion time [%s] is less than ttl time bound [%s]",
DateTimeUtils.convertLongToDate(currTime),
-
DateTimeUtils.convertLongToDate(DateTimeUtils.currentTime() - dataTTL)));
+ DateTimeUtils.convertLongToDate(
+ CommonDateTimeUtils.currentTime() - dataTTL)));
loc++;
noFailure = false;
} else {
@@ -941,7 +943,7 @@ public class DataRegion implements IDataRegionForQuery {
if (loc == insertTabletNode.getRowCount()) {
throw new OutOfTTLException(
insertTabletNode.getTimes()[insertTabletNode.getTimes().length -
1],
- (DateTimeUtils.currentTime() - dataTTL));
+ (CommonDateTimeUtils.currentTime() - dataTTL));
}
// before is first start point
int before = loc;
@@ -1015,7 +1017,7 @@ public class DataRegion implements IDataRegionForQuery {
* @return whether the given time falls in ttl
*/
private boolean isAlive(long time) {
- return dataTTL == Long.MAX_VALUE || (DateTimeUtils.currentTime() - time)
<= dataTTL;
+ return dataTTL == Long.MAX_VALUE || (CommonDateTimeUtils.currentTime() -
time) <= dataTTL;
}
/**
@@ -1520,7 +1522,7 @@ public class DataRegion implements IDataRegionForQuery {
logger.debug("{}: TTL not set, ignore the check", databaseName + "-" +
dataRegionId);
return;
}
- long ttlLowerBound = DateTimeUtils.currentTime() - dataTTL;
+ long ttlLowerBound = CommonDateTimeUtils.currentTime() - dataTTL;
logger.debug(
"{}: TTL removing files before {}",
databaseName + "-" + dataRegionId,
@@ -1771,7 +1773,7 @@ public class DataRegion implements IDataRegionForQuery {
List<TsFileResource> tsfileResourcesForQuery = new ArrayList<>();
long timeLowerBound =
- dataTTL != Long.MAX_VALUE ? DateTimeUtils.currentTime() - dataTTL :
Long.MIN_VALUE;
+ dataTTL != Long.MAX_VALUE ? CommonDateTimeUtils.currentTime() -
dataTTL : Long.MIN_VALUE;
context.setQueryTimeLowerBound(timeLowerBound);
for (TsFileResource tsFileResource : tsFileResources) {
@@ -2749,7 +2751,8 @@ public class DataRegion implements IDataRegionForQuery {
String.format(
"Insertion time [%s] is less than ttl time bound
[%s]",
DateTimeUtils.convertLongToDate(insertRowNode.getTime()),
-
DateTimeUtils.convertLongToDate(DateTimeUtils.currentTime() - dataTTL))));
+ DateTimeUtils.convertLongToDate(
+ CommonDateTimeUtils.currentTime() - dataTTL))));
continue;
}
// init map
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/flush/MemTableFlushTask.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/flush/MemTableFlushTask.java
index 19450cbe9fc..1cf48033c63 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/flush/MemTableFlushTask.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/flush/MemTableFlushTask.java
@@ -22,6 +22,7 @@ import org.apache.iotdb.commons.schema.SchemaConstant;
import org.apache.iotdb.commons.service.metric.MetricService;
import org.apache.iotdb.commons.service.metric.enums.Metric;
import org.apache.iotdb.commons.service.metric.enums.Tag;
+import org.apache.iotdb.commons.utils.CommonDateTimeUtils;
import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.service.metrics.WritingMetrics;
@@ -31,7 +32,6 @@ import
org.apache.iotdb.db.storageengine.dataregion.memtable.IMemTable;
import org.apache.iotdb.db.storageengine.dataregion.memtable.IWritableMemChunk;
import
org.apache.iotdb.db.storageengine.dataregion.memtable.IWritableMemChunkGroup;
import org.apache.iotdb.db.storageengine.rescon.memory.SystemInfo;
-import org.apache.iotdb.db.utils.DateTimeUtils;
import org.apache.iotdb.metrics.utils.MetricLevel;
import org.apache.iotdb.tsfile.write.chunk.IChunkWriter;
import org.apache.iotdb.tsfile.write.writer.RestorableTsFileIOWriter;
@@ -303,7 +303,7 @@ public class MemTableFlushTask {
lastIndex = storageGroup.length();
}
String storageGroupName = storageGroup.substring(0, lastIndex);
- long currentTime = DateTimeUtils.currentTime();
+ long currentTime = CommonDateTimeUtils.currentTime();
// compute the flush points
long writeTime =
flushPointsCache.compute(
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileResource.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileResource.java
index 75f88327a16..0e228cbc7e0 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileResource.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileResource.java
@@ -22,6 +22,7 @@ import org.apache.iotdb.commons.consensus.index.ProgressIndex;
import org.apache.iotdb.commons.consensus.index.ProgressIndexType;
import org.apache.iotdb.commons.consensus.index.impl.MinimumProgressIndex;
import org.apache.iotdb.commons.path.PartialPath;
+import org.apache.iotdb.commons.utils.CommonDateTimeUtils;
import org.apache.iotdb.commons.utils.TestOnly;
import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
@@ -37,7 +38,6 @@ import
org.apache.iotdb.db.storageengine.dataregion.tsfile.timeindex.FileTimeInd
import
org.apache.iotdb.db.storageengine.dataregion.tsfile.timeindex.ITimeIndex;
import
org.apache.iotdb.db.storageengine.dataregion.tsfile.timeindex.TimeIndexLevel;
import org.apache.iotdb.db.storageengine.rescon.disk.TierManager;
-import org.apache.iotdb.db.utils.DateTimeUtils;
import org.apache.iotdb.tsfile.common.constant.TsFileConstant;
import org.apache.iotdb.tsfile.file.metadata.IChunkMetadata;
import org.apache.iotdb.tsfile.file.metadata.ITimeSeriesMetadata;
@@ -804,7 +804,7 @@ public class TsFileResource {
/** @return whether the given time falls in ttl */
private boolean isAlive(long time, long dataTTL) {
- return dataTTL == Long.MAX_VALUE || (DateTimeUtils.currentTime() - time)
<= dataTTL;
+ return dataTTL == Long.MAX_VALUE || (CommonDateTimeUtils.currentTime() -
time) <= dataTTL;
}
public void setProcessor(TsFileProcessor processor) {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/DateTimeUtils.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/DateTimeUtils.java
index 48befee79cd..278122486d5 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/DateTimeUtils.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/DateTimeUtils.java
@@ -20,7 +20,6 @@ package org.apache.iotdb.db.utils;
import org.apache.iotdb.commons.conf.CommonDescriptor;
import org.apache.iotdb.commons.utils.TestOnly;
-import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.protocol.session.SessionManager;
import org.apache.iotdb.tsfile.utils.TimeDuration;
@@ -666,19 +665,6 @@ public class DateTimeUtils {
}
}
- public static long currentTime() {
- long startupNano =
IoTDBDescriptor.getInstance().getConfig().getStartUpNanosecond();
- String timePrecision =
CommonDescriptor.getInstance().getConfig().getTimestampPrecision();
- switch (timePrecision) {
- case "ns":
- return System.currentTimeMillis() * 1000_000 + (System.nanoTime() -
startupNano) % 1000_000;
- case "us":
- return System.currentTimeMillis() * 1000 + (System.nanoTime() -
startupNano) / 1000 % 1000;
- default:
- return System.currentTimeMillis();
- }
- }
-
public static String convertLongToDate(long timestamp) {
return convertLongToDate(
timestamp,
CommonDescriptor.getInstance().getConfig().getTimestampPrecision());
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/conf/CommonConfig.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/conf/CommonConfig.java
index e4abbc10f89..48a3a30dda9 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/conf/CommonConfig.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/conf/CommonConfig.java
@@ -209,6 +209,9 @@ public class CommonConfig {
private long seriesLimitThreshold = -1;
private long deviceLimitThreshold = -1;
+ // time in nanosecond precision when starting up
+ private final long startUpNanosecond = System.nanoTime();
+
CommonConfig() {
// Empty constructor
}
@@ -835,4 +838,8 @@ public class CommonConfig {
public void setDeviceLimitThreshold(long deviceLimitThreshold) {
this.deviceLimitThreshold = deviceLimitThreshold;
}
+
+ public long getStartUpNanosecond() {
+ return startUpNanosecond;
+ }
}
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/CommonDateTimeUtils.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/CommonDateTimeUtils.java
index 3d65058abc9..2723c545265 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/CommonDateTimeUtils.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/CommonDateTimeUtils.java
@@ -19,6 +19,8 @@
package org.apache.iotdb.commons.utils;
+import org.apache.iotdb.commons.conf.CommonDescriptor;
+
public class CommonDateTimeUtils {
public CommonDateTimeUtils() {
@@ -39,4 +41,17 @@ public class CommonDateTimeUtils {
}
return result;
}
+
+ public static long currentTime() {
+ long startupNano =
CommonDescriptor.getInstance().getConfig().getStartUpNanosecond();
+ String timePrecision =
CommonDescriptor.getInstance().getConfig().getTimestampPrecision();
+ switch (timePrecision) {
+ case "ns":
+ return System.currentTimeMillis() * 1000_000 + (System.nanoTime() -
startupNano) % 1000_000;
+ case "us":
+ return System.currentTimeMillis() * 1000 + (System.nanoTime() -
startupNano) / 1000 % 1000;
+ default:
+ return System.currentTimeMillis();
+ }
+ }
}