blob: 0a3636cc38b1e6e4c535beeec812e24f6488a1cf [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.iotdb.db.integration;
import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.engine.StorageEngine;
import org.apache.iotdb.db.engine.compaction.CompactionStrategy;
import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
import org.apache.iotdb.db.engine.storagegroup.timeindex.TimeIndexLevel;
import org.apache.iotdb.db.engine.storagegroup.virtualSg.HashVirtualPartitioner;
import org.apache.iotdb.db.exception.StorageEngineException;
import org.apache.iotdb.db.exception.metadata.IllegalPathException;
import org.apache.iotdb.db.metadata.PartialPath;
import org.apache.iotdb.db.utils.EnvironmentUtils;
import org.apache.iotdb.jdbc.Config;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
public class IoTDBLoadExternalTsfileIT {
private static final Logger LOGGER = LoggerFactory.getLogger(IoTDBLoadExternalTsfileIT.class);
private static final IoTDBConfig config = IoTDBDescriptor.getInstance().getConfig();
protected static String[] insertSequenceSqls =
new String[] {
"SET STORAGE GROUP TO root.vehicle",
"SET STORAGE GROUP TO root.test",
"CREATE TIMESERIES root.vehicle.d0.s0 WITH DATATYPE=INT32, ENCODING=RLE",
"CREATE TIMESERIES root.vehicle.d0.s1 WITH DATATYPE=TEXT, ENCODING=PLAIN",
"CREATE TIMESERIES root.vehicle.d1.s2 WITH DATATYPE=FLOAT, ENCODING=RLE",
"CREATE TIMESERIES root.vehicle.d1.s3 WITH DATATYPE=BOOLEAN, ENCODING=PLAIN",
"CREATE TIMESERIES root.test.d0.s0 WITH DATATYPE=INT32, ENCODING=RLE",
"CREATE TIMESERIES root.test.d0.s1 WITH DATATYPE=TEXT, ENCODING=PLAIN",
"CREATE TIMESERIES root.test.d1.g0.s0 WITH DATATYPE=INT32, ENCODING=RLE",
"insert into root.vehicle.d0(timestamp,s0) values(10,100)",
"insert into root.vehicle.d0(timestamp,s0,s1) values(12,101,'102')",
"insert into root.vehicle.d0(timestamp,s1) values(19,'103')",
"insert into root.vehicle.d1(timestamp,s2) values(11,104.0)",
"insert into root.vehicle.d1(timestamp,s2,s3) values(15,105.0,true)",
"insert into root.vehicle.d1(timestamp,s3) values(17,false)",
"insert into root.vehicle.d0(timestamp,s0) values(20,1000)",
"insert into root.test.d0(timestamp,s0) values(10,106)",
"insert into root.test.d0(timestamp,s0,s1) values(14,107,'108')",
"insert into root.test.d0(timestamp,s1) values(16,'109')",
"insert into root.test.d1.g0(timestamp,s0) values(1,110)",
"insert into root.test.d0(timestamp,s0) values(30,1006)",
"insert into root.test.d0(timestamp,s0,s1) values(34,1007,'1008')",
"insert into root.test.d0(timestamp,s1) values(36,'1090')",
"insert into root.test.d1.g0(timestamp,s0) values(10,1100)",
"flush",
"insert into root.test.d0(timestamp,s0) values(150,126)",
"insert into root.test.d0(timestamp,s0,s1) values(80,127,'128')",
"insert into root.test.d0(timestamp,s1) values(200,'129')",
"insert into root.test.d1.g0(timestamp,s0) values(140,430)",
"insert into root.test.d0(timestamp,s0) values(150,426)",
"flush"
};
private static String[] insertUnsequenceSqls =
new String[] {
"insert into root.vehicle.d0(timestamp,s0) values(6,120)",
"insert into root.vehicle.d0(timestamp,s0,s1) values(38,121,'122')",
"insert into root.vehicle.d0(timestamp,s1) values(9,'123')",
"insert into root.vehicle.d0(timestamp,s0) values(16,128)",
"insert into root.vehicle.d0(timestamp,s0,s1) values(18,189,'198')",
"insert into root.vehicle.d0(timestamp,s1) values(99,'1234')",
"insert into root.vehicle.d1(timestamp,s2) values(14,1024.0)",
"insert into root.vehicle.d1(timestamp,s2,s3) values(29,1205.0,true)",
"insert into root.vehicle.d1(timestamp,s3) values(33,true)",
"insert into root.test.d0(timestamp,s0) values(45,126)",
"insert into root.test.d0(timestamp,s0,s1) values(68,127,'128')",
"insert into root.test.d0(timestamp,s1) values(78,'129')",
"insert into root.test.d1.g0(timestamp,s0) values(14,430)",
"flush",
"insert into root.test.d0(timestamp,s0) values(20,426)",
"insert into root.test.d0(timestamp,s0,s1) values(13,427,'528')",
"insert into root.test.d0(timestamp,s1) values(2,'1209')",
"insert into root.test.d1.g0(timestamp,s0) values(4,330)",
"flush",
};
private static final String TIMESTAMP_STR = "Time";
private static final String VEHICLE_D0_S0_STR = "root.vehicle.d0.s0";
private static final String VEHICLE_D0_S1_STR = "root.vehicle.d0.s1";
private static final String VEHICLE_D0_S2_STR = "root.vehicle.d1.s2";
private static final String VEHICLE_D0_S3_STR = "root.vehicle.d1.s3";
private static final String TEST_D0_S0_STR = "root.test.d0.s0";
private static final String TEST_D0_S1_STR = "root.test.d0.s1";
private static final String TEST_D1_STR = "root.test.d1.g0.s0";
protected static int virtualPartitionNum = 0;
private static String[] deleteSqls =
new String[] {"DELETE STORAGE GROUP root.vehicle", "DELETE STORAGE GROUP root.test"};
@Before
public void setUp() throws Exception {
IoTDBDescriptor.getInstance()
.getConfig()
.setCompactionStrategy(CompactionStrategy.NO_COMPACTION);
virtualPartitionNum = IoTDBDescriptor.getInstance().getConfig().getVirtualStorageGroupNum();
IoTDBDescriptor.getInstance().getConfig().setVirtualStorageGroupNum(1);
HashVirtualPartitioner.getInstance().setStorageGroupNum(1);
EnvironmentUtils.closeStatMonitor();
EnvironmentUtils.envSetUp();
Class.forName(Config.JDBC_DRIVER_NAME);
prepareData(insertSequenceSqls);
}
@After
public void tearDown() throws Exception {
EnvironmentUtils.cleanEnv();
IoTDBDescriptor.getInstance()
.getConfig()
.setCompactionStrategy(CompactionStrategy.LEVEL_COMPACTION);
IoTDBDescriptor.getInstance().getConfig().setVirtualStorageGroupNum(virtualPartitionNum);
HashVirtualPartitioner.getInstance().setStorageGroupNum(virtualPartitionNum);
}
@Test
public void moveTsfileTest() throws SQLException {
try (Connection connection =
DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
Statement statement = connection.createStatement()) {
// move root.vehicle
List<TsFileResource> resources =
new ArrayList<>(
StorageEngine.getInstance()
.getProcessor(new PartialPath("root.vehicle"))
.getSequenceFileTreeSet());
assertEquals(1, resources.size());
File tmpDir =
new File(
resources.get(0).getTsFile().getParentFile().getParentFile(),
"tmp" + File.separator + new PartialPath("root.vehicle"));
if (!tmpDir.exists()) {
tmpDir.mkdirs();
}
for (TsFileResource resource : resources) {
statement.execute(String.format("move \"%s\" \"%s\"", resource.getTsFilePath(), tmpDir));
}
assertEquals(
0,
StorageEngine.getInstance()
.getProcessor(new PartialPath("root.vehicle"))
.getSequenceFileTreeSet()
.size());
assertNotNull(tmpDir.listFiles());
assertEquals(1, tmpDir.listFiles().length >> 1);
// move root.test
resources =
new ArrayList<>(
StorageEngine.getInstance()
.getProcessor(new PartialPath("root.test"))
.getSequenceFileTreeSet());
assertEquals(2, resources.size());
tmpDir =
new File(
resources.get(0).getTsFile().getParentFile().getParentFile(),
"tmp" + File.separator + new PartialPath("root.test"));
if (!tmpDir.exists()) {
tmpDir.mkdirs();
}
for (TsFileResource resource : resources) {
statement.execute(String.format("move \"%s\" \"%s\"", resource.getTsFilePath(), tmpDir));
}
assertEquals(
0,
StorageEngine.getInstance()
.getProcessor(new PartialPath("root.test"))
.getSequenceFileTreeSet()
.size());
assertNotNull(tmpDir.listFiles());
assertEquals(2, tmpDir.listFiles().length >> 1);
} catch (StorageEngineException | IllegalPathException e) {
Assert.fail();
}
}
@Test
public void loadSequenceTsfileTest() throws SQLException {
try (Connection connection =
DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
Statement statement = connection.createStatement()) {
// move root.vehicle
List<TsFileResource> resources =
new ArrayList<>(
StorageEngine.getInstance()
.getProcessor(new PartialPath("root.vehicle"))
.getSequenceFileTreeSet());
File tmpDir =
new File(
resources
.get(0)
.getTsFile()
.getParentFile()
.getParentFile()
.getParentFile()
.getParentFile(),
"tmp"
+ File.separator
+ new PartialPath("root.vehicle")
+ File.separator
+ "0"
+ File.separator
+ "0");
if (!tmpDir.exists()) {
tmpDir.mkdirs();
}
for (TsFileResource resource : resources) {
statement.execute(String.format("move \"%s\" \"%s\"", resource.getTsFilePath(), tmpDir));
}
// move root.test
resources =
new ArrayList<>(
StorageEngine.getInstance()
.getProcessor(new PartialPath("root.test"))
.getSequenceFileTreeSet());
tmpDir =
new File(
resources
.get(0)
.getTsFile()
.getParentFile()
.getParentFile()
.getParentFile()
.getParentFile(),
"tmp"
+ File.separator
+ new PartialPath("root.test")
+ File.separator
+ "0"
+ File.separator
+ "0");
if (!tmpDir.exists()) {
tmpDir.mkdirs();
}
for (TsFileResource resource : resources) {
statement.execute(String.format("move \"%s\" \"%s\"", resource.getTsFilePath(), tmpDir));
}
// load all tsfile in tmp dir
tmpDir =
new File(
resources
.get(0)
.getTsFile()
.getParentFile()
.getParentFile()
.getParentFile()
.getParentFile(),
"tmp");
statement.execute(String.format("load \"%s\"", tmpDir.getAbsolutePath()));
resources =
new ArrayList<>(
StorageEngine.getInstance()
.getProcessor(new PartialPath("root.vehicle"))
.getSequenceFileTreeSet());
assertEquals(1, resources.size());
resources =
new ArrayList<>(
StorageEngine.getInstance()
.getProcessor(new PartialPath("root.test"))
.getSequenceFileTreeSet());
assertEquals(2, resources.size());
assertNotNull(tmpDir.listFiles());
assertEquals(
0,
new File(
tmpDir,
new PartialPath("root.vehicle") + File.separator + "0" + File.separator + "0")
.listFiles()
.length);
assertEquals(
0,
new File(
tmpDir,
new PartialPath("root.test") + File.separator + "0" + File.separator + "0")
.listFiles()
.length);
} catch (StorageEngineException | IllegalPathException e) {
Assert.fail();
}
}
@Test
public void loadUnsequenceTsfileTest() throws SQLException {
prepareData(insertUnsequenceSqls);
String[] queryRes =
new String[] {
"1,null,null,null,null,null,null,110",
"2,null,null,null,null,null,1209,null",
"4,null,null,null,null,null,null,330",
"6,120,null,null,null,null,null,null",
"9,null,123,null,null,null,null,null",
"10,100,null,null,null,106,null,1100",
"11,null,null,104.0,null,null,null,null",
"12,101,102,null,null,null,null,null",
"13,null,null,null,null,427,528,null",
"14,null,null,1024.0,null,107,108,430",
"15,null,null,105.0,true,null,null,null",
"16,128,null,null,null,null,109,null",
"17,null,null,null,false,null,null,null",
"18,189,198,null,null,null,null,null",
"19,null,103,null,null,null,null,null",
"20,1000,null,null,null,426,null,null",
"29,null,null,1205.0,true,null,null,null",
"30,null,null,null,null,1006,null,null",
"33,null,null,null,true,null,null,null",
"34,null,null,null,null,1007,1008,null",
"36,null,null,null,null,null,1090,null",
"38,121,122,null,null,null,null,null",
"45,null,null,null,null,126,null,null",
"68,null,null,null,null,127,128,null",
"78,null,null,null,null,null,129,null",
"80,null,null,null,null,127,128,null",
"99,null,1234,null,null,null,null,null",
"140,null,null,null,null,null,null,430",
"150,null,null,null,null,426,null,null",
"200,null,null,null,null,null,129,null"
};
try (Connection connection =
DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
Statement statement = connection.createStatement()) {
// check query result
boolean hasResultSet = statement.execute("SELECT * FROM root");
Assert.assertTrue(hasResultSet);
try (ResultSet resultSet = statement.getResultSet()) {
int cnt = 0;
while (resultSet.next()) {
String queryString =
resultSet.getString(TIMESTAMP_STR)
+ ","
+ resultSet.getString(VEHICLE_D0_S0_STR)
+ ","
+ resultSet.getString(VEHICLE_D0_S1_STR)
+ ","
+ resultSet.getString(VEHICLE_D0_S2_STR)
+ ","
+ resultSet.getString(VEHICLE_D0_S3_STR)
+ ","
+ resultSet.getString(TEST_D0_S0_STR)
+ ","
+ resultSet.getString(TEST_D0_S1_STR)
+ ","
+ resultSet.getString(TEST_D1_STR);
Assert.assertEquals(queryRes[cnt++], queryString);
}
}
// move root.vehicle
List<TsFileResource> resources =
new ArrayList<>(
StorageEngine.getInstance()
.getProcessor(new PartialPath("root.vehicle"))
.getSequenceFileTreeSet());
assertEquals(2, resources.size());
File tmpDir =
new File(
resources.get(0).getTsFile().getParentFile().getParentFile().getParentFile(),
"tmp" + File.separator + new PartialPath("root.vehicle") + File.separator + "0");
if (!tmpDir.exists()) {
tmpDir.mkdirs();
}
for (TsFileResource resource : resources) {
statement.execute(String.format("move \"%s\" \"%s\"", resource.getTsFilePath(), tmpDir));
}
resources =
new ArrayList<>(
StorageEngine.getInstance()
.getProcessor(new PartialPath("root.vehicle"))
.getUnSequenceFileList());
assertEquals(1, resources.size());
for (TsFileResource resource : resources) {
statement.execute(String.format("move \"%s\" \"%s\"", resource.getTsFilePath(), tmpDir));
}
// move root.test
resources =
new ArrayList<>(
StorageEngine.getInstance()
.getProcessor(new PartialPath("root.test"))
.getSequenceFileTreeSet());
assertEquals(2, resources.size());
tmpDir = new File(tmpDir.getParentFile().getParentFile(), "root.test" + File.separator + "0");
if (!tmpDir.exists()) {
tmpDir.mkdirs();
}
for (TsFileResource resource : resources) {
statement.execute(String.format("move \"%s\" \"%s\"", resource.getTsFilePath(), tmpDir));
}
resources =
new ArrayList<>(
StorageEngine.getInstance()
.getProcessor(new PartialPath("root.test"))
.getUnSequenceFileList());
assertEquals(2, resources.size());
for (TsFileResource resource : resources) {
statement.execute(String.format("move \"%s\" \"%s\"", resource.getTsFilePath(), tmpDir));
}
// load all tsfile in tmp dir
tmpDir = tmpDir.getParentFile().getParentFile();
statement.execute(String.format("load \"%s\"", tmpDir.getAbsolutePath()));
assertEquals(
2,
StorageEngine.getInstance()
.getProcessor(new PartialPath("root.vehicle"))
.getSequenceFileTreeSet()
.size());
assertEquals(
1,
StorageEngine.getInstance()
.getProcessor(new PartialPath("root.vehicle"))
.getUnSequenceFileList()
.size());
if (config.getTimeIndexLevel().equals(TimeIndexLevel.DEVICE_TIME_INDEX)) {
if (StorageEngine.getInstance()
.getProcessor(new PartialPath("root.test"))
.getUnSequenceFileList()
.size()
== 1) {
assertEquals(
3,
StorageEngine.getInstance()
.getProcessor(new PartialPath("root.test"))
.getSequenceFileTreeSet()
.size());
} else {
assertEquals(
2,
StorageEngine.getInstance()
.getProcessor(new PartialPath("root.test"))
.getSequenceFileTreeSet()
.size());
}
} else if (config.getTimeIndexLevel().equals(TimeIndexLevel.FILE_TIME_INDEX)) {
assertEquals(
2,
StorageEngine.getInstance()
.getProcessor(new PartialPath("root.test"))
.getUnSequenceFileList()
.size());
assertEquals(
2,
StorageEngine.getInstance()
.getProcessor(new PartialPath("root.test"))
.getSequenceFileTreeSet()
.size());
}
assertNotNull(tmpDir.listFiles());
assertEquals(
0,
new File(tmpDir, new PartialPath("root.vehicle") + File.separator + "0")
.listFiles()
.length);
assertEquals(
0,
new File(tmpDir, new PartialPath("root.test") + File.separator + "0").listFiles().length);
// check query result
hasResultSet = statement.execute("SELECT * FROM root");
Assert.assertTrue(hasResultSet);
try (ResultSet resultSet = statement.getResultSet()) {
int cnt = 0;
while (resultSet.next()) {
String queryString =
resultSet.getString(TIMESTAMP_STR)
+ ","
+ resultSet.getString(VEHICLE_D0_S0_STR)
+ ","
+ resultSet.getString(VEHICLE_D0_S1_STR)
+ ","
+ resultSet.getString(VEHICLE_D0_S2_STR)
+ ","
+ resultSet.getString(VEHICLE_D0_S3_STR)
+ ","
+ resultSet.getString(TEST_D0_S0_STR)
+ ","
+ resultSet.getString(TEST_D0_S1_STR)
+ ","
+ resultSet.getString(TEST_D1_STR);
Assert.assertEquals(queryRes[cnt++], queryString);
}
}
} catch (StorageEngineException | IllegalPathException e) {
Assert.fail();
}
}
@Test
public void loadTsFileTestWithAutoCreateSchema() throws SQLException {
try (Connection connection =
DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
Statement statement = connection.createStatement()) {
// move root.vehicle
List<TsFileResource> resources =
new ArrayList<>(
StorageEngine.getInstance()
.getProcessor(new PartialPath("root.vehicle"))
.getSequenceFileTreeSet());
File tmpDir =
new File(
resources
.get(0)
.getTsFile()
.getParentFile()
.getParentFile()
.getParentFile()
.getParentFile(),
"tmp"
+ File.separator
+ "root.vehicle"
+ File.separator
+ "0"
+ File.separator
+ "0");
if (!tmpDir.exists()) {
tmpDir.mkdirs();
}
for (TsFileResource resource : resources) {
statement.execute(String.format("move \"%s\" \"%s\"", resource.getTsFilePath(), tmpDir));
}
// move root.test
resources =
new ArrayList<>(
StorageEngine.getInstance()
.getProcessor(new PartialPath("root.test"))
.getSequenceFileTreeSet());
tmpDir =
new File(
resources
.get(0)
.getTsFile()
.getParentFile()
.getParentFile()
.getParentFile()
.getParentFile(),
"tmp" + File.separator + "root.test" + File.separator + "0" + File.separator + "0");
if (!tmpDir.exists()) {
tmpDir.mkdirs();
}
for (TsFileResource resource : resources) {
statement.execute(String.format("move \"%s\" \"%s\"", resource.getTsFilePath(), tmpDir));
}
Set<String> expectedSet =
new HashSet<>(
Arrays.asList(
"root.vehicle.d0.s0,root.vehicle,INT32",
"root.vehicle.d0.s1,root.vehicle,TEXT",
"root.vehicle.d1.s2,root.vehicle,FLOAT",
"root.vehicle.d1.s3,root.vehicle,BOOLEAN",
"root.test.d0.s0,root.test,INT32",
"root.test.d0.s1,root.test,TEXT",
"root.test.d1.g0.s0,root.test,INT32"));
boolean hasResultSet = statement.execute("SHOW timeseries");
Assert.assertTrue(hasResultSet);
try (ResultSet resultSet = statement.getResultSet()) {
while (resultSet.next()) {
Assert.assertTrue(
expectedSet.contains(
resultSet.getString(1)
+ ","
+ resultSet.getString(3)
+ ","
+ resultSet.getString(4)));
}
}
// remove metadata
for (String sql : deleteSqls) {
statement.execute(sql);
}
// test not load metadata automatically, it will occur errors.
boolean hasError = false;
try {
statement.execute(
String.format("load \"%s\" autoregister=false,sglevel=1", tmpDir.getAbsolutePath()));
} catch (Exception e) {
hasError = true;
}
Assert.assertTrue(hasError);
// test load metadata automatically, it will succeed.
tmpDir = tmpDir.getParentFile().getParentFile().getParentFile();
statement.execute(
String.format("load \"%s\" autoregister=true,sglevel=1", tmpDir.getAbsolutePath()));
resources =
new ArrayList<>(
StorageEngine.getInstance()
.getProcessor(new PartialPath("root.vehicle"))
.getSequenceFileTreeSet());
assertEquals(1, resources.size());
resources =
new ArrayList<>(
StorageEngine.getInstance()
.getProcessor(new PartialPath("root.test"))
.getSequenceFileTreeSet());
assertEquals(2, resources.size());
assertEquals(2, tmpDir.listFiles().length);
for (File dir : tmpDir.listFiles()) {
assertEquals(0, dir.listFiles()[0].listFiles()[0].listFiles().length);
}
} catch (StorageEngineException | IllegalPathException e) {
e.printStackTrace();
Assert.fail();
}
}
@Test
public void loadTsFileTestWithVerifyMetadata() throws Exception {
try (Connection connection =
DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
Statement statement = connection.createStatement()) {
List<TsFileResource> resources =
new ArrayList<>(
StorageEngine.getInstance()
.getProcessor(new PartialPath("root.vehicle"))
.getSequenceFileTreeSet());
assertEquals(1, resources.size());
File vehicleTmpDir =
new File(
resources
.get(0)
.getTsFile()
.getParentFile()
.getParentFile()
.getParentFile()
.getParentFile(),
"tmp" + File.separator + "root.vehicle");
if (!vehicleTmpDir.exists()) {
vehicleTmpDir.mkdirs();
}
for (TsFileResource resource : resources) {
statement.execute("move \"" + resource.getTsFilePath() + "\" \"" + vehicleTmpDir + "\"");
}
resources =
new ArrayList<>(
StorageEngine.getInstance()
.getProcessor(new PartialPath("root.test"))
.getSequenceFileTreeSet());
assertEquals(2, resources.size());
File testTmpDir = new File(vehicleTmpDir.getParentFile(), "root.test");
if (!testTmpDir.exists()) {
testTmpDir.mkdirs();
}
for (TsFileResource resource : resources) {
statement.execute("move \"" + resource.getTsFilePath() + "\" \"" + testTmpDir + "\"");
}
for (String sql : deleteSqls) {
statement.execute(sql);
}
List<String> metaDataSqls =
new ArrayList<>(
Arrays.asList(
"SET STORAGE GROUP TO root.vehicle",
"SET STORAGE GROUP TO root.test",
"CREATE TIMESERIES root.vehicle.d0.s0 WITH DATATYPE=INT64, ENCODING=RLE",
"CREATE TIMESERIES root.vehicle.d0.s1 WITH DATATYPE=TEXT, ENCODING=PLAIN",
"CREATE TIMESERIES root.vehicle.d1.s2 WITH DATATYPE=FLOAT, ENCODING=RLE",
"CREATE TIMESERIES root.vehicle.d1.s3 WITH DATATYPE=BOOLEAN, ENCODING=PLAIN",
"CREATE TIMESERIES root.test.d0.s0 WITH DATATYPE=FLOAT, ENCODING=RLE",
"CREATE TIMESERIES root.test.d0.s1 WITH DATATYPE=TEXT, ENCODING=PLAIN",
"CREATE TIMESERIES root.test.d1.g0.s0 WITH DATATYPE=INT32, ENCODING=RLE"));
for (String sql : metaDataSqls) {
statement.execute(sql);
}
// load vehicle
boolean hasError = false;
try {
statement.execute("load \"" + vehicleTmpDir + "\"");
} catch (Exception e) {
hasError = true;
assertTrue(e.getMessage().contains("Fail to load TsFile"));
}
assertTrue(hasError);
statement.execute("load \"" + vehicleTmpDir + "\" verify=false");
assertEquals(
1,
StorageEngine.getInstance()
.getProcessor(new PartialPath("root.vehicle"))
.getSequenceFileTreeSet()
.size());
// load test
hasError = false;
try {
statement.execute("load \"" + testTmpDir + "\"");
} catch (Exception e) {
hasError = true;
assertTrue(e.getMessage().contains("Fail to load TsFile"));
}
assertTrue(hasError);
statement.execute("load \"" + testTmpDir + "\" verify=false");
assertEquals(
2,
StorageEngine.getInstance()
.getProcessor(new PartialPath("root.test"))
.getSequenceFileTreeSet()
.size());
} catch (Exception e) {
e.printStackTrace();
Assert.fail();
}
}
@Test
public void removeTsFileTest() throws SQLException {
try (Connection connection =
DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
Statement statement = connection.createStatement()) {
List<TsFileResource> resources =
new ArrayList<>(
StorageEngine.getInstance()
.getProcessor(new PartialPath("root.vehicle"))
.getSequenceFileTreeSet());
assertEquals(1, resources.size());
for (TsFileResource resource : resources) {
statement.execute(String.format("remove \"%s\"", resource.getTsFilePath()));
}
assertEquals(
0,
StorageEngine.getInstance()
.getProcessor(new PartialPath("root.vehicle"))
.getSequenceFileTreeSet()
.size());
resources =
new ArrayList<>(
StorageEngine.getInstance()
.getProcessor(new PartialPath("root.test"))
.getSequenceFileTreeSet());
assertEquals(2, resources.size());
for (TsFileResource resource : resources) {
statement.execute(String.format("remove \"%s\"", resource.getTsFilePath()));
}
assertEquals(
0,
StorageEngine.getInstance()
.getProcessor(new PartialPath("root.test"))
.getSequenceFileTreeSet()
.size());
} catch (StorageEngineException | IllegalPathException e) {
Assert.fail();
}
}
protected void prepareData(String[] sqls) {
try (Connection connection =
DriverManager.getConnection(
Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
Statement statement = connection.createStatement()) {
for (String sql : sqls) {
statement.execute(sql);
}
} catch (Exception e) {
LOGGER.error("Can not execute sql.", e);
fail();
}
}
}