This is an automated email from the ASF dual-hosted git repository.
jiangtian pushed a commit to branch tsFile_v4
in repository https://gitbox.apache.org/repos/asf/tsfile.git
The following commit(s) were added to refs/heads/tsFile_v4 by this push:
new bf685d28 upgrade convertion from PlainDeviceId to StringArrayDeviceId
bf685d28 is described below
commit bf685d2800bf47a218c9696947045daa63e0eda9
Author: Tian Jiang <[email protected]>
AuthorDate: Mon Apr 15 12:27:06 2024 +0800
upgrade convertion from PlainDeviceId to StringArrayDeviceId
---
.../apache/tsfile/common/conf/TSFileConfig.java | 2 +
.../tsfile/compatibility/DeserializeConfig.java | 15 +++----
.../file/metadata/DeviceMetadataIndexEntry.java | 5 +--
.../tsfile/file/metadata/MetadataIndexNode.java | 5 +--
.../apache/tsfile/file/metadata/PlainDeviceID.java | 5 +--
.../tsfile/file/metadata/StringArrayDeviceID.java | 44 +++++++++++++++++++-
.../tsfile/file/metadata/TsFileMetadata.java | 10 ++++-
.../apache/tsfile/read/TsFileSequenceReader.java | 42 ++++++++++---------
.../java/org/apache/tsfile/read/common/Path.java | 45 ++++++++++++---------
.../read/query/executor/TableQueryExecutor.java | 2 +-
.../java/org/apache/tsfile/write/TsFileWriter.java | 16 ++++----
.../org/apache/tsfile/write/schema/Schema.java | 6 +--
.../apache/tsfile/write/writer/TsFileIOWriter.java | 4 +-
.../tsfile/compatibility/CompatibilityTest.java | 20 ++++-----
.../tsfile/file/metadata/utils/TestHelper.java | 6 +--
.../apache/tsfile/file/metadata/utils/Utils.java | 10 +++--
.../org/apache/tsfile/read/GetAllDevicesTest.java | 12 +++---
...easurementChunkMetadataListMapIteratorTest.java | 2 +-
.../org/apache/tsfile/read/TsFileReaderTest.java | 2 +-
.../org/apache/tsfile/read/common/PathTest.java | 47 +++++++++++-----------
.../read/filter/IExpressionOptimizerTest.java | 32 +++++++--------
.../org/apache/tsfile/utils/FileGenerator.java | 1 -
.../java/org/apache/tsfile/utils/RecordUtils.java | 5 +--
.../tsfile/write/MetadataIndexConstructorTest.java | 2 -
.../apache/tsfile/write/TsFileIOWriterTest.java | 6 +--
.../org/apache/tsfile/write/TsFileWriterTest.java | 8 ++--
.../java/org/apache/tsfile/write/WriteTest.java | 6 +--
.../writer/TsFileIOWriterMemoryControlTest.java | 1 -
28 files changed, 202 insertions(+), 159 deletions(-)
diff --git
a/tsfile/src/main/java/org/apache/tsfile/common/conf/TSFileConfig.java
b/tsfile/src/main/java/org/apache/tsfile/common/conf/TSFileConfig.java
index c4c720dc..3c0a69f1 100644
--- a/tsfile/src/main/java/org/apache/tsfile/common/conf/TSFileConfig.java
+++ b/tsfile/src/main/java/org/apache/tsfile/common/conf/TSFileConfig.java
@@ -73,6 +73,8 @@ public class TSFileConfig implements Serializable {
/** The primitive array capacity threshold. */
public static final int ARRAY_CAPACITY_THRESHOLD = 1000;
+ // TODO: configurable but unchangeable
+ public static final int DEFAULT_SEGMENT_NUM_FOR_TABLE_NAME = 3;
/** Memory size threshold for flushing to disk, default value is 128MB. */
private int groupSizeInByte = 128 * 1024 * 1024;
/** The memory size for each series writer to pack page, default value is
64KB. */
diff --git
a/tsfile/src/main/java/org/apache/tsfile/compatibility/DeserializeConfig.java
b/tsfile/src/main/java/org/apache/tsfile/compatibility/DeserializeConfig.java
index ac0b8afa..6b006b08 100644
---
a/tsfile/src/main/java/org/apache/tsfile/compatibility/DeserializeConfig.java
+++
b/tsfile/src/main/java/org/apache/tsfile/compatibility/DeserializeConfig.java
@@ -1,7 +1,5 @@
package org.apache.tsfile.compatibility;
-import java.io.IOException;
-import java.io.InputStream;
import org.apache.tsfile.file.IMetadataIndexEntry;
import org.apache.tsfile.file.metadata.DeviceMetadataIndexEntry;
import org.apache.tsfile.file.metadata.IDeviceID;
@@ -12,10 +10,13 @@ import org.apache.tsfile.file.metadata.TableSchema;
import org.apache.tsfile.file.metadata.TsFileMetadata;
import org.apache.tsfile.write.schema.MeasurementSchema;
+import java.io.IOException;
+import java.io.InputStream;
import java.nio.ByteBuffer;
public class DeserializeConfig {
- public BufferDeserializer<TsFileMetadata> tsFileMetadataBufferDeserializer =
TsFileMetadata::deserializeFrom;
+ public BufferDeserializer<TsFileMetadata> tsFileMetadataBufferDeserializer =
+ TsFileMetadata::deserializeFrom;
public BufferDeserializer<MetadataIndexNode>
deviceMetadataIndexNodeBufferDeserializer =
(buffer, context) -> MetadataIndexNode.deserializeFrom(buffer, true,
context);
@@ -54,8 +55,8 @@ public class DeserializeConfig {
}
}
- public IMetadataIndexEntry deserializeMetadataIndexEntry(ByteBuffer buffer,
- boolean isDeviceLevel) {
+ public IMetadataIndexEntry deserializeMetadataIndexEntry(
+ ByteBuffer buffer, boolean isDeviceLevel) {
if (isDeviceLevel) {
return deviceMetadataIndexEntryBufferDeserializer.deserialize(buffer,
this);
} else {
@@ -72,8 +73,8 @@ public class DeserializeConfig {
}
}
- public IMetadataIndexEntry deserializeMetadataIndexEntry(InputStream stream,
- boolean isDeviceLevel) throws IOException {
+ public IMetadataIndexEntry deserializeMetadataIndexEntry(
+ InputStream stream, boolean isDeviceLevel) throws IOException {
if (isDeviceLevel) {
return deviceMetadataIndexEntryStreamDeserializer.deserialize(stream,
this);
} else {
diff --git
a/tsfile/src/main/java/org/apache/tsfile/file/metadata/DeviceMetadataIndexEntry.java
b/tsfile/src/main/java/org/apache/tsfile/file/metadata/DeviceMetadataIndexEntry.java
index d483bc5d..bf5d7248 100644
---
a/tsfile/src/main/java/org/apache/tsfile/file/metadata/DeviceMetadataIndexEntry.java
+++
b/tsfile/src/main/java/org/apache/tsfile/file/metadata/DeviceMetadataIndexEntry.java
@@ -81,9 +81,8 @@ public class DeviceMetadataIndexEntry implements
IMetadataIndexEntry {
return new DeviceMetadataIndexEntry(device, offset);
}
- public static DeviceMetadataIndexEntry deserializeFrom(InputStream
inputStream,
- DeserializeConfig config)
- throws IOException {
+ public static DeviceMetadataIndexEntry deserializeFrom(
+ InputStream inputStream, DeserializeConfig config) throws IOException {
IDeviceID device =
config.deviceIDStreamDeserializer.deserialize(inputStream, config);
long offset = ReadWriteIOUtils.readLong(inputStream);
return new DeviceMetadataIndexEntry(device, offset);
diff --git
a/tsfile/src/main/java/org/apache/tsfile/file/metadata/MetadataIndexNode.java
b/tsfile/src/main/java/org/apache/tsfile/file/metadata/MetadataIndexNode.java
index e55cf490..693b4ffb 100644
---
a/tsfile/src/main/java/org/apache/tsfile/file/metadata/MetadataIndexNode.java
+++
b/tsfile/src/main/java/org/apache/tsfile/file/metadata/MetadataIndexNode.java
@@ -112,9 +112,8 @@ public class MetadataIndexNode {
return new MetadataIndexNode(children, offset, nodeType);
}
- public static MetadataIndexNode deserializeFrom(InputStream inputStream,
boolean isDeviceLevel,
- DeserializeConfig config)
- throws IOException {
+ public static MetadataIndexNode deserializeFrom(
+ InputStream inputStream, boolean isDeviceLevel, DeserializeConfig
config) throws IOException {
List<IMetadataIndexEntry> children = new ArrayList<>();
int size = ReadWriteForEncodingUtils.readUnsignedVarInt(inputStream);
for (int i = 0; i < size; i++) {
diff --git
a/tsfile/src/main/java/org/apache/tsfile/file/metadata/PlainDeviceID.java
b/tsfile/src/main/java/org/apache/tsfile/file/metadata/PlainDeviceID.java
index 61d32dcf..4a96b0e4 100644
--- a/tsfile/src/main/java/org/apache/tsfile/file/metadata/PlainDeviceID.java
+++ b/tsfile/src/main/java/org/apache/tsfile/file/metadata/PlainDeviceID.java
@@ -19,6 +19,7 @@
package org.apache.tsfile.file.metadata;
+import org.apache.tsfile.common.conf.TSFileConfig;
import org.apache.tsfile.common.constant.TsFileConstant;
import org.apache.tsfile.utils.RamUsageEstimator;
import org.apache.tsfile.utils.ReadWriteIOUtils;
@@ -35,8 +36,6 @@ import static
org.apache.tsfile.utils.RamUsageEstimator.sizeOfCharArray;
/** Using device id path as id. */
public class PlainDeviceID implements IDeviceID {
- // TODO: configurable but unchangeable
- private static final int DEFAULT_SEGMENT_NUM_FOR_TABLE_NAME = 3;
private static final long INSTANCE_SIZE =
RamUsageEstimator.shallowSizeOfInstance(PlainDeviceID.class)
+ RamUsageEstimator.shallowSizeOfInstance(String.class)
@@ -140,7 +139,7 @@ public class PlainDeviceID implements IDeviceID {
if (deviceID.charAt(i) == TsFileConstant.PATH_SEPARATOR_CHAR) {
lastSeparatorPos = i;
separatorNum++;
- if (separatorNum == DEFAULT_SEGMENT_NUM_FOR_TABLE_NAME) {
+ if (separatorNum == TSFileConfig.DEFAULT_SEGMENT_NUM_FOR_TABLE_NAME) {
break;
}
}
diff --git
a/tsfile/src/main/java/org/apache/tsfile/file/metadata/StringArrayDeviceID.java
b/tsfile/src/main/java/org/apache/tsfile/file/metadata/StringArrayDeviceID.java
index 7f13cb18..a19b26d2 100644
---
a/tsfile/src/main/java/org/apache/tsfile/file/metadata/StringArrayDeviceID.java
+++
b/tsfile/src/main/java/org/apache/tsfile/file/metadata/StringArrayDeviceID.java
@@ -64,12 +64,52 @@ public class StringArrayDeviceID implements IDeviceID {
// or we can just use a tuple like Relational DB.
private final String[] segments;
- public StringArrayDeviceID(String[] segments) {
+ public StringArrayDeviceID(String... segments) {
this.segments = segments;
}
public StringArrayDeviceID(String deviceIdString) {
- this.segments =
deviceIdString.split(TsFileConstant.PATH_SEPARATER_NO_REGEX);
+ this.segments = splitDeviceIdString(deviceIdString);
+ }
+
+ @SuppressWarnings("java:S125") // confusing comments with codes
+ private static String[] splitDeviceIdString(String deviceIdString) {
+ int lastSeparatorPos = -1;
+ int currPos = 0;
+ int segmentCnt = 1;
+ // split the string with '.', stop when finding enough segments to form a
table name
+ // String.split is not used here to avoid unnecessary string copy
+ for (; currPos < deviceIdString.length()
+ && segmentCnt < TSFileConfig.DEFAULT_SEGMENT_NUM_FOR_TABLE_NAME + 1;
currPos++) {
+ if (deviceIdString.charAt(currPos) ==
TsFileConstant.PATH_SEPARATOR_CHAR) {
+ lastSeparatorPos = currPos;
+ segmentCnt++;
+ }
+ }
+
+ String tableName;
+ String[] segments;
+ // assuming DEFAULT_SEGMENT_NUM_FOR_TABLE_NAME = 3
+ if (segmentCnt < TSFileConfig.DEFAULT_SEGMENT_NUM_FOR_TABLE_NAME + 1) {
+ // "root" -> {"", "root"}
+ // "root.a" -> {"root", "a"}
+ // "root.a.b" -> {"root.a", "b"}
+ tableName = segmentCnt == 1 ? "" : deviceIdString.substring(0,
lastSeparatorPos);
+ segments = new String[2];
+ segments[0] = tableName;
+ segments[1] = deviceIdString.substring(lastSeparatorPos + 1);
+ } else {
+ // "root.a.b.c" -> {"root.a.b", "c"}
+ // "root.a.b.c.d" -> {"root.a.b", "c", "d"}
+ tableName = deviceIdString.substring(0, lastSeparatorPos);
+ String[] idSegments = deviceIdString.substring(lastSeparatorPos + 1)
+ .split(TsFileConstant.PATH_SEPARATER_NO_REGEX);
+ segments = new String[idSegments.length + 1];
+ segments[0] = tableName;
+ System.arraycopy(idSegments, 0, segments, 1, idSegments.length);
+ }
+
+ return segments;
}
public static Deserializer getDESERIALIZER() {
diff --git
a/tsfile/src/main/java/org/apache/tsfile/file/metadata/TsFileMetadata.java
b/tsfile/src/main/java/org/apache/tsfile/file/metadata/TsFileMetadata.java
index dd339f03..b38909bf 100644
--- a/tsfile/src/main/java/org/apache/tsfile/file/metadata/TsFileMetadata.java
+++ b/tsfile/src/main/java/org/apache/tsfile/file/metadata/TsFileMetadata.java
@@ -19,7 +19,6 @@
package org.apache.tsfile.file.metadata;
-import java.util.TreeMap;
import org.apache.tsfile.compatibility.DeserializeConfig;
import org.apache.tsfile.utils.BloomFilter;
import org.apache.tsfile.utils.ReadWriteForEncodingUtils;
@@ -31,6 +30,7 @@ import java.nio.ByteBuffer;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.TreeMap;
/** TSFileMetaData collects all metadata info and saves in its data structure.
*/
public class TsFileMetadata {
@@ -169,6 +169,14 @@ public class TsFileMetadata {
return tableMetadataIndexNodeMap;
}
+ public MetadataIndexNode getTableMetadataIndexNode(String tableName) {
+ MetadataIndexNode metadataIndexNode =
tableMetadataIndexNodeMap.get(tableName);
+ if (metadataIndexNode == null) {
+ metadataIndexNode = tableMetadataIndexNodeMap.get("");
+ }
+ return metadataIndexNode;
+ }
+
public Map<String, TableSchema> getTableSchemaMap() {
return tableSchemaMap;
}
diff --git
a/tsfile/src/main/java/org/apache/tsfile/read/TsFileSequenceReader.java
b/tsfile/src/main/java/org/apache/tsfile/read/TsFileSequenceReader.java
index 646b284b..1e656910 100644
--- a/tsfile/src/main/java/org/apache/tsfile/read/TsFileSequenceReader.java
+++ b/tsfile/src/main/java/org/apache/tsfile/read/TsFileSequenceReader.java
@@ -409,7 +409,7 @@ public class TsFileSequenceReader implements AutoCloseable {
IDeviceID device, String measurement, boolean ignoreNotExists) throws
IOException {
readFileMetadata();
MetadataIndexNode deviceMetadataIndexNode =
-
tsFileMetaData.getTableMetadataIndexNodeMap().get(device.getTableName());
+ tsFileMetaData.getTableMetadataIndexNode(device.getTableName());
Pair<IMetadataIndexEntry, Long> metadataIndexPair =
getMetadataAndEndOffsetOfDeviceNode(deviceMetadataIndexNode, device,
true);
if (metadataIndexPair == null) {
@@ -472,14 +472,14 @@ public class TsFileSequenceReader implements
AutoCloseable {
throws IOException {
readFileMetadata();
MetadataIndexNode deviceMetadataIndexNode =
-
tsFileMetaData.getTableMetadataIndexNodeMap().get(path.getIDeviceID().getTableName());
+
tsFileMetaData.getTableMetadataIndexNode(path.getIDeviceID().getTableName());
Pair<IMetadataIndexEntry, Long> metadataIndexPair =
getMetadataAndEndOffsetOfDeviceNode(deviceMetadataIndexNode,
path.getIDeviceID(), true);
if (metadataIndexPair == null) {
if (ignoreNotExists) {
return null;
}
- throw new IOException("Device {" + path.getDevice() + "} is not in
tsFileMetaData");
+ throw new IOException("Device {" + path.getDeviceString() + "} is not in
tsFileMetaData");
}
ByteBuffer buffer = readData(metadataIndexPair.left.getOffset(),
metadataIndexPair.right);
MetadataIndexNode metadataIndexNode;
@@ -582,7 +582,7 @@ public class TsFileSequenceReader implements AutoCloseable {
IDeviceID device, String measurement) throws IOException {
readFileMetadata();
MetadataIndexNode deviceMetadataIndexNode =
-
tsFileMetaData.getTableMetadataIndexNodeMap().get(device.getTableName());
+ tsFileMetaData.getTableMetadataIndexNode(device.getTableName());
Pair<IMetadataIndexEntry, Long> metadataIndexPair =
getMetadataAndEndOffsetOfDeviceNode(deviceMetadataIndexNode, device,
true);
if (metadataIndexPair == null) {
@@ -606,11 +606,11 @@ public class TsFileSequenceReader implements
AutoCloseable {
}
private MetadataIndexNode getTableRootNode(String tableName) throws
IOException {
- MetadataIndexNode metadataIndexNode =
tsFileMetaData.getTableMetadataIndexNodeMap()
- .get(tableName);
+ MetadataIndexNode metadataIndexNode =
+ tsFileMetaData.getTableMetadataIndexNode(tableName);
if (metadataIndexNode == null && fileVersion <
TSFileConfig.VERSION_NUMBER) {
// this file if from an old version, and all its metadata should have an
anonymous root
- metadataIndexNode =
tsFileMetaData.getTableMetadataIndexNodeMap().get("");
+ metadataIndexNode = tsFileMetaData.getTableMetadataIndexNode("");
}
return metadataIndexNode;
}
@@ -625,10 +625,7 @@ public class TsFileSequenceReader implements AutoCloseable
{
private MetadataIndexNode getDeviceRootNode(IDeviceID deviceID,
MetadataIndexNode startNode)
throws IOException {
readFileMetadata();
- startNode =
- startNode != null
- ? startNode
- : getTableRootNode(deviceID.getTableName());
+ startNode = startNode != null ? startNode :
getTableRootNode(deviceID.getTableName());
MetadataIndexNode measurementMetadataIndexNode;
ByteBuffer buffer;
@@ -846,7 +843,7 @@ public class TsFileSequenceReader implements AutoCloseable {
}
ByteBuffer buffer =
readData(metadataIndexNode.getChildren().get(i).getOffset(), endOffset);
MetadataIndexNode node =
-
deserializeConfig.measurementMetadataIndexNodeBufferDeserializer.deserialize(
+
deserializeConfig.deviceMetadataIndexNodeBufferDeserializer.deserialize(
buffer, deserializeConfig);
deviceList.addAll(getAllDevices(node));
}
@@ -1436,7 +1433,7 @@ public class TsFileSequenceReader implements
AutoCloseable {
private List<TimeseriesMetadata>
getDeviceTimeseriesMetadataWithoutChunkMetadata(IDeviceID device)
throws IOException {
MetadataIndexNode metadataIndexNode =
-
tsFileMetaData.getTableMetadataIndexNodeMap().get(device.getTableName());
+ tsFileMetaData.getTableMetadataIndexNode(device.getTableName());
Pair<IMetadataIndexEntry, Long> metadataIndexPair =
getMetadataAndEndOffsetOfDeviceNode(metadataIndexNode, device, true);
if (metadataIndexPair == null) {
@@ -1462,7 +1459,7 @@ public class TsFileSequenceReader implements
AutoCloseable {
private List<TimeseriesMetadata> getDeviceTimeseriesMetadata(IDeviceID
device)
throws IOException {
MetadataIndexNode metadataIndexNode =
-
tsFileMetaData.getTableMetadataIndexNodeMap().get(device.getTableName());
+ tsFileMetaData.getTableMetadataIndexNode(device.getTableName());
Pair<IMetadataIndexEntry, Long> metadataIndexPair =
getMetadataAndEndOffsetOfDeviceNode(metadataIndexNode, device, true);
if (metadataIndexPair == null) {
@@ -1508,7 +1505,7 @@ public class TsFileSequenceReader implements
AutoCloseable {
metadataIndex.getChildIndexEntry(deviceID, false);
ByteBuffer buffer = readData(childIndexEntry.left.getOffset(),
childIndexEntry.right);
return getMetadataAndEndOffsetOfDeviceNode(
-
deserializeConfig.measurementMetadataIndexNodeBufferDeserializer.deserialize(
+
deserializeConfig.deviceMetadataIndexNodeBufferDeserializer.deserialize(
buffer, deserializeConfig),
deviceID,
exactSearch);
@@ -2307,13 +2304,12 @@ public class TsFileSequenceReader implements
AutoCloseable {
/**
* get ChunkMetaDatas of given path, and throw exception if path not exists
*
- * @param path timeseries path
* @return List of ChunkMetaData
*/
- public List<ChunkMetadata> getChunkMetadataList(Path path, boolean
ignoreNotExists)
+ public List<ChunkMetadata> getChunkMetadataList(IDeviceID deviceID, String
measurement, boolean ignoreNotExists)
throws IOException {
TimeseriesMetadata timeseriesMetaData =
- readTimeseriesMetadata(path.getIDeviceID(), path.getMeasurement(),
ignoreNotExists);
+ readTimeseriesMetadata(deviceID, measurement, ignoreNotExists);
if (timeseriesMetaData == null) {
return Collections.emptyList();
}
@@ -2322,6 +2318,12 @@ public class TsFileSequenceReader implements
AutoCloseable {
return chunkMetadataList;
}
+ @Deprecated
+ public List<ChunkMetadata> getChunkMetadataList(Path path, boolean
ignoreNotExists)
+ throws IOException {
+ return getChunkMetadataList(path.getIDeviceID(), path.getMeasurement(),
ignoreNotExists);
+ }
+
// This method is only used for TsFile
public List<IChunkMetadata> getIChunkMetadataList(Path path) throws
IOException {
ITimeSeriesMetadata timeseriesMetaData = readITimeseriesMetadata(path,
true);
@@ -2374,7 +2376,7 @@ public class TsFileSequenceReader implements
AutoCloseable {
public List<AlignedChunkMetadata> getAlignedChunkMetadata(IDeviceID device)
throws IOException {
readFileMetadata();
MetadataIndexNode deviceMetadataIndexNode =
-
tsFileMetaData.getTableMetadataIndexNodeMap().get(device.getTableName());
+ tsFileMetaData.getTableMetadataIndexNode(device.getTableName());
Pair<IMetadataIndexEntry, Long> metadataIndexPair =
getMetadataAndEndOffsetOfDeviceNode(deviceMetadataIndexNode, device,
true);
if (metadataIndexPair == null) {
@@ -2619,7 +2621,7 @@ public class TsFileSequenceReader implements
AutoCloseable {
readFileMetadata();
MetadataIndexNode metadataIndexNode =
-
tsFileMetaData.getTableMetadataIndexNodeMap().get(device.getTableName());
+ tsFileMetaData.getTableMetadataIndexNode(device.getTableName());
Pair<IMetadataIndexEntry, Long> metadataIndexPair =
getMetadataAndEndOffsetOfDeviceNode(metadataIndexNode, device, true);
diff --git a/tsfile/src/main/java/org/apache/tsfile/read/common/Path.java
b/tsfile/src/main/java/org/apache/tsfile/read/common/Path.java
index 2d6bc9d2..a188c539 100644
--- a/tsfile/src/main/java/org/apache/tsfile/read/common/Path.java
+++ b/tsfile/src/main/java/org/apache/tsfile/read/common/Path.java
@@ -19,9 +19,12 @@
package org.apache.tsfile.read.common;
+import org.apache.tsfile.common.conf.TSFileConfig;
import org.apache.tsfile.common.constant.TsFileConstant;
import org.apache.tsfile.exception.PathParseException;
import org.apache.tsfile.file.metadata.IDeviceID;
+import org.apache.tsfile.file.metadata.IDeviceID.Deserializer;
+import org.apache.tsfile.file.metadata.IDeviceID.Factory;
import org.apache.tsfile.file.metadata.StringArrayDeviceID;
import org.apache.tsfile.read.common.parser.PathNodesGenerator;
import org.apache.tsfile.utils.PublicBAOS;
@@ -46,7 +49,7 @@ public class Path implements Serializable, Comparable<Path> {
private static final long serialVersionUID = 3405277066329298200L;
private String measurement;
- protected String device;
+ protected IDeviceID device;
protected String fullPath;
private static final String ILLEGAL_PATH_ARGUMENT = "Path parameter is null";
@@ -79,26 +82,28 @@ public class Path implements Serializable, Comparable<Path>
{
if (!needSplit) {
// no split, we don't use antlr to check here.
fullPath = pathSc;
- device = pathSc;
+ device = Factory.DEFAULT_FACTORY.create(pathSc);
} else {
if (pathSc.length() > 0) {
String[] nodes = PathNodesGenerator.splitPathToNodes(pathSc);
- device = "";
+ device = Factory.DEFAULT_FACTORY.create("");
if (nodes.length > 1) {
- device = transformNodesToString(nodes, nodes.length - 1);
+ device =
Factory.DEFAULT_FACTORY.create(transformNodesToString(nodes, nodes.length - 1));
}
measurement = nodes[nodes.length - 1];
- fullPath = transformNodesToString(nodes, nodes.length);
+ fullPath = this.device.toString() + TsFileConstant.PATH_SEPARATOR +
measurement;
} else {
fullPath = pathSc;
- device = "";
+ device = Factory.DEFAULT_FACTORY.create("");
measurement = pathSc;
}
}
}
public Path(IDeviceID device, String measurement, boolean needCheck) {
- this(device.toString(), measurement, needCheck);
+ this.device = device;
+ this.measurement = measurement;
+ this.fullPath = this.device.toString() + TsFileConstant.PATH_SEPARATOR +
measurement;
}
/**
@@ -114,7 +119,7 @@ public class Path implements Serializable, Comparable<Path>
{
}
if (!needCheck) {
this.measurement = measurement;
- this.device = device;
+ this.device = Factory.DEFAULT_FACTORY.create(device);
this.fullPath = device + TsFileConstant.PATH_SEPARATOR + measurement;
return;
}
@@ -122,22 +127,22 @@ public class Path implements Serializable,
Comparable<Path> {
if (!StringUtils.isEmpty(device) && !StringUtils.isEmpty(measurement)) {
String path = device + TsFileConstant.PATH_SEPARATOR + measurement;
String[] nodes = PathNodesGenerator.splitPathToNodes(path);
- this.device = transformNodesToString(nodes, nodes.length - 1);
+ this.device =
Factory.DEFAULT_FACTORY.create(transformNodesToString(nodes, nodes.length - 1));
this.measurement = nodes[nodes.length - 1];
- this.fullPath = transformNodesToString(nodes, nodes.length);
+ this.fullPath = this.device.toString() + TsFileConstant.PATH_SEPARATOR +
measurement;
} else if (!StringUtils.isEmpty(device)) {
String[] deviceNodes = PathNodesGenerator.splitPathToNodes(device);
- this.device = transformNodesToString(deviceNodes, deviceNodes.length);
+ this.device =
Factory.DEFAULT_FACTORY.create(transformNodesToString(deviceNodes,
deviceNodes.length));
this.measurement = measurement;
// for aligned path, sensor name for time column is ""
this.fullPath = device + TsFileConstant.PATH_SEPARATOR + measurement;
} else if (!StringUtils.isEmpty(measurement)) {
String[] measurementNodes =
PathNodesGenerator.splitPathToNodes(measurement);
this.measurement = transformNodesToString(measurementNodes,
measurementNodes.length);
- this.device = device;
+ this.device = Factory.DEFAULT_FACTORY.create(device);
this.fullPath = measurement;
} else {
- this.device = device;
+ this.device = Factory.DEFAULT_FACTORY.create(device);
this.measurement = measurement;
this.fullPath = "";
}
@@ -147,12 +152,12 @@ public class Path implements Serializable,
Comparable<Path> {
return fullPath;
}
- public String getDevice() {
- return device;
+ public String getDeviceString() {
+ return device.toString();
}
public IDeviceID getIDeviceID() {
- return new
StringArrayDeviceID(getDevice().split(TsFileConstant.PATH_SEPARATER_NO_REGEX));
+ return device;
}
public String getMeasurement() {
@@ -227,7 +232,7 @@ public class Path implements Serializable, Comparable<Path>
{
ReadWriteIOUtils.write((byte) 0, byteBuffer);
} else {
ReadWriteIOUtils.write((byte) 1, byteBuffer);
- ReadWriteIOUtils.write(device, byteBuffer);
+ device.serialize(byteBuffer);
}
if (fullPath == null) {
ReadWriteIOUtils.write((byte) 0, byteBuffer);
@@ -248,7 +253,7 @@ public class Path implements Serializable, Comparable<Path>
{
ReadWriteIOUtils.write((byte) 0, stream);
} else {
ReadWriteIOUtils.write((byte) 1, stream);
- ReadWriteIOUtils.write(device, stream);
+ device.serialize(stream);
}
if (fullPath == null) {
ReadWriteIOUtils.write((byte) 0, stream);
@@ -269,7 +274,7 @@ public class Path implements Serializable, Comparable<Path>
{
ReadWriteIOUtils.write((byte) 0, stream);
} else {
ReadWriteIOUtils.write((byte) 1, stream);
- ReadWriteIOUtils.write(device, stream);
+ device.serialize(stream);
}
if (fullPath == null) {
ReadWriteIOUtils.write((byte) 0, stream);
@@ -284,7 +289,7 @@ public class Path implements Serializable, Comparable<Path>
{
byte isNull = ReadWriteIOUtils.readByte(byteBuffer);
path.measurement = isNull == 0 ? null :
ReadWriteIOUtils.readString(byteBuffer);
isNull = ReadWriteIOUtils.readByte(byteBuffer);
- path.device = isNull == 0 ? null : ReadWriteIOUtils.readString(byteBuffer);
+ path.device = isNull == 0 ? null :
Deserializer.DEFAULT_DESERIALIZER.deserializeFrom(byteBuffer);
isNull = ReadWriteIOUtils.readByte(byteBuffer);
path.fullPath = isNull == 0 ? null :
ReadWriteIOUtils.readString(byteBuffer);
return path;
diff --git
a/tsfile/src/main/java/org/apache/tsfile/read/query/executor/TableQueryExecutor.java
b/tsfile/src/main/java/org/apache/tsfile/read/query/executor/TableQueryExecutor.java
index da1fe0c7..06fc6c0c 100644
---
a/tsfile/src/main/java/org/apache/tsfile/read/query/executor/TableQueryExecutor.java
+++
b/tsfile/src/main/java/org/apache/tsfile/read/query/executor/TableQueryExecutor.java
@@ -47,7 +47,7 @@ public class TableQueryExecutor {
ExpressionTree measurementFilter)
throws ReadProcessException {
TsFileMetadata fileMetadata = metadataQuerier.getWholeFileMetadata();
- MetadataIndexNode tableRoot =
fileMetadata.getTableMetadataIndexNodeMap().get(tableName);
+ MetadataIndexNode tableRoot =
fileMetadata.getTableMetadataIndexNode(tableName);
TableSchema tableSchema = fileMetadata.getTableSchemaMap().get(tableName);
if (tableRoot == null || tableSchema == null) {
return new EmptyTsBlockReader();
diff --git a/tsfile/src/main/java/org/apache/tsfile/write/TsFileWriter.java
b/tsfile/src/main/java/org/apache/tsfile/write/TsFileWriter.java
index bde0530f..6b4ef019 100644
--- a/tsfile/src/main/java/org/apache/tsfile/write/TsFileWriter.java
+++ b/tsfile/src/main/java/org/apache/tsfile/write/TsFileWriter.java
@@ -168,7 +168,7 @@ public class TsFileWriter implements AutoCloseable {
IMeasurementSchema measurementSchema = entry.getValue();
if (measurementSchema instanceof VectorMeasurementSchema) {
final IDeviceID deviceID =
-
IDeviceID.Factory.DEFAULT_FACTORY.create(entry.getKey().getDevice());
+
IDeviceID.Factory.DEFAULT_FACTORY.create(entry.getKey().getDeviceString());
MeasurementGroup group =
measurementGroupMap.getOrDefault(deviceID, new
MeasurementGroup(true));
List<String> measurementList =
measurementSchema.getSubMeasurementsList();
@@ -185,7 +185,7 @@ public class TsFileWriter implements AutoCloseable {
measurementGroupMap.put(deviceID, group);
} else {
final IDeviceID deviceID =
-
IDeviceID.Factory.DEFAULT_FACTORY.create(entry.getKey().getDevice());
+
IDeviceID.Factory.DEFAULT_FACTORY.create(entry.getKey().getDeviceString());
MeasurementGroup group =
measurementGroupMap.getOrDefault(deviceID, new
MeasurementGroup(false));
group
@@ -238,7 +238,7 @@ public class TsFileWriter implements AutoCloseable {
public void registerTimeseries(Path devicePath, MeasurementSchema
measurementSchema)
throws WriteProcessException {
registerTimeseries(
- IDeviceID.Factory.DEFAULT_FACTORY.create(devicePath.getDevice()),
measurementSchema);
+
IDeviceID.Factory.DEFAULT_FACTORY.create(devicePath.getDeviceString()),
measurementSchema);
}
/** Register nonAligned timeseries by single. */
@@ -273,7 +273,7 @@ public class TsFileWriter implements AutoCloseable {
for (MeasurementSchema schema : measurementSchemas) {
try {
registerTimeseries(
- IDeviceID.Factory.DEFAULT_FACTORY.create(devicePath.getDevice()),
schema);
+
IDeviceID.Factory.DEFAULT_FACTORY.create(devicePath.getDeviceString()), schema);
} catch (WriteProcessException e) {
LOG.warn(e.getMessage());
}
@@ -283,7 +283,7 @@ public class TsFileWriter implements AutoCloseable {
public void registerAlignedTimeseries(Path devicePath,
List<MeasurementSchema> measurementSchemas)
throws WriteProcessException {
registerAlignedTimeseries(
- IDeviceID.Factory.DEFAULT_FACTORY.create(devicePath.getDevice()),
measurementSchemas);
+
IDeviceID.Factory.DEFAULT_FACTORY.create(devicePath.getDeviceString()),
measurementSchemas);
}
/**
* Register aligned timeseries. Once the device is registered for aligned
timeseries, it cannot be
@@ -424,8 +424,7 @@ public class TsFileWriter implements AutoCloseable {
.getMeasurementSchemaMap()
.containsKey(measurementSchema.getMeasurementId())) {
if (isAligned) {
- throw new NoMeasurementException(
- measurementSchema.getMeasurementId());
+ throw new
NoMeasurementException(measurementSchema.getMeasurementId());
} else {
measurementSchemas.remove(measurementSchema);
}
@@ -446,8 +445,7 @@ public class TsFileWriter implements AutoCloseable {
for (DataPoint dataPoint : dataPoints) {
if
(!measurementGroup.getMeasurementSchemaMap().containsKey(dataPoint.getMeasurementId()))
{
if (isAligned) {
- throw new NoMeasurementException(
- dataPoint.getMeasurementId());
+ throw new NoMeasurementException(dataPoint.getMeasurementId());
} else {
LOG.warn(
"Ignore nonAligned measurement "
diff --git a/tsfile/src/main/java/org/apache/tsfile/write/schema/Schema.java
b/tsfile/src/main/java/org/apache/tsfile/write/schema/Schema.java
index 9aeb409d..7f09ce77 100644
--- a/tsfile/src/main/java/org/apache/tsfile/write/schema/Schema.java
+++ b/tsfile/src/main/java/org/apache/tsfile/write/schema/Schema.java
@@ -58,7 +58,7 @@ public class Schema implements Serializable {
@Deprecated
public void registerTimeseries(Path devicePath, MeasurementSchema
measurementSchema) {
registerTimeseries(
- IDeviceID.Factory.DEFAULT_FACTORY.create(devicePath.getDevice()),
measurementSchema);
+
IDeviceID.Factory.DEFAULT_FACTORY.create(devicePath.getDeviceString()),
measurementSchema);
}
// This method can only register nonAligned timeseries.
public void registerTimeseries(IDeviceID deviceID, MeasurementSchema
measurementSchema) {
@@ -71,7 +71,7 @@ public class Schema implements Serializable {
@Deprecated
public void registerMeasurementGroup(Path devicePath, MeasurementGroup
measurementGroup) {
this.registeredTimeseries.put(
- IDeviceID.Factory.DEFAULT_FACTORY.create(devicePath.getDevice()),
measurementGroup);
+
IDeviceID.Factory.DEFAULT_FACTORY.create(devicePath.getDeviceString()),
measurementGroup);
}
public void registerMeasurementGroup(IDeviceID deviceID, MeasurementGroup
measurementGroup) {
@@ -118,7 +118,7 @@ public class Schema implements Serializable {
@Deprecated
public MeasurementGroup getSeriesSchema(Path devicePath) {
return registeredTimeseries.get(
- IDeviceID.Factory.DEFAULT_FACTORY.create(devicePath.getDevice()));
+
IDeviceID.Factory.DEFAULT_FACTORY.create(devicePath.getDeviceString()));
}
public MeasurementGroup getSeriesSchema(IDeviceID devicePath) {
diff --git
a/tsfile/src/main/java/org/apache/tsfile/write/writer/TsFileIOWriter.java
b/tsfile/src/main/java/org/apache/tsfile/write/writer/TsFileIOWriter.java
index 8f107369..c7863f3b 100644
--- a/tsfile/src/main/java/org/apache/tsfile/write/writer/TsFileIOWriter.java
+++ b/tsfile/src/main/java/org/apache/tsfile/write/writer/TsFileIOWriter.java
@@ -686,12 +686,12 @@ public class TsFileIOWriter implements AutoCloseable {
int writtenSize = 0;
// [DeviceId] measurementId datatype size chunkMetadataBuffer
if (lastSerializePath == null
- || !seriesPath.getDevice().equals(lastSerializePath.getDevice())) {
+ ||
!seriesPath.getDeviceString().equals(lastSerializePath.getDeviceString())) {
// mark the end position of last device
endPosInCMTForDevice.add(tempOutput.getPosition());
// serialize the device
// for each device, we only serialize it once, in order to save io
- writtenSize += ReadWriteIOUtils.write(seriesPath.getDevice(),
tempOutput.wrapAsStream());
+ writtenSize += ReadWriteIOUtils.write(seriesPath.getDeviceString(),
tempOutput.wrapAsStream());
}
if (isNewPath && !iChunkMetadataList.isEmpty()) {
// serialize the public info of this measurement
diff --git
a/tsfile/src/test/java/org/apache/tsfile/compatibility/CompatibilityTest.java
b/tsfile/src/test/java/org/apache/tsfile/compatibility/CompatibilityTest.java
index c5fc613d..33016b3d 100644
---
a/tsfile/src/test/java/org/apache/tsfile/compatibility/CompatibilityTest.java
+++
b/tsfile/src/test/java/org/apache/tsfile/compatibility/CompatibilityTest.java
@@ -1,26 +1,26 @@
package org.apache.tsfile.compatibility;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-
-import java.io.File;
-import java.io.IOException;
import org.apache.tsfile.read.TsFileReader;
import org.apache.tsfile.read.TsFileSequenceReader;
import org.apache.tsfile.read.common.Path;
import org.apache.tsfile.read.common.RowRecord;
import org.apache.tsfile.read.expression.QueryExpression;
import org.apache.tsfile.read.query.dataset.QueryDataSet;
+
import org.junit.Test;
+import java.io.File;
+import java.io.IOException;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
public class CompatibilityTest {
- private String fileName = "target" + File.separator + "test-classes" +
File.separator +
- "v3TsFile";
+ private String fileName =
+ "target" + File.separator + "test-classes" + File.separator + "v3TsFile";
- /**
- * The file is generated by the TsFileWriterTest version 3.
- */
+ /** The file is generated by the TsFileWriterTest version 3. */
@Test
public void testReadV3() {
readOneRow();
diff --git
a/tsfile/src/test/java/org/apache/tsfile/file/metadata/utils/TestHelper.java
b/tsfile/src/test/java/org/apache/tsfile/file/metadata/utils/TestHelper.java
index 8506f2fd..c9ebdec9 100644
--- a/tsfile/src/test/java/org/apache/tsfile/file/metadata/utils/TestHelper.java
+++ b/tsfile/src/test/java/org/apache/tsfile/file/metadata/utils/TestHelper.java
@@ -22,9 +22,7 @@ import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.file.header.PageHeader;
import org.apache.tsfile.file.header.PageHeaderTest;
import org.apache.tsfile.file.metadata.DeviceMetadataIndexEntry;
-import org.apache.tsfile.file.metadata.IDeviceID;
import org.apache.tsfile.file.metadata.IDeviceID.Factory;
-import org.apache.tsfile.file.metadata.MeasurementMetadataIndexEntry;
import org.apache.tsfile.file.metadata.MetadataIndexNode;
import org.apache.tsfile.file.metadata.TimeseriesMetadata;
import org.apache.tsfile.file.metadata.TsFileMetadata;
@@ -52,8 +50,8 @@ public class TestHelper {
private static MetadataIndexNode generateMetaDataIndex() {
MetadataIndexNode metaDataIndex = new
MetadataIndexNode(MetadataIndexNodeType.LEAF_DEVICE);
for (int i = 0; i < 5; i++) {
- metaDataIndex.addEntry(new
DeviceMetadataIndexEntry(Factory.DEFAULT_FACTORY.create("d" + i),
- (long) i * 5));
+ metaDataIndex.addEntry(
+ new DeviceMetadataIndexEntry(Factory.DEFAULT_FACTORY.create("d" +
i), (long) i * 5));
}
return metaDataIndex;
}
diff --git
a/tsfile/src/test/java/org/apache/tsfile/file/metadata/utils/Utils.java
b/tsfile/src/test/java/org/apache/tsfile/file/metadata/utils/Utils.java
index 81fdd718..91c2cbf2 100644
--- a/tsfile/src/test/java/org/apache/tsfile/file/metadata/utils/Utils.java
+++ b/tsfile/src/test/java/org/apache/tsfile/file/metadata/utils/Utils.java
@@ -51,11 +51,13 @@ public class Utils {
public static boolean isFileMetaDataEqual(TsFileMetadata metadata1,
TsFileMetadata metadata2) {
if (Utils.isTwoObjectsNotNULL(metadata1, metadata2, "File MetaData")) {
if (Utils.isTwoObjectsNotNULL(
-
metadata1.getTableMetadataIndexNodeMap().get(TestHelper.TEST_TABLE_NAME),
-
metadata2.getTableMetadataIndexNodeMap().get(TestHelper.TEST_TABLE_NAME),
+ metadata1.getTableMetadataIndexNode(TestHelper.TEST_TABLE_NAME),
+ metadata2.getTableMetadataIndexNode(TestHelper.TEST_TABLE_NAME),
"Metadata " + "Index")) {
- MetadataIndexNode metaDataIndex1 =
metadata1.getTableMetadataIndexNodeMap().get(TestHelper.TEST_TABLE_NAME);
- MetadataIndexNode metaDataIndex2 =
metadata2.getTableMetadataIndexNodeMap().get(TestHelper.TEST_TABLE_NAME);
+ MetadataIndexNode metaDataIndex1 =
+ metadata1.getTableMetadataIndexNode(TestHelper.TEST_TABLE_NAME);
+ MetadataIndexNode metaDataIndex2 =
+ metadata2.getTableMetadataIndexNode(TestHelper.TEST_TABLE_NAME);
return metaDataIndex1.getChildren().size() ==
metaDataIndex2.getChildren().size();
}
}
diff --git a/tsfile/src/test/java/org/apache/tsfile/read/GetAllDevicesTest.java
b/tsfile/src/test/java/org/apache/tsfile/read/GetAllDevicesTest.java
index f979fcdc..aef1129b 100644
--- a/tsfile/src/test/java/org/apache/tsfile/read/GetAllDevicesTest.java
+++ b/tsfile/src/test/java/org/apache/tsfile/read/GetAllDevicesTest.java
@@ -19,7 +19,6 @@
package org.apache.tsfile.read;
-import java.util.ArrayList;
import org.apache.tsfile.common.conf.TSFileConfig;
import org.apache.tsfile.common.conf.TSFileDescriptor;
import org.apache.tsfile.file.metadata.IDeviceID;
@@ -31,6 +30,7 @@ import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.List;
public class GetAllDevicesTest {
@@ -74,21 +74,19 @@ public class GetAllDevicesTest {
public void testGetAllDevices(int deviceNum, int measurementNum) throws
IOException {
FileGenerator.generateFile(10000, deviceNum, measurementNum);
-
try (TsFileSequenceReader fileReader = new
TsFileSequenceReader(FILE_PATH)) {
List<IDeviceID> sortedDeviceIds = new ArrayList<>();
for (int i = 0; i < deviceNum; i++) {
- sortedDeviceIds.add(IDeviceID.Factory.DEFAULT_FACTORY.create(
- "d" + FileGenerator.generateIndexString(i, deviceNum)));
+ sortedDeviceIds.add(
+ IDeviceID.Factory.DEFAULT_FACTORY.create(
+ "d" + FileGenerator.generateIndexString(i, deviceNum)));
}
sortedDeviceIds.sort(null);
List<IDeviceID> devices = fileReader.getAllDevices();
Assert.assertEquals(deviceNum, devices.size());
for (int i = 0; i < deviceNum; i++) {
- Assert.assertEquals(
- sortedDeviceIds.get(i),
- devices.get(i));
+ Assert.assertEquals(sortedDeviceIds.get(i), devices.get(i));
}
FileGenerator.after();
diff --git
a/tsfile/src/test/java/org/apache/tsfile/read/MeasurementChunkMetadataListMapIteratorTest.java
b/tsfile/src/test/java/org/apache/tsfile/read/MeasurementChunkMetadataListMapIteratorTest.java
index d0bcd9c8..5e6f37b6 100644
---
a/tsfile/src/test/java/org/apache/tsfile/read/MeasurementChunkMetadataListMapIteratorTest.java
+++
b/tsfile/src/test/java/org/apache/tsfile/read/MeasurementChunkMetadataListMapIteratorTest.java
@@ -134,7 +134,7 @@ public class MeasurementChunkMetadataListMapIteratorTest {
expectedDeviceMeasurementChunkMetadataListMap
.computeIfAbsent(device, d -> new HashMap<>())
.computeIfAbsent(measurement, m -> new ArrayList<>())
- .addAll(fileReader.getChunkMetadataList(new Path(device,
measurement, true)));
+ .addAll(fileReader.getChunkMetadataList(device, measurement,
false));
}
}
diff --git a/tsfile/src/test/java/org/apache/tsfile/read/TsFileReaderTest.java
b/tsfile/src/test/java/org/apache/tsfile/read/TsFileReaderTest.java
index f7cb6e44..1ff19d7d 100644
--- a/tsfile/src/test/java/org/apache/tsfile/read/TsFileReaderTest.java
+++ b/tsfile/src/test/java/org/apache/tsfile/read/TsFileReaderTest.java
@@ -81,7 +81,7 @@ public class TsFileReaderTest {
Path path = new Path("t", "id", true);
tsFileWriter.registerTimeseries(
- new Path(path.getDevice()),
+ new Path(path.getDeviceString()),
new MeasurementSchema("id", TSDataType.INT32, TSEncoding.PLAIN,
CompressionType.LZ4));
for (int i = 0; i < 11000000; i++) {
diff --git a/tsfile/src/test/java/org/apache/tsfile/read/common/PathTest.java
b/tsfile/src/test/java/org/apache/tsfile/read/common/PathTest.java
index 8df52416..4553127c 100644
--- a/tsfile/src/test/java/org/apache/tsfile/read/common/PathTest.java
+++ b/tsfile/src/test/java/org/apache/tsfile/read/common/PathTest.java
@@ -19,6 +19,7 @@
package org.apache.tsfile.read.common;
import org.apache.tsfile.exception.PathParseException;
+import org.apache.tsfile.file.metadata.StringArrayDeviceID;
import org.apache.tsfile.read.common.parser.PathVisitor;
import org.junit.Assert;
@@ -31,102 +32,102 @@ public class PathTest {
public void testLegalPath() {
// empty path
Path a = new Path("", true);
- Assert.assertEquals("", a.getDevice());
+ Assert.assertEquals(new StringArrayDeviceID("", ""), a.getIDeviceID());
Assert.assertEquals("", a.getMeasurement());
// empty device
Path b = new Path("s1", true);
Assert.assertEquals("s1", b.getMeasurement());
- Assert.assertEquals("", b.getDevice());
+ Assert.assertEquals(new StringArrayDeviceID("", ""), b.getIDeviceID());
// normal node
Path c = new Path("root.sg.a", true);
- Assert.assertEquals("root.sg", c.getDevice());
+ Assert.assertEquals("root.sg", c.getDeviceString());
Assert.assertEquals("a", c.getMeasurement());
// quoted node
Path d = new Path("root.sg.`a.b`", true);
- Assert.assertEquals("root.sg", d.getDevice());
+ Assert.assertEquals("root.sg", d.getDeviceString());
Assert.assertEquals("`a.b`", d.getMeasurement());
Path e = new Path("root.sg.`a.``b`", true);
- Assert.assertEquals("root.sg", e.getDevice());
+ Assert.assertEquals("root.sg", e.getDeviceString());
Assert.assertEquals("`a.``b`", e.getMeasurement());
Path f = new Path("root.`sg\"`.`a.``b`", true);
- Assert.assertEquals("root.`sg\"`", f.getDevice());
+ Assert.assertEquals("root.`sg\"`", f.getDeviceString());
Assert.assertEquals("`a.``b`", f.getMeasurement());
Path g = new Path("root.sg.`a.b\\\\`", true);
- Assert.assertEquals("root.sg", g.getDevice());
+ Assert.assertEquals("root.sg", g.getDeviceString());
Assert.assertEquals("`a.b\\\\`", g.getMeasurement());
// quoted node of digits
Path h = new Path("root.sg.`111`", true);
- Assert.assertEquals("root.sg", h.getDevice());
+ Assert.assertEquals("root.sg", h.getDeviceString());
Assert.assertEquals("`111`", h.getMeasurement());
// quoted node of key word
Path i = new Path("root.sg.`select`", true);
- Assert.assertEquals("root.sg", i.getDevice());
+ Assert.assertEquals("root.sg", i.getDeviceString());
Assert.assertEquals("select", i.getMeasurement());
// wildcard
Path j = new Path("root.sg.`a*b`", true);
- Assert.assertEquals("root.sg", j.getDevice());
+ Assert.assertEquals("root.sg", j.getDeviceString());
Assert.assertEquals("`a*b`", j.getMeasurement());
Path k = new Path("root.sg.*", true);
- Assert.assertEquals("root.sg", k.getDevice());
+ Assert.assertEquals("root.sg", k.getDeviceString());
Assert.assertEquals("*", k.getMeasurement());
Path l = new Path("root.sg.**", true);
- Assert.assertEquals("root.sg", l.getDevice());
+ Assert.assertEquals("root.sg", l.getDeviceString());
Assert.assertEquals("**", l.getMeasurement());
// raw key word
Path m = new Path("root.sg.select", true);
- Assert.assertEquals("root.sg", m.getDevice());
+ Assert.assertEquals("root.sg", m.getDeviceString());
Assert.assertEquals("select", m.getMeasurement());
Path n = new Path("root.sg.device", true);
- Assert.assertEquals("root.sg", n.getDevice());
+ Assert.assertEquals("root.sg", n.getDeviceString());
Assert.assertEquals("device", n.getMeasurement());
Path o = new Path("root.sg.drop_trigger", true);
- Assert.assertEquals("root.sg", o.getDevice());
+ Assert.assertEquals("root.sg", o.getDeviceString());
Assert.assertEquals("drop_trigger", o.getMeasurement());
Path p = new Path("root.sg.and", true);
- Assert.assertEquals("root.sg", p.getDevice());
+ Assert.assertEquals("root.sg", p.getDeviceString());
Assert.assertEquals("and", p.getMeasurement());
p = new Path("root.sg.or", true);
- Assert.assertEquals("root.sg", p.getDevice());
+ Assert.assertEquals("root.sg", p.getDeviceString());
Assert.assertEquals("or", p.getMeasurement());
p = new Path("root.sg.not", true);
- Assert.assertEquals("root.sg", p.getDevice());
+ Assert.assertEquals("root.sg", p.getDeviceString());
Assert.assertEquals("not", p.getMeasurement());
p = new Path("root.sg.null", true);
- Assert.assertEquals("root.sg", p.getDevice());
+ Assert.assertEquals("root.sg", p.getDeviceString());
Assert.assertEquals("null", p.getMeasurement());
p = new Path("root.sg.contains", true);
- Assert.assertEquals("root.sg", p.getDevice());
+ Assert.assertEquals("root.sg", p.getDeviceString());
Assert.assertEquals("contains", p.getMeasurement());
p = new Path("root.sg.`0000`", true);
- Assert.assertEquals("root.sg", p.getDevice());
+ Assert.assertEquals("root.sg", p.getDeviceString());
Assert.assertEquals("`0000`", p.getMeasurement());
p = new Path("root.sg.`0e38`", true);
- Assert.assertEquals("root.sg", p.getDevice());
+ Assert.assertEquals("root.sg", p.getDeviceString());
Assert.assertEquals("`0e38`", p.getMeasurement());
p = new Path("root.sg.`00.12`", true);
- Assert.assertEquals("root.sg", p.getDevice());
+ Assert.assertEquals("root.sg", p.getDeviceString());
Assert.assertEquals("`00.12`", p.getMeasurement());
}
diff --git
a/tsfile/src/test/java/org/apache/tsfile/read/filter/IExpressionOptimizerTest.java
b/tsfile/src/test/java/org/apache/tsfile/read/filter/IExpressionOptimizerTest.java
index cadc7c6c..72408dc8 100644
---
a/tsfile/src/test/java/org/apache/tsfile/read/filter/IExpressionOptimizerTest.java
+++
b/tsfile/src/test/java/org/apache/tsfile/read/filter/IExpressionOptimizerTest.java
@@ -128,8 +128,8 @@ public class IExpressionOptimizerTest {
BinaryExpression.or(singleSeriesExp1, singleSeriesExp2),
globalTimeFilter);
try {
String rightRet =
- "[[d2.s1:((measurements[0] > 100 || measurements[0] < 50) && time <
14001234)] "
- + "|| [d1.s2:((measurements[0] > 100.5 || measurements[0] <
50.6) "
+ "[[.d2.s1:((measurements[0] > 100 || measurements[0] < 50) && time <
14001234)] "
+ + "|| [.d1.s2:((measurements[0] > 100.5 || measurements[0] <
50.6) "
+ "&& time < 14001234)]]";
IExpression regularFilter = expressionOptimizer.optimize(expression,
selectedSeries);
Assert.assertEquals(rightRet, regularFilter.toString());
@@ -155,9 +155,9 @@ public class IExpressionOptimizerTest {
BinaryExpression.and(singleSeriesExp1, globalTimeFilter),
globalTimeFilter2);
try {
String rightRet =
- "[[[[d1.s1:time > 1] || "
- + "[d2.s1:(time > 1 || ((measurements[0] > 100 ||
measurements[0] < 50) "
- + "&& time < 14001234))]] || [d1.s2:time > 1]] || [d2.s2:time >
1]]";
+ "[[[[.d1.s1:time > 1] || "
+ + "[.d2.s1:(time > 1 || ((measurements[0] > 100 ||
measurements[0] < 50) "
+ + "&& time < 14001234))]] || [.d1.s2:time > 1]] || [.d2.s2:time
> 1]]";
IExpression regularFilter = expressionOptimizer.optimize(expression,
selectedSeries);
Assert.assertEquals(rightRet, regularFilter.toString());
} catch (QueryFilterOptimizationException e) {
@@ -178,7 +178,7 @@ public class IExpressionOptimizerTest {
try {
String rightRet =
- "[d2.s1:((measurements[0] > 100 || measurements[0] < 50) && time <
14001234)]";
+ "[.d2.s1:((measurements[0] > 100 || measurements[0] < 50) && time <
14001234)]";
IExpression regularFilter = expressionOptimizer.optimize(expression,
selectedSeries);
Assert.assertEquals(rightRet, regularFilter.toString());
} catch (QueryFilterOptimizationException e) {
@@ -204,12 +204,12 @@ public class IExpressionOptimizerTest {
try {
String rightRet =
- "[[[[d1.s1:time < 14001234] "
- + "|| [d2.s1:(time < 14001234 || "
+ "[[[[.d1.s1:time < 14001234] "
+ + "|| [.d2.s1:(time < 14001234 || "
+ "(measurements[0] > 100 || measurements[0] < 50))]] "
- + "|| [d1.s2:(time < 14001234 || "
+ + "|| [.d1.s2:(time < 14001234 || "
+ "(measurements[0] > 100.5 || measurements[0] < 50.6))]] "
- + "|| [d2.s2:time < 14001234]]";
+ + "|| [.d2.s2:time < 14001234]]";
IExpression regularFilter = expressionOptimizer.optimize(expression,
selectedSeries);
Assert.assertEquals(rightRet, regularFilter.toString());
} catch (QueryFilterOptimizationException e) {
@@ -236,12 +236,12 @@ public class IExpressionOptimizerTest {
try {
String rightRet =
- "[[[[d1.s1:(time < 14001234 && time > 14001000)] "
- + "|| [d2.s1:((time < 14001234 && time > 14001000) "
+ "[[[[.d1.s1:(time < 14001234 && time > 14001000)] "
+ + "|| [.d2.s1:((time < 14001234 && time > 14001000) "
+ "|| (measurements[0] > 100 || measurements[0] < 50))]] "
- + "|| [d1.s2:((time < 14001234 && time > 14001000) "
+ + "|| [.d1.s2:((time < 14001234 && time > 14001000) "
+ "|| (measurements[0] > 100.5 || measurements[0] < 50.6))]] "
- + "|| [d2.s2:(time < 14001234 && time > 14001000)]]";
+ + "|| [.d2.s2:(time < 14001234 && time > 14001000)]]";
IExpression regularFilter = expressionOptimizer.optimize(expression,
selectedSeries);
Assert.assertEquals(rightRet, regularFilter.toString());
} catch (QueryFilterOptimizationException e) {
@@ -255,9 +255,9 @@ public class IExpressionOptimizerTest {
try {
String rightRet2 =
- "[[d2.s1:((measurements[0] > 100 || measurements[0] < 50) "
+ "[[.d2.s1:((measurements[0] > 100 || measurements[0] < 50) "
+ "&& (time < 14001234 && time > 14001000))] || "
- + "[d1.s2:((measurements[0] > 100.5 || measurements[0] < 50.6) "
+ + "[.d1.s2:((measurements[0] > 100.5 || measurements[0] < 50.6) "
+ "&& (time < 14001234 && time > 14001000))]]";
IExpression regularFilter2 = expressionOptimizer.optimize(expression2,
selectedSeries);
Assert.assertEquals(rightRet2, regularFilter2.toString());
diff --git a/tsfile/src/test/java/org/apache/tsfile/utils/FileGenerator.java
b/tsfile/src/test/java/org/apache/tsfile/utils/FileGenerator.java
index aacd775a..09f7d140 100755
--- a/tsfile/src/test/java/org/apache/tsfile/utils/FileGenerator.java
+++ b/tsfile/src/test/java/org/apache/tsfile/utils/FileGenerator.java
@@ -22,7 +22,6 @@ import org.apache.tsfile.common.conf.TSFileConfig;
import org.apache.tsfile.common.conf.TSFileDescriptor;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.exception.write.WriteProcessException;
-import org.apache.tsfile.file.metadata.IDeviceID;
import org.apache.tsfile.file.metadata.IDeviceID.Factory;
import org.apache.tsfile.file.metadata.enums.TSEncoding;
import org.apache.tsfile.read.common.Path;
diff --git a/tsfile/src/test/java/org/apache/tsfile/utils/RecordUtils.java
b/tsfile/src/test/java/org/apache/tsfile/utils/RecordUtils.java
index fb0d04b5..e27eacc6 100644
--- a/tsfile/src/test/java/org/apache/tsfile/utils/RecordUtils.java
+++ b/tsfile/src/test/java/org/apache/tsfile/utils/RecordUtils.java
@@ -20,9 +20,7 @@ package org.apache.tsfile.utils;
import org.apache.tsfile.common.constant.JsonFormatConstant;
import org.apache.tsfile.enums.TSDataType;
-import org.apache.tsfile.file.metadata.IDeviceID;
import org.apache.tsfile.file.metadata.IDeviceID.Factory;
-import org.apache.tsfile.read.common.Path;
import org.apache.tsfile.write.record.TSRecord;
import org.apache.tsfile.write.record.datapoint.BooleanDataPoint;
import org.apache.tsfile.write.record.datapoint.DoubleDataPoint;
@@ -70,7 +68,8 @@ public class RecordUtils {
for (int i = 2; i < items.length - 1; i += 2) {
// get measurementId and value
measurementId = items[i].trim();
- MeasurementGroup measurementGroup =
schema.getSeriesSchema(Factory.DEFAULT_FACTORY.create(deviceId));
+ MeasurementGroup measurementGroup =
+ schema.getSeriesSchema(Factory.DEFAULT_FACTORY.create(deviceId));
IMeasurementSchema measurementSchema =
measurementGroup == null
? null
diff --git
a/tsfile/src/test/java/org/apache/tsfile/write/MetadataIndexConstructorTest.java
b/tsfile/src/test/java/org/apache/tsfile/write/MetadataIndexConstructorTest.java
index d8da67bd..09d211fc 100644
---
a/tsfile/src/test/java/org/apache/tsfile/write/MetadataIndexConstructorTest.java
+++
b/tsfile/src/test/java/org/apache/tsfile/write/MetadataIndexConstructorTest.java
@@ -28,12 +28,10 @@ import
org.apache.tsfile.file.metadata.DeviceMetadataIndexEntry;
import org.apache.tsfile.file.metadata.IDeviceID;
import org.apache.tsfile.file.metadata.MeasurementMetadataIndexEntry;
import org.apache.tsfile.file.metadata.MetadataIndexNode;
-import org.apache.tsfile.file.metadata.PlainDeviceID;
import org.apache.tsfile.file.metadata.TimeseriesMetadata;
import org.apache.tsfile.file.metadata.TsFileMetadata;
import org.apache.tsfile.file.metadata.enums.MetadataIndexNodeType;
import org.apache.tsfile.file.metadata.enums.TSEncoding;
-import org.apache.tsfile.file.metadata.utils.TestHelper;
import org.apache.tsfile.fileSystem.FSFactoryProducer;
import org.apache.tsfile.read.TsFileSequenceReader;
import org.apache.tsfile.read.common.Path;
diff --git
a/tsfile/src/test/java/org/apache/tsfile/write/TsFileIOWriterTest.java
b/tsfile/src/test/java/org/apache/tsfile/write/TsFileIOWriterTest.java
index afd04de7..f60d9cf5 100644
--- a/tsfile/src/test/java/org/apache/tsfile/write/TsFileIOWriterTest.java
+++ b/tsfile/src/test/java/org/apache/tsfile/write/TsFileIOWriterTest.java
@@ -27,7 +27,6 @@ import org.apache.tsfile.file.header.ChunkGroupHeader;
import org.apache.tsfile.file.header.ChunkHeader;
import org.apache.tsfile.file.metadata.IDeviceID;
import org.apache.tsfile.file.metadata.MetadataIndexNode;
-import org.apache.tsfile.file.metadata.PlainDeviceID;
import org.apache.tsfile.file.metadata.TimeseriesMetadata;
import org.apache.tsfile.file.metadata.TsFileMetadata;
import org.apache.tsfile.file.metadata.enums.TSEncoding;
@@ -155,10 +154,7 @@ public class TsFileIOWriterTest {
for (Map.Entry<IDeviceID, List<TimeseriesMetadata>> entry :
deviceTimeseriesMetadataMap.entrySet()) {
for (TimeseriesMetadata timeseriesMetadata : entry.getValue()) {
- String seriesPath =
- entry.getKey()
- + "."
- + timeseriesMetadata.getMeasurementId();
+ String seriesPath = entry.getKey() + "." +
timeseriesMetadata.getMeasurementId();
Assert.assertFalse(pathSet.contains(seriesPath));
pathSet.add(seriesPath);
}
diff --git a/tsfile/src/test/java/org/apache/tsfile/write/TsFileWriterTest.java
b/tsfile/src/test/java/org/apache/tsfile/write/TsFileWriterTest.java
index 1e18c3b5..7f3c278f 100644
--- a/tsfile/src/test/java/org/apache/tsfile/write/TsFileWriterTest.java
+++ b/tsfile/src/test/java/org/apache/tsfile/write/TsFileWriterTest.java
@@ -103,7 +103,7 @@ public class TsFileWriterTest {
new Path("d1"),
new MeasurementSchema("s1", TSDataType.FLOAT, TSEncoding.RLE,
CompressionType.SNAPPY));
} catch (WriteProcessException e) {
- Assert.assertEquals("given nonAligned timeseries d1.s1 has been
registered.", e.getMessage());
+ Assert.assertEquals("given nonAligned timeseries .d1.s1 has been
registered.", e.getMessage());
}
try {
List<MeasurementSchema> schemas = new ArrayList<>();
@@ -112,7 +112,7 @@ public class TsFileWriterTest {
writer.registerAlignedTimeseries(new Path("d1"), schemas);
} catch (WriteProcessException e) {
Assert.assertEquals(
- "given device d1 has been registered for nonAligned timeseries.",
e.getMessage());
+ "given device .d1 has been registered for nonAligned timeseries.",
e.getMessage());
}
List<MeasurementSchema> schemas = new ArrayList<>();
schemas.add(
@@ -138,7 +138,7 @@ public class TsFileWriterTest {
writer.registerAlignedTimeseries(new Path("d2"), measurementSchemas);
} catch (WriteProcessException e) {
Assert.assertEquals(
- "given device d2 has been registered for aligned timeseries and
should not be expanded.",
+ "given device .d2 has been registered for aligned timeseries and
should not be expanded.",
e.getMessage());
}
try {
@@ -147,7 +147,7 @@ public class TsFileWriterTest {
new MeasurementSchema("s5", TSDataType.INT32, TSEncoding.RLE,
CompressionType.SNAPPY));
} catch (WriteProcessException e) {
Assert.assertEquals(
- "given device d2 has been registered for aligned timeseries.",
e.getMessage());
+ "given device .d2 has been registered for aligned timeseries.",
e.getMessage());
}
/*try {
diff --git a/tsfile/src/test/java/org/apache/tsfile/write/WriteTest.java
b/tsfile/src/test/java/org/apache/tsfile/write/WriteTest.java
index 38c84309..d97ae61d 100755
--- a/tsfile/src/test/java/org/apache/tsfile/write/WriteTest.java
+++ b/tsfile/src/test/java/org/apache/tsfile/write/WriteTest.java
@@ -219,7 +219,7 @@ public class WriteTest {
// add all measurement except the last one at before writing
for (int i = 0; i < measurementArray.size() - 1; i++) {
tsFileWriter.registerTimeseries(
- new Path(pathArray.get(i).getDevice()), measurementArray.get(i));
+ new Path(pathArray.get(i).getDeviceString()),
measurementArray.get(i));
}
while (true) {
if (lineCount % stageSize == 0) {
@@ -235,7 +235,7 @@ public class WriteTest {
}
if (lineCount == ROW_COUNT / 2) {
tsFileWriter.registerTimeseries(
- new Path(pathArray.get(measurementArray.size() - 1).getDevice()),
+ new Path(pathArray.get(measurementArray.size() -
1).getDeviceString()),
measurementArray.get(measurementArray.size() - 1));
}
strings = getNextRecord(lineCount, stageState);
@@ -252,7 +252,7 @@ public class WriteTest {
Path path = pathArray.get(measurementArray.size() - 1);
MeasurementSchema dupTimeseries =
measurementArray.get(measurementArray.size() - 1);
try {
- tsFileWriter.registerTimeseries(new Path(path.getDevice()),
dupTimeseries);
+ tsFileWriter.registerTimeseries(new Path(path.getDeviceString()),
dupTimeseries);
} catch (WriteProcessException e) {
assertEquals("given timeseries has exists! " + path, e.getMessage());
}
diff --git
a/tsfile/src/test/java/org/apache/tsfile/write/writer/TsFileIOWriterMemoryControlTest.java
b/tsfile/src/test/java/org/apache/tsfile/write/writer/TsFileIOWriterMemoryControlTest.java
index 3d2c9618..bb47294e 100644
---
a/tsfile/src/test/java/org/apache/tsfile/write/writer/TsFileIOWriterMemoryControlTest.java
+++
b/tsfile/src/test/java/org/apache/tsfile/write/writer/TsFileIOWriterMemoryControlTest.java
@@ -27,7 +27,6 @@ import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.file.metadata.ChunkMetadata;
import org.apache.tsfile.file.metadata.IChunkMetadata;
import org.apache.tsfile.file.metadata.IDeviceID;
-import org.apache.tsfile.file.metadata.PlainDeviceID;
import org.apache.tsfile.file.metadata.TimeseriesMetadata;
import org.apache.tsfile.file.metadata.enums.CompressionType;
import org.apache.tsfile.file.metadata.enums.TSEncoding;