You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by su...@apache.org on 2020/06/11 01:55:41 UTC
[incubator-iotdb] 01/01: [IOTDB-759] Refactor MNode by removing
InternalMNode
This is an automated email from the ASF dual-hosted git repository.
sunzesong pushed a commit to branch jira_759
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
commit bdc587bb23b030ee79b674918c48cb687397f6ca
Author: samperson1997 <sz...@mails.tsinghua.edu.cn>
AuthorDate: Thu Jun 11 09:55:13 2020 +0800
[IOTDB-759] Refactor MNode by removing InternalMNode
---
.../iotdb/db/engine/merge/task/MergeTask.java | 21 ++-
.../engine/storagegroup/StorageGroupProcessor.java | 13 +-
.../org/apache/iotdb/db/metadata/MManager.java | 25 +--
.../java/org/apache/iotdb/db/metadata/MTree.java | 121 +++++++--------
.../apache/iotdb/db/metadata/MetadataConstant.java | 11 +-
.../iotdb/db/metadata/mnode/InternalMNode.java | 135 -----------------
.../org/apache/iotdb/db/metadata/mnode/MNode.java | 167 +++++++++++++++++++--
.../iotdb/db/metadata/mnode/MeasurementMNode.java | 74 ++++++++-
.../iotdb/db/metadata/mnode/StorageGroupMNode.java | 44 +++++-
.../apache/iotdb/db/qp/executor/PlanExecutor.java | 44 ++++--
.../iotdb/db/metadata/MManagerImproveTest.java | 5 +-
.../iotdb/tsfile/utils/ReadWriteIOUtils.java | 8 +-
12 files changed, 394 insertions(+), 274 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/merge/task/MergeTask.java b/server/src/main/java/org/apache/iotdb/db/engine/merge/task/MergeTask.java
index b6ac065..045fdf2 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/merge/task/MergeTask.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/merge/task/MergeTask.java
@@ -35,9 +35,8 @@ import org.apache.iotdb.db.engine.merge.recover.MergeLogger;
import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
import org.apache.iotdb.db.exception.metadata.MetadataException;
import org.apache.iotdb.db.metadata.MManager;
-import org.apache.iotdb.db.metadata.mnode.InternalMNode;
-import org.apache.iotdb.db.metadata.mnode.MeasurementMNode;
import org.apache.iotdb.db.metadata.mnode.MNode;
+import org.apache.iotdb.db.metadata.mnode.MeasurementMNode;
import org.apache.iotdb.db.utils.MergeUtils;
import org.apache.iotdb.tsfile.read.common.Path;
import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
@@ -46,10 +45,9 @@ import org.slf4j.LoggerFactory;
/**
* MergeTask merges given seqFiles and unseqFiles into new ones, which basically consists of three
- * steps: 1. rewrite overflowed, modified or small-sized chunks into temp merge files
- * 2. move the merged chunks in the temp files back to the seqFiles or move the unmerged
- * chunks in the seqFiles into temp files and replace the seqFiles with the temp files.
- * 3. remove unseqFiles
+ * steps: 1. rewrite overflowed, modified or small-sized chunks into temp merge files 2. move the
+ * merged chunks in the temp files back to the seqFiles or move the unmerged chunks in the seqFiles
+ * into temp files and replace the seqFiles with the temp files. 3. remove unseqFiles
*/
public class MergeTask implements Callable<Void> {
@@ -92,14 +90,15 @@ public class MergeTask implements Callable<Void> {
@Override
public Void call() throws Exception {
- try {
+ try {
doMerge();
} catch (Exception e) {
logger.error("Runtime exception in merge {}", taskName, e);
cleanUp(false);
// call the callback to make sure the StorageGroup exit merging status, but passing 2
// empty file lists to avoid files being deleted.
- callback.call(Collections.emptyList(), Collections.emptyList(), new File(storageGroupSysDir, MergeLogger.MERGE_LOG_NAME));
+ callback.call(Collections.emptyList(), Collections.emptyList(),
+ new File(storageGroupSysDir, MergeLogger.MERGE_LOG_NAME));
throw e;
}
return null;
@@ -121,7 +120,7 @@ public class MergeTask implements Callable<Void> {
Map<Path, MeasurementSchema> measurementSchemaMap = new HashMap<>();
List<Path> unmergedSeries = new ArrayList<>();
for (String device : devices) {
- InternalMNode deviceNode = (InternalMNode) MManager.getInstance().getNodeByPath(device);
+ MNode deviceNode = MManager.getInstance().getNodeByPath(device);
for (Entry<String, MNode> entry : deviceNode.getChildren().entrySet()) {
Path path = new Path(device, entry.getKey());
measurementSchemaMap.put(path, ((MeasurementMNode) entry.getValue()).getSchema());
@@ -132,8 +131,8 @@ public class MergeTask implements Callable<Void> {
mergeLogger.logMergeStart();
- MergeMultiChunkTask mergeChunkTask = new MergeMultiChunkTask(mergeContext, taskName, mergeLogger, resource,
- fullMerge, unmergedSeries, concurrentMergeSeriesNum);
+ MergeMultiChunkTask mergeChunkTask = new MergeMultiChunkTask(mergeContext, taskName,
+ mergeLogger, resource, fullMerge, unmergedSeries, concurrentMergeSeriesNum);
mergeChunkTask.mergeSeries();
MergeFileTask mergeFileTask = new MergeFileTask(taskName, mergeContext, mergeLogger, resource,
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java
index 8ba9020..df4cb38 100755
--- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java
@@ -72,7 +72,6 @@ import org.apache.iotdb.db.exception.metadata.MetadataException;
import org.apache.iotdb.db.exception.query.OutOfTTLException;
import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.metadata.MManager;
-import org.apache.iotdb.db.metadata.mnode.InternalMNode;
import org.apache.iotdb.db.metadata.mnode.MeasurementMNode;
import org.apache.iotdb.db.metadata.mnode.MNode;
import org.apache.iotdb.db.qp.physical.crud.DeletePlan;
@@ -774,7 +773,7 @@ public class StorageGroupProcessor {
throw new WriteProcessException(e);
} finally {
if (node != null) {
- ((InternalMNode) node).readUnlock();
+ node.readUnlock();
}
}
}
@@ -832,7 +831,7 @@ public class StorageGroupProcessor {
throw new WriteProcessException(e);
} finally {
if (node != null) {
- ((InternalMNode) node).readUnlock();
+ node.readUnlock();
}
}
}
@@ -1247,7 +1246,7 @@ public class StorageGroupProcessor {
.query(deviceId, measurementId, schema.getType(), schema.getEncodingType(),
schema.getProps(), context);
- tsfileResourcesForQuery.add(new TsFileResource(tsFileResource.getFile(),
+ tsfileResourcesForQuery.add(new TsFileResource(tsFileResource.getFile(),
tsFileResource.getDeviceToIndexMap(),
tsFileResource.getStartTimes(), tsFileResource.getEndTimes(), pair.left,
pair.right));
@@ -1509,8 +1508,8 @@ public class StorageGroupProcessor {
List<TsFileResource> upgradedResources = tsFileResource.getUpgradedResources();
for (TsFileResource resource : upgradedResources) {
long partitionId = resource.getTimePartition();
- resource.getDeviceToIndexMap().forEach((device, index) ->
- updateNewlyFlushedPartitionLatestFlushedTimeForEachDevice(partitionId, device,
+ resource.getDeviceToIndexMap().forEach((device, index) ->
+ updateNewlyFlushedPartitionLatestFlushedTimeForEachDevice(partitionId, device,
resource.getEndTime(index))
);
}
@@ -1525,7 +1524,7 @@ public class StorageGroupProcessor {
}
mergeLock.writeLock().unlock();
insertLock.writeLock().unlock();
-
+
// after upgrade complete, update partitionLatestFlushedTimeForEachDevice
if (countUpgradeFiles() == 0) {
for (Entry<Long, Map<String, Long>> entry : newlyFlushedPartitionLatestFlushedTimeForEachDevice
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
index ec46b77..d803d51 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
@@ -52,9 +52,8 @@ import org.apache.iotdb.db.exception.metadata.MetadataException;
import org.apache.iotdb.db.exception.metadata.PathNotExistException;
import org.apache.iotdb.db.exception.metadata.StorageGroupAlreadySetException;
import org.apache.iotdb.db.exception.metadata.StorageGroupNotSetException;
-import org.apache.iotdb.db.metadata.mnode.InternalMNode;
-import org.apache.iotdb.db.metadata.mnode.MeasurementMNode;
import org.apache.iotdb.db.metadata.mnode.MNode;
+import org.apache.iotdb.db.metadata.mnode.MeasurementMNode;
import org.apache.iotdb.db.metadata.mnode.StorageGroupMNode;
import org.apache.iotdb.db.monitor.MonitorConstants;
import org.apache.iotdb.db.qp.constant.SQLConstant;
@@ -441,9 +440,6 @@ public class MManager {
/**
* remove the node from the tag inverted index
- *
- * @param node
- * @throws IOException
*/
private void removeFromTagInvertedIndex(MeasurementMNode node) throws IOException {
if (node.getOffset() < 0) {
@@ -633,7 +629,8 @@ public class MManager {
if (!deviceNode.hasChild(measurements[i])) {
throw new MetadataException(measurements[i] + " does not exist in " + deviceId);
}
- measurementSchemas[i] = ((MeasurementMNode) deviceNode.getChild(measurements[i])).getSchema();
+ measurementSchemas[i] = ((MeasurementMNode) deviceNode.getChild(measurements[i]))
+ .getSchema();
}
return measurementSchemas;
} finally {
@@ -782,7 +779,8 @@ public class MManager {
if (value2Node.isEmpty()) {
throw new MetadataException("The key " + plan.getKey() + " is not a tag.");
}
- Set<MeasurementMNode> allMatchedNodes = new TreeSet<>(Comparator.comparing(MNode::getFullPath));
+ Set<MeasurementMNode> allMatchedNodes = new TreeSet<>(
+ Comparator.comparing(MNode::getFullPath));
if (plan.isContains()) {
for (Entry<String, Set<MeasurementMNode>> entry : value2Node.entrySet()) {
String tagValue = entry.getKey();
@@ -893,8 +891,7 @@ public class MManager {
throws MetadataException {
lock.readLock().lock();
try {
- InternalMNode node = (InternalMNode) mtree.getNodeByPath(device);
- MNode leaf = node.getChild(measurement);
+ MNode leaf = mtree.getNodeByPath(device).getChild(measurement);
if (leaf != null) {
return ((MeasurementMNode) leaf).getSchema();
} else {
@@ -1003,7 +1000,7 @@ public class MManager {
}
} finally {
if (node != null) {
- ((InternalMNode) node).readLock();
+ node.readLock();
}
lock.readLock().unlock();
}
@@ -1029,7 +1026,7 @@ public class MManager {
return node;
} finally {
if (node != null) {
- ((InternalMNode) node).readLock();
+ node.readLock();
}
lock.writeLock().unlock();
}
@@ -1535,9 +1532,6 @@ public class MManager {
/**
* Collect the timeseries schemas under "startingPath". Notice the measurements in the collected
* MeasurementSchemas are the full path here.
- *
- * @param startingPath
- * @param timeseriesSchemas
*/
public void collectSeries(String startingPath, List<MeasurementSchema> timeseriesSchemas) {
MNode mNode;
@@ -1585,9 +1579,6 @@ public class MManager {
/**
* if the path is in local mtree, nothing needed to do (because mtree is in the memory); Otherwise
* cache the path to mRemoteSchemaCache
- *
- * @param path
- * @param schema
*/
public void cacheSchema(String path, MeasurementSchema schema) {
// check schema is in local
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java b/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java
index bfb2398..0f9975f 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java
@@ -18,9 +18,26 @@
*/
package org.apache.iotdb.db.metadata;
+import static org.apache.iotdb.db.conf.IoTDBConstant.PATH_SEPARATOR;
+import static org.apache.iotdb.db.conf.IoTDBConstant.PATH_WILDCARD;
+
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
+import java.io.Serializable;
+import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.Deque;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Queue;
+import java.util.Set;
+import java.util.TreeSet;
+import java.util.regex.Pattern;
import org.apache.iotdb.db.conf.IoTDBConstant;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.exception.metadata.AliasAlreadyExistException;
@@ -30,9 +47,8 @@ import org.apache.iotdb.db.exception.metadata.PathAlreadyExistException;
import org.apache.iotdb.db.exception.metadata.PathNotExistException;
import org.apache.iotdb.db.exception.metadata.StorageGroupAlreadySetException;
import org.apache.iotdb.db.exception.metadata.StorageGroupNotSetException;
-import org.apache.iotdb.db.metadata.mnode.InternalMNode;
-import org.apache.iotdb.db.metadata.mnode.MeasurementMNode;
import org.apache.iotdb.db.metadata.mnode.MNode;
+import org.apache.iotdb.db.metadata.mnode.MeasurementMNode;
import org.apache.iotdb.db.metadata.mnode.StorageGroupMNode;
import org.apache.iotdb.db.qp.physical.sys.ShowTimeSeriesPlan;
import org.apache.iotdb.tsfile.common.constant.TsFileConstant;
@@ -43,24 +59,6 @@ import org.apache.iotdb.tsfile.read.common.Path;
import org.apache.iotdb.tsfile.utils.Pair;
import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
-import java.io.Serializable;
-import java.util.ArrayDeque;
-import java.util.ArrayList;
-import java.util.Deque;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Queue;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.regex.Pattern;
-
-import static org.apache.iotdb.db.conf.IoTDBConstant.PATH_SEPARATOR;
-import static org.apache.iotdb.db.conf.IoTDBConstant.PATH_WILDCARD;
-
/**
* The hierarchical struct of the Metadata Tree is implemented in this class.
*/
@@ -75,19 +73,19 @@ public class MTree implements Serializable {
private transient ThreadLocal<Integer> curOffset = new ThreadLocal<>();
MTree() {
- this.root = new InternalMNode(null, IoTDBConstant.PATH_ROOT);
+ this.root = new MNode(null, IoTDBConstant.PATH_ROOT);
}
/**
* Create a timeseries with a full path from root to leaf node Before creating a timeseries, the
* storage group should be set first, throw exception otherwise
*
- * @param path timeseries path
- * @param dataType data type
- * @param encoding encoding
+ * @param path timeseries path
+ * @param dataType data type
+ * @param encoding encoding
* @param compressor compressor
- * @param props props
- * @param alias alias of measurement
+ * @param props props
+ * @param alias alias of measurement
*/
MeasurementMNode createTimeseries(
String path,
@@ -113,7 +111,7 @@ public class MTree implements Serializable {
if (!hasSetStorageGroup) {
throw new StorageGroupNotSetException("Storage group should be created first");
}
- cur.addChild(nodeName, new InternalMNode(cur, nodeName));
+ cur.addChild(nodeName, new MNode(cur, nodeName));
}
cur = cur.getChild(nodeName);
}
@@ -124,7 +122,8 @@ public class MTree implements Serializable {
if (alias != null && cur.hasChild(alias)) {
throw new AliasAlreadyExistException(path, alias);
}
- MeasurementMNode leaf = new MeasurementMNode(cur, leafName, alias, dataType, encoding, compressor, props);
+ MeasurementMNode leaf = new MeasurementMNode(cur, leafName, alias, dataType, encoding,
+ compressor, props);
cur.addChild(leafName, leaf);
// link alias to LeafMNode
if (alias != null) {
@@ -150,7 +149,7 @@ public class MTree implements Serializable {
cur.addChild(nodeNames[i], new StorageGroupMNode(cur, nodeNames[i],
IoTDBDescriptor.getInstance().getConfig().getDefaultTTL()));
} else {
- cur.addChild(nodeNames[i], new InternalMNode(cur, nodeNames[i]));
+ cur.addChild(nodeNames[i], new MNode(cur, nodeNames[i]));
}
}
cur = cur.getChild(nodeNames[i]);
@@ -196,7 +195,7 @@ public class MTree implements Serializable {
while (i < nodeNames.length - 1) {
MNode temp = cur.getChild(nodeNames[i]);
if (temp == null) {
- cur.addChild(nodeNames[i], new InternalMNode(cur, nodeNames[i]));
+ cur.addChild(nodeNames[i], new MNode(cur, nodeNames[i]));
} else if (temp instanceof StorageGroupMNode) {
// before set storage group, check whether the exists or not
throw new StorageGroupAlreadySetException(temp.getFullPath());
@@ -468,7 +467,7 @@ public class MTree implements Serializable {
MNode current = nodeStack.pop();
if (current instanceof StorageGroupMNode) {
ret.add((StorageGroupMNode) current);
- } else if (current instanceof InternalMNode) {
+ } else if (current instanceof MNode) {
nodeStack.addAll(current.getChildren().values());
}
}
@@ -601,7 +600,7 @@ public class MTree implements Serializable {
if (child instanceof MeasurementMNode) {
cnt++;
}
- cnt += getCount(child, nodes, idx + 1);
+ cnt += getCount(child, nodes, idx + 1);
}
return cnt;
}
@@ -609,6 +608,7 @@ public class MTree implements Serializable {
/**
* Traverse the MTree to get the count of timeseries in the given level.
+ *
* @param targetLevel Record the distance to the target level, 0 means the target level.
*/
private int getCountInGivenLevel(MNode node, int targetLevel) {
@@ -616,7 +616,7 @@ public class MTree implements Serializable {
return 1;
}
int cnt = 0;
- if (node instanceof InternalMNode) {
+ if (node instanceof MNode) {
for (MNode child : node.getChildren().values()) {
cnt += getCountInGivenLevel(child, targetLevel - 1);
}
@@ -672,23 +672,23 @@ public class MTree implements Serializable {
if (node.getName().contains(TsFileConstant.PATH_SEPARATOR)) {
nodeName = "\"" + node + "\"";
} else {
- nodeName = node.getName();
- }
- String nodePath = parent + nodeName;
- String[] tsRow = new String[7];
- tsRow[0] = nodePath;
- tsRow[1] = ((MeasurementMNode) node).getAlias();
- MeasurementSchema measurementSchema = ((MeasurementMNode) node).getSchema();
- tsRow[2] = getStorageGroupName(nodePath);
- tsRow[3] = measurementSchema.getType().toString();
- tsRow[4] = measurementSchema.getEncodingType().toString();
- tsRow[5] = measurementSchema.getCompressor().toString();
- tsRow[6] = String.valueOf(((MeasurementMNode) node).getOffset());
- timeseriesSchemaList.add(tsRow);
-
- if (hasLimit) {
- count.set(count.get() + 1);
- }
+ nodeName = node.getName();
+ }
+ String nodePath = parent + nodeName;
+ String[] tsRow = new String[7];
+ tsRow[0] = nodePath;
+ tsRow[1] = ((MeasurementMNode) node).getAlias();
+ MeasurementSchema measurementSchema = ((MeasurementMNode) node).getSchema();
+ tsRow[2] = getStorageGroupName(nodePath);
+ tsRow[3] = measurementSchema.getType().toString();
+ tsRow[4] = measurementSchema.getEncodingType().toString();
+ tsRow[5] = measurementSchema.getCompressor().toString();
+ tsRow[6] = String.valueOf(((MeasurementMNode) node).getOffset());
+ timeseriesSchemaList.add(tsRow);
+
+ if (hasLimit) {
+ count.set(count.get() + 1);
+ }
}
String nodeReg = MetaUtils.getNodeRegByIdx(idx, nodes);
if (!nodeReg.contains(PATH_WILDCARD)) {
@@ -728,11 +728,11 @@ public class MTree implements Serializable {
/**
* Traverse the MTree to match all child node path in next level
*
- * @param node the current traversing node
- * @param nodes split the prefix path with '.'
- * @param idx the current index of array nodes
+ * @param node the current traversing node
+ * @param nodes split the prefix path with '.'
+ * @param idx the current index of array nodes
* @param parent store the node string having traversed
- * @param res store all matched device names
+ * @param res store all matched device names
* @param length expected length of path
*/
private void findChildNodePathInNextLevel(
@@ -746,7 +746,7 @@ public class MTree implements Serializable {
parent + node.getName() + PATH_SEPARATOR, res, length);
}
} else {
- if (node instanceof InternalMNode && node.getChildren().size() > 0) {
+ if (node instanceof MNode && node.getChildren().size() > 0) {
for (MNode child : node.getChildren().values()) {
if (!Pattern.matches(nodeReg.replace("*", ".*"), child.getName())) {
continue;
@@ -788,11 +788,11 @@ public class MTree implements Serializable {
/**
* Traverse the MTree to match all devices with prefix path.
*
- * @param node the current traversing node
- * @param nodes split the prefix path with '.'
- * @param idx the current index of array nodes
+ * @param node the current traversing node
+ * @param nodes split the prefix path with '.'
+ * @param idx the current index of array nodes
* @param parent store the node string having traversed
- * @param res store all matched device names
+ * @param res store all matched device names
*/
private void findDevices(MNode node, String[] nodes, int idx, String parent, Set<String> res) {
String nodeReg = MetaUtils.getNodeRegByIdx(idx, nodes);
@@ -840,6 +840,7 @@ public class MTree implements Serializable {
/**
* Get all paths under the given level.
+ *
* @param targetLevel Record the distance to the target level, 0 means the target level.
*/
private void findNodes(MNode node, String path, List<String> res, int targetLevel) {
@@ -850,7 +851,7 @@ public class MTree implements Serializable {
res.add(path);
return;
}
- if (node instanceof InternalMNode) {
+ if (node instanceof MNode) {
for (MNode child : node.getChildren().values()) {
findNodes(child, path + PATH_SEPARATOR + child.toString(), res, targetLevel - 1);
}
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MetadataConstant.java b/server/src/main/java/org/apache/iotdb/db/metadata/MetadataConstant.java
index ee096bf..5aeab5b 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/MetadataConstant.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/MetadataConstant.java
@@ -19,10 +19,17 @@
package org.apache.iotdb.db.metadata;
public class MetadataConstant {
- private MetadataConstant(){
- //allowed to do nothing
+
+ private MetadataConstant() {
+ // allowed to do nothing
}
+
public static final String ROOT = "root";
public static final String METADATA_LOG = "mlog.txt";
public static final String TAG_LOG = "tlog.txt";
+ public static final String MTREE_SNAPSHOT = "mtree.snapshot";
+
+ public static final short MNODE_TYPE = 0;
+ public static final short STORAGE_GROUP_MNODE_TYPE = 1;
+ public static final short MEASUREMENT_MNODE_TYPE = 2;
}
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/InternalMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/InternalMNode.java
deleted file mode 100644
index fa2861f..0000000
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/InternalMNode.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.iotdb.db.metadata.mnode;
-
-import static org.apache.iotdb.db.conf.IoTDBConstant.PATH_SEPARATOR;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReadWriteLock;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-import org.apache.iotdb.db.exception.metadata.DeleteFailedException;
-
-public class InternalMNode extends MNode {
-
- private static final long serialVersionUID = 7999036474525817732L;
-
- private Map<String, MNode> children;
- private Map<String, MNode> aliasChildren;
-
- protected ReadWriteLock lock = new ReentrantReadWriteLock();
-
- public InternalMNode(MNode parent, String name) {
- super(parent, name);
- this.children = new LinkedHashMap<>();
- }
-
- @Override
- public boolean hasChild(String name) {
- return this.children.containsKey(name) ||
- (aliasChildren != null && aliasChildren.containsKey(name));
- }
-
- @Override
- public void addChild(String name, MNode child) {
- children.put(name, child);
- }
-
-
- /**
- * If delete a leafMNode, lock its parent, if delete an InternalNode, lock itself
- */
- @Override
- public void deleteChild(String name) throws DeleteFailedException {
- if (children.containsKey(name)) {
- Lock writeLock;
- // if its child node is leaf node, we need to acquire the write lock of the current device node
- if (children.get(name) instanceof MeasurementMNode) {
- writeLock = lock.writeLock();
- } else {
- // otherwise, we only need to acquire the write lock of its child node.
- writeLock = ((InternalMNode) children.get(name)).lock.writeLock();
- }
- if (writeLock.tryLock()) {
- children.remove(name);
- writeLock.unlock();
- } else {
- throw new DeleteFailedException(getFullPath() + PATH_SEPARATOR + name);
- }
- }
- }
-
- @Override
- public void deleteAliasChild(String alias) throws DeleteFailedException {
- if (aliasChildren == null) {
- return;
- }
- if (lock.writeLock().tryLock()) {
- aliasChildren.remove(alias);
- lock.writeLock().unlock();
- } else {
- throw new DeleteFailedException(getFullPath() + PATH_SEPARATOR + alias);
- }
- }
-
- @Override
- public MNode getChild(String name) {
- return children.containsKey(name) ? children.get(name)
- : (aliasChildren == null ? null : aliasChildren.get(name));
- }
-
- @Override
- public int getLeafCount() {
- int leafCount = 0;
- for (MNode child : this.children.values()) {
- leafCount += child.getLeafCount();
- }
- return leafCount;
- }
-
- @Override
- public void addAlias(String alias, MNode child) {
- if (aliasChildren == null) {
- aliasChildren = new LinkedHashMap<>();
- }
- aliasChildren.put(alias, child);
- }
-
- @Override
- public Map<String, MNode> getChildren() {
- return children;
- }
-
- public void readLock() {
- InternalMNode node = this;
- while (node != null) {
- node.lock.readLock().lock();
- node = (InternalMNode) node.parent;
- }
- }
-
- public void readUnlock() {
- InternalMNode node = this;
- while (node != null) {
- node.lock.readLock().unlock();
- node = (InternalMNode) node.parent;
- }
- }
-}
\ No newline at end of file
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNode.java
index 181c309..44eaf9d 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNode.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNode.java
@@ -18,17 +18,29 @@
*/
package org.apache.iotdb.db.metadata.mnode;
-import org.apache.iotdb.db.conf.IoTDBConstant;
-import org.apache.iotdb.db.exception.metadata.DeleteFailedException;
+import static org.apache.iotdb.db.conf.IoTDBConstant.PATH_SEPARATOR;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
import java.io.Serializable;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.Map;
+import java.util.Map.Entry;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+import org.apache.iotdb.db.conf.IoTDBConstant;
+import org.apache.iotdb.db.exception.metadata.DeleteFailedException;
+import org.apache.iotdb.db.metadata.MetadataConstant;
+import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
/**
* This class is the implementation of Metadata Node. One MNode instance represents one node in the
* Metadata Tree
*/
-public abstract class MNode implements Serializable {
+public class MNode implements Serializable {
private static final long serialVersionUID = -770028375899514063L;
@@ -44,6 +56,10 @@ public abstract class MNode implements Serializable {
*/
protected String fullPath;
+ private Map<String, MNode> children;
+ private Map<String, MNode> aliasChildren;
+
+ protected ReadWriteLock lock = new ReentrantReadWriteLock();
/**
* Constructor of MNode.
@@ -51,42 +67,89 @@ public abstract class MNode implements Serializable {
public MNode(MNode parent, String name) {
this.parent = parent;
this.name = name;
+ this.children = new LinkedHashMap<>();
}
/**
* check whether the MNode has a child with the name
*/
- public abstract boolean hasChild(String name);
+ public boolean hasChild(String name) {
+ return this.children.containsKey(name) ||
+ (aliasChildren != null && aliasChildren.containsKey(name));
+ }
/**
* node key, name or alias
*/
- public abstract void addChild(String name, MNode child);
+ public void addChild(String name, MNode child) {
+ children.put(name, child);
+ }
/**
- * delete a child
+ * If delete a leafMNode, lock its parent, if delete an InternalNode, lock itself
*/
- public abstract void deleteChild(String name) throws DeleteFailedException;
+ public void deleteChild(String name) throws DeleteFailedException {
+ if (children.containsKey(name)) {
+ Lock writeLock;
+ // if its child node is leaf node, we need to acquire the write lock of the current device node
+ if (children.get(name) instanceof MeasurementMNode) {
+ writeLock = lock.writeLock();
+ } else {
+ // otherwise, we only need to acquire the write lock of its child node.
+ writeLock = (children.get(name)).lock.writeLock();
+ }
+ if (writeLock.tryLock()) {
+ children.remove(name);
+ writeLock.unlock();
+ } else {
+ throw new DeleteFailedException(getFullPath() + PATH_SEPARATOR + name);
+ }
+ }
+ }
/**
* delete the alias of a child
*/
- public abstract void deleteAliasChild(String alias) throws DeleteFailedException;
+ public void deleteAliasChild(String alias) throws DeleteFailedException {
+ if (aliasChildren == null) {
+ return;
+ }
+ if (lock.writeLock().tryLock()) {
+ aliasChildren.remove(alias);
+ lock.writeLock().unlock();
+ } else {
+ throw new DeleteFailedException(getFullPath() + PATH_SEPARATOR + alias);
+ }
+ }
/**
* get the child with the name
*/
- public abstract MNode getChild(String name);
+ public MNode getChild(String name) {
+ return children.containsKey(name) ? children.get(name)
+ : (aliasChildren == null ? null : aliasChildren.get(name));
+ }
/**
* get the count of all leaves whose ancestor is current node
*/
- public abstract int getLeafCount();
+ public int getLeafCount() {
+ int leafCount = 0;
+ for (MNode child : this.children.values()) {
+ leafCount += child.getLeafCount();
+ }
+ return leafCount;
+ }
/**
* add an alias
*/
- public abstract void addAlias(String alias, MNode child);
+ public void addAlias(String alias, MNode child) {
+ if (aliasChildren == null) {
+ aliasChildren = new LinkedHashMap<>();
+ }
+ aliasChildren.put(alias, child);
+ }
/**
* get full path
@@ -118,7 +181,9 @@ public abstract class MNode implements Serializable {
return parent;
}
- public abstract Map<String, MNode> getChildren();
+ public Map<String, MNode> getChildren() {
+ return children;
+ }
public String getName() {
return name;
@@ -127,4 +192,82 @@ public abstract class MNode implements Serializable {
public void setName(String name) {
this.name = name;
}
+
+ public void setChildren(Map<String, MNode> children) {
+ this.children = children;
+ }
+
+ public void setAliasChildren(Map<String, MNode> aliasChildren) {
+ this.aliasChildren = aliasChildren;
+ }
+
+ public void serializeTo(OutputStream outputStream) throws IOException {
+ ReadWriteIOUtils.write(MetadataConstant.MNODE_TYPE, outputStream);
+ ReadWriteIOUtils.write(name, outputStream);
+ serializeChildren(outputStream);
+ }
+
+ void serializeChildren(OutputStream outputStream) throws IOException {
+ ReadWriteIOUtils.write(children.size(), outputStream);
+ for (Entry<String, MNode> entry : children.entrySet()) {
+ ReadWriteIOUtils.write(entry.getKey(), outputStream);
+ entry.getValue().serializeTo(outputStream);
+ }
+
+ if (aliasChildren == null) {
+ ReadWriteIOUtils.write(0, outputStream);
+ } else {
+ ReadWriteIOUtils.write(aliasChildren.size(), outputStream);
+ for (Entry<String, MNode> entry : aliasChildren.entrySet()) {
+ ReadWriteIOUtils.write(entry.getKey(), outputStream);
+ entry.getValue().serializeTo(outputStream);
+ }
+ }
+ }
+
+ public static MNode deserializeFrom(InputStream inputStream, MNode parent) throws IOException {
+ short nodeType = ReadWriteIOUtils.readShort(inputStream);
+ MNode node;
+ if (nodeType == MetadataConstant.STORAGE_GROUP_MNODE_TYPE) {
+ return StorageGroupMNode.deserializeFrom(inputStream, parent);
+ } else if (nodeType == MetadataConstant.MEASUREMENT_MNODE_TYPE) {
+ return MeasurementMNode.deserializeFrom(inputStream, parent);
+ } else {
+ node = new MNode(parent, ReadWriteIOUtils.readString(inputStream));
+ }
+
+ int childrenSize = ReadWriteIOUtils.readInt(inputStream);
+ Map<String, MNode> children = new HashMap<>();
+ for (int i = 0; i < childrenSize; i++) {
+ children.put(ReadWriteIOUtils.readString(inputStream),
+ MNode.deserializeFrom(inputStream, node));
+ }
+ node.setChildren(children);
+
+ int aliasChildrenSize = ReadWriteIOUtils.readInt(inputStream);
+ Map<String, MNode> aliasChildren = new HashMap<>();
+ for (int i = 0; i < aliasChildrenSize; i++) {
+ children.put(ReadWriteIOUtils.readString(inputStream),
+ MNode.deserializeFrom(inputStream, node));
+ }
+ node.setAliasChildren(aliasChildren);
+
+ return node;
+ }
+
+ public void readLock() {
+ MNode node = this;
+ while (node != null) {
+ node.lock.readLock().lock();
+ node = node.parent;
+ }
+ }
+
+ public void readUnlock() {
+ MNode node = this;
+ while (node != null) {
+ node.lock.readLock().unlock();
+ node = node.parent;
+ }
+ }
}
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MeasurementMNode.java
index 6dd4aa1..02f2a7d 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MeasurementMNode.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MeasurementMNode.java
@@ -18,18 +18,23 @@
*/
package org.apache.iotdb.db.metadata.mnode;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.iotdb.db.metadata.MetadataConstant;
import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
import org.apache.iotdb.tsfile.read.TimeValuePair;
+import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
-import java.util.Map;
-
/**
* Represents an (Internal-)MNode which has a Measurement or Sensor attached to it.
*/
-public class MeasurementMNode extends InternalMNode {
+public class MeasurementMNode extends MNode {
private static final long serialVersionUID = -1199657856921206435L;
@@ -47,12 +52,19 @@ public class MeasurementMNode extends InternalMNode {
* @param alias alias of measurementName
*/
public MeasurementMNode(MNode parent, String measurementName, String alias, TSDataType dataType,
- TSEncoding encoding, CompressionType type, Map<String, String> props) {
+ TSEncoding encoding, CompressionType type, Map<String, String> props) {
super(parent, measurementName);
this.schema = new MeasurementSchema(measurementName, dataType, encoding, type, props);
this.alias = alias;
}
+ public MeasurementMNode(MNode parent, String measurementName, MeasurementSchema schema,
+ String alias) {
+ super(parent, measurementName);
+ this.schema = schema;
+ this.alias = alias;
+ }
+
public MeasurementSchema getSchema() {
return schema;
}
@@ -63,7 +75,9 @@ public class MeasurementMNode extends InternalMNode {
public synchronized void updateCachedLast(
TimeValuePair timeValuePair, boolean highPriorityUpdate, Long latestFlushedTime) {
- if (timeValuePair == null || timeValuePair.getValue() == null) return;
+ if (timeValuePair == null || timeValuePair.getValue() == null) {
+ return;
+ }
if (cachedLastValuePair == null) {
// If no cached last, (1) a last query (2) an unseq insertion or (3) a seq insertion will update cache.
@@ -73,7 +87,7 @@ public class MeasurementMNode extends InternalMNode {
}
} else if (timeValuePair.getTimestamp() > cachedLastValuePair.getTimestamp()
|| (timeValuePair.getTimestamp() == cachedLastValuePair.getTimestamp()
- && highPriorityUpdate)) {
+ && highPriorityUpdate)) {
cachedLastValuePair.setTimestamp(timeValuePair.getTimestamp());
cachedLastValuePair.setValue(timeValuePair.getValue());
}
@@ -103,4 +117,52 @@ public class MeasurementMNode extends InternalMNode {
public void setAlias(String alias) {
this.alias = alias;
}
+
+ public void setSchema(MeasurementSchema schema) {
+ this.schema = schema;
+ }
+
+ @Override
+ public void serializeTo(OutputStream outputStream) throws IOException {
+ ReadWriteIOUtils.write(MetadataConstant.MEASUREMENT_MNODE_TYPE, outputStream);
+ ReadWriteIOUtils.write(name, outputStream);
+
+ ReadWriteIOUtils.writeIsNull(alias, outputStream);
+ if (alias != null) {
+ ReadWriteIOUtils.write(alias, outputStream);
+ }
+ schema.serializeTo(outputStream);
+ ReadWriteIOUtils.write(offset, outputStream);
+ serializeChildren(outputStream);
+ }
+
+ public static MeasurementMNode deserializeFrom(InputStream inputStream, MNode parent)
+ throws IOException {
+ String name = ReadWriteIOUtils.readString(inputStream);
+ String alias = null;
+ if (!ReadWriteIOUtils.readIsNull(inputStream)) {
+ alias = ReadWriteIOUtils.readString(inputStream);
+ }
+ MeasurementMNode node = new MeasurementMNode(parent, name,
+ MeasurementSchema.deserializeFrom(inputStream), alias);
+ node.setOffset(ReadWriteIOUtils.readLong(inputStream));
+
+ int childrenSize = ReadWriteIOUtils.readInt(inputStream);
+ Map<String, MNode> children = new HashMap<>();
+ for (int i = 0; i < childrenSize; i++) {
+ children
+ .put(ReadWriteIOUtils.readString(inputStream), MNode.deserializeFrom(inputStream, node));
+ }
+ node.setChildren(children);
+
+ int aliasChildrenSize = ReadWriteIOUtils.readInt(inputStream);
+ Map<String, MNode> aliasChildren = new HashMap<>();
+ for (int i = 0; i < aliasChildrenSize; i++) {
+ children
+ .put(ReadWriteIOUtils.readString(inputStream), MNode.deserializeFrom(inputStream, node));
+ }
+ node.setAliasChildren(aliasChildren);
+
+ return node;
+ }
}
\ No newline at end of file
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/StorageGroupMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/StorageGroupMNode.java
index 02c668f..82766c8 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/StorageGroupMNode.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/StorageGroupMNode.java
@@ -18,7 +18,15 @@
*/
package org.apache.iotdb.db.metadata.mnode;
-public class StorageGroupMNode extends InternalMNode {
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.iotdb.db.metadata.MetadataConstant;
+import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
+
+public class StorageGroupMNode extends MNode {
private static final long serialVersionUID = 7999036474525817732L;
@@ -28,7 +36,6 @@ public class StorageGroupMNode extends InternalMNode {
*/
private long dataTTL;
-
public StorageGroupMNode(MNode parent, String name, long dataTTL) {
super(parent, name);
this.dataTTL = dataTTL;
@@ -43,4 +50,37 @@ public class StorageGroupMNode extends InternalMNode {
this.dataTTL = dataTTL;
}
+ @Override
+ public void serializeTo(OutputStream outputStream) throws IOException {
+ ReadWriteIOUtils.write(MetadataConstant.STORAGE_GROUP_MNODE_TYPE, outputStream);
+ ReadWriteIOUtils.write(name, outputStream);
+ ReadWriteIOUtils.write(dataTTL, outputStream);
+
+ serializeChildren(outputStream);
+ }
+
+ public static StorageGroupMNode deserializeFrom(InputStream inputStream, MNode parent)
+ throws IOException {
+ String name = ReadWriteIOUtils.readString(inputStream);
+ StorageGroupMNode node = new StorageGroupMNode(parent, name,
+ ReadWriteIOUtils.readLong(inputStream));
+
+ int childrenSize = ReadWriteIOUtils.readInt(inputStream);
+ Map<String, MNode> children = new HashMap<>();
+ for (int i = 0; i < childrenSize; i++) {
+ children.put(ReadWriteIOUtils.readString(inputStream),
+ MNode.deserializeFrom(inputStream, node));
+ }
+ node.setChildren(children);
+
+ int aliasChildrenSize = ReadWriteIOUtils.readInt(inputStream);
+ Map<String, MNode> aliasChildren = new HashMap<>();
+ for (int i = 0; i < aliasChildrenSize; i++) {
+ children.put(ReadWriteIOUtils.readString(inputStream),
+ MNode.deserializeFrom(inputStream, node));
+ }
+ node.setAliasChildren(aliasChildren);
+
+ return node;
+ }
}
\ No newline at end of file
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java b/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java
index fd53ec3..b628a0f 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java
@@ -50,7 +50,6 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
-
import org.apache.iotdb.db.auth.AuthException;
import org.apache.iotdb.db.auth.authorizer.BasicAuthorizer;
import org.apache.iotdb.db.auth.authorizer.IAuthorizer;
@@ -76,16 +75,25 @@ import org.apache.iotdb.db.exception.metadata.PathNotExistException;
import org.apache.iotdb.db.exception.metadata.StorageGroupNotSetException;
import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.metadata.MManager;
-import org.apache.iotdb.db.metadata.mnode.InternalMNode;
-import org.apache.iotdb.db.metadata.mnode.MeasurementMNode;
import org.apache.iotdb.db.metadata.mnode.MNode;
+import org.apache.iotdb.db.metadata.mnode.MeasurementMNode;
import org.apache.iotdb.db.metadata.mnode.StorageGroupMNode;
import org.apache.iotdb.db.qp.logical.Operator.OperatorType;
import org.apache.iotdb.db.qp.logical.sys.AuthorOperator;
import org.apache.iotdb.db.qp.logical.sys.AuthorOperator.AuthorType;
import org.apache.iotdb.db.qp.physical.PhysicalPlan;
-import org.apache.iotdb.db.qp.physical.crud.*;
+import org.apache.iotdb.db.qp.physical.crud.AggregationPlan;
+import org.apache.iotdb.db.qp.physical.crud.AlignByDevicePlan;
+import org.apache.iotdb.db.qp.physical.crud.DeletePlan;
+import org.apache.iotdb.db.qp.physical.crud.FillQueryPlan;
+import org.apache.iotdb.db.qp.physical.crud.GroupByTimeFillPlan;
import org.apache.iotdb.db.qp.physical.crud.GroupByTimePlan;
+import org.apache.iotdb.db.qp.physical.crud.InsertPlan;
+import org.apache.iotdb.db.qp.physical.crud.InsertTabletPlan;
+import org.apache.iotdb.db.qp.physical.crud.LastQueryPlan;
+import org.apache.iotdb.db.qp.physical.crud.QueryPlan;
+import org.apache.iotdb.db.qp.physical.crud.RawDataQueryPlan;
+import org.apache.iotdb.db.qp.physical.crud.UpdatePlan;
import org.apache.iotdb.db.qp.physical.sys.AlterTimeSeriesPlan;
import org.apache.iotdb.db.qp.physical.sys.AuthorPlan;
import org.apache.iotdb.db.qp.physical.sys.ClearCachePlan;
@@ -94,8 +102,8 @@ import org.apache.iotdb.db.qp.physical.sys.CreateTimeSeriesPlan;
import org.apache.iotdb.db.qp.physical.sys.DataAuthPlan;
import org.apache.iotdb.db.qp.physical.sys.DeleteStorageGroupPlan;
import org.apache.iotdb.db.qp.physical.sys.DeleteTimeSeriesPlan;
-import org.apache.iotdb.db.qp.physical.sys.LoadConfigurationPlan;
import org.apache.iotdb.db.qp.physical.sys.FlushPlan;
+import org.apache.iotdb.db.qp.physical.sys.LoadConfigurationPlan;
import org.apache.iotdb.db.qp.physical.sys.MergePlan;
import org.apache.iotdb.db.qp.physical.sys.OperateFilePlan;
import org.apache.iotdb.db.qp.physical.sys.SetStorageGroupPlan;
@@ -810,7 +818,8 @@ public class PlanExecutor implements IPlanExecutor {
schema.getEncodingType(),
schema.getCompressor(),
Collections.emptyMap());
- } else if (!(node.getChild(chunkMetadata.getMeasurementUid()) instanceof MeasurementMNode)) {
+ } else if (!(node
+ .getChild(chunkMetadata.getMeasurementUid()) instanceof MeasurementMNode)) {
throw new QueryProcessException(
String.format("Current Path is not leaf node. %s", series));
}
@@ -818,7 +827,7 @@ public class PlanExecutor implements IPlanExecutor {
}
} finally {
if (node != null) {
- ((InternalMNode) node).readUnlock();
+ node.readUnlock();
}
}
}
@@ -893,7 +902,8 @@ public class PlanExecutor implements IPlanExecutor {
insertPlan.setSchemasAndTransferType(schemas);
StorageEngine.getInstance().insert(insertPlan);
if (insertPlan.getFailedMeasurements() != null) {
- throw new StorageEngineException("failed to insert points " + insertPlan.getFailedMeasurements());
+ throw new StorageEngineException(
+ "failed to insert points " + insertPlan.getFailedMeasurements());
}
} catch (StorageEngineException | MetadataException e) {
throw new QueryProcessException(e);
@@ -919,7 +929,8 @@ public class PlanExecutor implements IPlanExecutor {
measurementList[i] = schemas[i].getMeasurementId();
}
} catch (MetadataException e) {
- logger.warn("meet error when check {}.{}, message: {}", deviceId, measurementList[i], e.getMessage());
+ logger.warn("meet error when check {}.{}, message: {}", deviceId, measurementList[i],
+ e.getMessage());
if (enablePartialInsert) {
insertPlan.markMeasurementInsertionFailed(i);
} else {
@@ -929,7 +940,7 @@ public class PlanExecutor implements IPlanExecutor {
}
} finally {
if (node != null) {
- ((InternalMNode) node).readUnlock();
+ node.readUnlock();
}
}
return schemas;
@@ -938,7 +949,8 @@ public class PlanExecutor implements IPlanExecutor {
/**
* @param loc index of measurement in insertPlan
*/
- private MeasurementSchema getSeriesSchema(MNode deviceNode, InsertPlan insertPlan, int loc) throws MetadataException {
+ private MeasurementSchema getSeriesSchema(MNode deviceNode, InsertPlan insertPlan, int loc)
+ throws MetadataException {
String measurement = insertPlan.getMeasurements()[loc];
String deviceId = insertPlan.getDeviceId();
Object value = insertPlan.getValues()[loc];
@@ -959,15 +971,17 @@ public class PlanExecutor implements IPlanExecutor {
Path path = new Path(deviceId, measurement);
internalCreateTimeseries(path.toString(), dataType);
- MeasurementMNode measurementNode = (MeasurementMNode) mManager.getChild(deviceNode, measurement);
+ MeasurementMNode measurementNode = (MeasurementMNode) mManager
+ .getChild(deviceNode, measurement);
measurementSchema = measurementNode.getSchema();
- if(!isInferType) {
+ if (!isInferType) {
checkType(insertPlan, loc, measurementNode.getSchema().getType());
}
}
} else if (deviceNode != null) {
// device and measurement exists in MTree
- MeasurementMNode measurementNode = (MeasurementMNode) MManager.getInstance().getChild(deviceNode, measurement);
+ MeasurementMNode measurementNode = (MeasurementMNode) MManager.getInstance()
+ .getChild(deviceNode, measurement);
measurementSchema = measurementNode.getSchema();
} else {
// device in not in MTree, try the cache
@@ -1106,7 +1120,7 @@ public class PlanExecutor implements IPlanExecutor {
throw new QueryProcessException(e);
} finally {
if (node != null) {
- ((InternalMNode) node).readUnlock();
+ node.readUnlock();
}
}
}
diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/MManagerImproveTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/MManagerImproveTest.java
index 424ad52..5949d0e 100644
--- a/server/src/test/java/org/apache/iotdb/db/metadata/MManagerImproveTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/metadata/MManagerImproveTest.java
@@ -26,9 +26,8 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.iotdb.db.exception.metadata.MetadataException;
-import org.apache.iotdb.db.metadata.mnode.InternalMNode;
-import org.apache.iotdb.db.metadata.mnode.MeasurementMNode;
import org.apache.iotdb.db.metadata.mnode.MNode;
+import org.apache.iotdb.db.metadata.mnode.MeasurementMNode;
import org.apache.iotdb.db.utils.EnvironmentUtils;
import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
@@ -142,7 +141,7 @@ public class MManagerImproveTest {
}
} finally {
if (node != null) {
- ((InternalMNode) node).readUnlock();
+ node.readUnlock();
}
}
}
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/ReadWriteIOUtils.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/ReadWriteIOUtils.java
index 1173749..25c0557 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/ReadWriteIOUtils.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/ReadWriteIOUtils.java
@@ -105,15 +105,15 @@ public class ReadWriteIOUtils {
/**
* write if the object not equals null. Eg, object eauals null, then write false.
*/
- public static int writeIsNotNull(Object object, OutputStream outputStream) throws IOException {
- return write(object != null, outputStream);
+ public static int writeIsNull(Object object, OutputStream outputStream) throws IOException {
+ return write(object == null, outputStream);
}
/**
* write if the object not equals null. Eg, object eauals null, then write false.
*/
- public static int writeIsNotNull(Object object, ByteBuffer buffer) {
- return write(object != null, buffer);
+ public static int writeIsNull(Object object, ByteBuffer buffer) {
+ return write(object == null, buffer);
}
/**