You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2021/11/03 02:19:57 UTC
[iotdb] branch new_vector updated: [To new_vector] Refactor
getMeasurementPaths to return MeasurementPath (#4301)
This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch new_vector
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/new_vector by this push:
new 5c7900b [To new_vector] Refactor getMeasurementPaths to return MeasurementPath (#4301)
5c7900b is described below
commit 5c7900ba4adbfabc6b28154a88a85c23d7060dff
Author: Marcos_Zyk <38...@users.noreply.github.com>
AuthorDate: Wed Nov 3 10:19:31 2021 +0800
[To new_vector] Refactor getMeasurementPaths to return MeasurementPath (#4301)
---
.../apache/iotdb/cluster/metadata/CMManager.java | 72 ++++++----------------
.../iotdb/cluster/query/ClusterPlanExecutor.java | 3 +-
.../iotdb/cluster/query/LocalQueryExecutor.java | 4 +-
.../cluster/query/ClusterPlanExecutorTest.java | 4 +-
.../cluster/server/member/MetaGroupMemberTest.java | 3 +-
.../cross/inplace/recover/LogAnalyzer.java | 3 +-
.../inner/utils/InnerSpaceCompactionUtils.java | 2 +-
.../trigger/sink/local/LocalIoTDBHandler.java | 2 +-
.../org/apache/iotdb/db/metadata/MManager.java | 56 ++++-------------
.../org/apache/iotdb/db/metadata/mtree/MTree.java | 7 ++-
.../traverser/collector/CollectorTraverser.java | 6 +-
.../apache/iotdb/db/metadata/path/AlignedPath.java | 4 ++
.../iotdb/db/metadata/path/MeasurementPath.java | 8 +++
.../apache/iotdb/db/metadata/path/PartialPath.java | 4 ++
.../apache/iotdb/db/qp/executor/PlanExecutor.java | 5 +-
.../iotdb/db/qp/logical/crud/QueryOperator.java | 4 +-
.../qp/strategy/optimizer/ConcatPathOptimizer.java | 3 +-
.../apache/iotdb/db/qp/utils/WildcardsRemover.java | 7 ++-
.../org/apache/iotdb/db/service/TSServiceImpl.java | 3 +-
.../iotdb/db/metadata/MManagerAdvancedTest.java | 3 +-
.../iotdb/db/metadata/MManagerBasicTest.java | 45 +-------------
.../org/apache/iotdb/db/metadata/MTreeTest.java | 9 +--
22 files changed, 93 insertions(+), 164 deletions(-)
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/metadata/CMManager.java b/cluster/src/main/java/org/apache/iotdb/cluster/metadata/CMManager.java
index beb1cdb..ac273f4 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/metadata/CMManager.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/metadata/CMManager.java
@@ -48,6 +48,7 @@ import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode;
import org.apache.iotdb.db.metadata.mnode.InternalMNode;
import org.apache.iotdb.db.metadata.mnode.MeasurementMNode;
import org.apache.iotdb.db.metadata.path.AlignedPath;
+import org.apache.iotdb.db.metadata.path.MeasurementPath;
import org.apache.iotdb.db.metadata.path.PartialPath;
import org.apache.iotdb.db.metadata.utils.MetaUtils;
import org.apache.iotdb.db.qp.constant.SQLConstant;
@@ -417,45 +418,6 @@ public class CMManager extends MManager {
return super.getSeriesSchemasAndReadLockDevice(plan);
}
- @Override
- public IMeasurementSchema getSeriesSchema(PartialPath device, String measurement)
- throws MetadataException {
- try {
- IMeasurementSchema measurementSchema = super.getSeriesSchema(device, measurement);
- if (measurementSchema != null) {
- return measurementSchema;
- }
- } catch (PathNotExistException e) {
- // not found in local
- }
-
- // try cache
- cacheLock.readLock().lock();
- try {
- IMeasurementMNode measurementMNode = mRemoteMetaCache.get(device.concatNode(measurement));
- if (measurementMNode != null) {
- return measurementMNode.getSchema();
- }
- } finally {
- cacheLock.readLock().unlock();
- }
-
- // pull from remote
- pullSeriesSchemas(device, new String[] {measurement});
-
- // try again
- cacheLock.readLock().lock();
- try {
- IMeasurementMNode measurementMeta = mRemoteMetaCache.get(device.concatNode(measurement));
- if (measurementMeta != null) {
- return measurementMeta.getSchema();
- }
- } finally {
- cacheLock.readLock().unlock();
- }
- return super.getSeriesSchema(device, measurement);
- }
-
/**
* Check whether the path exists.
*
@@ -963,9 +925,9 @@ public class CMManager extends MManager {
* storage group added
* @return a collection of all queried paths
*/
- private List<PartialPath> getMatchedPaths(Map<String, String> sgPathMap, boolean withAlias)
+ private List<MeasurementPath> getMatchedPaths(Map<String, String> sgPathMap, boolean withAlias)
throws MetadataException {
- List<PartialPath> result = new ArrayList<>();
+ List<MeasurementPath> result = new ArrayList<>();
// split the paths by the data group they belong to
Map<PartitionGroup, List<String>> remoteGroupPathMap = new HashMap<>();
for (Entry<String, String> sgPathEntry : sgPathMap.entrySet()) {
@@ -984,7 +946,7 @@ public class CMManager extends MManager {
} catch (CheckConsistencyException e) {
logger.warn("Failed to check consistency.", e);
}
- List<PartialPath> allTimeseriesName = getMatchedPathsLocally(pathUnderSG, withAlias);
+ List<MeasurementPath> allTimeseriesName = getMatchedPathsLocally(pathUnderSG, withAlias);
logger.debug(
"{}: get matched paths of {} locally, result {}",
metaGroupMember.getName(),
@@ -1010,7 +972,7 @@ public class CMManager extends MManager {
return result;
}
- private List<PartialPath> getMatchedPathsLocally(PartialPath partialPath, boolean withAlias)
+ private List<MeasurementPath> getMatchedPathsLocally(PartialPath partialPath, boolean withAlias)
throws MetadataException {
if (!withAlias) {
return getMeasurementPaths(partialPath);
@@ -1019,14 +981,14 @@ public class CMManager extends MManager {
}
}
- private List<PartialPath> getMatchedPaths(
+ private List<MeasurementPath> getMatchedPaths(
PartitionGroup partitionGroup, List<String> pathsToQuery, boolean withAlias)
throws MetadataException {
// choose the node with lowest latency or highest throughput
List<Node> coordinatedNodes = QueryCoordinator.getINSTANCE().reorderNodes(partitionGroup);
for (Node node : coordinatedNodes) {
try {
- List<PartialPath> paths =
+ List<MeasurementPath> paths =
getMatchedPaths(node, partitionGroup.getHeader(), pathsToQuery, withAlias);
if (logger.isDebugEnabled()) {
logger.debug(
@@ -1054,7 +1016,7 @@ public class CMManager extends MManager {
}
@SuppressWarnings("java:S1168") // null and empty list are different
- private List<PartialPath> getMatchedPaths(
+ private List<MeasurementPath> getMatchedPaths(
Node node, RaftNode header, List<String> pathsToQuery, boolean withAlias)
throws IOException, TException, InterruptedException {
GetAllPathsResult result;
@@ -1082,9 +1044,11 @@ public class CMManager extends MManager {
if (result != null) {
// paths may be empty, implying that the group does not contain matched paths, so we do not
// need to query other nodes in the group
- List<PartialPath> partialPaths = new ArrayList<>();
+ List<MeasurementPath> partialPaths = new ArrayList<>();
for (int i = 0; i < result.paths.size(); i++) {
- PartialPath matchedPath = getAssembledPathFromRequest(result.paths.get(i));
+ // todo check this transform
+ MeasurementPath matchedPath =
+ (MeasurementPath) getAssembledPathFromRequest(result.paths.get(i));
partialPaths.add(matchedPath);
if (withAlias) {
matchedPath.setMeasurementAlias(result.aliasList.get(i));
@@ -1212,10 +1176,10 @@ public class CMManager extends MManager {
/** Similar to method getAllTimeseriesPath(), but return Path with alias alias. */
@Override
- public Pair<List<PartialPath>, Integer> getMeasurementPathsWithAlias(
+ public Pair<List<MeasurementPath>, Integer> getMeasurementPathsWithAlias(
PartialPath pathPattern, int limit, int offset) throws MetadataException {
Map<String, String> sgPathMap = groupPathByStorageGroup(pathPattern);
- List<PartialPath> result = getMatchedPaths(sgPathMap, true);
+ List<MeasurementPath> result = getMatchedPaths(sgPathMap, true);
int skippedOffset = 0;
// apply offset and limit
@@ -1240,9 +1204,9 @@ public class CMManager extends MManager {
* @param originPath a path potentially with wildcard
* @return all paths after removing wildcards in the path
*/
- public List<PartialPath> getMatchedPaths(PartialPath originPath) throws MetadataException {
+ public List<MeasurementPath> getMatchedPaths(PartialPath originPath) throws MetadataException {
Map<String, String> sgPathMap = groupPathByStorageGroup(originPath);
- List<PartialPath> ret = getMatchedPaths(sgPathMap, false);
+ List<MeasurementPath> ret = getMatchedPaths(sgPathMap, false);
logger.debug("The paths of path {} are {}", originPath, ret);
return ret;
}
@@ -1264,7 +1228,7 @@ public class CMManager extends MManager {
getAllPathsService.submit(
() -> {
try {
- List<PartialPath> fullPathStrs = getMatchedPaths(pathStr);
+ List<MeasurementPath> fullPathStrs = getMatchedPaths(pathStr);
if (fullPathStrs.isEmpty()) {
nonExistPaths.add(pathStr);
logger.debug("Path {} is not found.", pathStr);
@@ -1691,7 +1655,7 @@ public class CMManager extends MManager {
List<String> alias = withAlias ? new ArrayList<>() : null;
for (String path : paths) {
- List<PartialPath> allTimeseriesPathWithAlias =
+ List<MeasurementPath> allTimeseriesPathWithAlias =
super.getMeasurementPathsWithAlias(new PartialPath(path), -1, -1).left;
for (PartialPath timeseriesPathWithAlias : allTimeseriesPathWithAlias) {
retPaths.add(getPathStrListForRequest(timeseriesPathWithAlias));
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/query/ClusterPlanExecutor.java b/cluster/src/main/java/org/apache/iotdb/cluster/query/ClusterPlanExecutor.java
index 4f37410..7564aa2 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/query/ClusterPlanExecutor.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/query/ClusterPlanExecutor.java
@@ -41,6 +41,7 @@ import org.apache.iotdb.db.exception.metadata.MetadataException;
import org.apache.iotdb.db.exception.metadata.PathNotExistException;
import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.metadata.mnode.IStorageGroupMNode;
+import org.apache.iotdb.db.metadata.path.MeasurementPath;
import org.apache.iotdb.db.metadata.path.PartialPath;
import org.apache.iotdb.db.qp.executor.PlanExecutor;
import org.apache.iotdb.db.qp.physical.PhysicalPlan;
@@ -117,7 +118,7 @@ public class ClusterPlanExecutor extends PlanExecutor {
@Override
@TestOnly
- protected List<PartialPath> getPathsName(PartialPath path) throws MetadataException {
+ protected List<MeasurementPath> getPathsName(PartialPath path) throws MetadataException {
return ((CMManager) IoTDB.metaManager).getMatchedPaths(path);
}
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/query/LocalQueryExecutor.java b/cluster/src/main/java/org/apache/iotdb/cluster/query/LocalQueryExecutor.java
index 23e7c8d..cf94688 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/query/LocalQueryExecutor.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/query/LocalQueryExecutor.java
@@ -46,6 +46,7 @@ import org.apache.iotdb.db.exception.StorageEngineException;
import org.apache.iotdb.db.exception.metadata.IllegalPathException;
import org.apache.iotdb.db.exception.metadata.MetadataException;
import org.apache.iotdb.db.exception.query.QueryProcessException;
+import org.apache.iotdb.db.metadata.path.MeasurementPath;
import org.apache.iotdb.db.metadata.path.PartialPath;
import org.apache.iotdb.db.qp.physical.PhysicalPlan;
import org.apache.iotdb.db.qp.physical.sys.ShowDevicesPlan;
@@ -749,7 +750,8 @@ public class LocalQueryExecutor {
List<String> result = new ArrayList<>();
for (String seriesPath : timeseriesList) {
try {
- List<PartialPath> path = getCMManager().getMeasurementPaths(new PartialPath(seriesPath));
+ List<MeasurementPath> path =
+ getCMManager().getMeasurementPaths(new PartialPath(seriesPath));
if (path.size() != 1) {
throw new MetadataException(
String.format("Timeseries number of the name [%s] is not 1.", seriesPath));
diff --git a/cluster/src/test/java/org/apache/iotdb/cluster/query/ClusterPlanExecutorTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/query/ClusterPlanExecutorTest.java
index 1ee7bb9..4da865e 100644
--- a/cluster/src/test/java/org/apache/iotdb/cluster/query/ClusterPlanExecutorTest.java
+++ b/cluster/src/test/java/org/apache/iotdb/cluster/query/ClusterPlanExecutorTest.java
@@ -23,6 +23,7 @@ import org.apache.iotdb.db.exception.StorageEngineException;
import org.apache.iotdb.db.exception.metadata.MetadataException;
import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.metadata.mnode.IStorageGroupMNode;
+import org.apache.iotdb.db.metadata.path.MeasurementPath;
import org.apache.iotdb.db.metadata.path.PartialPath;
import org.apache.iotdb.db.qp.physical.crud.RawDataQueryPlan;
import org.apache.iotdb.db.qp.physical.sys.ShowTimeSeriesPlan;
@@ -73,7 +74,8 @@ public class ClusterPlanExecutorTest extends BaseQueryTest {
@Test
public void testMatchPaths() throws MetadataException {
- List<PartialPath> allMatchedPaths = queryExecutor.getPathsName(new PartialPath("root.*.s0"));
+ List<MeasurementPath> allMatchedPaths =
+ queryExecutor.getPathsName(new PartialPath("root.*.s0"));
allMatchedPaths.sort(null);
for (int i = 0; i < allMatchedPaths.size(); i++) {
assertEquals(pathList.get(i), allMatchedPaths.get(i));
diff --git a/cluster/src/test/java/org/apache/iotdb/cluster/server/member/MetaGroupMemberTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/server/member/MetaGroupMemberTest.java
index 31c0e95..0703a4c 100644
--- a/cluster/src/test/java/org/apache/iotdb/cluster/server/member/MetaGroupMemberTest.java
+++ b/cluster/src/test/java/org/apache/iotdb/cluster/server/member/MetaGroupMemberTest.java
@@ -88,6 +88,7 @@ import org.apache.iotdb.db.exception.metadata.MetadataException;
import org.apache.iotdb.db.exception.metadata.StorageGroupNotSetException;
import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode;
+import org.apache.iotdb.db.metadata.path.MeasurementPath;
import org.apache.iotdb.db.metadata.path.PartialPath;
import org.apache.iotdb.db.qp.executor.PlanExecutor;
import org.apache.iotdb.db.qp.physical.PhysicalPlan;
@@ -1021,7 +1022,7 @@ public class MetaGroupMemberTest extends BaseMember {
@Test
public void testGetMatchedPaths() throws MetadataException {
System.out.println("Start testGetMatchedPaths()");
- List<PartialPath> matchedPaths =
+ List<MeasurementPath> matchedPaths =
((CMManager) IoTDB.metaManager)
.getMatchedPaths(new PartialPath(TestUtils.getTestSg(0) + ".*"));
assertEquals(20, matchedPaths.size());
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/inplace/recover/LogAnalyzer.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/inplace/recover/LogAnalyzer.java
index 631f5ca..2b427d1 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/inplace/recover/LogAnalyzer.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/inplace/recover/LogAnalyzer.java
@@ -25,6 +25,7 @@ import org.apache.iotdb.db.engine.fileSystem.SystemFileFactory;
import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
import org.apache.iotdb.db.exception.metadata.IllegalPathException;
import org.apache.iotdb.db.exception.metadata.MetadataException;
+import org.apache.iotdb.db.metadata.path.MeasurementPath;
import org.apache.iotdb.db.metadata.path.PartialPath;
import org.apache.iotdb.db.service.IoTDB;
@@ -102,7 +103,7 @@ public class LogAnalyzer {
analyzeUnseqFiles(bufferedReader);
- List<PartialPath> storageGroupPaths =
+ List<MeasurementPath> storageGroupPaths =
IoTDB.metaManager.getMeasurementPaths(new PartialPath(storageGroupName + ".*"));
unmergedPaths = new ArrayList<>();
unmergedPaths.addAll(storageGroupPaths);
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/InnerSpaceCompactionUtils.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/InnerSpaceCompactionUtils.java
index 17b99f8..efdf8d8 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/InnerSpaceCompactionUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/InnerSpaceCompactionUtils.java
@@ -206,7 +206,7 @@ public class InnerSpaceCompactionUtils {
try {
chunkWriter =
new ChunkWriterImpl(
- IoTDB.metaManager.getSeriesSchema(new PartialPath(device), entry.getKey()), true);
+ IoTDB.metaManager.getSeriesSchema(new PartialPath(device, entry.getKey())), true);
} catch (MetadataException e) {
// this may caused in IT by restart
logger.error("{} get schema {} error, skip this sensor", device, entry.getKey(), e);
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/trigger/sink/local/LocalIoTDBHandler.java b/server/src/main/java/org/apache/iotdb/db/engine/trigger/sink/local/LocalIoTDBHandler.java
index 39a5c32..68b3e23 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/trigger/sink/local/LocalIoTDBHandler.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/trigger/sink/local/LocalIoTDBHandler.java
@@ -72,7 +72,7 @@ public class LocalIoTDBHandler implements Handler<LocalIoTDBConfiguration, Local
TSFileDescriptor.getInstance().getConfig().getCompressor(),
Collections.emptyMap());
} else {
- if (!IoTDB.metaManager.getSeriesSchema(device, measurement).getType().equals(dataType)) {
+ if (!IoTDB.metaManager.getSeriesType(path).equals(dataType)) {
throw new SinkException(
String.format("The data type of %s you provided was not correct.", path));
}
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 7e90243..b957209 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
@@ -44,7 +44,7 @@ import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode;
import org.apache.iotdb.db.metadata.mnode.IStorageGroupMNode;
import org.apache.iotdb.db.metadata.mnode.MeasurementMNode;
import org.apache.iotdb.db.metadata.mtree.MTree;
-import org.apache.iotdb.db.metadata.path.AlignedPath;
+import org.apache.iotdb.db.metadata.path.MeasurementPath;
import org.apache.iotdb.db.metadata.path.PartialPath;
import org.apache.iotdb.db.metadata.tag.TagManager;
import org.apache.iotdb.db.metadata.template.Template;
@@ -91,7 +91,6 @@ import org.apache.iotdb.tsfile.read.TimeValuePair;
import org.apache.iotdb.tsfile.utils.Pair;
import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema;
import org.apache.iotdb.tsfile.write.schema.TimeseriesSchema;
-import org.apache.iotdb.tsfile.write.schema.UnaryMeasurementSchema;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -630,7 +629,7 @@ public class MManager {
*/
public String deleteTimeseries(PartialPath pathPattern) throws MetadataException {
try {
- List<PartialPath> allTimeseries = mtree.getMeasurementPaths(pathPattern);
+ List<MeasurementPath> allTimeseries = mtree.getMeasurementPaths(pathPattern);
if (allTimeseries.isEmpty()) {
throw new MetadataException(
String.format(
@@ -1070,7 +1069,8 @@ public class MManager {
*
* @param pathPattern can be a pattern or a full path of timeseries.
*/
- public List<PartialPath> getMeasurementPaths(PartialPath pathPattern) throws MetadataException {
+ public List<MeasurementPath> getMeasurementPaths(PartialPath pathPattern)
+ throws MetadataException {
return mtree.getMeasurementPaths(pathPattern);
}
@@ -1078,7 +1078,7 @@ public class MManager {
* Similar to method getMeasurementPaths(), but return Path with alias and filter the result by
* limit and offset.
*/
- public Pair<List<PartialPath>, Integer> getMeasurementPathsWithAlias(
+ public Pair<List<MeasurementPath>, Integer> getMeasurementPathsWithAlias(
PartialPath pathPattern, int limit, int offset) throws MetadataException {
return mtree.getMeasurementPathsWithAlias(pathPattern, limit, offset);
}
@@ -1190,37 +1190,17 @@ public class MManager {
return TSDataType.INT64;
}
- IMeasurementSchema schema = getSeriesSchema(fullPath);
- if (schema instanceof UnaryMeasurementSchema) {
- return schema.getType();
- } else {
- if (((AlignedPath) fullPath).getMeasurementList().size() != 1) {
- return TSDataType.VECTOR;
- } else {
- String subSensor = ((AlignedPath) fullPath).getMeasurement(0);
- List<String> measurements = schema.getSubMeasurementsList();
- return schema.getSubMeasurementsTSDataTypeList().get(measurements.indexOf(subSensor));
+ // todo eliminate this after Query interaction refactor
+ try {
+ IMeasurementSchema schema = fullPath.getMeasurementSchema();
+ if (schema != null) {
+ return schema.getType();
}
- }
- }
+ } catch (MetadataException ignored) {
- /**
- * get MeasurementSchema
- *
- * @param device device path
- * @param measurement measurement name
- * @return MeasurementSchema
- */
- public IMeasurementSchema getSeriesSchema(PartialPath device, String measurement)
- throws MetadataException {
- IMNode deviceIMNode = getDeviceNode(device);
- IMeasurementMNode measurementMNode = deviceIMNode.getChild(measurement).getAsMeasurementMNode();
- if (measurementMNode == null) {
- // Just for the initial adaptation of the template functionality and merge functionality
- // The getSeriesSchema interface needs to be cleaned up later
- return getSeriesSchema(device.concatNode(measurement));
}
- return measurementMNode.getSchema();
+
+ return getSeriesSchema(fullPath).getType();
}
/**
@@ -1230,16 +1210,6 @@ public class MManager {
* @return MeasurementSchema
*/
public IMeasurementSchema getSeriesSchema(PartialPath fullPath) throws MetadataException {
- try {
- IMeasurementSchema schema = fullPath.getMeasurementSchema();
- if (schema != null) {
- return schema;
- }
- } catch (MetadataException ignored) {
-
- }
-
- // Path get from remote doesn't contain schema
return getMeasurementMNode(fullPath).getSchema();
}
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTree.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTree.java
index c29502f..03a53bb 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTree.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTree.java
@@ -892,7 +892,8 @@ public class MTree implements Serializable {
*
* @param pathPattern a path pattern or a full path, may contain wildcard.
*/
- public List<PartialPath> getMeasurementPaths(PartialPath pathPattern) throws MetadataException {
+ public List<MeasurementPath> getMeasurementPaths(PartialPath pathPattern)
+ throws MetadataException {
return getMeasurementPathsWithAlias(pathPattern, 0, 0).left;
}
@@ -903,9 +904,9 @@ public class MTree implements Serializable {
* @return Pair.left contains all the satisfied paths Pair.right means the current offset or zero
* if we don't set offset.
*/
- public Pair<List<PartialPath>, Integer> getMeasurementPathsWithAlias(
+ public Pair<List<MeasurementPath>, Integer> getMeasurementPathsWithAlias(
PartialPath pathPattern, int limit, int offset) throws MetadataException {
- List<PartialPath> result = new LinkedList<>();
+ List<MeasurementPath> result = new LinkedList<>();
MeasurementCollector<List<PartialPath>> collector =
new MeasurementCollector<List<PartialPath>>(root, pathPattern, limit, offset) {
@Override
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/CollectorTraverser.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/CollectorTraverser.java
index 2c6f6f5..a9af73e 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/CollectorTraverser.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/CollectorTraverser.java
@@ -46,7 +46,7 @@ public abstract class CollectorTraverser<T> extends Traverser {
super(startNode, path);
this.limit = limit;
this.offset = offset;
- if (limit != 0 || offset != 0) {
+ if (limit > 0 || offset > 0) {
hasLimit = true;
}
}
@@ -79,14 +79,14 @@ public abstract class CollectorTraverser<T> extends Traverser {
public void setLimit(int limit) {
this.limit = limit;
- if (limit != 0) {
+ if (limit > 0) {
hasLimit = true;
}
}
public void setOffset(int offset) {
this.offset = offset;
- if (offset != 0) {
+ if (offset > 0) {
hasLimit = true;
}
}
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/path/AlignedPath.java b/server/src/main/java/org/apache/iotdb/db/metadata/path/AlignedPath.java
index ef42c21..caafedd 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/path/AlignedPath.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/path/AlignedPath.java
@@ -170,6 +170,10 @@ public class AlignedPath extends PartialPath {
VECTOR_PLACEHOLDER, array, types, encodings, schemaList.get(0).getCompressor());
}
+ public TSDataType getSeriesType() {
+ return getMeasurementSchema().getType();
+ }
+
@Override
public PartialPath copy() {
AlignedPath result = new AlignedPath();
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/path/MeasurementPath.java b/server/src/main/java/org/apache/iotdb/db/metadata/path/MeasurementPath.java
index 7d384b9..05188ed 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/path/MeasurementPath.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/path/MeasurementPath.java
@@ -55,6 +55,10 @@ public class MeasurementPath extends PartialPath {
public MeasurementPath() {}
+ public MeasurementPath(String measurementPath) throws IllegalPathException {
+ super(measurementPath);
+ }
+
public MeasurementPath(PartialPath measurementPath) {
super(measurementPath.getNodes());
}
@@ -69,6 +73,10 @@ public class MeasurementPath extends PartialPath {
return measurementSchema;
}
+ public TSDataType getSeriesType() {
+ return getMeasurementSchema().getType();
+ }
+
public void setMeasurementSchema(IMeasurementSchema measurementSchema) {
this.measurementSchema = measurementSchema;
}
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/path/PartialPath.java b/server/src/main/java/org/apache/iotdb/db/metadata/path/PartialPath.java
index f620d27..9ff86d6 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/path/PartialPath.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/path/PartialPath.java
@@ -309,6 +309,10 @@ public class PartialPath extends Path implements Comparable<Path> {
throw new MetadataException("This path doesn't represent a measurement");
}
+ public TSDataType getSeriesType() throws MetadataException {
+ throw new MetadataException("This path doesn't represent a measurement");
+ }
+
@Override
public int compareTo(Path path) {
PartialPath partialPath = (PartialPath) path;
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 720a253..fd4ec47 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
@@ -54,6 +54,7 @@ import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.metadata.mnode.IMNode;
import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode;
import org.apache.iotdb.db.metadata.mnode.IStorageGroupMNode;
+import org.apache.iotdb.db.metadata.path.MeasurementPath;
import org.apache.iotdb.db.metadata.path.PartialPath;
import org.apache.iotdb.db.metadata.utils.MetaUtils;
import org.apache.iotdb.db.monitor.StatMonitor;
@@ -720,7 +721,7 @@ public class PlanExecutor implements IPlanExecutor {
return IoTDB.metaManager.getNodesCountInGivenLevel(path, level);
}
- protected List<PartialPath> getPathsName(PartialPath path) throws MetadataException {
+ protected List<MeasurementPath> getPathsName(PartialPath path) throws MetadataException {
return IoTDB.metaManager.getMeasurementPaths(path);
}
@@ -1178,7 +1179,7 @@ public class PlanExecutor implements IPlanExecutor {
PartialPath fullPath =
new PartialPath(deviceId + TsFileConstant.PATH_SEPARATOR + metadata.getMeasurementId());
if (IoTDB.metaManager.isPathExist(fullPath)) {
- TSDataType dataType = IoTDB.metaManager.getSeriesSchema(fullPath).getType();
+ TSDataType dataType = IoTDB.metaManager.getSeriesType(fullPath);
if (dataType != metadata.getTSDataType()) {
throw new QueryProcessException(
fullPath.getFullPath()
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/QueryOperator.java b/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/QueryOperator.java
index 29e36dd..f4a2587 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/QueryOperator.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/QueryOperator.java
@@ -50,6 +50,7 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -501,7 +502,8 @@ public class QueryOperator extends Operator {
}
protected List<PartialPath> getMatchedTimeseries(PartialPath path) throws MetadataException {
- return IoTDB.metaManager.getMeasurementPaths(path);
+ // todo eliminate this transform and use MeasurementPath directly
+ return new LinkedList<>(IoTDB.metaManager.getMeasurementPaths(path));
}
public boolean isEnableTracing() {
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/strategy/optimizer/ConcatPathOptimizer.java b/server/src/main/java/org/apache/iotdb/db/qp/strategy/optimizer/ConcatPathOptimizer.java
index f540fe5..6d2ad0f 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/strategy/optimizer/ConcatPathOptimizer.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/strategy/optimizer/ConcatPathOptimizer.java
@@ -22,6 +22,7 @@ import org.apache.iotdb.db.exception.metadata.MetadataException;
import org.apache.iotdb.db.exception.query.LogicalOptimizeException;
import org.apache.iotdb.db.exception.query.PathNumOverLimitException;
import org.apache.iotdb.db.exception.runtime.SQLParserException;
+import org.apache.iotdb.db.metadata.path.MeasurementPath;
import org.apache.iotdb.db.metadata.path.PartialPath;
import org.apache.iotdb.db.qp.constant.FilterConstant.FilterType;
import org.apache.iotdb.db.qp.constant.SQLConstant;
@@ -237,7 +238,7 @@ public class ConcatPathOptimizer implements ILogicalOptimizer {
HashSet<PartialPath> actualPaths = new HashSet<>();
try {
for (PartialPath originalPath : originalPaths) {
- List<PartialPath> all =
+ List<MeasurementPath> all =
IoTDB.metaManager.getMeasurementPathsWithAlias(originalPath, 0, 0).left;
if (all.isEmpty()) {
throw new LogicalOptimizeException(
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/utils/WildcardsRemover.java b/server/src/main/java/org/apache/iotdb/db/qp/utils/WildcardsRemover.java
index 51f3ae3..3c159f7 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/utils/WildcardsRemover.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/utils/WildcardsRemover.java
@@ -23,6 +23,7 @@ import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.exception.metadata.MetadataException;
import org.apache.iotdb.db.exception.query.LogicalOptimizeException;
import org.apache.iotdb.db.exception.query.PathNumOverLimitException;
+import org.apache.iotdb.db.metadata.path.MeasurementPath;
import org.apache.iotdb.db.metadata.path.PartialPath;
import org.apache.iotdb.db.qp.logical.crud.QueryOperator;
import org.apache.iotdb.db.qp.strategy.optimizer.ConcatPathOptimizer;
@@ -33,6 +34,7 @@ import org.apache.iotdb.tsfile.utils.Pair;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.LinkedList;
import java.util.List;
/** Removes wildcards (applying memory control and slimit/soffset control) */
@@ -58,7 +60,7 @@ public class WildcardsRemover {
public List<PartialPath> removeWildcardFrom(PartialPath path) throws LogicalOptimizeException {
try {
- Pair<List<PartialPath>, Integer> pair =
+ Pair<List<MeasurementPath>, Integer> pair =
IoTDB.metaManager.getMeasurementPathsWithAlias(path, currentLimit, currentOffset);
consumed += pair.right;
@@ -72,7 +74,8 @@ public class WildcardsRemover {
currentLimit -= pair.right;
}
- return pair.left;
+ // todo eliminate this transform
+ return new LinkedList<>(pair.left);
} catch (MetadataException e) {
throw new LogicalOptimizeException("error occurred when removing star: " + e.getMessage());
}
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 3583ce2..172e5fb 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
@@ -39,6 +39,7 @@ import org.apache.iotdb.db.exception.metadata.StorageGroupNotSetException;
import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.exception.query.QueryTimeoutRuntimeException;
import org.apache.iotdb.db.exception.runtime.SQLParserException;
+import org.apache.iotdb.db.metadata.path.MeasurementPath;
import org.apache.iotdb.db.metadata.path.PartialPath;
import org.apache.iotdb.db.metrics.server.SqlArgument;
import org.apache.iotdb.db.qp.Planner;
@@ -388,7 +389,7 @@ public class TSServiceImpl implements TSIService.Iface {
return IoTDB.metaManager.getMetadataInString();
}
- protected List<PartialPath> getPaths(PartialPath path) throws MetadataException {
+ protected List<MeasurementPath> getPaths(PartialPath path) throws MetadataException {
return IoTDB.metaManager.getMeasurementPaths(path);
}
diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/MManagerAdvancedTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/MManagerAdvancedTest.java
index 1ce7f06..344bb48 100644
--- a/server/src/test/java/org/apache/iotdb/db/metadata/MManagerAdvancedTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/metadata/MManagerAdvancedTest.java
@@ -22,6 +22,7 @@ import org.apache.iotdb.db.exception.metadata.MetadataException;
import org.apache.iotdb.db.metadata.lastCache.LastCacheManager;
import org.apache.iotdb.db.metadata.mnode.IMNode;
import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode;
+import org.apache.iotdb.db.metadata.path.MeasurementPath;
import org.apache.iotdb.db.metadata.path.PartialPath;
import org.apache.iotdb.db.service.IoTDB;
import org.apache.iotdb.db.utils.EnvironmentUtils;
@@ -151,7 +152,7 @@ public class MManagerAdvancedTest {
assertEquals(
new PartialPath("root.vehicle.d0"),
mmanager.getBelongedStorageGroup(new PartialPath("root.vehicle.d0.s1")));
- List<PartialPath> pathList =
+ List<MeasurementPath> pathList =
mmanager.getMeasurementPaths(new PartialPath("root.vehicle.d1.**"));
assertEquals(6, pathList.size());
pathList = mmanager.getMeasurementPaths(new PartialPath("root.vehicle.d0.**"));
diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
index 4338671..d217d65 100644
--- a/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
@@ -892,36 +892,18 @@ public class MManagerBasicTest {
private CreateTemplatePlan getCreateTemplatePlan() {
List<List<String>> measurementList = new ArrayList<>();
measurementList.add(Collections.singletonList("s11"));
- List<String> measurements = new ArrayList<>();
- for (int i = 0; i < 10; i++) {
- measurements.add("s" + i);
- }
- measurementList.add(measurements);
List<List<TSDataType>> dataTypeList = new ArrayList<>();
dataTypeList.add(Collections.singletonList(TSDataType.INT64));
- List<TSDataType> dataTypes = new ArrayList<>();
- for (int i = 0; i < 10; i++) {
- dataTypes.add(TSDataType.INT64);
- }
- dataTypeList.add(dataTypes);
List<List<TSEncoding>> encodingList = new ArrayList<>();
encodingList.add(Collections.singletonList(TSEncoding.RLE));
- List<TSEncoding> encodings = new ArrayList<>();
- for (int i = 0; i < 10; i++) {
- encodings.add(TSEncoding.RLE);
- }
- encodingList.add(encodings);
List<CompressionType> compressionTypes = new ArrayList<>();
- for (int i = 0; i < 2; i++) {
- compressionTypes.add(CompressionType.SNAPPY);
- }
+ compressionTypes.add(CompressionType.SNAPPY);
List<String> schemaNames = new ArrayList<>();
schemaNames.add("s11");
- schemaNames.add("aligned_device");
return new CreateTemplatePlan(
"template1", schemaNames, measurementList, dataTypeList, encodingList, compressionTypes);
@@ -1020,7 +1002,7 @@ public class MManagerBasicTest {
CreateTimeSeriesPlan createTimeSeriesPlan2 =
new CreateTimeSeriesPlan(
- new PartialPath("root.sg1.d1.aligned_device"),
+ new PartialPath("root.sg1.d1.s11"),
TSDataType.INT32,
TSEncoding.PLAIN,
CompressionType.GZIP,
@@ -1034,7 +1016,7 @@ public class MManagerBasicTest {
fail();
} catch (Exception e) {
assertEquals(
- "Path [root.sg1.d1.aligned_device ( which is incompatible with template )] already exist",
+ "Path [root.sg1.d1.s11 ( which is incompatible with template )] already exist",
e.getMessage());
}
}
@@ -1072,27 +1054,6 @@ public class MManagerBasicTest {
}
manager.deleteTimeseries(new PartialPath("root.sg1.d1.s11"));
-
- CreateTimeSeriesPlan createTimeSeriesPlan2 =
- new CreateTimeSeriesPlan(
- new PartialPath("root.sg1.d1.aligned_device.s1"),
- TSDataType.INT32,
- TSEncoding.PLAIN,
- CompressionType.GZIP,
- null,
- null,
- null,
- null);
- manager.createTimeseries(createTimeSeriesPlan2);
-
- try {
- manager.setSchemaTemplate(setSchemaTemplatePlan);
- fail();
- } catch (MetadataException e) {
- assertEquals(
- "Schema name aligned_device in template has conflict with node's child root.sg1.d1.aligned_device",
- e.getMessage());
- }
}
@Test
diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/MTreeTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/MTreeTest.java
index b173ea1..da78b85 100644
--- a/server/src/test/java/org/apache/iotdb/db/metadata/MTreeTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/metadata/MTreeTest.java
@@ -26,6 +26,7 @@ import org.apache.iotdb.db.metadata.MManager.StorageGroupFilter;
import org.apache.iotdb.db.metadata.mnode.IMNode;
import org.apache.iotdb.db.metadata.mnode.MeasurementMNode;
import org.apache.iotdb.db.metadata.mtree.MTree;
+import org.apache.iotdb.db.metadata.path.MeasurementPath;
import org.apache.iotdb.db.metadata.path.PartialPath;
import org.apache.iotdb.db.utils.EnvironmentUtils;
import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
@@ -207,7 +208,7 @@ public class MTreeTest {
}
try {
- List<PartialPath> result = root.getMeasurementPaths(new PartialPath("root.a.*.s0"));
+ List<MeasurementPath> result = root.getMeasurementPaths(new PartialPath("root.a.*.s0"));
assertEquals(2, result.size());
assertEquals("root.a.d0.s0", result.get(0).getFullPath());
assertEquals("root.a.d1.s0", result.get(1).getFullPath());
@@ -274,7 +275,7 @@ public class MTreeTest {
}
try {
- List<PartialPath> result = root.getMeasurementPaths(new PartialPath("root.a.*.s0"));
+ List<MeasurementPath> result = root.getMeasurementPaths(new PartialPath("root.a.*.s0"));
assertEquals(2, result.size());
assertEquals("root.a.d0.s0", result.get(0).getFullPath());
assertEquals("root.a.d1.s0", result.get(1).getFullPath());
@@ -284,7 +285,7 @@ public class MTreeTest {
assertEquals("root.a.d0.s0", result.get(0).getFullPath());
assertEquals("root.a.d1.s0", result.get(1).getFullPath());
- List<PartialPath> result2 =
+ List<MeasurementPath> result2 =
root.getMeasurementPathsWithAlias(new PartialPath("root.a.*.s0"), 0, 0).left;
assertEquals(2, result2.size());
assertEquals("root.a.d0.s0", result2.get(0).getFullPath());
@@ -298,7 +299,7 @@ public class MTreeTest {
assertEquals("root.a.d0.temperature", result2.get(0).getFullPathWithAlias());
assertEquals("root.a.d1.temperature", result2.get(1).getFullPathWithAlias());
- Pair<List<PartialPath>, Integer> result3 =
+ Pair<List<MeasurementPath>, Integer> result3 =
root.getMeasurementPathsWithAlias(new PartialPath("root.a.**"), 2, 0);
assertEquals(2, result3.left.size());
assertEquals(2, result3.right.intValue());