diff --git a/cnosdb/src/main/java/cn/edu/tsinghua/iot/benchmark/cnosdb/CnosConnection.java b/cnosdb/src/main/java/cn/edu/tsinghua/iot/benchmark/cnosdb/CnosConnection.java index f3a42da38..6a6f1e01f 100644 --- a/cnosdb/src/main/java/cn/edu/tsinghua/iot/benchmark/cnosdb/CnosConnection.java +++ b/cnosdb/src/main/java/cn/edu/tsinghua/iot/benchmark/cnosdb/CnosConnection.java @@ -21,7 +21,7 @@ public class CnosConnection { CnosConnection(String urlString, String cnosDbName) throws MalformedURLException { ConnectionPool connectionPool = - new ConnectionPool(config.getCLIENT_NUMBER(), 5, TimeUnit.MINUTES); + new ConnectionPool(config.getDATA_CLIENT_NUMBER(), 5, TimeUnit.MINUTES); client = new OkHttpClient().newBuilder().connectionPool(connectionPool).build(); url = urlString + "/api/v1/sql?db=" + cnosDbName; } diff --git a/configuration/conf/config.properties b/configuration/conf/config.properties index 1c3ca38a2..622a2f633 100644 --- a/configuration/conf/config.properties +++ b/configuration/conf/config.properties @@ -156,9 +156,12 @@ # 是否将设备绑定给客户端,如果绑定,则客户端数小于等于设备数,否则可以大于 # IS_CLIENT_BIND=true -# 客户端总数 +# schema 客户端总数,schema_client 负责注册元数据 +# SCHEMA_CLIENT_NUMBER=20 + +# data 客户端总数, data_client 负责读写数据 # iotdb表模型下,client数为table数的整数倍 -# CLIENT_NUMBER=20 +# DATA_CLIENT_NUMBER=20 ############## 被测系统为IoTDB时扩展参数 ################## # 是否使用thrift压缩,需要在iotdb的配置文件iotdb-datanode.properties中设置dn_rpc_thrift_compression_enable=true diff --git a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/client/DataClient.java b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/client/DataClient.java index 12065f2ec..1a54795ce 100644 --- a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/client/DataClient.java +++ b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/client/DataClient.java @@ -83,7 +83,7 @@ public DataClient(int id, CountDownLatch countDownLatch, CyclicBarrier barrier) this.queryWorkLoad = QueryWorkLoad.getInstance(id); this.clientThreadId = id; this.clientDeviceSchemas = - MetaDataSchema.getInstance().getDeviceSchemaByClientId(clientThreadId); + MetaDataSchema.getInstance().getDeviceSchemaByDataClientId(clientThreadId); this.service = Executors.newSingleThreadScheduledExecutor( new NamedThreadFactory("ShowWorkProgress-" + clientThreadId)); diff --git a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/client/SchemaClient.java b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/client/SchemaClient.java index 8bc9b0ba8..84cb89b0d 100644 --- a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/client/SchemaClient.java +++ b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/client/SchemaClient.java @@ -60,7 +60,8 @@ public SchemaClient(int id, CountDownLatch countDownLatch, CyclicBarrier barrier this.countDownLatch = countDownLatch; this.barrier = barrier; this.clientThreadId = id; - this.deviceSchemas = MetaDataSchema.getInstance().getDeviceSchemaByClientId(clientThreadId); + this.deviceSchemas = + MetaDataSchema.getInstance().getDeviceSchemaBySchemaClientId(clientThreadId); this.deviceSchemasSize = deviceSchemas.size(); initDBWrappers(); } diff --git a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/client/generate/GenerateDataDeviceClient.java b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/client/generate/GenerateDataDeviceClient.java index bb3adff9f..ffbe20539 100644 --- a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/client/generate/GenerateDataDeviceClient.java +++ b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/client/generate/GenerateDataDeviceClient.java @@ -44,7 +44,7 @@ public GenerateDataDeviceClient(int id, CountDownLatch countDownLatch, CyclicBar @Override protected void doTest() { try { - for (int i = 0; i < config.getDEVICE_NUMBER() / config.getCLIENT_NUMBER() + 1; i++) { + for (int i = 0; i < config.getDEVICE_NUMBER() / config.getDATA_CLIENT_NUMBER() + 1; i++) { DeviceQuery deviceQuery = queryWorkLoad.getDeviceQuery(); if (deviceQuery == null) { break; diff --git a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/conf/Config.java b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/conf/Config.java index 3a19188a9..d9c9fae08 100644 --- a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/conf/Config.java +++ b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/conf/Config.java @@ -185,10 +185,15 @@ public class Config { */ private boolean IS_CLIENT_BIND = true; /** - * The number of client if IS_CLIENT_BIND = true: this number must be less than or equal to the - * number of devices. + * The number of schema client if IS_CLIENT_BIND = true: this number must be less than or equal to + * the number of devices. */ - private int CLIENT_NUMBER = 20; + private int SCHEMA_CLIENT_NUMBER = 20; + /** + * The number of data client if IS_CLIENT_BIND = true: this number must be less than or equal to + * the number of devices. + */ + private int DATA_CLIENT_NUMBER = 20; /** name prefix of table */ private String IoTDB_TABLE_NAME_PREFIX = "table_"; @@ -905,12 +910,20 @@ public void setIS_CLIENT_BIND(boolean IS_CLIENT_BIND) { this.IS_CLIENT_BIND = IS_CLIENT_BIND; } - public int getCLIENT_NUMBER() { - return CLIENT_NUMBER; + public int getSCHEMA_CLIENT_NUMBER() { + return SCHEMA_CLIENT_NUMBER; + } + + public void setSCHEMA_CLIENT_NUMBER(int SCHEMA_CLIENT_NUMBER) { + this.SCHEMA_CLIENT_NUMBER = SCHEMA_CLIENT_NUMBER; + } + + public int getDATA_CLIENT_NUMBER() { + return DATA_CLIENT_NUMBER; } - public void setCLIENT_NUMBER(int CLIENT_NUMBER) { - this.CLIENT_NUMBER = CLIENT_NUMBER; + public void setDATA_CLIENT_NUMBER(int DATA_CLIENT_NUMBER) { + this.DATA_CLIENT_NUMBER = DATA_CLIENT_NUMBER; } public int getTAG_NUMBER() { @@ -1813,7 +1826,8 @@ public ConfigProperties getShowConfigProperties() { configProperties.addProperty("Data Mode", "IS_OUT_OF_ORDER", this.IS_OUT_OF_ORDER); configProperties.addProperty("Data Mode", "OUT_OF_ORDER_RATIO", this.OUT_OF_ORDER_RATIO); configProperties.addProperty("Data Amount", "OPERATION_PROPORTION", this.OPERATION_PROPORTION); - configProperties.addProperty("Data Amount", "CLIENT_NUMBER", this.CLIENT_NUMBER); + configProperties.addProperty("Data Amount", "SCHEMA_CLIENT_NUMBER", this.SCHEMA_CLIENT_NUMBER); + configProperties.addProperty("Data Amount", "DATA_CLIENT_NUMBER", this.DATA_CLIENT_NUMBER); configProperties.addProperty("Data Amount", "LOOP", this.LOOP); configProperties.addProperty("Data Amount", "BATCH_SIZE_PER_WRITE", this.BATCH_SIZE_PER_WRITE); configProperties.addProperty("Data Amount", "DEVICE_NUM_PER_WRITE", this.DEVICE_NUM_PER_WRITE); diff --git a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/conf/ConfigDescriptor.java b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/conf/ConfigDescriptor.java index de9190839..9dc5b18bc 100644 --- a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/conf/ConfigDescriptor.java +++ b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/conf/ConfigDescriptor.java @@ -256,9 +256,21 @@ private void loadProps() { config.setIS_CLIENT_BIND( Boolean.parseBoolean( properties.getProperty("IS_CLIENT_BIND", config.isIS_CLIENT_BIND() + ""))); - config.setCLIENT_NUMBER( - Integer.parseInt( - properties.getProperty("CLIENT_NUMBER", config.getCLIENT_NUMBER() + ""))); + + String schemaClientNumber = properties.getProperty("SCHEMA_CLIENT_NUMBER"); + if (schemaClientNumber == null || schemaClientNumber.isEmpty()) { + schemaClientNumber = + properties.getProperty("CLIENT_NUMBER", config.getSCHEMA_CLIENT_NUMBER() + ""); + } + config.setSCHEMA_CLIENT_NUMBER(Integer.parseInt(schemaClientNumber)); + + String dataClientNumber = properties.getProperty("DATA_CLIENT_NUMBER"); + if (dataClientNumber == null || dataClientNumber.isEmpty()) { + dataClientNumber = + properties.getProperty("CLIENT_NUMBER", config.getDATA_CLIENT_NUMBER() + ""); + } + config.setDATA_CLIENT_NUMBER(Integer.parseInt(dataClientNumber)); + config.setIoTDB_TABLE_NAME_PREFIX( properties.getProperty("IoTDB_TABLE_NAME_PREFIX", config.getIoTDB_TABLE_NAME_PREFIX())); config.setGROUP_NAME_PREFIX( @@ -546,9 +558,11 @@ private boolean checkConfig() { // Checking config according to mode switch (config.getBENCHMARK_WORK_MODE()) { case TEST_WITH_DEFAULT_PATH: - if (config.isIS_CLIENT_BIND() && config.getDEVICE_NUMBER() < config.getCLIENT_NUMBER()) { + if (config.isIS_CLIENT_BIND() + && config.getDEVICE_NUMBER() < config.getSCHEMA_CLIENT_NUMBER() + && config.getDEVICE_NUMBER() < config.getDATA_CLIENT_NUMBER()) { LOGGER.error( - "In client bind way, the number of client should be less than the number of device"); + "In client bind way, the number of schema client and data client should be less than the number of device"); result = false; } if (!config.hasWrite()) { @@ -584,7 +598,8 @@ private boolean checkConfig() { } } if (config.isIS_POINT_COMPARISON()) { - if (config.getDEVICE_NUMBER() < config.getCLIENT_NUMBER()) { + if (config.getDEVICE_NUMBER() < config.getSCHEMA_CLIENT_NUMBER() + || config.getDEVICE_NUMBER() < config.getDATA_CLIENT_NUMBER()) { LOGGER.warn("There are too many client ( > device number)"); } } @@ -620,7 +635,7 @@ private boolean checkConfig() { } result &= checkInsertDataTypeProportion(); result &= checkOperationProportion(); - if (config.getCLIENT_NUMBER() == 0) { + if (config.getSCHEMA_CLIENT_NUMBER() == 0 || config.getDATA_CLIENT_NUMBER() == 0) { LOGGER.error("Client number can't be zero"); result = false; } @@ -694,10 +709,10 @@ private boolean checkDeviceNumPerWrite() { } // tableMode if (config.getIoTDB_DIALECT_MODE() == SQLDialect.TABLE - && config.getCLIENT_NUMBER() % config.getIoTDB_TABLE_NUMBER() != 0) { + && config.getDATA_CLIENT_NUMBER() % config.getIoTDB_TABLE_NUMBER() != 0) { LOGGER.error( "TableMode must ensure that a client only writes to one table. Therefore, a client only switches database once.\n" - + "please make CLIENT_NUMBER % IoTDB_TABLE_NUMBER == 0"); + + "please make DATA_CLIENT_NUMBER % IoTDB_TABLE_NUMBER == 0"); return false; } if (dnw == 1) { @@ -714,12 +729,12 @@ private boolean checkDeviceNumPerWrite() { } for (int deviceNumPerClient : CommonAlgorithms.distributeDevicesToClients( - config.getDEVICE_NUMBER(), config.getCLIENT_NUMBER()) + config.getDEVICE_NUMBER(), config.getDATA_CLIENT_NUMBER()) .values()) { if (deviceNumPerClient % dnw != 0) { LOGGER.error( "Some clients will be allocated {} devices, which are not divisible by parameter DEVICE_NUM_PER_WRITE {}.\n" - + "To solve this problem, please make DEVICE_NUMBER % CLIENTS_NUMBER == 0, and (DEVICE_NUMBER / CLIENT_NUMBER) % DEVICE_NUM_PER_WRITE == 0.", + + "To solve this problem, please make DEVICE_NUMBER % DATA_CLIENT_NUMBER == 0, and (DEVICE_NUMBER / DATA_CLIENT_NUMBER) % DEVICE_NUM_PER_WRITE == 0.", deviceNumPerClient, dnw); return false; } diff --git a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/measurement/persistence/mysql/MySqlRecorder.java b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/measurement/persistence/mysql/MySqlRecorder.java index a18e21b39..c7605c00e 100644 --- a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/measurement/persistence/mysql/MySqlRecorder.java +++ b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/measurement/persistence/mysql/MySqlRecorder.java @@ -372,8 +372,8 @@ public void saveTestConfig() { String.format( SAVE_CONFIG, "'" + PROJECT_ID + "'", - "'getCLIENT_NUMBER()'", - "'" + config.getCLIENT_NUMBER() + "'"); + "'getDATA_CLIENT_NUMBER()'", + "'" + config.getDATA_CLIENT_NUMBER() + "'"); statement.addBatch(sql); sql = String.format( diff --git a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/mode/BaseMode.java b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/mode/BaseMode.java index 921849aae..b3781922e 100644 --- a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/mode/BaseMode.java +++ b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/mode/BaseMode.java @@ -25,6 +25,7 @@ import cn.edu.tsinghua.iot.benchmark.conf.Config; import cn.edu.tsinghua.iot.benchmark.conf.ConfigDescriptor; import cn.edu.tsinghua.iot.benchmark.measurement.Measurement; +import cn.edu.tsinghua.iot.benchmark.schema.MetaDataSchema; import cn.edu.tsinghua.iot.benchmark.tsdb.DBConfig; import cn.edu.tsinghua.iot.benchmark.tsdb.DBWrapper; import cn.edu.tsinghua.iot.benchmark.tsdb.TsdbException; @@ -54,13 +55,14 @@ public abstract class BaseMode { protected ExecutorService schemaExecutorService = Executors.newFixedThreadPool( - config.getCLIENT_NUMBER(), new NamedThreadFactory("SchemaClient")); + config.getSCHEMA_CLIENT_NUMBER(), new NamedThreadFactory("SchemaClient")); protected ExecutorService executorService = - Executors.newFixedThreadPool(config.getCLIENT_NUMBER(), new NamedThreadFactory("DataClient")); - protected CountDownLatch schemaDownLatch = new CountDownLatch(config.getCLIENT_NUMBER()); - protected CyclicBarrier schemaBarrier = new CyclicBarrier(config.getCLIENT_NUMBER()); - protected CountDownLatch dataDownLatch = new CountDownLatch(config.getCLIENT_NUMBER()); - protected CyclicBarrier dataBarrier = new CyclicBarrier(config.getCLIENT_NUMBER()); + Executors.newFixedThreadPool( + config.getDATA_CLIENT_NUMBER(), new NamedThreadFactory("DataClient")); + protected CountDownLatch schemaDownLatch = new CountDownLatch(config.getSCHEMA_CLIENT_NUMBER()); + protected CyclicBarrier schemaBarrier = new CyclicBarrier(config.getSCHEMA_CLIENT_NUMBER()); + protected CountDownLatch dataDownLatch = new CountDownLatch(config.getDATA_CLIENT_NUMBER()); + protected CyclicBarrier dataBarrier = new CyclicBarrier(config.getDATA_CLIENT_NUMBER()); protected List dataClients = new ArrayList<>(); protected List schemaClients = new ArrayList<>(); protected Measurement baseModeMeasurement = new Measurement(); @@ -73,7 +75,7 @@ public void run() { if (!preCheck()) { return; } - for (int i = 0; i < config.getCLIENT_NUMBER(); i++) { + for (int i = 0; i < config.getDATA_CLIENT_NUMBER(); i++) { DataClient client = DataClient.getInstance(i, dataDownLatch, dataBarrier); if (client == null) { return; @@ -169,7 +171,7 @@ protected boolean cleanUpData(List dbConfigs) { /** Register schema */ protected boolean registerSchema() { - for (int i = 0; i < config.getCLIENT_NUMBER(); i++) { + for (int i = 0; i < config.getSCHEMA_CLIENT_NUMBER(); i++) { SchemaClient schemaClient = new SchemaClient(i, schemaDownLatch, schemaBarrier); schemaClients.add(schemaClient); } @@ -189,6 +191,7 @@ protected boolean registerSchema() { Thread.currentThread().interrupt(); } LOGGER.info("Registering schema successful!"); + MetaDataSchema.clearSchemaClientDataSchema(); return true; } diff --git a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/schema/MetaDataSchema.java b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/schema/MetaDataSchema.java index 87695cc30..b3335b92a 100644 --- a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/schema/MetaDataSchema.java +++ b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/schema/MetaDataSchema.java @@ -36,8 +36,11 @@ public abstract class MetaDataSchema { private static final String UNKNOWN_DEVICE = "Unknown device: %s"; protected static final Config config = ConfigDescriptor.getInstance().getConfig(); - /** DeviceSchema for each client */ - protected static final Map> CLIENT_DATA_SCHEMA = + /** DeviceSchema for each schema client */ + protected static final Map> SCHEMA_CLIENT_DATA_SCHEMA = + new ConcurrentHashMap<>(); + /** DeviceSchema for each data client */ + protected static final Map> DATA_CLIENT_DATA_SCHEMA = new ConcurrentHashMap<>(); /** Name mapping of DeviceSchema */ protected static final Map NAME_DATA_SCHEMA = new ConcurrentHashMap<>(); @@ -52,6 +55,11 @@ protected MetaDataSchema() { } } + public static void clearSchemaClientDataSchema() { + SCHEMA_CLIENT_DATA_SCHEMA.clear(); + LOGGER.info("SCHEMA_CLIENT_DATA_SCHEMA has been cleared!"); + } + /** init data schema for each device */ protected abstract boolean createMetaDataSchema(); @@ -65,14 +73,26 @@ public DeviceSchema getDeviceSchemaByName(String deviceName) { } } - /** Get DeviceSchema by clientId */ - public List getDeviceSchemaByClientId(int clientId) { - return CLIENT_DATA_SCHEMA.get(clientId); + /** Get DeviceSchema by schema clientId */ + public List getDeviceSchemaBySchemaClientId(int clientId) { + return SCHEMA_CLIENT_DATA_SCHEMA.get(clientId); + } + + /** Get DeviceSchema by data clientId */ + public List getDeviceSchemaByDataClientId(int clientId) { + return DATA_CLIENT_DATA_SCHEMA.get(clientId); } /** Get All Device Schema */ public List getAllDeviceSchemas() { - return new ArrayList<>(NAME_DATA_SCHEMA.values()); + List deviceIds = MetaUtil.sortDeviceId(); + List deviceSchemaList = new ArrayList<>(); + for (int deviceId : deviceIds) { + if (NAME_DATA_SCHEMA.containsKey(config.getDEVICE_NAME_PREFIX() + deviceId)) { + deviceSchemaList.add(NAME_DATA_SCHEMA.get(config.getDEVICE_NAME_PREFIX() + deviceId)); + } + } + return new ArrayList<>(deviceSchemaList); } /** Get All Group */ diff --git a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/schema/MetaUtil.java b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/schema/MetaUtil.java index 19a7e0061..ff40f8a9c 100644 --- a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/schema/MetaUtil.java +++ b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/schema/MetaUtil.java @@ -3,8 +3,12 @@ import cn.edu.tsinghua.iot.benchmark.conf.Config; import cn.edu.tsinghua.iot.benchmark.conf.ConfigDescriptor; import cn.edu.tsinghua.iot.benchmark.conf.Constants; +import cn.edu.tsinghua.iot.benchmark.entity.Sensor; import cn.edu.tsinghua.iot.benchmark.exception.WorkloadException; +import cn.edu.tsinghua.iot.benchmark.schema.schemaImpl.DeviceSchema; +import cn.edu.tsinghua.iot.benchmark.utils.CommonAlgorithms; import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.Arrays; @@ -12,9 +16,11 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; public class MetaUtil { + private static final Logger LOGGER = LoggerFactory.getLogger(MetaUtil.class); private static final Config config = ConfigDescriptor.getInstance().getConfig(); private static final String TAG_KEY_PREFIX = config.getTAG_KEY_PREFIX(); private static final String TAG_VALUE_PREFIX = config.getTAG_VALUE_PREFIX(); @@ -63,11 +69,9 @@ public static int mappingId(int objectId, int objectNumber, int allocatingObject * table.
* IoTDB-TreeMode : It will not affect its writing speed. * - * @param config - * @param LOGGER * @return deviceIds */ - public static List sortDeviceId(Config config, Logger LOGGER) { + public static List sortDeviceId() { List deviceIds = new ArrayList<>(); Map> tableDeviceMap = new HashMap<>(config.getIoTDB_TABLE_NUMBER(), 1.00f); @@ -101,6 +105,32 @@ public static List sortDeviceId(Config config, Logger LOGGER) { return deviceIds; } + public static void distributeDevices( + int clientNumber, + Map> clientDataSchema, + List sensors, + Map nameDataSchema, + Set groups) { + Map deviceDistributionForClient = + CommonAlgorithms.distributeDevicesToClients(config.getDEVICE_NUMBER(), clientNumber); + int deviceIndex = MetaUtil.getDeviceId(0); + List deviceIds = sortDeviceId(); + for (int clientId = 0; clientId < clientNumber; clientId++) { + int deviceNumber = deviceDistributionForClient.get(clientId); + List deviceSchemasList = new ArrayList<>(); + for (int d = 0; d < deviceNumber; d++) { + DeviceSchema deviceSchema = + new DeviceSchema( + deviceIds.get(deviceIndex), sensors, MetaUtil.getTags(deviceIds.get(deviceIndex))); + deviceSchemasList.add(deviceSchema); + nameDataSchema.putIfAbsent(deviceSchema.getDevice(), deviceSchema); + groups.add(deviceSchema.getGroup()); + deviceIndex++; + } + clientDataSchema.put(clientId, deviceSchemasList); + } + } + public static String getGroupIdFromDeviceName(String deviceName) { int groupId = deviceName.hashCode(); if (groupId < 0) { @@ -111,8 +141,14 @@ public static String getGroupIdFromDeviceName(String deviceName) { } public static String getTableIdFromDeviceName(String deviceName) { - int tableId = Math.abs(deviceName.hashCode()); - tableId = tableId % config.getIoTDB_TABLE_NUMBER(); + int tableId = -1; + try { + int deviceId = + Integer.parseInt(deviceName.substring(config.getDEVICE_NAME_PREFIX().length())); + tableId = mappingId(deviceId, config.getDEVICE_NUMBER(), config.getIoTDB_TABLE_NUMBER()); + } catch (NumberFormatException | WorkloadException e) { + LOGGER.error("getTableIdFromDeviceName failed.", e); + } return String.valueOf(tableId); } diff --git a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/schema/schemaImpl/DeviceSchema.java b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/schema/schemaImpl/DeviceSchema.java index 547c88262..8f7a87336 100644 --- a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/schema/schemaImpl/DeviceSchema.java +++ b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/schema/schemaImpl/DeviceSchema.java @@ -83,8 +83,7 @@ public DeviceSchema(int deviceId, List sensors, Map tags } } - public DeviceSchema( - String groupId, String deviceName, List sensors, Map tags) { + public DeviceSchema(String deviceName, List sensors, Map tags) { String tableId = MetaUtil.getTableIdFromDeviceName(deviceName); this.table = MetaUtil.getTableName(tableId); try { diff --git a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/schema/schemaImpl/GenerateMetaDataSchema.java b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/schema/schemaImpl/GenerateMetaDataSchema.java index 7af7cef2a..364442d89 100644 --- a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/schema/schemaImpl/GenerateMetaDataSchema.java +++ b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/schema/schemaImpl/GenerateMetaDataSchema.java @@ -24,18 +24,12 @@ import cn.edu.tsinghua.iot.benchmark.entity.Sensor; import cn.edu.tsinghua.iot.benchmark.schema.MetaDataSchema; import cn.edu.tsinghua.iot.benchmark.schema.MetaUtil; -import cn.edu.tsinghua.iot.benchmark.utils.CommonAlgorithms; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import java.util.ArrayList; import java.util.List; -import java.util.Map; /** Data Schema for generate data */ public class GenerateMetaDataSchema extends MetaDataSchema { - private static final Logger LOGGER = LoggerFactory.getLogger(GenerateMetaDataSchema.class); private static final Config config = ConfigDescriptor.getInstance().getConfig(); @Override @@ -44,28 +38,16 @@ public boolean createMetaDataSchema() { if (sensors == null) { return false; } - - Map deviceDistribution = - CommonAlgorithms.distributeDevicesToClients( - config.getDEVICE_NUMBER(), config.getCLIENT_NUMBER()); - int deviceIndex = MetaUtil.getDeviceId(0); - // Rearrange device IDs so that adjacent devices are in the same table - List deviceIds = MetaUtil.sortDeviceId(config, LOGGER); - for (int clientId = 0; clientId < config.getCLIENT_NUMBER(); clientId++) { - int deviceNumber = deviceDistribution.get(clientId); - List deviceSchemaList = new ArrayList<>(); - for (int d = 0; d < deviceNumber; d++) { - DeviceSchema deviceSchema; - deviceSchema = - new DeviceSchema( - deviceIds.get(deviceIndex), sensors, MetaUtil.getTags(deviceIds.get(deviceIndex))); - NAME_DATA_SCHEMA.put(deviceSchema.getDevice(), deviceSchema); - GROUPS.add(deviceSchema.getGroup()); - deviceSchemaList.add(deviceSchema); - deviceIndex++; - } - CLIENT_DATA_SCHEMA.put(clientId, deviceSchemaList); - } + // schemaClient + MetaUtil.distributeDevices( + config.getSCHEMA_CLIENT_NUMBER(), + SCHEMA_CLIENT_DATA_SCHEMA, + sensors, + NAME_DATA_SCHEMA, + GROUPS); + // dataClient + MetaUtil.distributeDevices( + config.getDATA_CLIENT_NUMBER(), DATA_CLIENT_DATA_SCHEMA, sensors, NAME_DATA_SCHEMA, GROUPS); return true; } } diff --git a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/schema/schemaImpl/RealMetaDataSchema.java b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/schema/schemaImpl/RealMetaDataSchema.java index b4c95522a..65c42c526 100644 --- a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/schema/schemaImpl/RealMetaDataSchema.java +++ b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/schema/schemaImpl/RealMetaDataSchema.java @@ -27,6 +27,7 @@ import cn.edu.tsinghua.iot.benchmark.schema.MetaUtil; import cn.edu.tsinghua.iot.benchmark.source.CSVSchemaReader; import cn.edu.tsinghua.iot.benchmark.source.SchemaReader; +import cn.edu.tsinghua.iot.benchmark.utils.CommonAlgorithms; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -57,10 +58,9 @@ protected boolean createMetaDataSchema() { return false; } // Load file from dataset - List files = new ArrayList<>(); + Map files = new LinkedHashMap<>(); getAllFiles(pathStr, files); LOGGER.info("Total files: {}", files.size()); - Collections.sort(files); // Load sensor type from dataset Map> deviceSchemaMap = schemaReader.getDeviceSchemaList(); @@ -69,11 +69,7 @@ protected boolean createMetaDataSchema() { String deviceName = device.getKey(); List sensors = device.getValue(); DeviceSchema deviceSchema = - new DeviceSchema( - MetaUtil.getGroupIdFromDeviceName(deviceName), - deviceName, - sensors, - MetaUtil.getTags(deviceName)); + new DeviceSchema(deviceName, sensors, MetaUtil.getTags(deviceName)); NAME_DATA_SCHEMA.put(deviceName, deviceSchema); GROUPS.add(deviceSchema.getGroup()); deviceSchemaList.add(deviceSchema); @@ -81,30 +77,42 @@ protected boolean createMetaDataSchema() { // Split into client And store Type for (int i = 0; i < deviceSchemaList.size(); i++) { - int clientId = i % config.getCLIENT_NUMBER(); + int schemaClientId = i % config.getSCHEMA_CLIENT_NUMBER(); + int dataClientId = i % config.getDATA_CLIENT_NUMBER(); DeviceSchema deviceSchema = deviceSchemaList.get(i); - if (!CLIENT_DATA_SCHEMA.containsKey(clientId)) { - CLIENT_DATA_SCHEMA.put(clientId, new ArrayList<>()); + if (!SCHEMA_CLIENT_DATA_SCHEMA.containsKey(schemaClientId)) { + SCHEMA_CLIENT_DATA_SCHEMA.put(schemaClientId, new ArrayList<>()); } - CLIENT_DATA_SCHEMA.get(clientId).add(deviceSchema); + if (!DATA_CLIENT_DATA_SCHEMA.containsKey(dataClientId)) { + DATA_CLIENT_DATA_SCHEMA.put(dataClientId, new ArrayList<>()); + } + SCHEMA_CLIENT_DATA_SCHEMA.get(schemaClientId).add(deviceSchema); + DATA_CLIENT_DATA_SCHEMA.get(dataClientId).add(deviceSchema); } - // Split data files into client + // Split data files into data client List> clientFiles = new ArrayList<>(); - for (int i = 0; i < config.getCLIENT_NUMBER(); i++) { + for (int i = 0; i < config.getDATA_CLIENT_NUMBER(); i++) { clientFiles.add(new ArrayList<>()); } - - for (int i = 0; i < files.size(); i++) { - String filePath = files.get(i); - int clientId = i % config.getCLIENT_NUMBER(); - clientFiles.get(clientId).add(filePath); + Map deviceDistributionForDataClient = + CommonAlgorithms.distributeDevicesToClients( + config.getDEVICE_NUMBER(), config.getDATA_CLIENT_NUMBER()); + List deviceIds = MetaUtil.sortDeviceId(); + int index = 0; + for (int clientId = 0; clientId < config.getDATA_CLIENT_NUMBER(); clientId++) { + int fileNumber = deviceDistributionForDataClient.get(clientId); + for (int fileId = 0; fileId < fileNumber; fileId++, index++) { + String device = config.getDEVICE_NAME_PREFIX() + deviceIds.get(index); + String filePath = files.get(device); + clientFiles.get(clientId).add(filePath); + } } MetaUtil.setClientFiles(clientFiles); return true; } - private static void getAllFiles(String strPath, List files) { + private static void getAllFiles(String strPath, Map files) { File f = new File(strPath); if (f.isDirectory()) { File[] fs = f.listFiles(); @@ -116,7 +124,10 @@ private static void getAllFiles(String strPath, List files) { } else if (f.isFile()) { if (!f.getAbsolutePath().contains(Constants.SCHEMA_PATH) && !f.getAbsolutePath().contains(Constants.INFO_PATH)) { - files.add(f.getAbsolutePath()); + String path = f.getAbsolutePath(); + int lastIndexOf = path.lastIndexOf("\\"); + String device = path.substring(path.lastIndexOf("\\", lastIndexOf - 1) + 1, lastIndexOf); + files.put(device, f.getAbsolutePath()); } } } diff --git a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/source/CSVDataReader.java b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/source/CSVDataReader.java index 84867e73f..530d482b3 100644 --- a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/source/CSVDataReader.java +++ b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/source/CSVDataReader.java @@ -76,12 +76,7 @@ public IBatch nextBatch() { for (int i = 1; i < items.length; i++) { sensors.add(stringToSensorMap.get(items[i])); } - deviceSchema = - new DeviceSchema( - MetaUtil.getGroupIdFromDeviceName(deviceName), - deviceName, - sensors, - MetaUtil.getTags(deviceName)); + deviceSchema = new DeviceSchema(deviceName, sensors, MetaUtil.getTags(deviceName)); firstLine = false; continue; } diff --git a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/source/CSVSchemaReader.java b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/source/CSVSchemaReader.java index f740a4858..052add2c2 100644 --- a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/source/CSVSchemaReader.java +++ b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/source/CSVSchemaReader.java @@ -28,7 +28,7 @@ public Map> getDeviceSchemaList() { LOGGER.error("Failed to find schema file in " + path.getFileName().toString()); System.exit(0); } - Map> result = new HashMap<>(); + Map> result = new LinkedHashMap<>(); try { List schemaLines = Files.readAllLines(path); for (String schemaLine : schemaLines) { diff --git a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/source/CopyDataReader.java b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/source/CopyDataReader.java index 54d993fff..424ae1de8 100644 --- a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/source/CopyDataReader.java +++ b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/source/CopyDataReader.java @@ -85,12 +85,7 @@ public CopyDataReader(List files) { for (int i = 1; i < items.length; i++) { sensors.add(stringToSensorMap.get(items[i])); } - deviceSchema = - new DeviceSchema( - MetaUtil.getGroupIdFromDeviceName(deviceName), - deviceName, - sensors, - MetaUtil.getTags(deviceName)); + deviceSchema = new DeviceSchema(deviceName, sensors, MetaUtil.getTags(deviceName)); firstLine = false; continue; } diff --git a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/workload/DataWorkLoad.java b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/workload/DataWorkLoad.java index ed7cbc7e2..1dfcd5798 100644 --- a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/workload/DataWorkLoad.java +++ b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/workload/DataWorkLoad.java @@ -42,7 +42,7 @@ public static IDataWorkLoad getInstance(int clientId) { return new RealDataWorkLoad(files); } else { if (config.isIS_CLIENT_BIND()) { - List deviceSchemas = metaDataSchema.getDeviceSchemaByClientId(clientId); + List deviceSchemas = metaDataSchema.getDeviceSchemaByDataClientId(clientId); return new SyntheticDataWorkLoad(deviceSchemas); } else { return SingletonWorkDataWorkLoad.getInstance(); diff --git a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/workload/SingletonWorkDataWorkLoad.java b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/workload/SingletonWorkDataWorkLoad.java index 63ca4113a..1d01ee5cd 100644 --- a/core/src/main/java/cn/edu/tsinghua/iot/benchmark/workload/SingletonWorkDataWorkLoad.java +++ b/core/src/main/java/cn/edu/tsinghua/iot/benchmark/workload/SingletonWorkDataWorkLoad.java @@ -42,7 +42,7 @@ public class SingletonWorkDataWorkLoad extends GenerateDataWorkLoad { private static SingletonWorkDataWorkLoad singletonWorkDataWorkLoad = null; private static final AtomicInteger sensorIndex = new AtomicInteger(); private final AtomicLong insertLoop = new AtomicLong(0); - private static final List deviceIds = MetaUtil.sortDeviceId(config, LOGGER); + private static final List deviceIds = MetaUtil.sortDeviceId(); private SingletonWorkDataWorkLoad() { if (config.isIS_OUT_OF_ORDER()) { diff --git a/core/src/test/java/cn/edu/tsinghua/iot/benchmark/serialize/BatchSerializeTest.java b/core/src/test/java/cn/edu/tsinghua/iot/benchmark/serialize/BatchSerializeTest.java index 5f288dcc9..211a48305 100644 --- a/core/src/test/java/cn/edu/tsinghua/iot/benchmark/serialize/BatchSerializeTest.java +++ b/core/src/test/java/cn/edu/tsinghua/iot/benchmark/serialize/BatchSerializeTest.java @@ -53,7 +53,7 @@ public void testSerialize() throws Exception { Map tags = new HashMap<>(); tags.put("tag1", "value1"); tags.put("tag2", "value2"); - DeviceSchema deviceSchema = new DeviceSchema(group, device, sensors, tags); + DeviceSchema deviceSchema = new DeviceSchema(device, sensors, tags); List records = new LinkedList<>(); for (int i = 0; i < 12; i++) { records.add(buildRecord(i, 10)); diff --git a/iotdb-1.0/src/main/java/cn/edu/tsinghua/iot/benchmark/iotdb100/IoTDB.java b/iotdb-1.0/src/main/java/cn/edu/tsinghua/iot/benchmark/iotdb100/IoTDB.java index 5f8e03d93..c84674dfb 100644 --- a/iotdb-1.0/src/main/java/cn/edu/tsinghua/iot/benchmark/iotdb100/IoTDB.java +++ b/iotdb-1.0/src/main/java/cn/edu/tsinghua/iot/benchmark/iotdb100/IoTDB.java @@ -91,8 +91,9 @@ public class IoTDB implements IDatabase { protected static final Config config = ConfigDescriptor.getInstance().getConfig(); protected static final CyclicBarrier templateBarrier = - new CyclicBarrier(config.getCLIENT_NUMBER()); - protected static final CyclicBarrier schemaBarrier = new CyclicBarrier(config.getCLIENT_NUMBER()); + new CyclicBarrier(config.getSCHEMA_CLIENT_NUMBER()); + protected static final CyclicBarrier schemaBarrier = + new CyclicBarrier(config.getSCHEMA_CLIENT_NUMBER()); protected static Set storageGroups = Collections.synchronizedSet(new HashSet<>()); protected final String ROOT_SERIES_NAME; protected ExecutorService service; diff --git a/iotdb-1.1/src/main/java/cn/edu/tsinghua/iot/benchmark/iotdb110/IoTDB.java b/iotdb-1.1/src/main/java/cn/edu/tsinghua/iot/benchmark/iotdb110/IoTDB.java index 280bac26c..8486421f6 100644 --- a/iotdb-1.1/src/main/java/cn/edu/tsinghua/iot/benchmark/iotdb110/IoTDB.java +++ b/iotdb-1.1/src/main/java/cn/edu/tsinghua/iot/benchmark/iotdb110/IoTDB.java @@ -95,10 +95,11 @@ public class IoTDB implements IDatabase { protected static final Config config = ConfigDescriptor.getInstance().getConfig(); protected static final CyclicBarrier templateBarrier = - new CyclicBarrier(config.getCLIENT_NUMBER()); - protected static final CyclicBarrier schemaBarrier = new CyclicBarrier(config.getCLIENT_NUMBER()); + new CyclicBarrier(config.getSCHEMA_CLIENT_NUMBER()); + protected static final CyclicBarrier schemaBarrier = + new CyclicBarrier(config.getSCHEMA_CLIENT_NUMBER()); protected static final CyclicBarrier activateTemplateBarrier = - new CyclicBarrier(config.getCLIENT_NUMBER()); + new CyclicBarrier(config.getSCHEMA_CLIENT_NUMBER()); protected static Set storageGroups = Collections.synchronizedSet(new HashSet<>()); protected final String ROOT_SERIES_NAME; protected ExecutorService service; diff --git a/iotdb-1.3/src/main/java/cn/edu/tsinghua/iot/benchmark/iotdb130/IoTDB.java b/iotdb-1.3/src/main/java/cn/edu/tsinghua/iot/benchmark/iotdb130/IoTDB.java index 7bddf190d..23749dfae 100644 --- a/iotdb-1.3/src/main/java/cn/edu/tsinghua/iot/benchmark/iotdb130/IoTDB.java +++ b/iotdb-1.3/src/main/java/cn/edu/tsinghua/iot/benchmark/iotdb130/IoTDB.java @@ -95,10 +95,11 @@ public class IoTDB implements IDatabase { protected static final Config config = ConfigDescriptor.getInstance().getConfig(); protected static final CyclicBarrier templateBarrier = - new CyclicBarrier(config.getCLIENT_NUMBER()); - protected static final CyclicBarrier schemaBarrier = new CyclicBarrier(config.getCLIENT_NUMBER()); + new CyclicBarrier(config.getSCHEMA_CLIENT_NUMBER()); + protected static final CyclicBarrier schemaBarrier = + new CyclicBarrier(config.getSCHEMA_CLIENT_NUMBER()); protected static final CyclicBarrier activateTemplateBarrier = - new CyclicBarrier(config.getCLIENT_NUMBER()); + new CyclicBarrier(config.getSCHEMA_CLIENT_NUMBER()); protected static Set storageGroups = Collections.synchronizedSet(new HashSet<>()); protected final String ROOT_SERIES_NAME; protected ExecutorService service; diff --git a/iotdb-2.0/src/main/java/cn/edu/tsinghua/iot/benchmark/iotdb200/ModelStrategy/IoTDBModelStrategy.java b/iotdb-2.0/src/main/java/cn/edu/tsinghua/iot/benchmark/iotdb200/ModelStrategy/IoTDBModelStrategy.java index f3c289a48..bdfe549f2 100644 --- a/iotdb-2.0/src/main/java/cn/edu/tsinghua/iot/benchmark/iotdb200/ModelStrategy/IoTDBModelStrategy.java +++ b/iotdb-2.0/src/main/java/cn/edu/tsinghua/iot/benchmark/iotdb200/ModelStrategy/IoTDBModelStrategy.java @@ -42,6 +42,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.CyclicBarrier; public abstract class IoTDBModelStrategy { protected static final Config config = ConfigDescriptor.getInstance().getConfig(); @@ -49,6 +50,8 @@ public abstract class IoTDBModelStrategy { protected static String ROOT_SERIES_NAME; protected static int queryBaseOffset; protected static final Set databases = new HashSet<>(); + protected static final CyclicBarrier schemaBarrier = + new CyclicBarrier(config.getSCHEMA_CLIENT_NUMBER()); public IoTDBModelStrategy(DBConfig dbConfig) { this.dbConfig = dbConfig; diff --git a/iotdb-2.0/src/main/java/cn/edu/tsinghua/iot/benchmark/iotdb200/ModelStrategy/TableStrategy.java b/iotdb-2.0/src/main/java/cn/edu/tsinghua/iot/benchmark/iotdb200/ModelStrategy/TableStrategy.java index 5a64d7b8b..bf3c4b438 100644 --- a/iotdb-2.0/src/main/java/cn/edu/tsinghua/iot/benchmark/iotdb200/ModelStrategy/TableStrategy.java +++ b/iotdb-2.0/src/main/java/cn/edu/tsinghua/iot/benchmark/iotdb200/ModelStrategy/TableStrategy.java @@ -46,12 +46,10 @@ import java.util.List; import java.util.Map; import java.util.Set; -import java.util.concurrent.CyclicBarrier; public class TableStrategy extends IoTDBModelStrategy { private static final Logger LOGGER = LoggerFactory.getLogger(TableStrategy.class); - private static final CyclicBarrier schemaBarrier = new CyclicBarrier(config.getCLIENT_NUMBER()); public TableStrategy(DBConfig dbConfig) { super(dbConfig); diff --git a/iotdb-2.0/src/main/java/cn/edu/tsinghua/iot/benchmark/iotdb200/ModelStrategy/TreeStrategy.java b/iotdb-2.0/src/main/java/cn/edu/tsinghua/iot/benchmark/iotdb200/ModelStrategy/TreeStrategy.java index 606c96d48..27f67be65 100644 --- a/iotdb-2.0/src/main/java/cn/edu/tsinghua/iot/benchmark/iotdb200/ModelStrategy/TreeStrategy.java +++ b/iotdb-2.0/src/main/java/cn/edu/tsinghua/iot/benchmark/iotdb200/ModelStrategy/TreeStrategy.java @@ -61,10 +61,10 @@ public class TreeStrategy extends IoTDBModelStrategy { private static final Logger LOGGER = LoggerFactory.getLogger(TreeStrategy.class); private final Random random = new Random(config.getDATA_SEED()); - private static final CyclicBarrier templateBarrier = new CyclicBarrier(config.getCLIENT_NUMBER()); - private static final CyclicBarrier schemaBarrier = new CyclicBarrier(config.getCLIENT_NUMBER()); + private static final CyclicBarrier templateBarrier = + new CyclicBarrier(config.getSCHEMA_CLIENT_NUMBER()); private static final CyclicBarrier activateTemplateBarrier = - new CyclicBarrier(config.getCLIENT_NUMBER()); + new CyclicBarrier(config.getSCHEMA_CLIENT_NUMBER()); private static final AtomicBoolean templateInit = new AtomicBoolean(false); public TreeStrategy(DBConfig dbConfig) { diff --git a/tdengine-3.0/src/main/java/cn/edu/tsinghua/iot/benchmark/tdengine3/TDengine.java b/tdengine-3.0/src/main/java/cn/edu/tsinghua/iot/benchmark/tdengine3/TDengine.java index 5960174d7..726cf5a2c 100644 --- a/tdengine-3.0/src/main/java/cn/edu/tsinghua/iot/benchmark/tdengine3/TDengine.java +++ b/tdengine-3.0/src/main/java/cn/edu/tsinghua/iot/benchmark/tdengine3/TDengine.java @@ -63,7 +63,7 @@ public class TDengine implements IDatabase { private static final String TDENGINE_DRIVER = "com.taosdata.jdbc.TSDBDriver"; private static final String TDENGINE_URL = "jdbc:TAOS://%s:%s/?user=%s&password=%s"; protected static final CyclicBarrier superTableBarrier = - new CyclicBarrier(config.getCLIENT_NUMBER()); + new CyclicBarrier(config.getSCHEMA_CLIENT_NUMBER()); private static final String USE_DB = "use %s"; private static final String SUPER_TABLE_NAME = "device"; diff --git a/timescaledb-cluster/src/main/java/cn/edu/tsinghua/iot/benchmark/timescaledbCluster/TimescaleDB.java b/timescaledb-cluster/src/main/java/cn/edu/tsinghua/iot/benchmark/timescaledbCluster/TimescaleDB.java index d0f5244d6..119f8668a 100644 --- a/timescaledb-cluster/src/main/java/cn/edu/tsinghua/iot/benchmark/timescaledbCluster/TimescaleDB.java +++ b/timescaledb-cluster/src/main/java/cn/edu/tsinghua/iot/benchmark/timescaledbCluster/TimescaleDB.java @@ -72,7 +72,8 @@ public class TimescaleDB implements IDatabase { "SELECT create_distributed_hypertable('%s', 'time', 'location', replication_factor => %s, chunk_time_interval => 604800000);"; private static final String dropTable = "DROP TABLE %s;"; private static final AtomicBoolean schemaInit = new AtomicBoolean(false); - protected static final CyclicBarrier schemaBarrier = new CyclicBarrier(config.getCLIENT_NUMBER()); + protected static final CyclicBarrier schemaBarrier = + new CyclicBarrier(config.getSCHEMA_CLIENT_NUMBER()); private static String tableName; private Connection connection; diff --git a/timescaledb/src/main/java/cn/edu/tsinghua/iot/benchmark/timescaledb/TimescaleDB.java b/timescaledb/src/main/java/cn/edu/tsinghua/iot/benchmark/timescaledb/TimescaleDB.java index 4450334d1..e3026697f 100644 --- a/timescaledb/src/main/java/cn/edu/tsinghua/iot/benchmark/timescaledb/TimescaleDB.java +++ b/timescaledb/src/main/java/cn/edu/tsinghua/iot/benchmark/timescaledb/TimescaleDB.java @@ -72,7 +72,8 @@ public class TimescaleDB implements IDatabase { "SELECT create_hypertable('%s', 'time', chunk_time_interval => 604800000);"; private static final String dropTable = "DROP TABLE %s;"; private static final AtomicBoolean schemaInit = new AtomicBoolean(false); - protected static final CyclicBarrier schemaBarrier = new CyclicBarrier(config.getCLIENT_NUMBER()); + protected static final CyclicBarrier schemaBarrier = + new CyclicBarrier(config.getSCHEMA_CLIENT_NUMBER()); private static String tableName; private Connection connection;