You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by su...@apache.org on 2020/10/08 02:46:18 UTC
[iotdb] 01/01: Refactor getAllDevices in TsFileSequenceReader
This is an automated email from the ASF dual-hosted git repository.
sunzesong pushed a commit to branch jira_936
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 3c55742dfb8cba2622bc1f67bb4e15241a26a68d
Author: samperson1997 <sz...@mails.tsinghua.edu.cn>
AuthorDate: Thu Oct 8 10:45:54 2020 +0800
Refactor getAllDevices in TsFileSequenceReader
---
.../iotdb/tsfile/read/TsFileSequenceReader.java | 104 +++++++++++----------
.../iotdb/tsfile/read/GetAllDevicesTest.java | 88 +++++++++++++++++
.../tsfile/read/TsFileSequenceReaderTest.java | 1 -
.../iotdb/tsfile/read/reader/ReaderTest.java | 6 +-
.../apache/iotdb/tsfile/utils/FileGenerator.java | 79 +++++++++++++---
5 files changed, 212 insertions(+), 66 deletions(-)
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java
index b9a8226..776fb08 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java
@@ -24,7 +24,6 @@ import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@@ -33,6 +32,7 @@ import java.util.TreeMap;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
+import java.util.stream.Collectors;
import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
import org.apache.iotdb.tsfile.compress.IUnCompressor;
@@ -96,7 +96,7 @@ public class TsFileSequenceReader implements AutoCloseable {
/**
* construct function for TsFileSequenceReader.
*
- * @param file -given file name
+ * @param file -given file name
* @param loadMetadataSize -whether load meta data size
*/
public TsFileSequenceReader(String file, boolean loadMetadataSize) throws IOException {
@@ -137,7 +137,7 @@ public class TsFileSequenceReader implements AutoCloseable {
/**
* construct function for TsFileSequenceReader.
*
- * @param input -given input
+ * @param input -given input
* @param loadMetadataSize -load meta data size
*/
public TsFileSequenceReader(TsFileInput input, boolean loadMetadataSize) throws IOException {
@@ -155,10 +155,10 @@ public class TsFileSequenceReader implements AutoCloseable {
/**
* construct function for TsFileSequenceReader.
*
- * @param input the input of a tsfile. The current position should be a markder and then a chunk
- * Header, rather than the magic number
- * @param fileMetadataPos the position of the file metadata in the TsFileInput from the beginning
- * of the input to the current position
+ * @param input the input of a tsfile. The current position should be a markder and
+ * then a chunk Header, rather than the magic number
+ * @param fileMetadataPos the position of the file metadata in the TsFileInput from the beginning
+ * of the input to the current position
* @param fileMetadataSize the byte size of the file metadata in the input
*/
public TsFileSequenceReader(TsFileInput input, long fileMetadataPos, int fileMetadataSize) {
@@ -423,30 +423,31 @@ public class TsFileSequenceReader implements AutoCloseable {
}
private List<String> getAllDevices(MetadataIndexNode metadataIndexNode) throws IOException {
- Set<String> deviceSet = new HashSet<>();
+ List<String> deviceList = new ArrayList<>();
int metadataIndexListSize = metadataIndexNode.getChildren().size();
- for (int i = 0; i < metadataIndexListSize; i++) {
- MetadataIndexEntry metadataIndex = metadataIndexNode.getChildren().get(i);
- switch (metadataIndexNode.getNodeType()) {
- case LEAF_MEASUREMENT:
- case INTERNAL_MEASUREMENT:
- for (MetadataIndexEntry index : metadataIndexNode.getChildren()) {
- deviceSet.add(index.getName());
- }
- break;
- case LEAF_DEVICE:
- case INTERNAL_DEVICE:
- long endOffset = metadataIndexNode.getEndOffset();
- if (i != metadataIndexListSize - 1) {
- endOffset = metadataIndexNode.getChildren().get(i + 1).getOffset();
- }
- ByteBuffer buffer = readData(metadataIndex.getOffset(), endOffset);
- MetadataIndexNode node = MetadataIndexNode.deserializeFrom(buffer);
- deviceSet.addAll(getAllDevices(node));
- break;
+ if (metadataIndexNode.getNodeType().equals(MetadataIndexNodeType.INTERNAL_MEASUREMENT)) {
+ for (MetadataIndexEntry index : metadataIndexNode.getChildren()) {
+ deviceList.add(index.getName());
+ }
+ } else {
+ for (int i = 0; i < metadataIndexListSize; i++) {
+ long endOffset = metadataIndexNode.getEndOffset();
+ if (i != metadataIndexListSize - 1) {
+ endOffset = metadataIndexNode.getChildren().get(i + 1).getOffset();
+ }
+ ByteBuffer buffer = readData(metadataIndexNode.getChildren().get(i).getOffset(), endOffset);
+ MetadataIndexNode node = MetadataIndexNode.deserializeFrom(buffer);
+ if (node.getNodeType().equals(MetadataIndexNodeType.LEAF_DEVICE)) {
+ // if node in next level is LEAF_DEVICE, put all devices in node entry into the set
+ deviceList.addAll(node.getChildren().stream().map(MetadataIndexEntry::getName).collect(
+ Collectors.toList()));
+ } else {
+ // keep traversing
+ deviceList.addAll(getAllDevices(node));
+ }
}
}
- return new ArrayList<>(deviceSet);
+ return deviceList;
}
/**
@@ -508,9 +509,9 @@ public class TsFileSequenceReader implements AutoCloseable {
/**
* Traverse the metadata index from MetadataIndexEntry to get TimeseriesMetadatas
*
- * @param metadataIndex MetadataIndexEntry
- * @param buffer byte buffer
- * @param deviceId String
+ * @param metadataIndex MetadataIndexEntry
+ * @param buffer byte buffer
+ * @param deviceId String
* @param timeseriesMetadataMap map: deviceId -> timeseriesMetadata list
*/
private void generateMetadataIndex(MetadataIndexEntry metadataIndex, ByteBuffer buffer,
@@ -584,12 +585,13 @@ public class TsFileSequenceReader implements AutoCloseable {
* Get target MetadataIndexEntry and its end offset
*
* @param metadataIndex given MetadataIndexNode
- * @param name target device / measurement name
- * @param type target MetadataIndexNodeType, either INTERNAL_DEVICE or INTERNAL_MEASUREMENT. When
- * searching for a device node, return when it is not INTERNAL_DEVICE. Likewise, when searching
- * for a measurement node, return when it is not INTERNAL_MEASUREMENT. This works for the
- * situation when the index tree does NOT have the device level and ONLY has the measurement
- * level.
+ * @param name target device / measurement name
+ * @param type target MetadataIndexNodeType, either INTERNAL_DEVICE or
+ * INTERNAL_MEASUREMENT. When searching for a device node, return when it is
+ * not INTERNAL_DEVICE. Likewise, when searching for a measurement node,
+ * return when it is not INTERNAL_MEASUREMENT. This works for the situation
+ * when the index tree does NOT have the device level and ONLY has the
+ * measurement level.
* @return target MetadataIndexEntry, endOffset pair
*/
private Pair<MetadataIndexEntry, Long> getMetadataAndEndOffset(MetadataIndexNode metadataIndex,
@@ -616,7 +618,7 @@ public class TsFileSequenceReader implements AutoCloseable {
/**
* read data from current position of the input, and deserialize it to a CHUNK_GROUP_FOOTER.
*
- * @param position the offset of the chunk group footer in the file
+ * @param position the offset of the chunk group footer in the file
* @param markerRead true if the offset does not contains the marker , otherwise false
* @return a CHUNK_GROUP_FOOTER
* @throws IOException io error
@@ -649,9 +651,9 @@ public class TsFileSequenceReader implements AutoCloseable {
/**
* read the chunk's header.
*
- * @param position the file offset of this chunk's header
+ * @param position the file offset of this chunk's header
* @param chunkHeaderSize the size of chunk's header
- * @param markerRead true if the offset does not contains the marker , otherwise false
+ * @param markerRead true if the offset does not contains the marker , otherwise false
*/
private ChunkHeader readChunkHeader(long position, int chunkHeaderSize, boolean markerRead)
throws IOException {
@@ -756,8 +758,8 @@ public class TsFileSequenceReader implements AutoCloseable {
* changed.
*
* @param position the start position of data in the tsFileInput, or the current position if
- * position = -1
- * @param size the size of data that want to read
+ * position = -1
+ * @param size the size of data that want to read
* @return data that been read.
*/
private ByteBuffer readData(long position, int size) throws IOException {
@@ -783,8 +785,8 @@ public class TsFileSequenceReader implements AutoCloseable {
* position.
*
* @param start the start position of data in the tsFileInput, or the current position if position
- * = -1
- * @param end the end position of data that want to read
+ * = -1
+ * @param end the end position of data that want to read
* @return data that been read.
*/
private ByteBuffer readData(long start, long end) throws IOException {
@@ -801,11 +803,11 @@ public class TsFileSequenceReader implements AutoCloseable {
/**
* Self Check the file and return the position before where the data is safe.
*
- * @param newSchema the schema on each time series in the file
+ * @param newSchema the schema on each time series in the file
* @param chunkGroupMetadataList ChunkGroupMetadata List
- * @param versionInfo version pair List
- * @param fastFinish if true and the file is complete, then newSchema and chunkGroupMetadataList
- * parameter will be not modified.
+ * @param versionInfo version pair List
+ * @param fastFinish if true and the file is complete, then newSchema and
+ * chunkGroupMetadataList parameter will be not modified.
* @return the position of the file that is fine. All data after the position in the file should
* be truncated.
*/
@@ -992,7 +994,7 @@ public class TsFileSequenceReader implements AutoCloseable {
* get device names which has valid chunks in [start, end)
*
* @param start start of the partition
- * @param end end of the partition
+ * @param end end of the partition
* @return device names in range
*/
public List<String> getDeviceNameInRange(long start, long end) throws IOException {
@@ -1010,8 +1012,8 @@ public class TsFileSequenceReader implements AutoCloseable {
* Check if the device has at least one Chunk in this partition
*
* @param seriesMetadataMap chunkMetaDataList of each measurement
- * @param start the start position of the space partition
- * @param end the end position of the space partition
+ * @param start the start position of the space partition
+ * @param end the end position of the space partition
*/
private boolean hasDataInPartition(Map<String, List<ChunkMetadata>> seriesMetadataMap,
long start, long end) {
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/read/GetAllDevicesTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/read/GetAllDevicesTest.java
new file mode 100644
index 0000000..1ece3af
--- /dev/null
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/read/GetAllDevicesTest.java
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.iotdb.tsfile.read;
+
+import java.io.IOException;
+import java.util.List;
+import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
+import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
+import org.apache.iotdb.tsfile.utils.FileGenerator;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+public class GetAllDevicesTest {
+
+ private final TSFileConfig conf = TSFileDescriptor.getInstance().getConfig();
+ private int maxDegreeOfIndexNode;
+ private static final String FILE_PATH = FileGenerator.outputDataFile;
+
+ @Before
+ public void before() {
+ maxDegreeOfIndexNode = conf.getMaxDegreeOfIndexNode();
+ conf.setMaxDegreeOfIndexNode(3);
+ }
+
+ @After
+ public void after() throws IOException {
+ FileGenerator.after();
+ conf.setMaxDegreeOfIndexNode(maxDegreeOfIndexNode);
+ }
+
+ @Test
+ public void testGetAllDevices1() throws IOException {
+ testGetAllDevices(2, 2);
+ }
+
+ @Test
+ public void testGetAllDevices2() throws IOException {
+ testGetAllDevices(2, 50);
+ }
+
+ @Test
+ public void testGetAllDevices3() throws IOException {
+ testGetAllDevices(50, 2);
+ }
+
+ @Test
+ public void testGetAllDevices4() throws IOException {
+ testGetAllDevices(50, 50);
+ }
+
+ public void testGetAllDevices(int deviceNum, int measurementNum) throws IOException {
+ FileGenerator.generateFile(10000, deviceNum, measurementNum);
+ TsFileSequenceReader fileReader = new TsFileSequenceReader(FILE_PATH);
+ ReadOnlyTsFile tsFile = new ReadOnlyTsFile(fileReader);
+
+ // test
+ TsFileSequenceReader reader = new TsFileSequenceReader(FILE_PATH);
+ List<String> devices = reader.getAllDevices();
+ Assert.assertEquals(deviceNum, devices.size());
+ for (int i = 0; i < deviceNum; i++) {
+ Assert.assertTrue(devices.contains("d" + i));
+ }
+
+ // after
+ tsFile.close();
+ FileGenerator.after();
+ }
+
+}
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/read/TsFileSequenceReaderTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/read/TsFileSequenceReaderTest.java
index c1c5d18..b4c5671 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/read/TsFileSequenceReaderTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/read/TsFileSequenceReaderTest.java
@@ -29,7 +29,6 @@ import org.apache.iotdb.tsfile.file.MetaMarker;
import org.apache.iotdb.tsfile.file.footer.ChunkGroupFooter;
import org.apache.iotdb.tsfile.file.header.ChunkHeader;
import org.apache.iotdb.tsfile.file.header.PageHeader;
-import org.apache.iotdb.tsfile.file.metadata.TsFileMetadata;
import org.apache.iotdb.tsfile.utils.FileGenerator;
import org.apache.iotdb.tsfile.utils.Pair;
import org.junit.After;
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/read/reader/ReaderTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/read/reader/ReaderTest.java
index 431b0e7..63b2f39 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/read/reader/ReaderTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/read/reader/ReaderTest.java
@@ -46,10 +46,12 @@ public class ReaderTest {
private static final String FILE_PATH = TsFileGeneratorForTest.outputDataFile;
private TsFileSequenceReader fileReader;
private MetadataQuerierByFileImpl metadataQuerierByFile;
- private int rowCount = 1000000;
+ private int maxDegreeOfIndexNode;
+ private final int rowCount = 1000000;
@Before
public void before() throws IOException {
+ maxDegreeOfIndexNode = TSFileDescriptor.getInstance().getConfig().getMaxDegreeOfIndexNode();
TSFileDescriptor.getInstance().getConfig().setTimeEncoder("TS_2DIFF");
TSFileDescriptor.getInstance().getConfig().setMaxDegreeOfIndexNode(3);
TsFileGeneratorForTest.generateFile(rowCount, 10 * 1024 * 1024, 10000);
@@ -60,7 +62,7 @@ public class ReaderTest {
@After
public void after() throws IOException {
fileReader.close();
- TSFileDescriptor.getInstance().getConfig().setMaxDegreeOfIndexNode(1024);
+ TSFileDescriptor.getInstance().getConfig().setMaxDegreeOfIndexNode(maxDegreeOfIndexNode);
TsFileGeneratorForTest.after();
}
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/utils/FileGenerator.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/utils/FileGenerator.java
index 2c14c57..e2e1b56 100755
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/utils/FileGenerator.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/utils/FileGenerator.java
@@ -22,6 +22,7 @@ import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
+import java.nio.file.Files;
import java.util.Scanner;
import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
@@ -32,8 +33,8 @@ import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
import org.apache.iotdb.tsfile.read.common.Path;
import org.apache.iotdb.tsfile.write.TsFileWriter;
import org.apache.iotdb.tsfile.write.record.TSRecord;
-import org.apache.iotdb.tsfile.write.schema.Schema;
import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
+import org.apache.iotdb.tsfile.write.schema.Schema;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -47,10 +48,10 @@ public class FileGenerator {
private static TsFileWriter innerWriter;
private static String inputDataFile;
private static String errorOutputDataFile;
+ private static final TSFileConfig config = TSFileDescriptor.getInstance().getConfig();
public static void generateFile(int rowCount, int maxNumberOfPointsInPage) throws IOException {
ROW_COUNT = rowCount;
- TSFileConfig config = TSFileDescriptor.getInstance().getConfig();
int oldMaxNumberOfPointsInPage = config.getMaxNumberOfPointsInPage();
config.setMaxNumberOfPointsInPage(maxNumberOfPointsInPage);
@@ -59,6 +60,17 @@ public class FileGenerator {
config.setMaxNumberOfPointsInPage(oldMaxNumberOfPointsInPage);
}
+ public static void generateFile(int maxNumberOfPointsInPage, int deviceNum,
+ int measurementNum) throws IOException {
+ ROW_COUNT = 1;
+ int oldMaxNumberOfPointsInPage = config.getMaxNumberOfPointsInPage();
+ config.setMaxNumberOfPointsInPage(maxNumberOfPointsInPage);
+
+ prepare(deviceNum, measurementNum);
+ write();
+ config.setMaxNumberOfPointsInPage(oldMaxNumberOfPointsInPage);
+ }
+
public static void generateFile() throws IOException {
generateFile(1000, 10);
}
@@ -70,6 +82,13 @@ public class FileGenerator {
generateSampleInputDataFile();
}
+ public static void prepare(int deviceNum, int measurementNum) throws IOException {
+ inputDataFile = TestConstant.BASE_OUTPUT_PATH.concat("perTestInputData");
+ errorOutputDataFile = TestConstant.BASE_OUTPUT_PATH.concat("perTestErrorOutputData.tsfile");
+ generateTestSchema(deviceNum, measurementNum);
+ generateSampleInputDataFile(deviceNum, measurementNum);
+ }
+
public static void after() {
File file = new File(inputDataFile);
if (file.exists()) {
@@ -143,6 +162,27 @@ public class FileGenerator {
fw.close();
}
+ static private void generateSampleInputDataFile(int deviceNum, int measurementNum)
+ throws IOException {
+ File file = new File(inputDataFile);
+ if (file.exists()) {
+ Files.delete(file.toPath());
+ }
+ if (!file.getParentFile().mkdirs()) {
+ LOG.info("Failed to create file folder {}", file.getParentFile());
+ }
+ FileWriter fw = new FileWriter(file);
+
+ long startTime = 1480562618000L;
+ for (int i = 0; i < deviceNum; i++) {
+ for (int j = 0; j < measurementNum; j++) {
+ String d = "d" + i + "," + startTime + ",s" + j + "," + 1;
+ fw.write(d + "\r\n");
+ }
+ }
+ fw.close();
+ }
+
static public void write() throws IOException {
File file = new File(outputDataFile);
File errorFile = new File(errorOutputDataFile);
@@ -153,7 +193,7 @@ public class FileGenerator {
errorFile.delete();
}
- innerWriter = new TsFileWriter(file, schema, TSFileDescriptor.getInstance().getConfig());
+ innerWriter = new TsFileWriter(file, schema, config);
// write
try {
@@ -166,13 +206,15 @@ public class FileGenerator {
private static void generateTestSchema() {
schema = new Schema();
- TSFileConfig conf = TSFileDescriptor.getInstance().getConfig();
schema.registerTimeseries(new Path("d1", "s1"),
- new MeasurementSchema("s1", TSDataType.INT32, TSEncoding.valueOf(conf.getValueEncoder())));
+ new MeasurementSchema("s1", TSDataType.INT32,
+ TSEncoding.valueOf(config.getValueEncoder())));
schema.registerTimeseries(new Path("d1", "s2"),
- new MeasurementSchema("s2", TSDataType.INT64, TSEncoding.valueOf(conf.getValueEncoder())));
+ new MeasurementSchema("s2", TSDataType.INT64,
+ TSEncoding.valueOf(config.getValueEncoder())));
schema.registerTimeseries(new Path("d1", "s3"),
- new MeasurementSchema("s3", TSDataType.INT64, TSEncoding.valueOf(conf.getValueEncoder())));
+ new MeasurementSchema("s3", TSDataType.INT64,
+ TSEncoding.valueOf(config.getValueEncoder())));
schema.registerTimeseries(new Path("d1", "s4"),
new MeasurementSchema("s4", TSDataType.TEXT, TSEncoding.PLAIN));
schema.registerTimeseries(new Path("d1", "s5"),
@@ -182,15 +224,29 @@ public class FileGenerator {
schema.registerTimeseries(new Path("d1", "s7"),
new MeasurementSchema("s7", TSDataType.DOUBLE, TSEncoding.RLE));
schema.registerTimeseries(new Path("d2", "s1"),
- new MeasurementSchema("s1", TSDataType.INT32, TSEncoding.valueOf(conf.getValueEncoder())));
+ new MeasurementSchema("s1", TSDataType.INT32,
+ TSEncoding.valueOf(config.getValueEncoder())));
schema.registerTimeseries(new Path("d2", "s2"),
- new MeasurementSchema("s2", TSDataType.INT64, TSEncoding.valueOf(conf.getValueEncoder())));
+ new MeasurementSchema("s2", TSDataType.INT64,
+ TSEncoding.valueOf(config.getValueEncoder())));
schema.registerTimeseries(new Path("d2", "s3"),
- new MeasurementSchema("s3", TSDataType.INT64, TSEncoding.valueOf(conf.getValueEncoder())));
+ new MeasurementSchema("s3", TSDataType.INT64,
+ TSEncoding.valueOf(config.getValueEncoder())));
schema.registerTimeseries(new Path("d2", "s4"),
new MeasurementSchema("s4", TSDataType.TEXT, TSEncoding.PLAIN));
}
+ private static void generateTestSchema(int deviceNum, int measurementNum) {
+ schema = new Schema();
+ for (int i = 0; i < deviceNum; i++) {
+ for (int j = 0; j < measurementNum; j++) {
+ schema.registerTimeseries(new Path("d" + i, "s" + j),
+ new MeasurementSchema("s" + j, TSDataType.INT32,
+ TSEncoding.valueOf(config.getValueEncoder())));
+ }
+ }
+ }
+
private static void writeToTsFile(Schema schema) throws IOException, WriteProcessException {
Scanner in = getDataFile(inputDataFile);
long lineCount = 0;
@@ -215,8 +271,7 @@ public class FileGenerator {
static private Scanner getDataFile(String path) {
File file = new File(path);
try {
- Scanner in = new Scanner(file);
- return in;
+ return new Scanner(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;