This is an automated email from the ASF dual-hosted git repository. lta pushed a commit to branch reimpl_sync in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
commit eeb1e3c6e0156e3d7851331445ea8c5defadfb6b Author: lta <[email protected]> AuthorDate: Fri Aug 30 10:43:23 2019 +0800 add load log and clean up in receiver end --- .../iotdb/db/sync/receiver/load/FileLoader.java | 77 +- .../iotdb/db/sync/receiver/load/IFileLoader.java | 7 +- .../iotdb/db/sync/receiver/load/ILoadLogger.java | 18 + .../iotdb/db/sync/receiver/load/LoadLogger.java | 50 + .../db/sync/receiver/transfer/SyncServiceImpl.java | 9 +- .../apache/iotdb/db/sync/sender/conf/Constans.java | 1 + .../storagegroup/FileNodeManagerBenchmark.java | 2 +- .../iotdb/db/sync/sender/SingleClientSyncTest.java | 1192 ++++++++++---------- .../iotdb/db/sync/sender/SyncFileManagerTest.java | 748 ++++++------ .../java/org/apache/iotdb/db/utils/RandomNum.java | 70 ++ 10 files changed, 1178 insertions(+), 996 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/sync/receiver/load/FileLoader.java b/server/src/main/java/org/apache/iotdb/db/sync/receiver/load/FileLoader.java index 7681433..8db09c0 100644 --- a/server/src/main/java/org/apache/iotdb/db/sync/receiver/load/FileLoader.java +++ b/server/src/main/java/org/apache/iotdb/db/sync/receiver/load/FileLoader.java @@ -19,6 +19,7 @@ package org.apache.iotdb.db.sync.receiver.load; import java.io.File; +import java.io.IOException; import java.util.ArrayDeque; import org.apache.iotdb.db.sync.sender.conf.Constans; import org.slf4j.Logger; @@ -30,22 +31,28 @@ public class FileLoader implements IFileLoader { private static final int WAIT_TIME = 1000; - private File syncEndFile; + private String syncFolderPath; private String senderName; private ArrayDeque<LoadTask> queue = new ArrayDeque<>(); + private LoadLogger loadLog; + + private LoadType curType = LoadType.NONE; + private volatile boolean endSync = false; - private FileLoader(String senderName, String syncFolderPath) { + private FileLoader(String senderName, String syncFolderPath) throws IOException { this.senderName = senderName; - this.syncEndFile = new File(syncFolderPath, Constans.SYNC_END); + this.syncFolderPath = syncFolderPath; + this.loadLog = new LoadLogger(new File(syncFolderPath, Constans.LOAD_LOG_NAME)); FileLoaderManager.getInstance().addFileLoader(senderName, this); FileLoaderManager.getInstance().addLoadTaskRunner(loadTaskRunner); } - public static FileLoader createFileLoader(String senderName, String syncFolderPath) { + public static FileLoader createFileLoader(String senderName, String syncFolderPath) + throws IOException { return new FileLoader(senderName, syncFolderPath); } @@ -67,23 +74,23 @@ public class FileLoader implements IFileLoader { handleLoadTask(queue.poll()); } } - } catch (InterruptedException e) { - LOGGER.info("Close the run load task thread."); + } catch (InterruptedException | IOException e) { + LOGGER.error("Can not handle load task", e); } }; @Override - public void addDeletedFileName(String sgName, File deletedFile) { + public void addDeletedFileName(File deletedFile) { synchronized (queue) { - queue.add(new LoadTask(sgName, deletedFile, LoadType.DELETE)); + queue.add(new LoadTask(deletedFile, LoadType.DELETE)); queue.notify(); } } @Override - public void addTsfile(String sgName, File tsfile) { + public void addTsfile(File tsfile) { synchronized (queue) { - queue.add(new LoadTask(sgName, tsfile, LoadType.ADD)); + queue.add(new LoadTask(tsfile, LoadType.ADD)); queue.notify(); } } @@ -94,29 +101,63 @@ public class FileLoader implements IFileLoader { } @Override - public void handleLoadTask(LoadTask task) { + public void handleLoadTask(LoadTask task) throws IOException { + switch (task.type) { + case ADD: + loadDeletedFile(task.file); + break; + case DELETE: + loadNewTsfile(task.file); + break; + default: + LOGGER.error("Wrong load task type {}", task.type); + } + } + private void loadDeletedFile(File file) throws IOException { + if (curType != LoadType.DELETE) { + loadLog.startLoadDeletedFiles(); + curType = LoadType.DELETE; + } + // TODO load deleted file + loadLog.finishLoadDeletedFile(file); } + private void loadNewTsfile(File file) throws IOException { + if (curType != LoadType.ADD) { + loadLog.startLoadTsFiles(); + curType = LoadType.ADD; + } + // TODO load new tsfile + loadLog.finishLoadTsfile(file); + } + + @Override public void cleanUp() { - FileLoaderManager.getInstance().removeFileLoader(senderName); + try { + loadLog.close(); + new File(syncFolderPath, Constans.SYNC_LOG_NAME).deleteOnExit(); + new File(syncFolderPath, Constans.LOAD_LOG_NAME).deleteOnExit(); + new File(syncFolderPath, Constans.SYNC_END).deleteOnExit(); + FileLoaderManager.getInstance().removeFileLoader(senderName); + } catch (IOException e) { + LOGGER.error("Can not clean up sync resource.", e); + } } class LoadTask { - String sgName; - File file; - LoadType type; + private File file; + private LoadType type; - LoadTask(String sgName, File file, LoadType type) { - this.sgName = sgName; + LoadTask(File file, LoadType type) { this.file = file; this.type = type; } } private enum LoadType { - DELETE, ADD; + DELETE, ADD, NONE } } diff --git a/server/src/main/java/org/apache/iotdb/db/sync/receiver/load/IFileLoader.java b/server/src/main/java/org/apache/iotdb/db/sync/receiver/load/IFileLoader.java index 98aeca9..69f6fda 100644 --- a/server/src/main/java/org/apache/iotdb/db/sync/receiver/load/IFileLoader.java +++ b/server/src/main/java/org/apache/iotdb/db/sync/receiver/load/IFileLoader.java @@ -19,17 +19,18 @@ package org.apache.iotdb.db.sync.receiver.load; import java.io.File; +import java.io.IOException; import org.apache.iotdb.db.sync.receiver.load.FileLoader.LoadTask; public interface IFileLoader { - void addDeletedFileName(String sgName, File deletedFile); + void addDeletedFileName(File deletedFile); - void addTsfile(String sgName, File tsfile); + void addTsfile(File tsfile); void endSync(); - void handleLoadTask(LoadTask task); + void handleLoadTask(LoadTask task) throws IOException; void cleanUp(); } diff --git a/server/src/main/java/org/apache/iotdb/db/sync/receiver/load/ILoadLogger.java b/server/src/main/java/org/apache/iotdb/db/sync/receiver/load/ILoadLogger.java new file mode 100644 index 0000000..2cad379 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/sync/receiver/load/ILoadLogger.java @@ -0,0 +1,18 @@ +package org.apache.iotdb.db.sync.receiver.load; + +import java.io.File; +import java.io.IOException; + +public interface ILoadLogger { + + void startLoadDeletedFiles() throws IOException; + + void finishLoadDeletedFile(File file) throws IOException; + + void startLoadTsFiles() throws IOException; + + void finishLoadTsfile(File file) throws IOException; + + void close() throws IOException; + +} diff --git a/server/src/main/java/org/apache/iotdb/db/sync/receiver/load/LoadLogger.java b/server/src/main/java/org/apache/iotdb/db/sync/receiver/load/LoadLogger.java new file mode 100644 index 0000000..31b4c48 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/sync/receiver/load/LoadLogger.java @@ -0,0 +1,50 @@ +package org.apache.iotdb.db.sync.receiver.load; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; + +public class LoadLogger implements ILoadLogger { + + public static final String LOAD_DELETED_FILE_NAME_START = "load deleted files start"; + public static final String LOAD_TSFILE_START = "load tsfile start"; + private BufferedWriter bw; + + public LoadLogger(File logFile) throws IOException { + bw = new BufferedWriter(new FileWriter(logFile)); + } + + @Override + public void startLoadDeletedFiles() throws IOException { + bw.write(LOAD_DELETED_FILE_NAME_START); + bw.newLine(); + bw.flush(); + } + + @Override + public void finishLoadDeletedFile(File file) throws IOException { + bw.write(file.getAbsolutePath()); + bw.newLine(); + bw.flush(); + } + + @Override + public void startLoadTsFiles() throws IOException { + bw.write(LOAD_TSFILE_START); + bw.newLine(); + bw.flush(); + } + + @Override + public void finishLoadTsfile(File file) throws IOException { + bw.write(file.getAbsolutePath()); + bw.newLine(); + bw.flush(); + } + + @Override + public void close() throws IOException { + bw.close(); + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/sync/receiver/transfer/SyncServiceImpl.java b/server/src/main/java/org/apache/iotdb/db/sync/receiver/transfer/SyncServiceImpl.java index e2f45a5..525244d 100644 --- a/server/src/main/java/org/apache/iotdb/db/sync/receiver/transfer/SyncServiceImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/sync/receiver/transfer/SyncServiceImpl.java @@ -87,7 +87,7 @@ public class SyncServiceImpl implements SyncService.Iface { public ResultStatus check(String ipAddress, String uuid) { Thread.currentThread().setName(ThreadName.SYNC_SERVER.getName()); if (SyncUtils.verifyIPSegment(config.getIpWhiteList(), ipAddress)) { - senderName.set(ipAddress + "-" + uuid); + senderName.set(ipAddress + Constans.SYNC_DIR_NAME_SEPARATOR + uuid); if (checkRecovery()) { return getSuccessResult(); } else { @@ -156,7 +156,7 @@ public class SyncServiceImpl implements SyncService.Iface { try { syncLog.get().finishSyncDeletedFileName(new File(fileName)); FileLoaderManager.getInstance().getFileLoader(senderName.get()) - .addDeletedFileName(currentSG.get(), new File(fileName)); + .addDeletedFileName(new File(fileName)); } catch (IOException e) { logger.error("Can not sync deleted file", e); return getErrorResult( @@ -169,7 +169,7 @@ public class SyncServiceImpl implements SyncService.Iface { public ResultStatus initSyncData(String filename) throws TException { try { File file; - if (currentSG.get() == null) { + if (currentSG.get() == null) { // schema mlog.txt file file = new File(getSyncDataPath(), filename); } else { file = new File(getSyncDataPath(), currentSG.get() + File.separatorChar + filename); @@ -221,7 +221,7 @@ public class SyncServiceImpl implements SyncService.Iface { if (!currentFile.get().getName().endsWith(TsFileResource.RESOURCE_SUFFIX)) { syncLog.get().finishSyncTsfile(currentFile.get()); FileLoaderManager.getInstance().getFileLoader(senderName.get()) - .addTsfile(currentSG.get(), currentFile.get()); + .addTsfile(currentFile.get()); } } } @@ -306,6 +306,7 @@ public class SyncServiceImpl implements SyncService.Iface { try { syncLog.get().close(); new File(getSyncDataPath(), Constans.SYNC_END).createNewFile(); + FileLoaderManager.getInstance().getFileLoader(senderName.get()).endSync(); } catch (IOException e) { logger.error("Can not end sync", e); return getErrorResult(String.format("Can not end sync because %s", e.getMessage())); diff --git a/server/src/main/java/org/apache/iotdb/db/sync/sender/conf/Constans.java b/server/src/main/java/org/apache/iotdb/db/sync/sender/conf/Constans.java index 0825774..d3f8ff1 100644 --- a/server/src/main/java/org/apache/iotdb/db/sync/sender/conf/Constans.java +++ b/server/src/main/java/org/apache/iotdb/db/sync/sender/conf/Constans.java @@ -73,5 +73,6 @@ public class Constans { public static final String SYNC_END = "sync.end"; + public static final String LOAD_LOG_NAME = "load.log"; } diff --git a/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/FileNodeManagerBenchmark.java b/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/FileNodeManagerBenchmark.java index 7d16042..d98022e 100644 --- a/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/FileNodeManagerBenchmark.java +++ b/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/FileNodeManagerBenchmark.java @@ -27,7 +27,7 @@ import org.apache.iotdb.db.exception.MetadataErrorException; import org.apache.iotdb.db.exception.PathErrorException; import org.apache.iotdb.db.metadata.MManager; import org.apache.iotdb.db.qp.physical.crud.InsertPlan; -import org.apache.iotdb.db.sync.test.RandomNum; +import org.apache.iotdb.db.utils.RandomNum; import org.apache.iotdb.db.utils.EnvironmentUtils; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding; diff --git a/server/src/test/java/org/apache/iotdb/db/sync/sender/SingleClientSyncTest.java b/server/src/test/java/org/apache/iotdb/db/sync/sender/SingleClientSyncTest.java index 4a7ac7e..4a258a5 100644 --- a/server/src/test/java/org/apache/iotdb/db/sync/sender/SingleClientSyncTest.java +++ b/server/src/test/java/org/apache/iotdb/db/sync/sender/SingleClientSyncTest.java @@ -1,596 +1,596 @@ -/** - * 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.sync.sender; - -import static org.junit.Assert.fail; - -import java.io.File; -import java.io.IOException; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.HashSet; -import java.util.Set; -import org.apache.iotdb.db.conf.IoTDBConfig; -import org.apache.iotdb.db.conf.IoTDBDescriptor; -import org.apache.iotdb.db.exception.StartupException; -import org.apache.iotdb.db.exception.SyncConnectionException; -import org.apache.iotdb.db.integration.Constant; -import org.apache.iotdb.db.service.IoTDB; -import org.apache.iotdb.db.sync.sender.conf.Constans; -import org.apache.iotdb.db.sync.sender.conf.SyncSenderConfig; -import org.apache.iotdb.db.sync.sender.conf.SyncSenderDescriptor; -import org.apache.iotdb.db.sync.sender.transfer.DataTransferManager; -import org.apache.iotdb.db.utils.EnvironmentUtils; -import org.apache.iotdb.jdbc.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * The test is to run a complete sync function Before you run the test, make sure receiver has been - * cleaned up and inited. - */ -public class SingleClientSyncTest { - - DataTransferManager fileSenderImpl = DataTransferManager.getInstance(); - private IoTDBConfig conf = IoTDBDescriptor.getInstance().getConfig(); - private String serverIpTest = "192.168.130.7"; - private SyncSenderConfig config = SyncSenderDescriptor.getInstance().getConfig(); - private Set<String> dataSender = new HashSet<>(); - private Set<String> dataReceiver = new HashSet<>(); - private boolean success = true; - private IoTDB deamon; - private static final String[] sqls1 = 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.vehicle.d0(timestamp,s0,s1) values(22,1001,'1002')", - "insert into root.vehicle.d0(timestamp,s1) values(29,'1003')", - "insert into root.vehicle.d1(timestamp,s2) values(21,1004.0)", - "insert into root.vehicle.d1(timestamp,s2,s3) values(25,1005.0,true)", - "insert into root.vehicle.d1(timestamp,s3) values(27,true)", - "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)", "merge", "flush",}; - private static final String[] sqls2 = 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(15,126)", - "insert into root.test.d0(timestamp,s0,s1) values(8,127,'128')", - "insert into root.test.d0(timestamp,s1) values(20,'129')", - "insert into root.test.d1.g0(timestamp,s0) values(14,430)", - "insert into root.test.d0(timestamp,s0) values(150,426)", - "insert into root.test.d0(timestamp,s0,s1) values(80,427,'528')", - "insert into root.test.d0(timestamp,s1) values(2,'1209')", - "insert into root.test.d1.g0(timestamp,s0) values(4,330)", "merge", "flush",}; - private static final String[] sqls3 = new String[]{"SET STORAGE GROUP TO root.iotdb", - "SET STORAGE GROUP TO root.flush", - "CREATE TIMESERIES root.iotdb.d0.s0 WITH DATATYPE=INT32, ENCODING=RLE", - "CREATE TIMESERIES root.iotdb.d0.s1 WITH DATATYPE=TEXT, ENCODING=PLAIN", - "CREATE TIMESERIES root.iotdb.d1.s2 WITH DATATYPE=FLOAT, ENCODING=RLE", - "CREATE TIMESERIES root.iotdb.d1.s3 WITH DATATYPE=BOOLEAN, ENCODING=PLAIN", - "CREATE TIMESERIES root.flush.d0.s0 WITH DATATYPE=INT32, ENCODING=RLE", - "CREATE TIMESERIES root.flush.d0.s1 WITH DATATYPE=TEXT, ENCODING=PLAIN", - "CREATE TIMESERIES root.flush.d1.g0.s0 WITH DATATYPE=INT32, ENCODING=RLE", - "insert into root.iotdb.d0(timestamp,s0) values(3,100)", - "insert into root.iotdb.d0(timestamp,s0,s1) values(22,101,'102')", - "insert into root.iotdb.d0(timestamp,s1) values(24,'103')", - "insert into root.iotdb.d1(timestamp,s2) values(21,104.0)", - "insert into root.iotdb.d1(timestamp,s2,s3) values(25,105.0,true)", - "insert into root.iotdb.d1(timestamp,s3) values(27,false)", - "insert into root.iotdb.d0(timestamp,s0) values(30,1000)", - "insert into root.iotdb.d0(timestamp,s0,s1) values(202,101,'102')", - "insert into root.iotdb.d0(timestamp,s1) values(44,'103')", - "insert into root.iotdb.d1(timestamp,s2) values(1,404.0)", - "insert into root.iotdb.d1(timestamp,s2,s3) values(250,10.0,true)", - "insert into root.iotdb.d1(timestamp,s3) values(207,false)", - "insert into root.flush.d0(timestamp,s0) values(20,106)", - "insert into root.flush.d0(timestamp,s0,s1) values(14,107,'108')", - "insert into root.flush.d1.g0(timestamp,s0) values(1,110)", - "insert into root.flush.d0(timestamp,s0) values(200,1006)", - "insert into root.flush.d0(timestamp,s0,s1) values(1004,1007,'1080')", - "insert into root.flush.d1.g0(timestamp,s0) values(1000,910)", - "insert into root.vehicle.d0(timestamp,s0) values(209,130)", - "insert into root.vehicle.d0(timestamp,s0,s1) values(206,131,'132')", - "insert into root.vehicle.d0(timestamp,s1) values(70,'33')", - "insert into root.vehicle.d1(timestamp,s2) values(204,14.0)", - "insert into root.vehicle.d1(timestamp,s2,s3) values(29,135.0,false)", - "insert into root.vehicle.d1(timestamp,s3) values(14,false)", - "insert into root.test.d0(timestamp,s0) values(19,136)", - "insert into root.test.d0(timestamp,s0,s1) values(7,137,'138')", - "insert into root.test.d0(timestamp,s1) values(30,'139')", - "insert into root.test.d1.g0(timestamp,s0) values(4,150)", - "insert into root.test.d0(timestamp,s0) values(1900,1316)", - "insert into root.test.d0(timestamp,s0,s1) values(700,1307,'1038')", - "insert into root.test.d0(timestamp,s1) values(3000,'1309')", - "insert into root.test.d1.g0(timestamp,s0) values(400,1050)", "merge", "flush",}; - private boolean testFlag = Constant.testFlag; - private static final String SYNC_CLIENT = Constans.SYNC_SENDER; - private static final Logger logger = LoggerFactory.getLogger(SingleClientSyncTest.class); - - public static void main(String[] args) throws Exception { - SingleClientSyncTest singleClientPostBackTest = new SingleClientSyncTest(); - singleClientPostBackTest.setUp(); - singleClientPostBackTest.testPostback(); - singleClientPostBackTest.tearDown(); - System.exit(0); - } - - public void setConfig() { - config.setSenderFolderPath( - config.getDataDirectory() + SYNC_CLIENT + File.separator + Constans.UUID_FILE_NAME); - config.setLastFileInfo( - config.getDataDirectory() + SYNC_CLIENT + File.separator + Constans.LAST_LOCAL_FILE_NAME); - String[] sequenceFileDirectory = config.getSeqFileDirectory(); - String[] snapshots = new String[config.getSeqFileDirectory().length]; - for (int i = 0; i < config.getSeqFileDirectory().length; i++) { - sequenceFileDirectory[i] = new File(sequenceFileDirectory[i]).getAbsolutePath(); - if (!sequenceFileDirectory[i].endsWith(File.separator)) { - sequenceFileDirectory[i] = sequenceFileDirectory[i] + File.separator; - } - snapshots[i] = - sequenceFileDirectory[i] + SYNC_CLIENT + File.separator + Constans.DATA_SNAPSHOT_NAME - + File.separator; - } - config.setSnapshotPaths(snapshots); - config.setSeqFileDirectory(sequenceFileDirectory); - config.setServerIp(serverIpTest); - fileSenderImpl.setConfig(config); - } - - public void setUp() throws StartupException, IOException { - if (testFlag) { - EnvironmentUtils.closeStatMonitor(); - deamon = IoTDB.getInstance(); - deamon.active(); - EnvironmentUtils.envSetUp(); - } - setConfig(); - } - - public void tearDown() throws Exception { - if (testFlag) { - deamon.stop(); - EnvironmentUtils.cleanEnv(); - } - if (success) { - logger.debug("Test succeed!"); - } else { - logger.debug("Test failed!"); - } - } - - public void testPostback() throws IOException, SyncConnectionException, ClassNotFoundException, SQLException, InterruptedException { - if (testFlag) { - // the first time to sync - logger.debug("It's the first time to sync!"); - try { - Class.forName(Config.JDBC_DRIVER_NAME); - try (Connection connection = DriverManager - .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", - "root")) { - Statement statement = connection.createStatement(); - for (String sql : sqls1) { - statement.execute(sql); - } - statement.close(); - } - } catch (SQLException | ClassNotFoundException e) { - fail(e.getMessage()); - } - - fileSenderImpl.sync(); - - // Compare data of sender and receiver - dataSender.clear(); - try { - Class.forName(Config.JDBC_DRIVER_NAME); - try (Connection connection = DriverManager - .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", - "root")) { - Statement statement = connection.createStatement(); - boolean hasResultSet = statement.execute("select * from root.vehicle"); - if (hasResultSet) { - ResultSet res = statement.getResultSet(); - while (res.next()) { - dataSender.add(res.getString("Time") + res.getString("root.vehicle.d0.s0") - + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2") - + res.getString("root.vehicle.d1.s3")); - logger.debug(res.getString("Time") + " | " + res.getString("root.vehicle.d0.s0") - + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2") - + res.getString("root.vehicle.d1.s3")); - } - } - hasResultSet = statement.execute("select * from root.test"); - if (hasResultSet) { - ResultSet res = statement.getResultSet(); - while (res.next()) { - dataSender.add(res.getString("Time") + res.getString("root.test.d0.s0") - + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0")); - logger.debug(res.getString("Time") + " | " + res.getString("root.test.d0.s0") - + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0")); - } - } - statement.close(); - } catch (Exception e) { - logger.error("", e); - } - } catch (ClassNotFoundException e) { - fail(e.getMessage()); - Thread.currentThread().interrupt(); - } - - dataReceiver.clear(); - try { - Class.forName(Config.JDBC_DRIVER_NAME); - Connection connection = null; - try { - connection = DriverManager - .getConnection(String.format("jdbc:iotdb://%s:6667/", serverIpTest), "root", - "root"); - Statement statement = connection.createStatement(); - boolean hasResultSet = statement.execute("select * from root.vehicle"); - if (hasResultSet) { - ResultSet res = statement.getResultSet(); - while (res.next()) { - dataReceiver.add(res.getString("Time") + res.getString("root.vehicle.d0.s0") - + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2") - + res.getString("root.vehicle.d1.s3")); - logger.debug(res.getString("Time") + " | " + res.getString("root.vehicle.d0.s0") - + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2") - + res.getString("root.vehicle.d1.s3")); - } - } - - hasResultSet = statement.execute("select * from root.test"); - if (hasResultSet) { - ResultSet res = statement.getResultSet(); - while (res.next()) { - dataReceiver.add(res.getString("Time") + res.getString("root.test.d0.s0") - + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0")); - logger.debug(res.getString("Time") + " | " + res.getString("root.test.d0.s0") - + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0")); - } - } - statement.close(); - } catch (Exception e) { - logger.error("", e); - } finally { - if (connection != null) { - connection.close(); - } - } - } catch (ClassNotFoundException | SQLException e) { - fail(e.getMessage()); - Thread.currentThread().interrupt(); - } - logger.debug(String.valueOf(dataSender.size())); - logger.debug(String.valueOf(dataReceiver.size())); - logger.debug(dataSender.toString()); - logger.debug(dataReceiver.toString()); - if (!(dataSender.size() == dataReceiver.size() && dataSender.containsAll(dataReceiver))) { - success = false; - return; - } - - // the second time to sync - logger.debug("It's the second time to sync!"); - try { - Class.forName(Config.JDBC_DRIVER_NAME); - Connection connection = null; - try { - connection = DriverManager - .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", - "root"); - Statement statement = connection.createStatement(); - for (String sql : sqls2) { - statement.execute(sql); - } - statement.close(); - } catch (Exception e) { - logger.error("", e); - } finally { - if (connection != null) { - connection.close(); - } - } - } catch (ClassNotFoundException | SQLException e) { - fail(e.getMessage()); - Thread.currentThread().interrupt(); - } - - fileSenderImpl.sync(); - - // Compare data of sender and receiver - dataSender.clear(); - try { - Class.forName(Config.JDBC_DRIVER_NAME); - Connection connection = null; - try { - connection = DriverManager - .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", - "root"); - Statement statement = connection.createStatement(); - boolean hasResultSet = statement.execute("select * from root.vehicle"); - if (hasResultSet) { - ResultSet res = statement.getResultSet(); - while (res.next()) { - dataSender.add(res.getString("Time") + res.getString("root.vehicle.d0.s0") - + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2") - + res.getString("root.vehicle.d1.s3")); - logger.debug(res.getString("Time") + " | " + res.getString("root.vehicle.d0.s0") - + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2") - + res.getString("root.vehicle.d1.s3")); - } - } - hasResultSet = statement.execute("select * from root.test"); - if (hasResultSet) { - ResultSet res = statement.getResultSet(); - while (res.next()) { - dataSender.add(res.getString("Time") + res.getString("root.test.d0.s0") - + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0")); - logger.debug(res.getString("Time") + " | " + res.getString("root.test.d0.s0") - + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0")); - } - } - statement.close(); - } catch (Exception e) { - logger.error("", e); - } finally { - if (connection != null) { - connection.close(); - } - } - } catch (ClassNotFoundException | SQLException e) { - fail(e.getMessage()); - Thread.currentThread().interrupt(); - } - - dataReceiver.clear(); - { - Class.forName(Config.JDBC_DRIVER_NAME); - Connection connection = null; - try { - connection = DriverManager - .getConnection(String.format("jdbc:iotdb://%s:6667/", serverIpTest), "root", - "root"); - Statement statement = connection.createStatement(); - boolean hasResultSet = statement.execute("select * from root.vehicle"); - if (hasResultSet) { - ResultSet res = statement.getResultSet(); - while (res.next()) { - dataReceiver.add(res.getString("Time") + res.getString("root.vehicle.d0.s0") - + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2") - + res.getString("root.vehicle.d1.s3")); - logger.debug(res.getString("Time") + " | " + res.getString("root.vehicle.d0.s0") - + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2") - + res.getString("root.vehicle.d1.s3")); - } - } - hasResultSet = statement.execute("select * from root.test"); - if (hasResultSet) { - ResultSet res = statement.getResultSet(); - while (res.next()) { - dataReceiver.add(res.getString("Time") + res.getString("root.test.d0.s0") - + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0")); - logger.debug(res.getString("Time") + " | " + res.getString("root.test.d0.s0") - + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0")); - } - } - statement.close(); - } catch (Exception e) { - logger.error("", e); - } finally { - if (connection != null) { - connection.close(); - } - } - } - logger.debug(String.valueOf(dataSender.size())); - logger.debug(String.valueOf(dataReceiver.size())); - logger.debug(dataSender.toString()); - logger.debug(dataReceiver.toString()); - if (!(dataSender.size() == dataReceiver.size() && dataSender.containsAll(dataReceiver))) { - success = false; - return; - } - - // the third time to sync - logger.debug("It's the third time to sync!"); - try { - Class.forName(Config.JDBC_DRIVER_NAME); - try (Connection connection = DriverManager - .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", - "root")) { - Statement statement = connection.createStatement(); - for (String sql : sqls3) { - statement.execute(sql); - } - statement.close(); - } catch (Exception e) { - logger.error("", e); - } - } catch (ClassNotFoundException e) { - fail(e.getMessage()); - Thread.currentThread().interrupt(); - } - - fileSenderImpl.sync(); - - // Compare data of sender and receiver - dataSender.clear(); - try { - Class.forName(Config.JDBC_DRIVER_NAME); - try (Connection connection = DriverManager - .getConnection(String.format("jdbc:iotdb://%s:6667/", serverIpTest), "root", - "root")) { - Statement statement = connection.createStatement(); - boolean hasResultSet = statement.execute("select * from root.vehicle"); - if (hasResultSet) { - ResultSet res = statement.getResultSet(); - while (res.next()) { - dataSender.add(res.getString("Time") + res.getString("root.vehicle.d0.s0") - + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2") - + res.getString("root.vehicle.d1.s3")); - logger.debug(res.getString("Time") + " | " + res.getString("root.vehicle.d0.s0") - + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2") - + res.getString("root.vehicle.d1.s3")); - } - } - hasResultSet = statement.execute("select * from root.test"); - if (hasResultSet) { - ResultSet res = statement.getResultSet(); - while (res.next()) { - dataSender.add(res.getString("Time") + res.getString("root.test.d0.s0") - + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0")); - logger.debug(res.getString("Time") + " | " + res.getString("root.test.d0.s0") - + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0")); - } - } - hasResultSet = statement.execute("select * from root.flush"); - if (hasResultSet) { - ResultSet res = statement.getResultSet(); - while (res.next()) { - dataSender.add(res.getString("Time") + res.getString("root.flush.d0.s0") - + res.getString("root.flush.d0.s1") + res.getString("root.flush.d1.g0.s0")); - logger.debug(res.getString("Time") + " | " + res.getString("root.flush.d0.s0") - + res.getString("root.flush.d0.s1") + res.getString("root.flush.d1.g0.s0")); - } - } - hasResultSet = statement.execute("select * from root.iotdb"); - if (hasResultSet) { - ResultSet res = statement.getResultSet(); - while (res.next()) { - dataSender.add(res.getString("Time") + res.getString("root.iotdb.d0.s0") - + res.getString("root.iotdb.d0.s1") + res.getString("root.iotdb.d1.s2") - + res.getString("root.iotdb.d1.s3")); - logger.debug(res.getString("Time") + res.getString("root.iotdb.d0.s0") - + res.getString("root.iotdb.d0.s1") + res.getString("root.iotdb.d1.s2") - + res.getString("root.iotdb.d1.s3")); - } - } - statement.close(); - } catch (Exception e) { - logger.error("", e); - } - } catch (ClassNotFoundException e) { - fail(e.getMessage()); - Thread.currentThread().interrupt(); - } - - dataReceiver.clear(); - try { - Class.forName(Config.JDBC_DRIVER_NAME); - Connection connection = null; - try { - connection = DriverManager - .getConnection("jdbc:iotdb://192.168.130.8:6667/", "root", "root"); - Statement statement = connection.createStatement(); - boolean hasResultSet = statement.execute("select * from root.vehicle"); - if (hasResultSet) { - ResultSet res = statement.getResultSet(); - while (res.next()) { - dataReceiver.add(res.getString("Time") + res.getString("root.vehicle.d0.s0") - + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2") - + res.getString("root.vehicle.d1.s3")); - logger.debug(res.getString("Time") + " | " + res.getString("root.vehicle.d0.s0") - + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2") - + res.getString("root.vehicle.d1.s3")); - } - } - hasResultSet = statement.execute("select * from root.test"); - if (hasResultSet) { - ResultSet res = statement.getResultSet(); - while (res.next()) { - dataReceiver.add(res.getString("Time") + res.getString("root.test.d0.s0") - + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0")); - logger.debug(res.getString("Time") + " | " + res.getString("root.test.d0.s0") - + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0")); - } - } - hasResultSet = statement.execute("select * from root.flush"); - if (hasResultSet) { - ResultSet res = statement.getResultSet(); - while (res.next()) { - dataReceiver.add(res.getString("Time") + res.getString("root.flush.d0.s0") - + res.getString("root.flush.d0.s1") + res.getString("root.flush.d1.g0.s0")); - logger.debug(res.getString("Time") + " | " + res.getString("root.flush.d0.s0") - + res.getString("root.flush.d0.s1") + res.getString("root.flush.d1.g0.s0")); - } - } - hasResultSet = statement.execute("select * from root.iotdb"); - if (hasResultSet) { - ResultSet res = statement.getResultSet(); - while (res.next()) { - dataReceiver.add(res.getString("Time") + res.getString("root.iotdb.d0.s0") - + res.getString("root.iotdb.d0.s1") + res.getString("root.iotdb.d1.s2") - + res.getString("root.iotdb.d1.s3")); - logger.debug(res.getString("Time") + res.getString("root.iotdb.d0.s0") - + res.getString("root.iotdb.d0.s1") + res.getString("root.iotdb.d1.s2") - + res.getString("root.iotdb.d1.s3")); - } - } - statement.close(); - } catch (Exception e) { - logger.error("", e); - } finally { - if (connection != null) { - connection.close(); - } - } - } catch (ClassNotFoundException | SQLException e) { - fail(e.getMessage()); - Thread.currentThread().interrupt(); - } - logger.debug(String.valueOf(dataSender.size())); - logger.debug(String.valueOf(dataReceiver.size())); - logger.debug(String.valueOf(dataSender)); - logger.debug(String.valueOf(dataReceiver)); - if (!(dataSender.size() == dataReceiver.size() && dataSender.containsAll(dataReceiver))) { - success = false; - } - } - } -} +///** +// * 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.sync.sender; +// +//import static org.junit.Assert.fail; +// +//import java.io.File; +//import java.io.IOException; +//import java.sql.Connection; +//import java.sql.DriverManager; +//import java.sql.ResultSet; +//import java.sql.SQLException; +//import java.sql.Statement; +//import java.util.HashSet; +//import java.util.Set; +//import org.apache.iotdb.db.conf.IoTDBConfig; +//import org.apache.iotdb.db.conf.IoTDBDescriptor; +//import org.apache.iotdb.db.exception.StartupException; +//import org.apache.iotdb.db.exception.SyncConnectionException; +//import org.apache.iotdb.db.integration.Constant; +//import org.apache.iotdb.db.service.IoTDB; +//import org.apache.iotdb.db.sync.sender.conf.Constans; +//import org.apache.iotdb.db.sync.sender.conf.SyncSenderConfig; +//import org.apache.iotdb.db.sync.sender.conf.SyncSenderDescriptor; +//import org.apache.iotdb.db.sync.sender.transfer.DataTransferManager; +//import org.apache.iotdb.db.utils.EnvironmentUtils; +//import org.apache.iotdb.jdbc.Config; +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +// +///** +// * The test is to run a complete sync function Before you run the test, make sure receiver has been +// * cleaned up and inited. +// */ +//public class SingleClientSyncTest { +// +// DataTransferManager fileSenderImpl = DataTransferManager.getInstance(); +// private IoTDBConfig conf = IoTDBDescriptor.getInstance().getConfig(); +// private String serverIpTest = "192.168.130.7"; +// private SyncSenderConfig config = SyncSenderDescriptor.getInstance().getConfig(); +// private Set<String> dataSender = new HashSet<>(); +// private Set<String> dataReceiver = new HashSet<>(); +// private boolean success = true; +// private IoTDB deamon; +// private static final String[] sqls1 = 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.vehicle.d0(timestamp,s0,s1) values(22,1001,'1002')", +// "insert into root.vehicle.d0(timestamp,s1) values(29,'1003')", +// "insert into root.vehicle.d1(timestamp,s2) values(21,1004.0)", +// "insert into root.vehicle.d1(timestamp,s2,s3) values(25,1005.0,true)", +// "insert into root.vehicle.d1(timestamp,s3) values(27,true)", +// "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)", "merge", "flush",}; +// private static final String[] sqls2 = 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(15,126)", +// "insert into root.test.d0(timestamp,s0,s1) values(8,127,'128')", +// "insert into root.test.d0(timestamp,s1) values(20,'129')", +// "insert into root.test.d1.g0(timestamp,s0) values(14,430)", +// "insert into root.test.d0(timestamp,s0) values(150,426)", +// "insert into root.test.d0(timestamp,s0,s1) values(80,427,'528')", +// "insert into root.test.d0(timestamp,s1) values(2,'1209')", +// "insert into root.test.d1.g0(timestamp,s0) values(4,330)", "merge", "flush",}; +// private static final String[] sqls3 = new String[]{"SET STORAGE GROUP TO root.iotdb", +// "SET STORAGE GROUP TO root.flush", +// "CREATE TIMESERIES root.iotdb.d0.s0 WITH DATATYPE=INT32, ENCODING=RLE", +// "CREATE TIMESERIES root.iotdb.d0.s1 WITH DATATYPE=TEXT, ENCODING=PLAIN", +// "CREATE TIMESERIES root.iotdb.d1.s2 WITH DATATYPE=FLOAT, ENCODING=RLE", +// "CREATE TIMESERIES root.iotdb.d1.s3 WITH DATATYPE=BOOLEAN, ENCODING=PLAIN", +// "CREATE TIMESERIES root.flush.d0.s0 WITH DATATYPE=INT32, ENCODING=RLE", +// "CREATE TIMESERIES root.flush.d0.s1 WITH DATATYPE=TEXT, ENCODING=PLAIN", +// "CREATE TIMESERIES root.flush.d1.g0.s0 WITH DATATYPE=INT32, ENCODING=RLE", +// "insert into root.iotdb.d0(timestamp,s0) values(3,100)", +// "insert into root.iotdb.d0(timestamp,s0,s1) values(22,101,'102')", +// "insert into root.iotdb.d0(timestamp,s1) values(24,'103')", +// "insert into root.iotdb.d1(timestamp,s2) values(21,104.0)", +// "insert into root.iotdb.d1(timestamp,s2,s3) values(25,105.0,true)", +// "insert into root.iotdb.d1(timestamp,s3) values(27,false)", +// "insert into root.iotdb.d0(timestamp,s0) values(30,1000)", +// "insert into root.iotdb.d0(timestamp,s0,s1) values(202,101,'102')", +// "insert into root.iotdb.d0(timestamp,s1) values(44,'103')", +// "insert into root.iotdb.d1(timestamp,s2) values(1,404.0)", +// "insert into root.iotdb.d1(timestamp,s2,s3) values(250,10.0,true)", +// "insert into root.iotdb.d1(timestamp,s3) values(207,false)", +// "insert into root.flush.d0(timestamp,s0) values(20,106)", +// "insert into root.flush.d0(timestamp,s0,s1) values(14,107,'108')", +// "insert into root.flush.d1.g0(timestamp,s0) values(1,110)", +// "insert into root.flush.d0(timestamp,s0) values(200,1006)", +// "insert into root.flush.d0(timestamp,s0,s1) values(1004,1007,'1080')", +// "insert into root.flush.d1.g0(timestamp,s0) values(1000,910)", +// "insert into root.vehicle.d0(timestamp,s0) values(209,130)", +// "insert into root.vehicle.d0(timestamp,s0,s1) values(206,131,'132')", +// "insert into root.vehicle.d0(timestamp,s1) values(70,'33')", +// "insert into root.vehicle.d1(timestamp,s2) values(204,14.0)", +// "insert into root.vehicle.d1(timestamp,s2,s3) values(29,135.0,false)", +// "insert into root.vehicle.d1(timestamp,s3) values(14,false)", +// "insert into root.test.d0(timestamp,s0) values(19,136)", +// "insert into root.test.d0(timestamp,s0,s1) values(7,137,'138')", +// "insert into root.test.d0(timestamp,s1) values(30,'139')", +// "insert into root.test.d1.g0(timestamp,s0) values(4,150)", +// "insert into root.test.d0(timestamp,s0) values(1900,1316)", +// "insert into root.test.d0(timestamp,s0,s1) values(700,1307,'1038')", +// "insert into root.test.d0(timestamp,s1) values(3000,'1309')", +// "insert into root.test.d1.g0(timestamp,s0) values(400,1050)", "merge", "flush",}; +// private boolean testFlag = Constant.testFlag; +// private static final String SYNC_CLIENT = Constans.SYNC_SENDER; +// private static final Logger logger = LoggerFactory.getLogger(SingleClientSyncTest.class); +// +// public static void main(String[] args) throws Exception { +// SingleClientSyncTest singleClientPostBackTest = new SingleClientSyncTest(); +// singleClientPostBackTest.setUp(); +// singleClientPostBackTest.testPostback(); +// singleClientPostBackTest.tearDown(); +// System.exit(0); +// } +// +// public void setConfig() { +// config.setSenderFolderPath( +// config.getDataDirectory() + SYNC_CLIENT + File.separator + Constans.UUID_FILE_NAME); +// config.setLastFileInfo( +// config.getDataDirectory() + SYNC_CLIENT + File.separator + Constans.LAST_LOCAL_FILE_NAME); +// String[] sequenceFileDirectory = config.getSeqFileDirectory(); +// String[] snapshots = new String[config.getSeqFileDirectory().length]; +// for (int i = 0; i < config.getSeqFileDirectory().length; i++) { +// sequenceFileDirectory[i] = new File(sequenceFileDirectory[i]).getAbsolutePath(); +// if (!sequenceFileDirectory[i].endsWith(File.separator)) { +// sequenceFileDirectory[i] = sequenceFileDirectory[i] + File.separator; +// } +// snapshots[i] = +// sequenceFileDirectory[i] + SYNC_CLIENT + File.separator + Constans.DATA_SNAPSHOT_NAME +// + File.separator; +// } +// config.setSnapshotPaths(snapshots); +// config.setSeqFileDirectory(sequenceFileDirectory); +// config.setServerIp(serverIpTest); +// fileSenderImpl.setConfig(config); +// } +// +// public void setUp() throws StartupException, IOException { +// if (testFlag) { +// EnvironmentUtils.closeStatMonitor(); +// deamon = IoTDB.getInstance(); +// deamon.active(); +// EnvironmentUtils.envSetUp(); +// } +// setConfig(); +// } +// +// public void tearDown() throws Exception { +// if (testFlag) { +// deamon.stop(); +// EnvironmentUtils.cleanEnv(); +// } +// if (success) { +// logger.debug("Test succeed!"); +// } else { +// logger.debug("Test failed!"); +// } +// } +// +// public void testPostback() throws IOException, SyncConnectionException, ClassNotFoundException, SQLException, InterruptedException { +// if (testFlag) { +// // the first time to sync +// logger.debug("It's the first time to sync!"); +// try { +// Class.forName(Config.JDBC_DRIVER_NAME); +// try (Connection connection = DriverManager +// .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", +// "root")) { +// Statement statement = connection.createStatement(); +// for (String sql : sqls1) { +// statement.execute(sql); +// } +// statement.close(); +// } +// } catch (SQLException | ClassNotFoundException e) { +// fail(e.getMessage()); +// } +// +// fileSenderImpl.sync(); +// +// // Compare data of sender and receiver +// dataSender.clear(); +// try { +// Class.forName(Config.JDBC_DRIVER_NAME); +// try (Connection connection = DriverManager +// .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", +// "root")) { +// Statement statement = connection.createStatement(); +// boolean hasResultSet = statement.execute("select * from root.vehicle"); +// if (hasResultSet) { +// ResultSet res = statement.getResultSet(); +// while (res.next()) { +// dataSender.add(res.getString("Time") + res.getString("root.vehicle.d0.s0") +// + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2") +// + res.getString("root.vehicle.d1.s3")); +// logger.debug(res.getString("Time") + " | " + res.getString("root.vehicle.d0.s0") +// + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2") +// + res.getString("root.vehicle.d1.s3")); +// } +// } +// hasResultSet = statement.execute("select * from root.test"); +// if (hasResultSet) { +// ResultSet res = statement.getResultSet(); +// while (res.next()) { +// dataSender.add(res.getString("Time") + res.getString("root.test.d0.s0") +// + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0")); +// logger.debug(res.getString("Time") + " | " + res.getString("root.test.d0.s0") +// + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0")); +// } +// } +// statement.close(); +// } catch (Exception e) { +// logger.error("", e); +// } +// } catch (ClassNotFoundException e) { +// fail(e.getMessage()); +// Thread.currentThread().interrupt(); +// } +// +// dataReceiver.clear(); +// try { +// Class.forName(Config.JDBC_DRIVER_NAME); +// Connection connection = null; +// try { +// connection = DriverManager +// .getConnection(String.format("jdbc:iotdb://%s:6667/", serverIpTest), "root", +// "root"); +// Statement statement = connection.createStatement(); +// boolean hasResultSet = statement.execute("select * from root.vehicle"); +// if (hasResultSet) { +// ResultSet res = statement.getResultSet(); +// while (res.next()) { +// dataReceiver.add(res.getString("Time") + res.getString("root.vehicle.d0.s0") +// + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2") +// + res.getString("root.vehicle.d1.s3")); +// logger.debug(res.getString("Time") + " | " + res.getString("root.vehicle.d0.s0") +// + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2") +// + res.getString("root.vehicle.d1.s3")); +// } +// } +// +// hasResultSet = statement.execute("select * from root.test"); +// if (hasResultSet) { +// ResultSet res = statement.getResultSet(); +// while (res.next()) { +// dataReceiver.add(res.getString("Time") + res.getString("root.test.d0.s0") +// + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0")); +// logger.debug(res.getString("Time") + " | " + res.getString("root.test.d0.s0") +// + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0")); +// } +// } +// statement.close(); +// } catch (Exception e) { +// logger.error("", e); +// } finally { +// if (connection != null) { +// connection.close(); +// } +// } +// } catch (ClassNotFoundException | SQLException e) { +// fail(e.getMessage()); +// Thread.currentThread().interrupt(); +// } +// logger.debug(String.valueOf(dataSender.size())); +// logger.debug(String.valueOf(dataReceiver.size())); +// logger.debug(dataSender.toString()); +// logger.debug(dataReceiver.toString()); +// if (!(dataSender.size() == dataReceiver.size() && dataSender.containsAll(dataReceiver))) { +// success = false; +// return; +// } +// +// // the second time to sync +// logger.debug("It's the second time to sync!"); +// try { +// Class.forName(Config.JDBC_DRIVER_NAME); +// Connection connection = null; +// try { +// connection = DriverManager +// .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", +// "root"); +// Statement statement = connection.createStatement(); +// for (String sql : sqls2) { +// statement.execute(sql); +// } +// statement.close(); +// } catch (Exception e) { +// logger.error("", e); +// } finally { +// if (connection != null) { +// connection.close(); +// } +// } +// } catch (ClassNotFoundException | SQLException e) { +// fail(e.getMessage()); +// Thread.currentThread().interrupt(); +// } +// +// fileSenderImpl.sync(); +// +// // Compare data of sender and receiver +// dataSender.clear(); +// try { +// Class.forName(Config.JDBC_DRIVER_NAME); +// Connection connection = null; +// try { +// connection = DriverManager +// .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", +// "root"); +// Statement statement = connection.createStatement(); +// boolean hasResultSet = statement.execute("select * from root.vehicle"); +// if (hasResultSet) { +// ResultSet res = statement.getResultSet(); +// while (res.next()) { +// dataSender.add(res.getString("Time") + res.getString("root.vehicle.d0.s0") +// + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2") +// + res.getString("root.vehicle.d1.s3")); +// logger.debug(res.getString("Time") + " | " + res.getString("root.vehicle.d0.s0") +// + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2") +// + res.getString("root.vehicle.d1.s3")); +// } +// } +// hasResultSet = statement.execute("select * from root.test"); +// if (hasResultSet) { +// ResultSet res = statement.getResultSet(); +// while (res.next()) { +// dataSender.add(res.getString("Time") + res.getString("root.test.d0.s0") +// + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0")); +// logger.debug(res.getString("Time") + " | " + res.getString("root.test.d0.s0") +// + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0")); +// } +// } +// statement.close(); +// } catch (Exception e) { +// logger.error("", e); +// } finally { +// if (connection != null) { +// connection.close(); +// } +// } +// } catch (ClassNotFoundException | SQLException e) { +// fail(e.getMessage()); +// Thread.currentThread().interrupt(); +// } +// +// dataReceiver.clear(); +// { +// Class.forName(Config.JDBC_DRIVER_NAME); +// Connection connection = null; +// try { +// connection = DriverManager +// .getConnection(String.format("jdbc:iotdb://%s:6667/", serverIpTest), "root", +// "root"); +// Statement statement = connection.createStatement(); +// boolean hasResultSet = statement.execute("select * from root.vehicle"); +// if (hasResultSet) { +// ResultSet res = statement.getResultSet(); +// while (res.next()) { +// dataReceiver.add(res.getString("Time") + res.getString("root.vehicle.d0.s0") +// + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2") +// + res.getString("root.vehicle.d1.s3")); +// logger.debug(res.getString("Time") + " | " + res.getString("root.vehicle.d0.s0") +// + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2") +// + res.getString("root.vehicle.d1.s3")); +// } +// } +// hasResultSet = statement.execute("select * from root.test"); +// if (hasResultSet) { +// ResultSet res = statement.getResultSet(); +// while (res.next()) { +// dataReceiver.add(res.getString("Time") + res.getString("root.test.d0.s0") +// + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0")); +// logger.debug(res.getString("Time") + " | " + res.getString("root.test.d0.s0") +// + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0")); +// } +// } +// statement.close(); +// } catch (Exception e) { +// logger.error("", e); +// } finally { +// if (connection != null) { +// connection.close(); +// } +// } +// } +// logger.debug(String.valueOf(dataSender.size())); +// logger.debug(String.valueOf(dataReceiver.size())); +// logger.debug(dataSender.toString()); +// logger.debug(dataReceiver.toString()); +// if (!(dataSender.size() == dataReceiver.size() && dataSender.containsAll(dataReceiver))) { +// success = false; +// return; +// } +// +// // the third time to sync +// logger.debug("It's the third time to sync!"); +// try { +// Class.forName(Config.JDBC_DRIVER_NAME); +// try (Connection connection = DriverManager +// .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", +// "root")) { +// Statement statement = connection.createStatement(); +// for (String sql : sqls3) { +// statement.execute(sql); +// } +// statement.close(); +// } catch (Exception e) { +// logger.error("", e); +// } +// } catch (ClassNotFoundException e) { +// fail(e.getMessage()); +// Thread.currentThread().interrupt(); +// } +// +// fileSenderImpl.sync(); +// +// // Compare data of sender and receiver +// dataSender.clear(); +// try { +// Class.forName(Config.JDBC_DRIVER_NAME); +// try (Connection connection = DriverManager +// .getConnection(String.format("jdbc:iotdb://%s:6667/", serverIpTest), "root", +// "root")) { +// Statement statement = connection.createStatement(); +// boolean hasResultSet = statement.execute("select * from root.vehicle"); +// if (hasResultSet) { +// ResultSet res = statement.getResultSet(); +// while (res.next()) { +// dataSender.add(res.getString("Time") + res.getString("root.vehicle.d0.s0") +// + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2") +// + res.getString("root.vehicle.d1.s3")); +// logger.debug(res.getString("Time") + " | " + res.getString("root.vehicle.d0.s0") +// + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2") +// + res.getString("root.vehicle.d1.s3")); +// } +// } +// hasResultSet = statement.execute("select * from root.test"); +// if (hasResultSet) { +// ResultSet res = statement.getResultSet(); +// while (res.next()) { +// dataSender.add(res.getString("Time") + res.getString("root.test.d0.s0") +// + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0")); +// logger.debug(res.getString("Time") + " | " + res.getString("root.test.d0.s0") +// + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0")); +// } +// } +// hasResultSet = statement.execute("select * from root.flush"); +// if (hasResultSet) { +// ResultSet res = statement.getResultSet(); +// while (res.next()) { +// dataSender.add(res.getString("Time") + res.getString("root.flush.d0.s0") +// + res.getString("root.flush.d0.s1") + res.getString("root.flush.d1.g0.s0")); +// logger.debug(res.getString("Time") + " | " + res.getString("root.flush.d0.s0") +// + res.getString("root.flush.d0.s1") + res.getString("root.flush.d1.g0.s0")); +// } +// } +// hasResultSet = statement.execute("select * from root.iotdb"); +// if (hasResultSet) { +// ResultSet res = statement.getResultSet(); +// while (res.next()) { +// dataSender.add(res.getString("Time") + res.getString("root.iotdb.d0.s0") +// + res.getString("root.iotdb.d0.s1") + res.getString("root.iotdb.d1.s2") +// + res.getString("root.iotdb.d1.s3")); +// logger.debug(res.getString("Time") + res.getString("root.iotdb.d0.s0") +// + res.getString("root.iotdb.d0.s1") + res.getString("root.iotdb.d1.s2") +// + res.getString("root.iotdb.d1.s3")); +// } +// } +// statement.close(); +// } catch (Exception e) { +// logger.error("", e); +// } +// } catch (ClassNotFoundException e) { +// fail(e.getMessage()); +// Thread.currentThread().interrupt(); +// } +// +// dataReceiver.clear(); +// try { +// Class.forName(Config.JDBC_DRIVER_NAME); +// Connection connection = null; +// try { +// connection = DriverManager +// .getConnection("jdbc:iotdb://192.168.130.8:6667/", "root", "root"); +// Statement statement = connection.createStatement(); +// boolean hasResultSet = statement.execute("select * from root.vehicle"); +// if (hasResultSet) { +// ResultSet res = statement.getResultSet(); +// while (res.next()) { +// dataReceiver.add(res.getString("Time") + res.getString("root.vehicle.d0.s0") +// + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2") +// + res.getString("root.vehicle.d1.s3")); +// logger.debug(res.getString("Time") + " | " + res.getString("root.vehicle.d0.s0") +// + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2") +// + res.getString("root.vehicle.d1.s3")); +// } +// } +// hasResultSet = statement.execute("select * from root.test"); +// if (hasResultSet) { +// ResultSet res = statement.getResultSet(); +// while (res.next()) { +// dataReceiver.add(res.getString("Time") + res.getString("root.test.d0.s0") +// + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0")); +// logger.debug(res.getString("Time") + " | " + res.getString("root.test.d0.s0") +// + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0")); +// } +// } +// hasResultSet = statement.execute("select * from root.flush"); +// if (hasResultSet) { +// ResultSet res = statement.getResultSet(); +// while (res.next()) { +// dataReceiver.add(res.getString("Time") + res.getString("root.flush.d0.s0") +// + res.getString("root.flush.d0.s1") + res.getString("root.flush.d1.g0.s0")); +// logger.debug(res.getString("Time") + " | " + res.getString("root.flush.d0.s0") +// + res.getString("root.flush.d0.s1") + res.getString("root.flush.d1.g0.s0")); +// } +// } +// hasResultSet = statement.execute("select * from root.iotdb"); +// if (hasResultSet) { +// ResultSet res = statement.getResultSet(); +// while (res.next()) { +// dataReceiver.add(res.getString("Time") + res.getString("root.iotdb.d0.s0") +// + res.getString("root.iotdb.d0.s1") + res.getString("root.iotdb.d1.s2") +// + res.getString("root.iotdb.d1.s3")); +// logger.debug(res.getString("Time") + res.getString("root.iotdb.d0.s0") +// + res.getString("root.iotdb.d0.s1") + res.getString("root.iotdb.d1.s2") +// + res.getString("root.iotdb.d1.s3")); +// } +// } +// statement.close(); +// } catch (Exception e) { +// logger.error("", e); +// } finally { +// if (connection != null) { +// connection.close(); +// } +// } +// } catch (ClassNotFoundException | SQLException e) { +// fail(e.getMessage()); +// Thread.currentThread().interrupt(); +// } +// logger.debug(String.valueOf(dataSender.size())); +// logger.debug(String.valueOf(dataReceiver.size())); +// logger.debug(String.valueOf(dataSender)); +// logger.debug(String.valueOf(dataReceiver)); +// if (!(dataSender.size() == dataReceiver.size() && dataSender.containsAll(dataReceiver))) { +// success = false; +// } +// } +// } +//} diff --git a/server/src/test/java/org/apache/iotdb/db/sync/sender/SyncFileManagerTest.java b/server/src/test/java/org/apache/iotdb/db/sync/sender/SyncFileManagerTest.java index 322dfe0..354ef74 100644 --- a/server/src/test/java/org/apache/iotdb/db/sync/sender/SyncFileManagerTest.java +++ b/server/src/test/java/org/apache/iotdb/db/sync/sender/SyncFileManagerTest.java @@ -1,374 +1,374 @@ -/** - * 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.sync.sender; - -import java.io.File; -import java.io.IOException; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Random; -import java.util.Set; -import org.apache.iotdb.db.sync.sender.conf.Constans; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class SyncFileManagerTest { - - private static final String POST_BACK_DIRECTORY_TEST = Constans.SYNC_SENDER + File.separator; - private static final String LAST_FILE_INFO_TEST = - POST_BACK_DIRECTORY_TEST + Constans.LAST_LOCAL_FILE_NAME; - private static final String SENDER_FILE_PATH_TEST = POST_BACK_DIRECTORY_TEST + "data"; - private SyncFileManager manager = SyncFileManager.getInstance(); - private static final Logger logger = LoggerFactory.getLogger(SyncFileManagerTest.class); - - @Before - public void setUp() throws IOException, InterruptedException { - File file = new File(LAST_FILE_INFO_TEST); - if (!file.getParentFile().exists()) { - file.getParentFile().mkdirs(); - } - if (!file.exists() && !file.createNewFile()) { - logger.error("Can not create new file {}", file.getPath()); - } - file = new File(SENDER_FILE_PATH_TEST); - if (!file.exists()) { - file.mkdirs(); - } - manager.setCurrentLocalFiles(new HashMap<>()); - } - - @After - public void tearDown() throws InterruptedException { - delete(new File(POST_BACK_DIRECTORY_TEST)); - new File(POST_BACK_DIRECTORY_TEST).delete(); - } - - public void delete(File file) { - if (file.isFile() || file.list().length == 0) { - file.delete(); - } else { - File[] files = file.listFiles(); - for (File f : files) { - delete(f); - f.delete(); - } - } - } - - @Test // It tests two classes : backupNowLocalFileInfo and getLastLocalFileList - public void testBackupCurrentLocalFileInfo() throws IOException { - Map<String, Set<String>> allFileList = new HashMap<>(); - - Random r = new Random(0); - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 5; j++) { - if (!allFileList.containsKey(String.valueOf(i))) { - allFileList.put(String.valueOf(i), new HashSet<>()); - } - String rand = String.valueOf(r.nextInt(10000)); - String fileName = - SENDER_FILE_PATH_TEST + File.separator + i + File.separator + rand; - File file = new File(fileName); - allFileList.get(String.valueOf(i)).add(file.getPath()); - if (!file.getParentFile().exists()) { - file.getParentFile().mkdirs(); - } - if (!file.exists() && !file.createNewFile()) { - logger.error("Can not create new file {}", file.getPath()); - } - } - } - Set<String> lastFileList; - - // lastFileList is empty - manager.getLastLocalFileList(LAST_FILE_INFO_TEST); - lastFileList = manager.getLastLocalFiles(); - assert (lastFileList.isEmpty()); - - // add some files - manager.getCurrentLocalFileList(new String[]{SENDER_FILE_PATH_TEST}); - manager.backupNowLocalFileInfo(LAST_FILE_INFO_TEST); - manager.getLastLocalFileList(LAST_FILE_INFO_TEST); - lastFileList = manager.getLastLocalFiles(); - for (Entry<String, Set<String>> entry : allFileList.entrySet()) { - assert (lastFileList.containsAll(entry.getValue())); - } - - // add some files and delete some files - r = new Random(1); - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 5; j++) { - if (!allFileList.containsKey(String.valueOf(i))) { - allFileList.put(String.valueOf(i), new HashSet<>()); - } - String rand = String.valueOf(r.nextInt(10000)); - String fileName = - SENDER_FILE_PATH_TEST + File.separator + i + File.separator + rand; - File file = new File(fileName); - allFileList.get(String.valueOf(i)).add(file.getPath()); - if (!file.getParentFile().exists()) { - file.getParentFile().mkdirs(); - } - if (!file.exists() && !file.createNewFile()) { - logger.error("Can not create new file {}", file.getPath()); - } - } - } - int count = 0; - Map<String, Set<String>> deleteFile = new HashMap<>(); - for (Entry<String, Set<String>> entry : allFileList.entrySet()) { - deleteFile.put(entry.getKey(), new HashSet<>()); - for (String path : entry.getValue()) { - count++; - if (count % 3 == 0) { - deleteFile.get(entry.getKey()).add(path); - } - } - } - for (Entry<String, Set<String>> entry : deleteFile.entrySet()) { - for (String path : entry.getValue()) { - new File(path).delete(); - allFileList.get(entry.getKey()).remove(path); - } - } - manager.getCurrentLocalFileList(new String[]{SENDER_FILE_PATH_TEST}); - manager.backupNowLocalFileInfo(LAST_FILE_INFO_TEST); - manager.getLastLocalFileList(LAST_FILE_INFO_TEST); - lastFileList = manager.getLastLocalFiles(); - for (Entry<String, Set<String>> entry : allFileList.entrySet()) { - assert (lastFileList.containsAll(entry.getValue())); - } - } - - @Test - public void testGetCurrentLocalFileList() throws IOException { - Map<String, Set<String>> allFileList = new HashMap<>(); - Map<String, Set<String>> fileList; - - // nowLocalList is empty - manager.getCurrentLocalFileList(new String[]{SENDER_FILE_PATH_TEST}); - fileList = manager.getCurrentLocalFiles(); - assert (isEmpty(fileList)); - - // add some files - Random r = new Random(0); - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 5; j++) { - if (!allFileList.containsKey(String.valueOf(i))) { - allFileList.put(String.valueOf(i), new HashSet<>()); - } - String rand = String.valueOf(r.nextInt(10000)); - String fileName = - SENDER_FILE_PATH_TEST + File.separator + i + File.separator + rand; - File file = new File(fileName); - allFileList.get(String.valueOf(i)).add(file.getPath()); - if (!file.getParentFile().exists()) { - file.getParentFile().mkdirs(); - } - if (!file.exists() && !file.createNewFile()) { - logger.error("Can not create new file {}", file.getPath()); - } - } - } - manager.getCurrentLocalFileList(new String[]{SENDER_FILE_PATH_TEST}); - fileList = manager.getCurrentLocalFiles(); - assert (allFileList.size() == fileList.size()); - for (Entry<String, Set<String>> entry : fileList.entrySet()) { - assert (allFileList.containsKey(entry.getKey())); - assert (allFileList.get(entry.getKey()).containsAll(entry.getValue())); - } - - // delete some files and add some files - int count = 0; - Map<String, Set<String>> deleteFile = new HashMap<>(); - for (Entry<String, Set<String>> entry : allFileList.entrySet()) { - deleteFile.put(entry.getKey(), new HashSet<>()); - for (String path : entry.getValue()) { - count++; - if (count % 3 == 0) { - deleteFile.get(entry.getKey()).add(path); - } - } - } - for (Entry<String, Set<String>> entry : deleteFile.entrySet()) { - for (String path : entry.getValue()) { - new File(path).delete(); - allFileList.get(entry.getKey()).remove(path); - } - } - r = new Random(1); - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 5; j++) { - if (!allFileList.containsKey(String.valueOf(i))) { - allFileList.put(String.valueOf(i), new HashSet<>()); - } - String rand = String.valueOf(r.nextInt(10000)); - String fileName = - SENDER_FILE_PATH_TEST + File.separator + i + File.separator + rand; - File file = new File(fileName); - allFileList.get(String.valueOf(i)).add(file.getPath()); - if (!file.getParentFile().exists()) { - file.getParentFile().mkdirs(); - } - if (!file.exists() && !file.createNewFile()) { - logger.error("Can not create new file {}", file.getPath()); - } - } - } - manager.setCurrentLocalFiles(new HashMap<>()); - manager.getCurrentLocalFileList(new String[]{SENDER_FILE_PATH_TEST}); - fileList = manager.getCurrentLocalFiles(); - assert (allFileList.size() == fileList.size()); - for (Entry<String, Set<String>> entry : fileList.entrySet()) { - assert (allFileList.containsKey(entry.getKey())); - logger.debug("allFileList"); - for (String a : allFileList.get(entry.getKey())) { - logger.debug(a); - } - logger.debug("FileList"); - for (String a : entry.getValue()) { - logger.debug(a); - } - assert (allFileList.get(entry.getKey()).containsAll(entry.getValue())); - } - } - - @Test - public void testGetValidFileList() throws IOException { - Map<String, Set<String>> allFileList; - Map<String, Set<String>> newFileList = new HashMap<>(); - Map<String, Set<String>> sendingFileList; - Set<String> lastLocalList; - - // nowSendingList is empty - - manager.setCurrentLocalFiles(new HashMap<>()); - manager.getCurrentLocalFileList(new String[]{SENDER_FILE_PATH_TEST}); - allFileList = manager.getCurrentLocalFiles(); - manager.getLastLocalFileList(LAST_FILE_INFO_TEST); - lastLocalList = manager.getLastLocalFiles(); - manager.getValidFileList(); - assert (lastLocalList.isEmpty()); - assert (isEmpty(allFileList)); - - // add some files - newFileList.clear(); - manager.backupNowLocalFileInfo(LAST_FILE_INFO_TEST); - Random r = new Random(0); - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 5; j++) { - if (!allFileList.containsKey(String.valueOf(i))) { - allFileList.put(String.valueOf(i), new HashSet<>()); - } - if (!newFileList.containsKey(String.valueOf(i))) { - newFileList.put(String.valueOf(i), new HashSet<>()); - } - String rand = String.valueOf(r.nextInt(10000)); - String fileName = - SENDER_FILE_PATH_TEST + File.separator + i + File.separator + rand; - File file = new File(fileName); - allFileList.get(String.valueOf(i)).add(file.getPath()); - newFileList.get(String.valueOf(i)).add(file.getPath()); - if (!file.getParentFile().exists()) { - file.getParentFile().mkdirs(); - } - if (!file.exists() && !file.createNewFile()) { - logger.error("Can not create new file {}", file.getPath()); - } - } - } - manager.getCurrentLocalFileList(new String[]{SENDER_FILE_PATH_TEST}); - allFileList = manager.getCurrentLocalFiles(); - manager.backupNowLocalFileInfo(LAST_FILE_INFO_TEST); - manager.getLastLocalFileList(LAST_FILE_INFO_TEST); - manager.getValidFileList(); - sendingFileList = manager.getValidAllFiles(); - assert (sendingFileList.size() == newFileList.size()); - for (Entry<String, Set<String>> entry : sendingFileList.entrySet()) { - assert (newFileList.containsKey(entry.getKey())); - assert (newFileList.get(entry.getKey()).containsAll(entry.getValue())); - } - - // delete some files and add some files - int count = 0; - Map<String, Set<String>> deleteFile = new HashMap<>(); - for (Entry<String, Set<String>> entry : allFileList.entrySet()) { - deleteFile.put(entry.getKey(), new HashSet<>()); - for (String path : entry.getValue()) { - count++; - if (count % 3 == 0) { - deleteFile.get(entry.getKey()).add(path); - } - } - } - for (Entry<String, Set<String>> entry : deleteFile.entrySet()) { - for (String path : entry.getValue()) { - new File(path).delete(); - allFileList.get(entry.getKey()).remove(path); - } - } - newFileList.clear(); - r = new Random(1); - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 5; j++) { - if (!allFileList.containsKey(String.valueOf(i))) { - allFileList.put(String.valueOf(i), new HashSet<>()); - } - if (!newFileList.containsKey(String.valueOf(i))) { - newFileList.put(String.valueOf(i), new HashSet<>()); - } - String rand = String.valueOf(r.nextInt(10000)); - String fileName = - SENDER_FILE_PATH_TEST + File.separator + i + File.separator + rand; - File file = new File(fileName); - allFileList.get(String.valueOf(i)).add(file.getPath()); - newFileList.get(String.valueOf(i)).add(file.getPath()); - if (!file.getParentFile().exists()) { - file.getParentFile().mkdirs(); - } - if (!file.exists() && !file.createNewFile()) { - logger.error("Can not create new file {}", file.getPath()); - } - } - } - manager.getCurrentLocalFileList(new String[]{SENDER_FILE_PATH_TEST}); - manager.getLastLocalFileList(LAST_FILE_INFO_TEST); - manager.getValidFileList(); - sendingFileList = manager.getValidAllFiles(); - assert (sendingFileList.size() == newFileList.size()); - for (Entry<String, Set<String>> entry : sendingFileList.entrySet()) { - assert (newFileList.containsKey(entry.getKey())); - assert (newFileList.get(entry.getKey()).containsAll(entry.getValue())); - } - } - - private boolean isEmpty(Map<String, Set<String>> sendingFileList) { - for (Entry<String, Set<String>> entry : sendingFileList.entrySet()) { - if (!entry.getValue().isEmpty()) { - return false; - } - } - return true; - } -} \ No newline at end of file +///** +// * 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.sync.sender; +// +//import java.io.File; +//import java.io.IOException; +//import java.util.HashMap; +//import java.util.HashSet; +//import java.util.Map; +//import java.util.Map.Entry; +//import java.util.Random; +//import java.util.Set; +//import org.apache.iotdb.db.sync.sender.conf.Constans; +//import org.junit.After; +//import org.junit.Before; +//import org.junit.Test; +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +// +//public class SyncFileManagerTest { +// +// private static final String POST_BACK_DIRECTORY_TEST = Constans.SYNC_SENDER + File.separator; +// private static final String LAST_FILE_INFO_TEST = +// POST_BACK_DIRECTORY_TEST + Constans.LAST_LOCAL_FILE_NAME; +// private static final String SENDER_FILE_PATH_TEST = POST_BACK_DIRECTORY_TEST + "data"; +// private SyncFileManager manager = SyncFileManager.getInstance(); +// private static final Logger logger = LoggerFactory.getLogger(SyncFileManagerTest.class); +// +// @Before +// public void setUp() throws IOException, InterruptedException { +// File file = new File(LAST_FILE_INFO_TEST); +// if (!file.getParentFile().exists()) { +// file.getParentFile().mkdirs(); +// } +// if (!file.exists() && !file.createNewFile()) { +// logger.error("Can not create new file {}", file.getPath()); +// } +// file = new File(SENDER_FILE_PATH_TEST); +// if (!file.exists()) { +// file.mkdirs(); +// } +// manager.setCurrentLocalFiles(new HashMap<>()); +// } +// +// @After +// public void tearDown() throws InterruptedException { +// delete(new File(POST_BACK_DIRECTORY_TEST)); +// new File(POST_BACK_DIRECTORY_TEST).delete(); +// } +// +// public void delete(File file) { +// if (file.isFile() || file.list().length == 0) { +// file.delete(); +// } else { +// File[] files = file.listFiles(); +// for (File f : files) { +// delete(f); +// f.delete(); +// } +// } +// } +// +// @Test // It tests two classes : backupNowLocalFileInfo and getLastLocalFileList +// public void testBackupCurrentLocalFileInfo() throws IOException { +// Map<String, Set<String>> allFileList = new HashMap<>(); +// +// Random r = new Random(0); +// for (int i = 0; i < 3; i++) { +// for (int j = 0; j < 5; j++) { +// if (!allFileList.containsKey(String.valueOf(i))) { +// allFileList.put(String.valueOf(i), new HashSet<>()); +// } +// String rand = String.valueOf(r.nextInt(10000)); +// String fileName = +// SENDER_FILE_PATH_TEST + File.separator + i + File.separator + rand; +// File file = new File(fileName); +// allFileList.get(String.valueOf(i)).add(file.getPath()); +// if (!file.getParentFile().exists()) { +// file.getParentFile().mkdirs(); +// } +// if (!file.exists() && !file.createNewFile()) { +// logger.error("Can not create new file {}", file.getPath()); +// } +// } +// } +// Set<String> lastFileList; +// +// // lastFileList is empty +// manager.getLastLocalFileList(LAST_FILE_INFO_TEST); +// lastFileList = manager.getLastLocalFiles(); +// assert (lastFileList.isEmpty()); +// +// // add some files +// manager.getCurrentLocalFileList(new String[]{SENDER_FILE_PATH_TEST}); +// manager.backupNowLocalFileInfo(LAST_FILE_INFO_TEST); +// manager.getLastLocalFileList(LAST_FILE_INFO_TEST); +// lastFileList = manager.getLastLocalFiles(); +// for (Entry<String, Set<String>> entry : allFileList.entrySet()) { +// assert (lastFileList.containsAll(entry.getValue())); +// } +// +// // add some files and delete some files +// r = new Random(1); +// for (int i = 0; i < 3; i++) { +// for (int j = 0; j < 5; j++) { +// if (!allFileList.containsKey(String.valueOf(i))) { +// allFileList.put(String.valueOf(i), new HashSet<>()); +// } +// String rand = String.valueOf(r.nextInt(10000)); +// String fileName = +// SENDER_FILE_PATH_TEST + File.separator + i + File.separator + rand; +// File file = new File(fileName); +// allFileList.get(String.valueOf(i)).add(file.getPath()); +// if (!file.getParentFile().exists()) { +// file.getParentFile().mkdirs(); +// } +// if (!file.exists() && !file.createNewFile()) { +// logger.error("Can not create new file {}", file.getPath()); +// } +// } +// } +// int count = 0; +// Map<String, Set<String>> deleteFile = new HashMap<>(); +// for (Entry<String, Set<String>> entry : allFileList.entrySet()) { +// deleteFile.put(entry.getKey(), new HashSet<>()); +// for (String path : entry.getValue()) { +// count++; +// if (count % 3 == 0) { +// deleteFile.get(entry.getKey()).add(path); +// } +// } +// } +// for (Entry<String, Set<String>> entry : deleteFile.entrySet()) { +// for (String path : entry.getValue()) { +// new File(path).delete(); +// allFileList.get(entry.getKey()).remove(path); +// } +// } +// manager.getCurrentLocalFileList(new String[]{SENDER_FILE_PATH_TEST}); +// manager.backupNowLocalFileInfo(LAST_FILE_INFO_TEST); +// manager.getLastLocalFileList(LAST_FILE_INFO_TEST); +// lastFileList = manager.getLastLocalFiles(); +// for (Entry<String, Set<String>> entry : allFileList.entrySet()) { +// assert (lastFileList.containsAll(entry.getValue())); +// } +// } +// +// @Test +// public void testGetCurrentLocalFileList() throws IOException { +// Map<String, Set<String>> allFileList = new HashMap<>(); +// Map<String, Set<String>> fileList; +// +// // nowLocalList is empty +// manager.getCurrentLocalFileList(new String[]{SENDER_FILE_PATH_TEST}); +// fileList = manager.getCurrentLocalFiles(); +// assert (isEmpty(fileList)); +// +// // add some files +// Random r = new Random(0); +// for (int i = 0; i < 3; i++) { +// for (int j = 0; j < 5; j++) { +// if (!allFileList.containsKey(String.valueOf(i))) { +// allFileList.put(String.valueOf(i), new HashSet<>()); +// } +// String rand = String.valueOf(r.nextInt(10000)); +// String fileName = +// SENDER_FILE_PATH_TEST + File.separator + i + File.separator + rand; +// File file = new File(fileName); +// allFileList.get(String.valueOf(i)).add(file.getPath()); +// if (!file.getParentFile().exists()) { +// file.getParentFile().mkdirs(); +// } +// if (!file.exists() && !file.createNewFile()) { +// logger.error("Can not create new file {}", file.getPath()); +// } +// } +// } +// manager.getCurrentLocalFileList(new String[]{SENDER_FILE_PATH_TEST}); +// fileList = manager.getCurrentLocalFiles(); +// assert (allFileList.size() == fileList.size()); +// for (Entry<String, Set<String>> entry : fileList.entrySet()) { +// assert (allFileList.containsKey(entry.getKey())); +// assert (allFileList.get(entry.getKey()).containsAll(entry.getValue())); +// } +// +// // delete some files and add some files +// int count = 0; +// Map<String, Set<String>> deleteFile = new HashMap<>(); +// for (Entry<String, Set<String>> entry : allFileList.entrySet()) { +// deleteFile.put(entry.getKey(), new HashSet<>()); +// for (String path : entry.getValue()) { +// count++; +// if (count % 3 == 0) { +// deleteFile.get(entry.getKey()).add(path); +// } +// } +// } +// for (Entry<String, Set<String>> entry : deleteFile.entrySet()) { +// for (String path : entry.getValue()) { +// new File(path).delete(); +// allFileList.get(entry.getKey()).remove(path); +// } +// } +// r = new Random(1); +// for (int i = 0; i < 3; i++) { +// for (int j = 0; j < 5; j++) { +// if (!allFileList.containsKey(String.valueOf(i))) { +// allFileList.put(String.valueOf(i), new HashSet<>()); +// } +// String rand = String.valueOf(r.nextInt(10000)); +// String fileName = +// SENDER_FILE_PATH_TEST + File.separator + i + File.separator + rand; +// File file = new File(fileName); +// allFileList.get(String.valueOf(i)).add(file.getPath()); +// if (!file.getParentFile().exists()) { +// file.getParentFile().mkdirs(); +// } +// if (!file.exists() && !file.createNewFile()) { +// logger.error("Can not create new file {}", file.getPath()); +// } +// } +// } +// manager.setCurrentLocalFiles(new HashMap<>()); +// manager.getCurrentLocalFileList(new String[]{SENDER_FILE_PATH_TEST}); +// fileList = manager.getCurrentLocalFiles(); +// assert (allFileList.size() == fileList.size()); +// for (Entry<String, Set<String>> entry : fileList.entrySet()) { +// assert (allFileList.containsKey(entry.getKey())); +// logger.debug("allFileList"); +// for (String a : allFileList.get(entry.getKey())) { +// logger.debug(a); +// } +// logger.debug("FileList"); +// for (String a : entry.getValue()) { +// logger.debug(a); +// } +// assert (allFileList.get(entry.getKey()).containsAll(entry.getValue())); +// } +// } +// +// @Test +// public void testGetValidFileList() throws IOException { +// Map<String, Set<String>> allFileList; +// Map<String, Set<String>> newFileList = new HashMap<>(); +// Map<String, Set<String>> sendingFileList; +// Set<String> lastLocalList; +// +// // nowSendingList is empty +// +// manager.setCurrentLocalFiles(new HashMap<>()); +// manager.getCurrentLocalFileList(new String[]{SENDER_FILE_PATH_TEST}); +// allFileList = manager.getCurrentLocalFiles(); +// manager.getLastLocalFileList(LAST_FILE_INFO_TEST); +// lastLocalList = manager.getLastLocalFiles(); +// manager.getValidFileList(); +// assert (lastLocalList.isEmpty()); +// assert (isEmpty(allFileList)); +// +// // add some files +// newFileList.clear(); +// manager.backupNowLocalFileInfo(LAST_FILE_INFO_TEST); +// Random r = new Random(0); +// for (int i = 0; i < 3; i++) { +// for (int j = 0; j < 5; j++) { +// if (!allFileList.containsKey(String.valueOf(i))) { +// allFileList.put(String.valueOf(i), new HashSet<>()); +// } +// if (!newFileList.containsKey(String.valueOf(i))) { +// newFileList.put(String.valueOf(i), new HashSet<>()); +// } +// String rand = String.valueOf(r.nextInt(10000)); +// String fileName = +// SENDER_FILE_PATH_TEST + File.separator + i + File.separator + rand; +// File file = new File(fileName); +// allFileList.get(String.valueOf(i)).add(file.getPath()); +// newFileList.get(String.valueOf(i)).add(file.getPath()); +// if (!file.getParentFile().exists()) { +// file.getParentFile().mkdirs(); +// } +// if (!file.exists() && !file.createNewFile()) { +// logger.error("Can not create new file {}", file.getPath()); +// } +// } +// } +// manager.getCurrentLocalFileList(new String[]{SENDER_FILE_PATH_TEST}); +// allFileList = manager.getCurrentLocalFiles(); +// manager.backupNowLocalFileInfo(LAST_FILE_INFO_TEST); +// manager.getLastLocalFileList(LAST_FILE_INFO_TEST); +// manager.getValidFileList(); +// sendingFileList = manager.getValidAllFiles(); +// assert (sendingFileList.size() == newFileList.size()); +// for (Entry<String, Set<String>> entry : sendingFileList.entrySet()) { +// assert (newFileList.containsKey(entry.getKey())); +// assert (newFileList.get(entry.getKey()).containsAll(entry.getValue())); +// } +// +// // delete some files and add some files +// int count = 0; +// Map<String, Set<String>> deleteFile = new HashMap<>(); +// for (Entry<String, Set<String>> entry : allFileList.entrySet()) { +// deleteFile.put(entry.getKey(), new HashSet<>()); +// for (String path : entry.getValue()) { +// count++; +// if (count % 3 == 0) { +// deleteFile.get(entry.getKey()).add(path); +// } +// } +// } +// for (Entry<String, Set<String>> entry : deleteFile.entrySet()) { +// for (String path : entry.getValue()) { +// new File(path).delete(); +// allFileList.get(entry.getKey()).remove(path); +// } +// } +// newFileList.clear(); +// r = new Random(1); +// for (int i = 0; i < 3; i++) { +// for (int j = 0; j < 5; j++) { +// if (!allFileList.containsKey(String.valueOf(i))) { +// allFileList.put(String.valueOf(i), new HashSet<>()); +// } +// if (!newFileList.containsKey(String.valueOf(i))) { +// newFileList.put(String.valueOf(i), new HashSet<>()); +// } +// String rand = String.valueOf(r.nextInt(10000)); +// String fileName = +// SENDER_FILE_PATH_TEST + File.separator + i + File.separator + rand; +// File file = new File(fileName); +// allFileList.get(String.valueOf(i)).add(file.getPath()); +// newFileList.get(String.valueOf(i)).add(file.getPath()); +// if (!file.getParentFile().exists()) { +// file.getParentFile().mkdirs(); +// } +// if (!file.exists() && !file.createNewFile()) { +// logger.error("Can not create new file {}", file.getPath()); +// } +// } +// } +// manager.getCurrentLocalFileList(new String[]{SENDER_FILE_PATH_TEST}); +// manager.getLastLocalFileList(LAST_FILE_INFO_TEST); +// manager.getValidFileList(); +// sendingFileList = manager.getValidAllFiles(); +// assert (sendingFileList.size() == newFileList.size()); +// for (Entry<String, Set<String>> entry : sendingFileList.entrySet()) { +// assert (newFileList.containsKey(entry.getKey())); +// assert (newFileList.get(entry.getKey()).containsAll(entry.getValue())); +// } +// } +// +// private boolean isEmpty(Map<String, Set<String>> sendingFileList) { +// for (Entry<String, Set<String>> entry : sendingFileList.entrySet()) { +// if (!entry.getValue().isEmpty()) { +// return false; +// } +// } +// return true; +// } +//} \ No newline at end of file diff --git a/server/src/test/java/org/apache/iotdb/db/utils/RandomNum.java b/server/src/test/java/org/apache/iotdb/db/utils/RandomNum.java new file mode 100644 index 0000000..436dc28 --- /dev/null +++ b/server/src/test/java/org/apache/iotdb/db/utils/RandomNum.java @@ -0,0 +1,70 @@ +/** + * 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.utils; + +import java.util.Random; + +public class RandomNum { + + private static Random random = new Random(); + + private RandomNum() { + throw new IllegalStateException("Utility class"); + } + + public static long getRandomLong(long min, long max) { + return random.nextLong() % (max - min + 1) + min; + } + + public static int getRandomInt(int min, int max) { + return (random.nextInt(10000) % (max - min) + min); + } + + /** + * get random float between min and max. + */ + public static float getRandomFloat(float min, float max) { + + return (random.nextFloat() * (max - min) + min); + } + + /** + * get random int between 0 and frequency. + */ + public static int getAbnormalData(int frequency) { + return random.nextInt() % frequency; + } + + /** + * get random text consisting of lowercase letters and numbers. + * + * @param length -the size of random text + */ + public static String getRandomText(int length) { + + String base = "abcdefghijklmnopqrstuvwxyz0123456789"; + StringBuilder st = new StringBuilder(); + for (int i = 0; i < length; i++) { + int number = random.nextInt(base.length()); + st = st.append(base.charAt(number)); + } + return st.toString(); + + } +} \ No newline at end of file
