• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

apache / iotdb / #9919

25 Aug 2023 07:08AM UTC coverage: 47.802% (+0.007%) from 47.795%
#9919

push

travis_ci

web-flow
Remove some useless configs (#10950)

80023 of 167404 relevant lines covered (47.8%)

0.48 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

75.68
/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
1
/*
2
 * Licensed to the Apache Software Foundation (ASF) under one
3
 * or more contributor license agreements.  See the NOTICE file
4
 * distributed with this work for additional information
5
 * regarding copyright ownership.  The ASF licenses this file
6
 * to you under the Apache License, Version 2.0 (the
7
 * "License"); you may not use this file except in compliance
8
 * with the License.  You may obtain a copy of the License at
9
 *
10
 *     http://www.apache.org/licenses/LICENSE-2.0
11
 *
12
 * Unless required by applicable law or agreed to in writing,
13
 * software distributed under the License is distributed on an
14
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
 * KIND, either express or implied.  See the License for the
16
 * specific language governing permissions and limitations
17
 * under the License.
18
 */
19
package org.apache.iotdb.db.conf;
20

21
import org.apache.iotdb.commons.conf.CommonConfig;
22
import org.apache.iotdb.commons.conf.CommonDescriptor;
23
import org.apache.iotdb.commons.conf.IoTDBConstant;
24
import org.apache.iotdb.commons.exception.BadNodeUrlException;
25
import org.apache.iotdb.commons.service.metric.MetricService;
26
import org.apache.iotdb.commons.utils.NodeUrlUtils;
27
import org.apache.iotdb.confignode.rpc.thrift.TCQConfig;
28
import org.apache.iotdb.confignode.rpc.thrift.TGlobalConfig;
29
import org.apache.iotdb.confignode.rpc.thrift.TRatisConfig;
30
import org.apache.iotdb.db.exception.query.QueryProcessException;
31
import org.apache.iotdb.db.schemaengine.rescon.DataNodeSchemaQuotaManager;
32
import org.apache.iotdb.db.service.metrics.IoTDBInternalLocalReporter;
33
import org.apache.iotdb.db.storageengine.StorageEngine;
34
import org.apache.iotdb.db.storageengine.dataregion.compaction.constant.CompactionValidationLevel;
35
import org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.constant.CrossCompactionPerformer;
36
import org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.constant.InnerSeqCompactionPerformer;
37
import org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.constant.InnerUnseqCompactionPerformer;
38
import org.apache.iotdb.db.storageengine.dataregion.compaction.schedule.constant.CompactionPriority;
39
import org.apache.iotdb.db.storageengine.dataregion.compaction.selector.constant.CrossCompactionSelector;
40
import org.apache.iotdb.db.storageengine.dataregion.compaction.selector.constant.InnerSequenceCompactionSelector;
41
import org.apache.iotdb.db.storageengine.dataregion.compaction.selector.constant.InnerUnsequenceCompactionSelector;
42
import org.apache.iotdb.db.storageengine.dataregion.wal.WALManager;
43
import org.apache.iotdb.db.storageengine.dataregion.wal.utils.WALMode;
44
import org.apache.iotdb.db.storageengine.rescon.disk.TierManager;
45
import org.apache.iotdb.db.storageengine.rescon.memory.SystemInfo;
46
import org.apache.iotdb.db.utils.DateTimeUtils;
47
import org.apache.iotdb.db.utils.datastructure.TVListSortAlgorithm;
48
import org.apache.iotdb.external.api.IPropertiesLoader;
49
import org.apache.iotdb.metrics.config.MetricConfigDescriptor;
50
import org.apache.iotdb.metrics.config.ReloadLevel;
51
import org.apache.iotdb.metrics.reporter.iotdb.IoTDBInternalMemoryReporter;
52
import org.apache.iotdb.metrics.reporter.iotdb.IoTDBInternalReporter;
53
import org.apache.iotdb.metrics.utils.InternalReporterType;
54
import org.apache.iotdb.metrics.utils.NodeType;
55
import org.apache.iotdb.rpc.RpcTransportFactory;
56
import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
57
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
58
import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
59
import org.apache.iotdb.tsfile.fileSystem.FSType;
60
import org.apache.iotdb.tsfile.utils.FilePathUtils;
61

62
import org.slf4j.Logger;
63
import org.slf4j.LoggerFactory;
64

65
import java.io.File;
66
import java.io.FileNotFoundException;
67
import java.io.IOException;
68
import java.io.InputStream;
69
import java.net.MalformedURLException;
70
import java.net.URL;
71
import java.util.ArrayList;
72
import java.util.List;
73
import java.util.Properties;
74
import java.util.ServiceLoader;
75

76
public class IoTDBDescriptor {
77

78
  private static final Logger logger = LoggerFactory.getLogger(IoTDBDescriptor.class);
1✔
79

80
  private final CommonDescriptor commonDescriptor = CommonDescriptor.getInstance();
1✔
81

82
  private final IoTDBConfig conf = new IoTDBConfig();
1✔
83

84
  protected IoTDBDescriptor() {
1✔
85
    loadProps();
1✔
86
    ServiceLoader<IPropertiesLoader> propertiesLoaderServiceLoader =
1✔
87
        ServiceLoader.load(IPropertiesLoader.class);
1✔
88
    for (IPropertiesLoader loader : propertiesLoaderServiceLoader) {
1✔
89
      logger.info("Will reload properties from {} ", loader.getClass().getName());
×
90
      Properties properties = loader.loadProperties();
×
91
      loadProperties(properties);
×
92
      conf.setCustomizedProperties(loader.getCustomizedProperties());
×
93
      TSFileDescriptor.getInstance().overwriteConfigByCustomSettings(properties);
×
94
      TSFileDescriptor.getInstance()
×
95
          .getConfig()
×
96
          .setCustomizedProperties(loader.getCustomizedProperties());
×
97
    }
×
98
  }
1✔
99

100
  public static IoTDBDescriptor getInstance() {
101
    return IoTDBDescriptorHolder.INSTANCE;
1✔
102
  }
103

104
  public IoTDBConfig getConfig() {
105
    return conf;
1✔
106
  }
107

108
  /**
109
   * get props url location
110
   *
111
   * @return url object if location exit, otherwise null.
112
   */
113
  public URL getPropsUrl(String configFileName) {
114
    // Check if a config-directory was specified first.
115
    String urlString = System.getProperty(IoTDBConstant.IOTDB_CONF, null);
1✔
116
    // If it wasn't, check if a home directory was provided (This usually contains a config)
117
    if (urlString == null) {
1✔
118
      urlString = System.getProperty(IoTDBConstant.IOTDB_HOME, null);
×
119
      if (urlString != null) {
×
120
        urlString = urlString + File.separatorChar + "conf" + File.separatorChar + configFileName;
×
121
      } else {
122
        // If this too wasn't provided, try to find a default config in the root of the classpath.
123
        URL uri = IoTDBConfig.class.getResource("/" + configFileName);
×
124
        if (uri != null) {
×
125
          return uri;
×
126
        }
127
        logger.warn(
×
128
            "Cannot find IOTDB_HOME or IOTDB_CONF environment variable when loading "
129
                + "config file {}, use default configuration",
130
            configFileName);
131
        // update all data seriesPath
132
        conf.updatePath();
×
133
        return null;
×
134
      }
135
    }
136
    // If a config location was provided, but it doesn't end with a properties file,
137
    // append the default location.
138
    else if (!urlString.endsWith(".properties")) {
1✔
139
      urlString += (File.separatorChar + configFileName);
1✔
140
    }
141

142
    // If the url doesn't start with "file:" or "classpath:", it's provided as a no path.
143
    // So we need to add it to make it a real URL.
144
    if (!urlString.startsWith("file:") && !urlString.startsWith("classpath:")) {
1✔
145
      urlString = "file:" + urlString;
1✔
146
    }
147
    try {
148
      return new URL(urlString);
1✔
149
    } catch (MalformedURLException e) {
×
150
      return null;
×
151
    }
152
  }
153

154
  /** load an property file and set TsfileDBConfig variables. */
155
  @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity warning
156
  private void loadProps() {
157
    URL url = getPropsUrl(CommonConfig.CONFIG_NAME);
1✔
158
    Properties commonProperties = new Properties();
1✔
159
    if (url != null) {
1✔
160
      try (InputStream inputStream = url.openStream()) {
1✔
161
        logger.info("Start to read config file {}", url);
1✔
162
        commonProperties.load(inputStream);
1✔
163
      } catch (FileNotFoundException e) {
×
164
        logger.warn("Fail to find config file {}", url, e);
×
165
      } catch (IOException e) {
×
166
        logger.warn("Cannot load config file, use default configuration", e);
×
167
      } catch (Exception e) {
×
168
        logger.warn("Incorrect format in config file, use default configuration", e);
×
169
      }
1✔
170
    } else {
171
      logger.warn(
×
172
          "Couldn't load the configuration {} from any of the known sources.",
173
          CommonConfig.CONFIG_NAME);
174
    }
175
    url = getPropsUrl(IoTDBConfig.CONFIG_NAME);
1✔
176
    if (url != null) {
1✔
177
      try (InputStream inputStream = url.openStream()) {
1✔
178
        logger.info("Start to read config file {}", url);
1✔
179
        Properties properties = new Properties();
1✔
180
        properties.load(inputStream);
1✔
181
        commonProperties.putAll(properties);
1✔
182
        loadProperties(commonProperties);
1✔
183
      } catch (FileNotFoundException e) {
×
184
        logger.warn("Fail to find config file {}", url, e);
×
185
      } catch (IOException e) {
×
186
        logger.warn("Cannot load config file, use default configuration", e);
×
187
      } catch (Exception e) {
×
188
        logger.warn("Incorrect format in config file, use default configuration", e);
×
189
      } finally {
190
        // update all data seriesPath
191
        conf.updatePath();
1✔
192
        commonDescriptor.getConfig().updatePath(System.getProperty(IoTDBConstant.IOTDB_HOME, null));
1✔
193
        MetricConfigDescriptor.getInstance().loadProps(commonProperties);
1✔
194
        MetricConfigDescriptor.getInstance()
1✔
195
            .getMetricConfig()
1✔
196
            .updateRpcInstance(
1✔
197
                conf.getClusterName(), NodeType.DATANODE, IoTDBConfig.SYSTEM_DATABASE);
1✔
198
      }
1✔
199
    } else {
200
      logger.warn(
×
201
          "Couldn't load the configuration {} from any of the known sources.",
202
          IoTDBConfig.CONFIG_NAME);
203
    }
204
  }
1✔
205

206
  public void loadProperties(Properties properties) {
207
    conf.setClusterSchemaLimitLevel(
1✔
208
        properties
209
            .getProperty("cluster_schema_limit_level", conf.getClusterSchemaLimitLevel())
1✔
210
            .trim());
1✔
211
    conf.setClusterSchemaLimitThreshold(
1✔
212
        Long.parseLong(
1✔
213
            properties
214
                .getProperty(
1✔
215
                    "cluster_schema_limit_threshold",
216
                    Long.toString(conf.getClusterSchemaLimitThreshold()))
1✔
217
                .trim()));
1✔
218
    conf.setClusterName(
1✔
219
        properties.getProperty(IoTDBConstant.CLUSTER_NAME, conf.getClusterName()).trim());
1✔
220

221
    conf.setRpcAddress(
1✔
222
        properties.getProperty(IoTDBConstant.DN_RPC_ADDRESS, conf.getRpcAddress()).trim());
1✔
223

224
    conf.setRpcThriftCompressionEnable(
1✔
225
        Boolean.parseBoolean(
1✔
226
            properties
227
                .getProperty(
1✔
228
                    "dn_rpc_thrift_compression_enable",
229
                    Boolean.toString(conf.isRpcThriftCompressionEnable()))
1✔
230
                .trim()));
1✔
231

232
    conf.setRpcAdvancedCompressionEnable(
1✔
233
        Boolean.parseBoolean(
1✔
234
            properties
235
                .getProperty(
1✔
236
                    "dn_rpc_advanced_compression_enable",
237
                    Boolean.toString(conf.isRpcAdvancedCompressionEnable()))
1✔
238
                .trim()));
1✔
239

240
    conf.setConnectionTimeoutInMS(
1✔
241
        Integer.parseInt(
1✔
242
            properties
243
                .getProperty(
1✔
244
                    "dn_connection_timeout_ms", String.valueOf(conf.getConnectionTimeoutInMS()))
1✔
245
                .trim()));
1✔
246

247
    if (properties.getProperty("dn_core_connection_for_internal_service", null) != null) {
1✔
248
      conf.setCoreClientNumForEachNode(
×
249
          Integer.parseInt(
×
250
              properties.getProperty("dn_core_connection_for_internal_service").trim()));
×
251
      logger.warn(
×
252
          "The parameter dn_core_connection_for_internal_service is out of date. Please rename it to dn_core_client_count_for_each_node_in_client_manager.");
253
    }
254
    conf.setCoreClientNumForEachNode(
1✔
255
        Integer.parseInt(
1✔
256
            properties
257
                .getProperty(
1✔
258
                    "dn_core_client_count_for_each_node_in_client_manager",
259
                    String.valueOf(conf.getCoreClientNumForEachNode()))
1✔
260
                .trim()));
1✔
261

262
    if (properties.getProperty("dn_max_connection_for_internal_service", null) != null) {
1✔
263
      conf.setMaxClientNumForEachNode(
×
264
          Integer.parseInt(
×
265
              properties.getProperty("dn_max_connection_for_internal_service").trim()));
×
266
      logger.warn(
×
267
          "The parameter dn_max_connection_for_internal_service is out of date. Please rename it to dn_max_client_count_for_each_node_in_client_manager.");
268
    }
269
    conf.setMaxClientNumForEachNode(
1✔
270
        Integer.parseInt(
1✔
271
            properties
272
                .getProperty(
1✔
273
                    "dn_max_client_count_for_each_node_in_client_manager",
274
                    String.valueOf(conf.getMaxClientNumForEachNode()))
1✔
275
                .trim()));
1✔
276

277
    conf.setSelectorNumOfClientManager(
1✔
278
        Integer.parseInt(
1✔
279
            properties
280
                .getProperty(
1✔
281
                    "dn_selector_thread_count_of_client_manager",
282
                    String.valueOf(conf.getSelectorNumOfClientManager()))
1✔
283
                .trim()));
1✔
284

285
    conf.setRpcPort(
1✔
286
        Integer.parseInt(
1✔
287
            properties
288
                .getProperty(IoTDBConstant.DN_RPC_PORT, Integer.toString(conf.getRpcPort()))
1✔
289
                .trim()));
1✔
290

291
    conf.setEnableMLNodeService(
1✔
292
        Boolean.parseBoolean(
1✔
293
            properties
294
                .getProperty(
1✔
295
                    "enable_mlnode_rpc_service", Boolean.toString(conf.isEnableMLNodeService()))
1✔
296
                .trim()));
1✔
297

298
    conf.setMLNodePort(
1✔
299
        Integer.parseInt(
1✔
300
            properties
301
                .getProperty("mlnode_rpc_port", Integer.toString(conf.getMLNodePort()))
1✔
302
                .trim()));
1✔
303

304
    conf.setBufferedArraysMemoryProportion(
1✔
305
        Double.parseDouble(
1✔
306
            properties
307
                .getProperty(
1✔
308
                    "buffered_arrays_memory_proportion",
309
                    Double.toString(conf.getBufferedArraysMemoryProportion()))
1✔
310
                .trim()));
1✔
311

312
    conf.setFlushProportion(
1✔
313
        Double.parseDouble(
1✔
314
            properties
315
                .getProperty("flush_proportion", Double.toString(conf.getFlushProportion()))
1✔
316
                .trim()));
1✔
317

318
    conf.setRejectProportion(
1✔
319
        Double.parseDouble(
1✔
320
            properties
321
                .getProperty("reject_proportion", Double.toString(conf.getRejectProportion()))
1✔
322
                .trim()));
1✔
323

324
    conf.setWriteMemoryVariationReportProportion(
1✔
325
        Double.parseDouble(
1✔
326
            properties
327
                .getProperty(
1✔
328
                    "write_memory_variation_report_proportion",
329
                    Double.toString(conf.getWriteMemoryVariationReportProportion()))
1✔
330
                .trim()));
1✔
331

332
    conf.setMetaDataCacheEnable(
1✔
333
        Boolean.parseBoolean(
1✔
334
            properties
335
                .getProperty(
1✔
336
                    "meta_data_cache_enable", Boolean.toString(conf.isMetaDataCacheEnable()))
1✔
337
                .trim()));
1✔
338

339
    initMemoryAllocate(properties);
1✔
340

341
    loadWALProps(properties);
1✔
342

343
    String systemDir = properties.getProperty("dn_system_dir");
1✔
344
    if (systemDir == null) {
1✔
345
      systemDir = properties.getProperty("base_dir");
1✔
346
      if (systemDir != null) {
1✔
347
        systemDir = FilePathUtils.regularizePath(systemDir) + IoTDBConstant.SYSTEM_FOLDER_NAME;
1✔
348
      } else {
349
        systemDir = conf.getSystemDir();
×
350
      }
351
    }
352
    conf.setSystemDir(systemDir);
1✔
353

354
    conf.setSchemaDir(
1✔
355
        FilePathUtils.regularizePath(conf.getSystemDir()) + IoTDBConstant.SCHEMA_FOLDER_NAME);
1✔
356

357
    conf.setQueryDir(
1✔
358
        FilePathUtils.regularizePath(conf.getSystemDir() + IoTDBConstant.QUERY_FOLDER_NAME));
1✔
359
    String[] defaultTierDirs = new String[conf.getTierDataDirs().length];
1✔
360
    for (int i = 0; i < defaultTierDirs.length; ++i) {
1✔
361
      defaultTierDirs[i] = String.join(",", conf.getTierDataDirs()[i]);
1✔
362
    }
363
    conf.setTierDataDirs(
1✔
364
        parseDataDirs(
1✔
365
            properties.getProperty(
1✔
366
                "dn_data_dirs", String.join(IoTDBConstant.TIER_SEPARATOR, defaultTierDirs))));
1✔
367

368
    conf.setConsensusDir(properties.getProperty("dn_consensus_dir", conf.getConsensusDir()));
1✔
369

370
    int mlogBufferSize =
1✔
371
        Integer.parseInt(
1✔
372
            properties.getProperty("mlog_buffer_size", Integer.toString(conf.getMlogBufferSize())));
1✔
373
    if (mlogBufferSize > 0) {
1✔
374
      conf.setMlogBufferSize(mlogBufferSize);
1✔
375
    }
376

377
    long forceMlogPeriodInMs =
1✔
378
        Long.parseLong(
1✔
379
            properties.getProperty(
1✔
380
                "sync_mlog_period_in_ms", Long.toString(conf.getSyncMlogPeriodInMs())));
1✔
381
    if (forceMlogPeriodInMs > 0) {
1✔
382
      conf.setSyncMlogPeriodInMs(forceMlogPeriodInMs);
1✔
383
    }
384

385
    String oldMultiDirStrategyClassName = conf.getMultiDirStrategyClassName();
1✔
386
    conf.setMultiDirStrategyClassName(
1✔
387
        properties.getProperty("dn_multi_dir_strategy", conf.getMultiDirStrategyClassName()));
1✔
388
    try {
389
      conf.checkMultiDirStrategyClassName();
1✔
390
    } catch (Exception e) {
×
391
      conf.setMultiDirStrategyClassName(oldMultiDirStrategyClassName);
×
392
      throw e;
×
393
    }
1✔
394

395
    conf.setBatchSize(
1✔
396
        Integer.parseInt(
1✔
397
            properties.getProperty("batch_size", Integer.toString(conf.getBatchSize()))));
1✔
398

399
    conf.setEnableMemControl(
1✔
400
        (Boolean.parseBoolean(
1✔
401
            properties.getProperty(
1✔
402
                "enable_mem_control", Boolean.toString(conf.isEnableMemControl())))));
1✔
403
    logger.info("IoTDB enable memory control: {}", conf.isEnableMemControl());
1✔
404

405
    long memTableSizeThreshold =
1✔
406
        Long.parseLong(
1✔
407
            properties
408
                .getProperty(
1✔
409
                    "memtable_size_threshold", Long.toString(conf.getMemtableSizeThreshold()))
1✔
410
                .trim());
1✔
411
    if (memTableSizeThreshold > 0) {
1✔
412
      conf.setMemtableSizeThreshold(memTableSizeThreshold);
1✔
413
    }
414

415
    conf.setTvListSortAlgorithm(
1✔
416
        TVListSortAlgorithm.valueOf(
1✔
417
            properties.getProperty(
1✔
418
                "tvlist_sort_algorithm", conf.getTvListSortAlgorithm().toString())));
1✔
419

420
    conf.setAvgSeriesPointNumberThreshold(
1✔
421
        Integer.parseInt(
1✔
422
            properties.getProperty(
1✔
423
                "avg_series_point_number_threshold",
424
                Integer.toString(conf.getAvgSeriesPointNumberThreshold()))));
1✔
425

426
    conf.setCheckPeriodWhenInsertBlocked(
1✔
427
        Integer.parseInt(
1✔
428
            properties.getProperty(
1✔
429
                "check_period_when_insert_blocked",
430
                Integer.toString(conf.getCheckPeriodWhenInsertBlocked()))));
1✔
431

432
    conf.setMaxWaitingTimeWhenInsertBlocked(
1✔
433
        Integer.parseInt(
1✔
434
            properties.getProperty(
1✔
435
                "max_waiting_time_when_insert_blocked",
436
                Integer.toString(conf.getMaxWaitingTimeWhenInsertBlocked()))));
1✔
437

438
    conf.setIoTaskQueueSizeForFlushing(
1✔
439
        Integer.parseInt(
1✔
440
            properties.getProperty(
1✔
441
                "io_task_queue_size_for_flushing",
442
                Integer.toString(conf.getIoTaskQueueSizeForFlushing()))));
1✔
443

444
    conf.setCompactionScheduleIntervalInMs(
1✔
445
        Long.parseLong(
1✔
446
            properties.getProperty(
1✔
447
                "compaction_schedule_interval_in_ms",
448
                Long.toString(conf.getCompactionScheduleIntervalInMs()))));
1✔
449

450
    conf.setCompactionSubmissionIntervalInMs(
1✔
451
        Long.parseLong(
1✔
452
            properties.getProperty(
1✔
453
                "compaction_submission_interval_in_ms",
454
                Long.toString(conf.getCompactionSubmissionIntervalInMs()))));
1✔
455

456
    conf.setEnableCrossSpaceCompaction(
1✔
457
        Boolean.parseBoolean(
1✔
458
            properties.getProperty(
1✔
459
                "enable_cross_space_compaction",
460
                Boolean.toString(conf.isEnableCrossSpaceCompaction()))));
1✔
461

462
    conf.setEnableSeqSpaceCompaction(
1✔
463
        Boolean.parseBoolean(
1✔
464
            properties.getProperty(
1✔
465
                "enable_seq_space_compaction",
466
                Boolean.toString(conf.isEnableSeqSpaceCompaction()))));
1✔
467

468
    conf.setEnableUnseqSpaceCompaction(
1✔
469
        Boolean.parseBoolean(
1✔
470
            properties.getProperty(
1✔
471
                "enable_unseq_space_compaction",
472
                Boolean.toString(conf.isEnableUnseqSpaceCompaction()))));
1✔
473

474
    conf.setCrossCompactionSelector(
1✔
475
        CrossCompactionSelector.getCrossCompactionSelector(
1✔
476
            properties.getProperty(
1✔
477
                "cross_selector", conf.getCrossCompactionSelector().toString())));
1✔
478

479
    conf.setInnerSequenceCompactionSelector(
1✔
480
        InnerSequenceCompactionSelector.getInnerSequenceCompactionSelector(
1✔
481
            properties.getProperty(
1✔
482
                "inner_seq_selector", conf.getInnerSequenceCompactionSelector().toString())));
1✔
483

484
    conf.setInnerUnsequenceCompactionSelector(
1✔
485
        InnerUnsequenceCompactionSelector.getInnerUnsequenceCompactionSelector(
1✔
486
            properties.getProperty(
1✔
487
                "inner_unseq_selector", conf.getInnerUnsequenceCompactionSelector().toString())));
1✔
488

489
    conf.setInnerSeqCompactionPerformer(
1✔
490
        InnerSeqCompactionPerformer.getInnerSeqCompactionPerformer(
1✔
491
            properties.getProperty(
1✔
492
                "inner_seq_performer", conf.getInnerSeqCompactionPerformer().toString())));
1✔
493

494
    conf.setInnerUnseqCompactionPerformer(
1✔
495
        InnerUnseqCompactionPerformer.getInnerUnseqCompactionPerformer(
1✔
496
            properties.getProperty(
1✔
497
                "inner_unseq_performer", conf.getInnerUnseqCompactionPerformer().toString())));
1✔
498

499
    conf.setCrossCompactionPerformer(
1✔
500
        CrossCompactionPerformer.getCrossCompactionPerformer(
1✔
501
            properties.getProperty(
1✔
502
                "cross_performer", conf.getCrossCompactionPerformer().toString())));
1✔
503

504
    conf.setCompactionPriority(
1✔
505
        CompactionPriority.valueOf(
1✔
506
            properties.getProperty(
1✔
507
                "compaction_priority", conf.getCompactionPriority().toString())));
1✔
508

509
    conf.setEnableCompactionMemControl(
1✔
510
        Boolean.parseBoolean(
1✔
511
            properties.getProperty(
1✔
512
                "enable_compaction_mem_control",
513
                Boolean.toString(conf.isEnableCompactionMemControl()))));
1✔
514

515
    int subtaskNum =
1✔
516
        Integer.parseInt(
1✔
517
            properties.getProperty(
1✔
518
                "sub_compaction_thread_count", Integer.toString(conf.getSubCompactionTaskNum())));
1✔
519
    subtaskNum = subtaskNum <= 0 ? 1 : subtaskNum;
1✔
520
    conf.setSubCompactionTaskNum(subtaskNum);
1✔
521

522
    conf.setQueryTimeoutThreshold(
1✔
523
        Long.parseLong(
1✔
524
            properties.getProperty(
1✔
525
                "query_timeout_threshold", Long.toString(conf.getQueryTimeoutThreshold()))));
1✔
526

527
    conf.setSessionTimeoutThreshold(
1✔
528
        Integer.parseInt(
1✔
529
            properties.getProperty(
1✔
530
                "dn_session_timeout_threshold",
531
                Integer.toString(conf.getSessionTimeoutThreshold()))));
1✔
532

533
    conf.setFlushThreadCount(
1✔
534
        Integer.parseInt(
1✔
535
            properties.getProperty(
1✔
536
                "flush_thread_count", Integer.toString(conf.getFlushThreadCount()))));
1✔
537

538
    if (conf.getFlushThreadCount() <= 0) {
1✔
539
      conf.setFlushThreadCount(Runtime.getRuntime().availableProcessors());
×
540
    }
541

542
    // start: index parameter setting
543
    conf.setIndexRootFolder(properties.getProperty("index_root_dir", conf.getIndexRootFolder()));
1✔
544

545
    conf.setEnableIndex(
1✔
546
        Boolean.parseBoolean(
1✔
547
            properties.getProperty("enable_index", Boolean.toString(conf.isEnableIndex()))));
1✔
548

549
    conf.setConcurrentIndexBuildThread(
1✔
550
        Integer.parseInt(
1✔
551
            properties.getProperty(
1✔
552
                "concurrent_index_build_thread",
553
                Integer.toString(conf.getConcurrentIndexBuildThread()))));
1✔
554
    if (conf.getConcurrentIndexBuildThread() <= 0) {
1✔
555
      conf.setConcurrentIndexBuildThread(Runtime.getRuntime().availableProcessors());
×
556
    }
557

558
    conf.setDefaultIndexWindowRange(
1✔
559
        Integer.parseInt(
1✔
560
            properties.getProperty(
1✔
561
                "default_index_window_range",
562
                Integer.toString(conf.getDefaultIndexWindowRange()))));
1✔
563

564
    conf.setQueryThreadCount(
1✔
565
        Integer.parseInt(
1✔
566
            properties.getProperty(
1✔
567
                "query_thread_count", Integer.toString(conf.getQueryThreadCount()))));
1✔
568

569
    if (conf.getQueryThreadCount() <= 0) {
1✔
570
      conf.setQueryThreadCount(Runtime.getRuntime().availableProcessors());
×
571
    }
572

573
    conf.setDegreeOfParallelism(
1✔
574
        Integer.parseInt(
1✔
575
            properties.getProperty(
1✔
576
                "degree_of_query_parallelism", Integer.toString(conf.getDegreeOfParallelism()))));
1✔
577

578
    if (conf.getDegreeOfParallelism() <= 0) {
1✔
579
      conf.setDegreeOfParallelism(Runtime.getRuntime().availableProcessors() / 2);
×
580
    }
581

582
    conf.setModeMapSizeThreshold(
1✔
583
        Integer.parseInt(
1✔
584
            properties.getProperty(
1✔
585
                "mode_map_size_threshold", Integer.toString(conf.getModeMapSizeThreshold()))));
1✔
586

587
    if (conf.getModeMapSizeThreshold() <= 0) {
1✔
588
      conf.setModeMapSizeThreshold(10000);
×
589
    }
590

591
    conf.setMaxAllowedConcurrentQueries(
1✔
592
        Integer.parseInt(
1✔
593
            properties.getProperty(
1✔
594
                "max_allowed_concurrent_queries",
595
                Integer.toString(conf.getMaxAllowedConcurrentQueries()))));
1✔
596

597
    if (conf.getMaxAllowedConcurrentQueries() <= 0) {
1✔
598
      conf.setMaxAllowedConcurrentQueries(1000);
×
599
    }
600

601
    conf.setmRemoteSchemaCacheSize(
1✔
602
        Integer.parseInt(
1✔
603
            properties
604
                .getProperty(
1✔
605
                    "remote_schema_cache_size", Integer.toString(conf.getmRemoteSchemaCacheSize()))
1✔
606
                .trim()));
1✔
607

608
    conf.setLanguageVersion(
1✔
609
        properties.getProperty("language_version", conf.getLanguageVersion()).trim());
1✔
610

611
    if (properties.containsKey("chunk_buffer_pool_enable")) {
1✔
612
      conf.setChunkBufferPoolEnable(
×
613
          Boolean.parseBoolean(properties.getProperty("chunk_buffer_pool_enable")));
×
614
    }
615
    conf.setCrossCompactionFileSelectionTimeBudget(
1✔
616
        Long.parseLong(
1✔
617
            properties.getProperty(
1✔
618
                "cross_compaction_file_selection_time_budget",
619
                Long.toString(conf.getCrossCompactionFileSelectionTimeBudget()))));
1✔
620
    conf.setMergeIntervalSec(
1✔
621
        Long.parseLong(
1✔
622
            properties.getProperty(
1✔
623
                "merge_interval_sec", Long.toString(conf.getMergeIntervalSec()))));
1✔
624
    conf.setCompactionThreadCount(
1✔
625
        Integer.parseInt(
1✔
626
            properties.getProperty(
1✔
627
                "compaction_thread_count", Integer.toString(conf.getCompactionThreadCount()))));
1✔
628
    conf.setChunkMetadataSizeProportion(
1✔
629
        Double.parseDouble(
1✔
630
            properties.getProperty(
1✔
631
                "chunk_metadata_size_proportion",
632
                Double.toString(conf.getChunkMetadataSizeProportion()))));
1✔
633
    conf.setTargetCompactionFileSize(
1✔
634
        Long.parseLong(
1✔
635
            properties.getProperty(
1✔
636
                "target_compaction_file_size", Long.toString(conf.getTargetCompactionFileSize()))));
1✔
637
    conf.setTargetChunkSize(
1✔
638
        Long.parseLong(
1✔
639
            properties.getProperty("target_chunk_size", Long.toString(conf.getTargetChunkSize()))));
1✔
640
    conf.setTargetChunkPointNum(
1✔
641
        Long.parseLong(
1✔
642
            properties.getProperty(
1✔
643
                "target_chunk_point_num", Long.toString(conf.getTargetChunkPointNum()))));
1✔
644
    conf.setChunkPointNumLowerBoundInCompaction(
1✔
645
        Long.parseLong(
1✔
646
            properties.getProperty(
1✔
647
                "chunk_point_num_lower_bound_in_compaction",
648
                Long.toString(conf.getChunkPointNumLowerBoundInCompaction()))));
1✔
649
    conf.setChunkSizeLowerBoundInCompaction(
1✔
650
        Long.parseLong(
1✔
651
            properties.getProperty(
1✔
652
                "chunk_size_lower_bound_in_compaction",
653
                Long.toString(conf.getChunkSizeLowerBoundInCompaction()))));
1✔
654
    conf.setFileLimitPerInnerTask(
1✔
655
        Integer.parseInt(
1✔
656
            properties.getProperty(
1✔
657
                "max_inner_compaction_candidate_file_num",
658
                Integer.toString(conf.getFileLimitPerInnerTask()))));
1✔
659
    conf.setFileLimitPerCrossTask(
1✔
660
        Integer.parseInt(
1✔
661
            properties.getProperty(
1✔
662
                "max_cross_compaction_candidate_file_num",
663
                Integer.toString(conf.getFileLimitPerCrossTask()))));
1✔
664
    conf.setMaxCrossCompactionCandidateFileSize(
1✔
665
        Long.parseLong(
1✔
666
            properties.getProperty(
1✔
667
                "max_cross_compaction_candidate_file_size",
668
                Long.toString(conf.getMaxCrossCompactionCandidateFileSize()))));
1✔
669
    conf.setMinCrossCompactionUnseqFileLevel(
1✔
670
        Integer.parseInt(
1✔
671
            properties.getProperty(
1✔
672
                "min_cross_compaction_unseq_file_level",
673
                Integer.toString(conf.getMinCrossCompactionUnseqFileLevel()))));
1✔
674

675
    conf.setCompactionWriteThroughputMbPerSec(
1✔
676
        Integer.parseInt(
1✔
677
            properties.getProperty(
1✔
678
                "compaction_write_throughput_mb_per_sec",
679
                Integer.toString(conf.getCompactionWriteThroughputMbPerSec()))));
1✔
680

681
    conf.setCompactionValidationLevel(
1✔
682
        CompactionValidationLevel.valueOf(
1✔
683
            properties.getProperty(
1✔
684
                "compaction_validation_level", conf.getCompactionValidationLevel().toString())));
1✔
685
    conf.setCandidateCompactionTaskQueueSize(
1✔
686
        Integer.parseInt(
1✔
687
            properties.getProperty(
1✔
688
                "candidate_compaction_task_queue_size",
689
                Integer.toString(conf.getCandidateCompactionTaskQueueSize()))));
1✔
690

691
    conf.setEnablePartialInsert(
1✔
692
        Boolean.parseBoolean(
1✔
693
            properties.getProperty(
1✔
694
                "enable_partial_insert", String.valueOf(conf.isEnablePartialInsert()))));
1✔
695

696
    conf.setEnable13DataInsertAdapt(
1✔
697
        Boolean.parseBoolean(
1✔
698
            properties.getProperty(
1✔
699
                "0.13_data_insert_adapt", String.valueOf(conf.isEnable13DataInsertAdapt()))));
1✔
700

701
    int rpcSelectorThreadNum =
1✔
702
        Integer.parseInt(
1✔
703
            properties.getProperty(
1✔
704
                "dn_rpc_selector_thread_count",
705
                Integer.toString(conf.getRpcSelectorThreadCount()).trim()));
1✔
706
    if (rpcSelectorThreadNum <= 0) {
1✔
707
      rpcSelectorThreadNum = 1;
×
708
    }
709

710
    conf.setRpcSelectorThreadCount(rpcSelectorThreadNum);
1✔
711

712
    int minConcurrentClientNum =
1✔
713
        Integer.parseInt(
1✔
714
            properties.getProperty(
1✔
715
                "dn_rpc_min_concurrent_client_num",
716
                Integer.toString(conf.getRpcMinConcurrentClientNum()).trim()));
1✔
717
    if (minConcurrentClientNum <= 0) {
1✔
718
      minConcurrentClientNum = Runtime.getRuntime().availableProcessors();
×
719
    }
720

721
    conf.setRpcMinConcurrentClientNum(minConcurrentClientNum);
1✔
722

723
    int maxConcurrentClientNum =
1✔
724
        Integer.parseInt(
1✔
725
            properties.getProperty(
1✔
726
                "dn_rpc_max_concurrent_client_num",
727
                Integer.toString(conf.getRpcMaxConcurrentClientNum()).trim()));
1✔
728
    if (maxConcurrentClientNum <= 0) {
1✔
729
      maxConcurrentClientNum = 65535;
×
730
    }
731

732
    conf.setRpcMaxConcurrentClientNum(maxConcurrentClientNum);
1✔
733

734
    loadAutoCreateSchemaProps(properties);
1✔
735

736
    conf.setTsFileStorageFs(
1✔
737
        properties.getProperty("tsfile_storage_fs", conf.getTsFileStorageFs().toString()));
1✔
738
    conf.setEnableHDFS(
1✔
739
        Boolean.parseBoolean(
1✔
740
            properties.getProperty("enable_hdfs", String.valueOf(conf.isEnableHDFS()))));
1✔
741
    conf.setCoreSitePath(properties.getProperty("core_site_path", conf.getCoreSitePath()));
1✔
742
    conf.setHdfsSitePath(properties.getProperty("hdfs_site_path", conf.getHdfsSitePath()));
1✔
743
    conf.setHdfsIp(properties.getProperty("hdfs_ip", conf.getRawHDFSIp()).split(","));
1✔
744
    conf.setHdfsPort(properties.getProperty("hdfs_port", conf.getHdfsPort()));
1✔
745
    conf.setDfsNameServices(properties.getProperty("dfs_nameservices", conf.getDfsNameServices()));
1✔
746
    conf.setDfsHaNamenodes(
1✔
747
        properties.getProperty("dfs_ha_namenodes", conf.getRawDfsHaNamenodes()).split(","));
1✔
748
    conf.setDfsHaAutomaticFailoverEnabled(
1✔
749
        Boolean.parseBoolean(
1✔
750
            properties.getProperty(
1✔
751
                "dfs_ha_automatic_failover_enabled",
752
                String.valueOf(conf.isDfsHaAutomaticFailoverEnabled()))));
1✔
753
    conf.setDfsClientFailoverProxyProvider(
1✔
754
        properties.getProperty(
1✔
755
            "dfs_client_failover_proxy_provider", conf.getDfsClientFailoverProxyProvider()));
1✔
756
    conf.setUseKerberos(
1✔
757
        Boolean.parseBoolean(
1✔
758
            properties.getProperty("hdfs_use_kerberos", String.valueOf(conf.isUseKerberos()))));
1✔
759
    conf.setKerberosKeytabFilePath(
1✔
760
        properties.getProperty("kerberos_keytab_file_path", conf.getKerberosKeytabFilePath()));
1✔
761
    conf.setKerberosPrincipal(
1✔
762
        properties.getProperty("kerberos_principal", conf.getKerberosPrincipal()));
1✔
763

764
    // the size of device path cache
765
    conf.setDevicePathCacheSize(
1✔
766
        Integer.parseInt(
1✔
767
            properties.getProperty(
1✔
768
                "device_path_cache_size", String.valueOf(conf.getDevicePathCacheSize()))));
1✔
769

770
    // the num of memtables in each database
771
    conf.setConcurrentWritingTimePartition(
1✔
772
        Integer.parseInt(
1✔
773
            properties.getProperty(
1✔
774
                "concurrent_writing_time_partition",
775
                String.valueOf(conf.getConcurrentWritingTimePartition()))));
1✔
776

777
    // the default fill interval in LinearFill and PreviousFill
778
    conf.setDefaultFillInterval(
1✔
779
        Integer.parseInt(
1✔
780
            properties.getProperty(
1✔
781
                "default_fill_interval", String.valueOf(conf.getDefaultFillInterval()))));
1✔
782

783
    conf.setTagAttributeFlushInterval(
1✔
784
        Integer.parseInt(
1✔
785
            properties.getProperty(
1✔
786
                "tag_attribute_flush_interval",
787
                String.valueOf(conf.getTagAttributeFlushInterval()))));
1✔
788

789
    conf.setPrimitiveArraySize(
1✔
790
        (Integer.parseInt(
1✔
791
            properties.getProperty(
1✔
792
                "primitive_array_size", String.valueOf(conf.getPrimitiveArraySize())))));
1✔
793

794
    conf.setThriftMaxFrameSize(
1✔
795
        Integer.parseInt(
1✔
796
            properties.getProperty(
1✔
797
                "dn_thrift_max_frame_size", String.valueOf(conf.getThriftMaxFrameSize()))));
1✔
798

799
    if (conf.getThriftMaxFrameSize() < IoTDBConstant.LEFT_SIZE_IN_REQUEST * 2) {
1✔
800
      conf.setThriftMaxFrameSize(IoTDBConstant.LEFT_SIZE_IN_REQUEST * 2);
×
801
    }
802

803
    conf.setThriftDefaultBufferSize(
1✔
804
        Integer.parseInt(
1✔
805
            properties.getProperty(
1✔
806
                "dn_thrift_init_buffer_size", String.valueOf(conf.getThriftDefaultBufferSize()))));
1✔
807

808
    conf.setSlowQueryThreshold(
1✔
809
        Long.parseLong(
1✔
810
            properties.getProperty(
1✔
811
                "slow_query_threshold", String.valueOf(conf.getSlowQueryThreshold()))));
1✔
812

813
    conf.setDataRegionNum(
1✔
814
        Integer.parseInt(
1✔
815
            properties.getProperty("data_region_num", String.valueOf(conf.getDataRegionNum()))));
1✔
816

817
    conf.setRecoveryLogIntervalInMs(
1✔
818
        Long.parseLong(
1✔
819
            properties.getProperty(
1✔
820
                "recovery_log_interval_in_ms", String.valueOf(conf.getRecoveryLogIntervalInMs()))));
1✔
821

822
    conf.setEnableDiscardOutOfOrderData(
1✔
823
        Boolean.parseBoolean(
1✔
824
            properties.getProperty(
1✔
825
                "enable_discard_out_of_order_data",
826
                Boolean.toString(conf.isEnableDiscardOutOfOrderData()))));
1✔
827

828
    conf.setWindowEvaluationThreadCount(
1✔
829
        Integer.parseInt(
1✔
830
            properties.getProperty(
1✔
831
                "window_evaluation_thread_count",
832
                Integer.toString(conf.getWindowEvaluationThreadCount()))));
1✔
833
    if (conf.getWindowEvaluationThreadCount() <= 0) {
1✔
834
      conf.setWindowEvaluationThreadCount(Runtime.getRuntime().availableProcessors());
×
835
    }
836

837
    conf.setMaxPendingWindowEvaluationTasks(
1✔
838
        Integer.parseInt(
1✔
839
            properties.getProperty(
1✔
840
                "max_pending_window_evaluation_tasks",
841
                Integer.toString(conf.getMaxPendingWindowEvaluationTasks()))));
1✔
842
    if (conf.getMaxPendingWindowEvaluationTasks() <= 0) {
1✔
843
      conf.setMaxPendingWindowEvaluationTasks(64);
×
844
    }
845

846
    conf.setCachedMNodeSizeInPBTreeMode(
1✔
847
        Integer.parseInt(
1✔
848
            properties.getProperty(
1✔
849
                "cached_mnode_size_in_pbtree_mode",
850
                String.valueOf(conf.getCachedMNodeSizeInPBTreeMode()))));
1✔
851

852
    conf.setMinimumSegmentInPBTree(
1✔
853
        Short.parseShort(
1✔
854
            properties.getProperty(
1✔
855
                "minimum_pbtree_segment_in_bytes",
856
                String.valueOf(conf.getMinimumSegmentInPBTree()))));
1✔
857

858
    conf.setPageCacheSizeInPBTree(
1✔
859
        Integer.parseInt(
1✔
860
            properties.getProperty(
1✔
861
                "page_cache_in_pbtree", String.valueOf(conf.getPageCacheSizeInPBTree()))));
1✔
862

863
    conf.setPBTreeLogSize(
1✔
864
        Integer.parseInt(
1✔
865
            properties.getProperty("pbtree_log_size", String.valueOf(conf.getPBTreeLogSize()))));
1✔
866

867
    conf.setMaxMeasurementNumOfInternalRequest(
1✔
868
        Integer.parseInt(
1✔
869
            properties.getProperty(
1✔
870
                "max_measurement_num_of_internal_request",
871
                String.valueOf(conf.getMaxMeasurementNumOfInternalRequest()))));
1✔
872

873
    // mqtt
874
    loadMqttProps(properties);
1✔
875

876
    conf.setIntoOperationBufferSizeInByte(
1✔
877
        Long.parseLong(
1✔
878
            properties.getProperty(
1✔
879
                "into_operation_buffer_size_in_byte",
880
                String.valueOf(conf.getIntoOperationBufferSizeInByte()))));
1✔
881
    conf.setSelectIntoInsertTabletPlanRowLimit(
1✔
882
        Integer.parseInt(
1✔
883
            properties.getProperty(
1✔
884
                "select_into_insert_tablet_plan_row_limit",
885
                String.valueOf(conf.getSelectIntoInsertTabletPlanRowLimit()))));
1✔
886
    conf.setIntoOperationExecutionThreadCount(
1✔
887
        Integer.parseInt(
1✔
888
            properties.getProperty(
1✔
889
                "into_operation_execution_thread_count",
890
                String.valueOf(conf.getIntoOperationExecutionThreadCount()))));
1✔
891
    if (conf.getIntoOperationExecutionThreadCount() <= 0) {
1✔
892
      conf.setIntoOperationExecutionThreadCount(2);
×
893
    }
894

895
    conf.setMaxLoadingTimeseriesNumber(
1✔
896
        Integer.parseInt(
1✔
897
            properties.getProperty(
1✔
898
                "max_loading_timeseries_number",
899
                String.valueOf(conf.getMaxLoadingTimeseriesNumber()))));
1✔
900

901
    conf.setExtPipeDir(properties.getProperty("ext_pipe_dir", conf.getExtPipeDir()).trim());
1✔
902

903
    // At the same time, set TSFileConfig
904
    List<FSType> fsTypes = new ArrayList<>();
1✔
905
    fsTypes.add(FSType.LOCAL);
1✔
906
    if (Boolean.parseBoolean(
1✔
907
        properties.getProperty("enable_hdfs", String.valueOf(conf.isEnableHDFS())))) {
1✔
908
      fsTypes.add(FSType.HDFS);
×
909
    }
910
    TSFileDescriptor.getInstance().getConfig().setTSFileStorageFs(fsTypes.toArray(new FSType[0]));
1✔
911
    TSFileDescriptor.getInstance()
1✔
912
        .getConfig()
1✔
913
        .setCoreSitePath(properties.getProperty("core_site_path", conf.getCoreSitePath()));
1✔
914
    TSFileDescriptor.getInstance()
1✔
915
        .getConfig()
1✔
916
        .setHdfsSitePath(properties.getProperty("hdfs_site_path", conf.getHdfsSitePath()));
1✔
917
    TSFileDescriptor.getInstance()
1✔
918
        .getConfig()
1✔
919
        .setHdfsIp(properties.getProperty("hdfs_ip", conf.getRawHDFSIp()).split(","));
1✔
920
    TSFileDescriptor.getInstance()
1✔
921
        .getConfig()
1✔
922
        .setHdfsPort(properties.getProperty("hdfs_port", conf.getHdfsPort()));
1✔
923
    TSFileDescriptor.getInstance()
1✔
924
        .getConfig()
1✔
925
        .setDfsNameServices(properties.getProperty("dfs_nameservices", conf.getDfsNameServices()));
1✔
926
    TSFileDescriptor.getInstance()
1✔
927
        .getConfig()
1✔
928
        .setDfsHaNamenodes(
1✔
929
            properties.getProperty("dfs_ha_namenodes", conf.getRawDfsHaNamenodes()).split(","));
1✔
930
    TSFileDescriptor.getInstance()
1✔
931
        .getConfig()
1✔
932
        .setDfsHaAutomaticFailoverEnabled(
1✔
933
            Boolean.parseBoolean(
1✔
934
                properties.getProperty(
1✔
935
                    "dfs_ha_automatic_failover_enabled",
936
                    String.valueOf(conf.isDfsHaAutomaticFailoverEnabled()))));
1✔
937
    TSFileDescriptor.getInstance()
1✔
938
        .getConfig()
1✔
939
        .setDfsClientFailoverProxyProvider(
1✔
940
            properties.getProperty(
1✔
941
                "dfs_client_failover_proxy_provider", conf.getDfsClientFailoverProxyProvider()));
1✔
942
    TSFileDescriptor.getInstance()
1✔
943
        .getConfig()
1✔
944
        .setPatternMatchingThreshold(
1✔
945
            Integer.parseInt(
1✔
946
                properties.getProperty(
1✔
947
                    "pattern_matching_threshold",
948
                    String.valueOf(conf.getPatternMatchingThreshold()))));
1✔
949
    TSFileDescriptor.getInstance()
1✔
950
        .getConfig()
1✔
951
        .setUseKerberos(
1✔
952
            Boolean.parseBoolean(
1✔
953
                properties.getProperty("hdfs_use_kerberos", String.valueOf(conf.isUseKerberos()))));
1✔
954
    TSFileDescriptor.getInstance()
1✔
955
        .getConfig()
1✔
956
        .setKerberosKeytabFilePath(
1✔
957
            properties.getProperty("kerberos_keytab_file_path", conf.getKerberosKeytabFilePath()));
1✔
958
    TSFileDescriptor.getInstance()
1✔
959
        .getConfig()
1✔
960
        .setKerberosPrincipal(
1✔
961
            properties.getProperty("kerberos_principal", conf.getKerberosPrincipal()));
1✔
962
    TSFileDescriptor.getInstance().getConfig().setBatchSize(conf.getBatchSize());
1✔
963

964
    conf.setCoordinatorReadExecutorSize(
1✔
965
        Integer.parseInt(
1✔
966
            properties.getProperty(
1✔
967
                "coordinator_read_executor_size",
968
                Integer.toString(conf.getCoordinatorReadExecutorSize()))));
1✔
969
    conf.setCoordinatorWriteExecutorSize(
1✔
970
        Integer.parseInt(
1✔
971
            properties.getProperty(
1✔
972
                "coordinator_write_executor_size",
973
                Integer.toString(conf.getCoordinatorWriteExecutorSize()))));
1✔
974

975
    // commons
976
    commonDescriptor.loadCommonProps(properties);
1✔
977
    commonDescriptor.initCommonConfigDir(conf.getSystemDir());
1✔
978

979
    // timed flush memtable
980
    loadTimedService(properties);
1✔
981

982
    // set tsfile-format config
983
    loadTsFileProps(properties);
1✔
984

985
    // make RPCTransportFactory taking effect.
986
    RpcTransportFactory.reInit();
1✔
987

988
    // UDF
989
    loadUDFProps(properties);
1✔
990

991
    // trigger
992
    loadTriggerProps(properties);
1✔
993

994
    // CQ
995
    loadCQProps(properties);
1✔
996

997
    // Pipe
998
    loadPipeProps(properties);
1✔
999

1000
    // cluster
1001
    loadClusterProps(properties);
1✔
1002

1003
    // shuffle
1004
    loadShuffleProps(properties);
1✔
1005

1006
    // author cache
1007
    loadAuthorCache(properties);
1✔
1008

1009
    conf.setQuotaEnable(
1✔
1010
        Boolean.parseBoolean(
1✔
1011
            properties.getProperty("quota_enable", String.valueOf(conf.isQuotaEnable()))));
1✔
1012

1013
    // the buffer for sort operator to calculate
1014
    conf.setSortBufferSize(
1✔
1015
        Long.parseLong(
1✔
1016
            properties
1017
                .getProperty("sort_buffer_size_in_bytes", Long.toString(conf.getSortBufferSize()))
1✔
1018
                .trim()));
1✔
1019

1020
    // tmp filePath for sort operator
1021
    conf.setSortTmpDir(properties.getProperty("sort_tmp_dir", conf.getSortTmpDir()));
1✔
1022

1023
    conf.setRateLimiterType(properties.getProperty("rate_limiter_type", conf.getRateLimiterType()));
1✔
1024

1025
    conf.setDataNodeSchemaCacheEvictionPolicy(
1✔
1026
        properties.getProperty(
1✔
1027
            "datanode_schema_cache_eviction_policy", conf.getDataNodeSchemaCacheEvictionPolicy()));
1✔
1028

1029
    loadIoTConsensusProps(properties);
1✔
1030
  }
1✔
1031

1032
  private void loadIoTConsensusProps(Properties properties) {
1033
    conf.setMaxLogEntriesNumPerBatch(
1✔
1034
        Integer.parseInt(
1✔
1035
            properties
1036
                .getProperty(
1✔
1037
                    "data_region_iot_max_log_entries_num_per_batch",
1038
                    String.valueOf(conf.getMaxLogEntriesNumPerBatch()))
1✔
1039
                .trim()));
1✔
1040
    conf.setMaxSizePerBatch(
1✔
1041
        Integer.parseInt(
1✔
1042
            properties
1043
                .getProperty(
1✔
1044
                    "data_region_iot_max_size_per_batch", String.valueOf(conf.getMaxSizePerBatch()))
1✔
1045
                .trim()));
1✔
1046
    conf.setMaxPendingBatchesNum(
1✔
1047
        Integer.parseInt(
1✔
1048
            properties
1049
                .getProperty(
1✔
1050
                    "data_region_iot_max_pending_batches_num",
1051
                    String.valueOf(conf.getMaxPendingBatchesNum()))
1✔
1052
                .trim()));
1✔
1053
    conf.setMaxMemoryRatioForQueue(
1✔
1054
        Double.parseDouble(
1✔
1055
            properties
1056
                .getProperty(
1✔
1057
                    "data_region_iot_max_memory_ratio_for_queue",
1058
                    String.valueOf(conf.getMaxMemoryRatioForQueue()))
1✔
1059
                .trim()));
1✔
1060
  }
1✔
1061

1062
  private void loadAuthorCache(Properties properties) {
1063
    conf.setAuthorCacheSize(
1✔
1064
        Integer.parseInt(
1✔
1065
            properties.getProperty(
1✔
1066
                "author_cache_size", String.valueOf(conf.getAuthorCacheSize()))));
1✔
1067
    conf.setAuthorCacheExpireTime(
1✔
1068
        Integer.parseInt(
1✔
1069
            properties.getProperty(
1✔
1070
                "author_cache_expire_time", String.valueOf(conf.getAuthorCacheExpireTime()))));
1✔
1071
  }
1✔
1072

1073
  private void loadWALProps(Properties properties) {
1074
    conf.setWalMode(
1✔
1075
        WALMode.valueOf((properties.getProperty("wal_mode", conf.getWalMode().toString()))));
1✔
1076

1077
    int maxWalNodesNum =
1✔
1078
        Integer.parseInt(
1✔
1079
            properties.getProperty(
1✔
1080
                "max_wal_nodes_num", Integer.toString(conf.getMaxWalNodesNum())));
1✔
1081
    if (maxWalNodesNum > 0) {
1✔
1082
      conf.setMaxWalNodesNum(maxWalNodesNum);
×
1083
    }
1084

1085
    int walBufferSize =
1✔
1086
        Integer.parseInt(
1✔
1087
            properties.getProperty(
1✔
1088
                "wal_buffer_size_in_byte", Integer.toString(conf.getWalBufferSize())));
1✔
1089
    if (walBufferSize > 0) {
1✔
1090
      conf.setWalBufferSize(walBufferSize);
1✔
1091
    }
1092

1093
    int walBufferQueueCapacity =
1✔
1094
        Integer.parseInt(
1✔
1095
            properties.getProperty(
1✔
1096
                "wal_buffer_queue_capacity", Integer.toString(conf.getWalBufferQueueCapacity())));
1✔
1097
    if (walBufferQueueCapacity > 0) {
1✔
1098
      conf.setWalBufferQueueCapacity(walBufferQueueCapacity);
1✔
1099
    }
1100

1101
    loadWALHotModifiedProps(properties);
1✔
1102
  }
1✔
1103

1104
  private void loadWALHotModifiedProps(Properties properties) {
1105
    long walAsyncModeFsyncDelayInMs =
1✔
1106
        Long.parseLong(
1✔
1107
            properties.getProperty(
1✔
1108
                "wal_async_mode_fsync_delay_in_ms",
1109
                Long.toString(conf.getWalAsyncModeFsyncDelayInMs())));
1✔
1110
    if (walAsyncModeFsyncDelayInMs > 0) {
1✔
1111
      conf.setWalAsyncModeFsyncDelayInMs(walAsyncModeFsyncDelayInMs);
1✔
1112
    }
1113

1114
    long walSyncModeFsyncDelayInMs =
1✔
1115
        Long.parseLong(
1✔
1116
            properties.getProperty(
1✔
1117
                "wal_sync_mode_fsync_delay_in_ms",
1118
                Long.toString(conf.getWalSyncModeFsyncDelayInMs())));
1✔
1119
    if (walSyncModeFsyncDelayInMs > 0) {
1✔
1120
      conf.setWalSyncModeFsyncDelayInMs(walSyncModeFsyncDelayInMs);
1✔
1121
    }
1122

1123
    long walFileSizeThreshold =
1✔
1124
        Long.parseLong(
1✔
1125
            properties.getProperty(
1✔
1126
                "wal_file_size_threshold_in_byte",
1127
                Long.toString(conf.getWalFileSizeThresholdInByte())));
1✔
1128
    if (walFileSizeThreshold > 0) {
1✔
1129
      conf.setWalFileSizeThresholdInByte(walFileSizeThreshold);
1✔
1130
    }
1131

1132
    double walMinEffectiveInfoRatio =
1✔
1133
        Double.parseDouble(
1✔
1134
            properties.getProperty(
1✔
1135
                "wal_min_effective_info_ratio",
1136
                Double.toString(conf.getWalMinEffectiveInfoRatio())));
1✔
1137
    if (walMinEffectiveInfoRatio > 0) {
1✔
1138
      conf.setWalMinEffectiveInfoRatio(walMinEffectiveInfoRatio);
1✔
1139
    }
1140

1141
    long walMemTableSnapshotThreshold =
1✔
1142
        Long.parseLong(
1✔
1143
            properties.getProperty(
1✔
1144
                "wal_memtable_snapshot_threshold_in_byte",
1145
                Long.toString(conf.getWalMemTableSnapshotThreshold())));
1✔
1146
    if (walMemTableSnapshotThreshold > 0) {
1✔
1147
      conf.setWalMemTableSnapshotThreshold(walMemTableSnapshotThreshold);
1✔
1148
    }
1149

1150
    int maxWalMemTableSnapshotNum =
1✔
1151
        Integer.parseInt(
1✔
1152
            properties.getProperty(
1✔
1153
                "max_wal_memtable_snapshot_num",
1154
                Integer.toString(conf.getMaxWalMemTableSnapshotNum())));
1✔
1155
    if (maxWalMemTableSnapshotNum > 0) {
1✔
1156
      conf.setMaxWalMemTableSnapshotNum(maxWalMemTableSnapshotNum);
1✔
1157
    }
1158

1159
    long deleteWalFilesPeriod =
1✔
1160
        Long.parseLong(
1✔
1161
            properties.getProperty(
1✔
1162
                "delete_wal_files_period_in_ms",
1163
                Long.toString(conf.getDeleteWalFilesPeriodInMs())));
1✔
1164
    if (deleteWalFilesPeriod > 0) {
1✔
1165
      conf.setDeleteWalFilesPeriodInMs(deleteWalFilesPeriod);
1✔
1166
    }
1167

1168
    long throttleDownThresholdInByte =
1✔
1169
        Long.parseLong(
1✔
1170
            properties.getProperty(
1✔
1171
                "iot_consensus_throttle_threshold_in_byte",
1172
                Long.toString(conf.getThrottleThreshold())));
1✔
1173
    if (throttleDownThresholdInByte > 0) {
1✔
1174
      conf.setThrottleThreshold(throttleDownThresholdInByte);
1✔
1175
    }
1176

1177
    long cacheWindowInMs =
1✔
1178
        Long.parseLong(
1✔
1179
            properties.getProperty(
1✔
1180
                "iot_consensus_cache_window_time_in_ms",
1181
                Long.toString(conf.getCacheWindowTimeInMs())));
1✔
1182
    if (cacheWindowInMs > 0) {
1✔
1183
      conf.setCacheWindowTimeInMs(cacheWindowInMs);
1✔
1184
    }
1185
  }
1✔
1186

1187
  private void loadAutoCreateSchemaProps(Properties properties) {
1188
    conf.setAutoCreateSchemaEnabled(
1✔
1189
        Boolean.parseBoolean(
1✔
1190
            properties.getProperty(
1✔
1191
                "enable_auto_create_schema",
1192
                Boolean.toString(conf.isAutoCreateSchemaEnabled()).trim())));
1✔
1193
    conf.setBooleanStringInferType(
1✔
1194
        TSDataType.valueOf(
1✔
1195
            properties.getProperty(
1✔
1196
                "boolean_string_infer_type", conf.getBooleanStringInferType().toString())));
1✔
1197
    conf.setIntegerStringInferType(
1✔
1198
        TSDataType.valueOf(
1✔
1199
            properties.getProperty(
1✔
1200
                "integer_string_infer_type", conf.getIntegerStringInferType().toString())));
1✔
1201
    conf.setLongStringInferType(
1✔
1202
        TSDataType.valueOf(
1✔
1203
            properties.getProperty(
1✔
1204
                "long_string_infer_type", conf.getLongStringInferType().toString())));
1✔
1205
    conf.setFloatingStringInferType(
1✔
1206
        TSDataType.valueOf(
1✔
1207
            properties.getProperty(
1✔
1208
                "floating_string_infer_type", conf.getFloatingStringInferType().toString())));
1✔
1209
    conf.setNanStringInferType(
1✔
1210
        TSDataType.valueOf(
1✔
1211
            properties.getProperty(
1✔
1212
                "nan_string_infer_type", conf.getNanStringInferType().toString())));
1✔
1213
    conf.setDefaultStorageGroupLevel(
1✔
1214
        Integer.parseInt(
1✔
1215
            properties.getProperty(
1✔
1216
                "default_storage_group_level",
1217
                Integer.toString(conf.getDefaultStorageGroupLevel()))));
1✔
1218
    conf.setDefaultBooleanEncoding(
1✔
1219
        properties.getProperty(
1✔
1220
            "default_boolean_encoding", conf.getDefaultBooleanEncoding().toString()));
1✔
1221
    conf.setDefaultInt32Encoding(
1✔
1222
        properties.getProperty(
1✔
1223
            "default_int32_encoding", conf.getDefaultInt32Encoding().toString()));
1✔
1224
    conf.setDefaultInt64Encoding(
1✔
1225
        properties.getProperty(
1✔
1226
            "default_int64_encoding", conf.getDefaultInt64Encoding().toString()));
1✔
1227
    conf.setDefaultFloatEncoding(
1✔
1228
        properties.getProperty(
1✔
1229
            "default_float_encoding", conf.getDefaultFloatEncoding().toString()));
1✔
1230
    conf.setDefaultDoubleEncoding(
1✔
1231
        properties.getProperty(
1✔
1232
            "default_double_encoding", conf.getDefaultDoubleEncoding().toString()));
1✔
1233
    conf.setDefaultTextEncoding(
1✔
1234
        properties.getProperty("default_text_encoding", conf.getDefaultTextEncoding().toString()));
1✔
1235
  }
1✔
1236

1237
  private void loadTsFileProps(Properties properties) {
1238
    TSFileDescriptor.getInstance()
1✔
1239
        .getConfig()
1✔
1240
        .setGroupSizeInByte(
1✔
1241
            Integer.parseInt(
1✔
1242
                properties.getProperty(
1✔
1243
                    "group_size_in_byte",
1244
                    Integer.toString(
1✔
1245
                        TSFileDescriptor.getInstance().getConfig().getGroupSizeInByte()))));
1✔
1246
    TSFileDescriptor.getInstance()
1✔
1247
        .getConfig()
1✔
1248
        .setPageSizeInByte(
1✔
1249
            Integer.parseInt(
1✔
1250
                properties.getProperty(
1✔
1251
                    "page_size_in_byte",
1252
                    Integer.toString(
1✔
1253
                        TSFileDescriptor.getInstance().getConfig().getPageSizeInByte()))));
1✔
1254
    if (TSFileDescriptor.getInstance().getConfig().getPageSizeInByte()
1✔
1255
        > TSFileDescriptor.getInstance().getConfig().getGroupSizeInByte()) {
1✔
1256
      logger.warn("page_size is greater than group size, will set it as the same with group size");
×
1257
      TSFileDescriptor.getInstance()
×
1258
          .getConfig()
×
1259
          .setPageSizeInByte(TSFileDescriptor.getInstance().getConfig().getGroupSizeInByte());
×
1260
    }
1261
    TSFileDescriptor.getInstance()
1✔
1262
        .getConfig()
1✔
1263
        .setMaxNumberOfPointsInPage(
1✔
1264
            Integer.parseInt(
1✔
1265
                properties.getProperty(
1✔
1266
                    "max_number_of_points_in_page",
1267
                    Integer.toString(
1✔
1268
                        TSFileDescriptor.getInstance().getConfig().getMaxNumberOfPointsInPage()))));
1✔
1269
    TSFileDescriptor.getInstance()
1✔
1270
        .getConfig()
1✔
1271
        .setMaxStringLength(
1✔
1272
            Integer.parseInt(
1✔
1273
                properties.getProperty(
1✔
1274
                    "max_string_length",
1275
                    Integer.toString(
1✔
1276
                        TSFileDescriptor.getInstance().getConfig().getMaxStringLength()))));
1✔
1277
    TSFileDescriptor.getInstance()
1✔
1278
        .getConfig()
1✔
1279
        .setBloomFilterErrorRate(
1✔
1280
            Double.parseDouble(
1✔
1281
                properties.getProperty(
1✔
1282
                    "bloom_filter_error_rate",
1283
                    Double.toString(
1✔
1284
                        TSFileDescriptor.getInstance().getConfig().getBloomFilterErrorRate()))));
1✔
1285
    TSFileDescriptor.getInstance()
1✔
1286
        .getConfig()
1✔
1287
        .setFloatPrecision(
1✔
1288
            Integer.parseInt(
1✔
1289
                properties.getProperty(
1✔
1290
                    "float_precision",
1291
                    Integer.toString(
1✔
1292
                        TSFileDescriptor.getInstance().getConfig().getFloatPrecision()))));
1✔
1293
    TSFileDescriptor.getInstance()
1✔
1294
        .getConfig()
1✔
1295
        .setValueEncoder(
1✔
1296
            properties.getProperty(
1✔
1297
                "value_encoder", TSFileDescriptor.getInstance().getConfig().getValueEncoder()));
1✔
1298
    TSFileDescriptor.getInstance()
1✔
1299
        .getConfig()
1✔
1300
        .setCompressor(
1✔
1301
            properties.getProperty(
1✔
1302
                "compressor",
1303
                TSFileDescriptor.getInstance().getConfig().getCompressor().toString()));
1✔
1304
    TSFileDescriptor.getInstance()
1✔
1305
        .getConfig()
1✔
1306
        .setMaxDegreeOfIndexNode(
1✔
1307
            Integer.parseInt(
1✔
1308
                properties.getProperty(
1✔
1309
                    "max_degree_of_index_node",
1310
                    Integer.toString(
1✔
1311
                        TSFileDescriptor.getInstance().getConfig().getMaxDegreeOfIndexNode()))));
1✔
1312
    TSFileDescriptor.getInstance()
1✔
1313
        .getConfig()
1✔
1314
        .setMaxTsBlockSizeInBytes(
1✔
1315
            Integer.parseInt(
1✔
1316
                properties.getProperty(
1✔
1317
                    "max_tsblock_size_in_bytes",
1318
                    Integer.toString(
1✔
1319
                        TSFileDescriptor.getInstance().getConfig().getMaxTsBlockSizeInBytes()))));
1✔
1320

1321
    // min(default_size, maxBytesForQuery)
1322
    TSFileDescriptor.getInstance()
1✔
1323
        .getConfig()
1✔
1324
        .setMaxTsBlockSizeInBytes(
1✔
1325
            (int)
1326
                Math.min(
1✔
1327
                    TSFileDescriptor.getInstance().getConfig().getMaxTsBlockSizeInBytes(),
1✔
1328
                    conf.getMaxBytesPerFragmentInstance()));
1✔
1329

1330
    TSFileDescriptor.getInstance()
1✔
1331
        .getConfig()
1✔
1332
        .setMaxTsBlockLineNumber(
1✔
1333
            Integer.parseInt(
1✔
1334
                properties.getProperty(
1✔
1335
                    "max_tsblock_line_number",
1336
                    Integer.toString(
1✔
1337
                        TSFileDescriptor.getInstance().getConfig().getMaxTsBlockLineNumber()))));
1✔
1338
  }
1✔
1339

1340
  // Mqtt related
1341
  private void loadMqttProps(Properties properties) {
1342
    conf.setMqttDir(properties.getProperty("mqtt_root_dir", conf.getMqttDir()));
1✔
1343

1344
    if (properties.getProperty(IoTDBConstant.MQTT_HOST_NAME) != null) {
1✔
1345
      conf.setMqttHost(properties.getProperty(IoTDBConstant.MQTT_HOST_NAME));
×
1346
    } else {
1347
      logger.info("MQTT host is not configured, will use dn_rpc_address.");
1✔
1348
      conf.setMqttHost(
1✔
1349
          properties.getProperty(IoTDBConstant.DN_RPC_ADDRESS, conf.getRpcAddress().trim()));
1✔
1350
    }
1351

1352
    if (properties.getProperty(IoTDBConstant.MQTT_PORT_NAME) != null) {
1✔
1353
      conf.setMqttPort(Integer.parseInt(properties.getProperty(IoTDBConstant.MQTT_PORT_NAME)));
×
1354
    }
1355

1356
    if (properties.getProperty(IoTDBConstant.MQTT_HANDLER_POOL_SIZE_NAME) != null) {
1✔
1357
      conf.setMqttHandlerPoolSize(
×
1358
          Integer.parseInt(properties.getProperty(IoTDBConstant.MQTT_HANDLER_POOL_SIZE_NAME)));
×
1359
    }
1360

1361
    if (properties.getProperty(IoTDBConstant.MQTT_PAYLOAD_FORMATTER_NAME) != null) {
1✔
1362
      conf.setMqttPayloadFormatter(
×
1363
          properties.getProperty(IoTDBConstant.MQTT_PAYLOAD_FORMATTER_NAME));
×
1364
    }
1365

1366
    if (properties.getProperty(IoTDBConstant.ENABLE_MQTT) != null) {
1✔
1367
      conf.setEnableMQTTService(
×
1368
          Boolean.parseBoolean(properties.getProperty(IoTDBConstant.ENABLE_MQTT)));
×
1369
    }
1370

1371
    if (properties.getProperty(IoTDBConstant.MQTT_MAX_MESSAGE_SIZE) != null) {
1✔
1372
      conf.setMqttMaxMessageSize(
×
1373
          Integer.parseInt(properties.getProperty(IoTDBConstant.MQTT_MAX_MESSAGE_SIZE)));
×
1374
    }
1375
  }
1✔
1376

1377
  // timed flush memtable
1378
  private void loadTimedService(Properties properties) {
1379
    conf.setEnableTimedFlushSeqMemtable(
1✔
1380
        Boolean.parseBoolean(
1✔
1381
            properties.getProperty(
1✔
1382
                "enable_timed_flush_seq_memtable",
1383
                Boolean.toString(conf.isEnableTimedFlushSeqMemtable()))));
1✔
1384

1385
    long seqMemTableFlushInterval =
1✔
1386
        Long.parseLong(
1✔
1387
            properties
1388
                .getProperty(
1✔
1389
                    "seq_memtable_flush_interval_in_ms",
1390
                    Long.toString(conf.getSeqMemtableFlushInterval()))
1✔
1391
                .trim());
1✔
1392
    if (seqMemTableFlushInterval > 0) {
1✔
1393
      conf.setSeqMemtableFlushInterval(seqMemTableFlushInterval);
1✔
1394
    }
1395

1396
    long seqMemTableFlushCheckInterval =
1✔
1397
        Long.parseLong(
1✔
1398
            properties
1399
                .getProperty(
1✔
1400
                    "seq_memtable_flush_check_interval_in_ms",
1401
                    Long.toString(conf.getSeqMemtableFlushCheckInterval()))
1✔
1402
                .trim());
1✔
1403
    if (seqMemTableFlushCheckInterval > 0) {
1✔
1404
      conf.setSeqMemtableFlushCheckInterval(seqMemTableFlushCheckInterval);
1✔
1405
    }
1406

1407
    conf.setEnableTimedFlushUnseqMemtable(
1✔
1408
        Boolean.parseBoolean(
1✔
1409
            properties.getProperty(
1✔
1410
                "enable_timed_flush_unseq_memtable",
1411
                Boolean.toString(conf.isEnableTimedFlushUnseqMemtable()))));
1✔
1412

1413
    long unseqMemTableFlushInterval =
1✔
1414
        Long.parseLong(
1✔
1415
            properties
1416
                .getProperty(
1✔
1417
                    "unseq_memtable_flush_interval_in_ms",
1418
                    Long.toString(conf.getUnseqMemtableFlushInterval()))
1✔
1419
                .trim());
1✔
1420
    if (unseqMemTableFlushInterval > 0) {
1✔
1421
      conf.setUnseqMemtableFlushInterval(unseqMemTableFlushInterval);
1✔
1422
    }
1423

1424
    long unseqMemTableFlushCheckInterval =
1✔
1425
        Long.parseLong(
1✔
1426
            properties
1427
                .getProperty(
1✔
1428
                    "unseq_memtable_flush_check_interval_in_ms",
1429
                    Long.toString(conf.getUnseqMemtableFlushCheckInterval()))
1✔
1430
                .trim());
1✔
1431
    if (unseqMemTableFlushCheckInterval > 0) {
1✔
1432
      conf.setUnseqMemtableFlushCheckInterval(unseqMemTableFlushCheckInterval);
1✔
1433
    }
1434
  }
1✔
1435

1436
  private String[][] parseDataDirs(String dataDirs) {
1437
    String[] tiers = dataDirs.split(IoTDBConstant.TIER_SEPARATOR);
1✔
1438
    String[][] tierDataDirs = new String[tiers.length][];
1✔
1439
    for (int i = 0; i < tiers.length; ++i) {
1✔
1440
      tierDataDirs[i] = tiers[i].split(",");
1✔
1441
    }
1442
    return tierDataDirs;
1✔
1443
  }
1444

1445
  public void loadHotModifiedProps(Properties properties) throws QueryProcessException {
1446
    try {
1447
      // update data dirs
1448
      String dataDirs = properties.getProperty("dn_data_dirs", null);
×
1449
      if (dataDirs != null) {
×
1450
        conf.reloadDataDirs(parseDataDirs(dataDirs));
×
1451
      }
1452

1453
      // update dir strategy
1454
      String multiDirStrategyClassName = properties.getProperty("dn_multi_dir_strategy", null);
×
1455
      if (multiDirStrategyClassName != null
×
1456
          && !multiDirStrategyClassName.equals(conf.getMultiDirStrategyClassName())) {
×
1457
        conf.setMultiDirStrategyClassName(multiDirStrategyClassName);
×
1458
        conf.confirmMultiDirStrategy();
×
1459
      }
1460

1461
      TierManager.getInstance().resetFolders();
×
1462

1463
      // update timed flush & close conf
1464
      loadTimedService(properties);
×
1465
      StorageEngine.getInstance().rebootTimedService();
×
1466

1467
      long memTableSizeThreshold =
×
1468
          Long.parseLong(
×
1469
              properties
1470
                  .getProperty(
×
1471
                      "memtable_size_threshold", Long.toString(conf.getMemtableSizeThreshold()))
×
1472
                  .trim());
×
1473
      if (memTableSizeThreshold > 0) {
×
1474
        conf.setMemtableSizeThreshold(memTableSizeThreshold);
×
1475
      }
1476

1477
      // update params of creating schemaengine automatically
1478
      loadAutoCreateSchemaProps(properties);
×
1479

1480
      // update tsfile-format config
1481
      loadTsFileProps(properties);
×
1482
      // update slow_query_threshold
1483
      conf.setSlowQueryThreshold(
×
1484
          Long.parseLong(
×
1485
              properties.getProperty(
×
1486
                  "slow_query_threshold", Long.toString(conf.getSlowQueryThreshold()))));
×
1487
      // update merge_write_throughput_mb_per_sec
1488
      conf.setCompactionWriteThroughputMbPerSec(
×
1489
          Integer.parseInt(
×
1490
              properties.getProperty(
×
1491
                  "merge_write_throughput_mb_per_sec",
1492
                  Integer.toString(conf.getCompactionWriteThroughputMbPerSec()))));
×
1493

1494
      // update select into operation max buffer size
1495
      conf.setIntoOperationBufferSizeInByte(
×
1496
          Long.parseLong(
×
1497
              properties.getProperty(
×
1498
                  "into_operation_buffer_size_in_byte",
1499
                  String.valueOf(conf.getIntoOperationBufferSizeInByte()))));
×
1500
      // update insert-tablet-plan's row limit for select-into
1501
      conf.setSelectIntoInsertTabletPlanRowLimit(
×
1502
          Integer.parseInt(
×
1503
              properties.getProperty(
×
1504
                  "select_into_insert_tablet_plan_row_limit",
1505
                  String.valueOf(conf.getSelectIntoInsertTabletPlanRowLimit()))));
×
1506

1507
      // update enable query memory estimation for memory control
1508
      conf.setEnableQueryMemoryEstimation(
×
1509
          Boolean.parseBoolean(
×
1510
              properties.getProperty(
×
1511
                  "enable_query_memory_estimation",
1512
                  Boolean.toString(conf.isEnableQueryMemoryEstimation()))));
×
1513

1514
      // update wal config
1515
      long prevDeleteWalFilesPeriodInMs = conf.getDeleteWalFilesPeriodInMs();
×
1516
      loadWALHotModifiedProps(properties);
×
1517
      if (prevDeleteWalFilesPeriodInMs != conf.getDeleteWalFilesPeriodInMs()) {
×
1518
        WALManager.getInstance().rebootWALDeleteThread();
×
1519
      }
1520

1521
      // update schema quota configuration
1522
      conf.setClusterSchemaLimitLevel(
×
1523
          properties
1524
              .getProperty("cluster_schema_limit_level", conf.getClusterSchemaLimitLevel())
×
1525
              .trim());
×
1526
      conf.setClusterSchemaLimitThreshold(
×
1527
          Long.parseLong(
×
1528
              properties
1529
                  .getProperty(
×
1530
                      "cluster_schema_limit_threshold",
1531
                      Long.toString(conf.getClusterSchemaLimitThreshold()))
×
1532
                  .trim()));
×
1533
      DataNodeSchemaQuotaManager.getInstance().updateConfiguration();
×
1534
    } catch (Exception e) {
×
1535
      throw new QueryProcessException(String.format("Fail to reload configuration because %s", e));
×
1536
    }
×
1537
  }
×
1538

1539
  public void loadHotModifiedProps() throws QueryProcessException {
1540
    URL url = getPropsUrl(CommonConfig.CONFIG_NAME);
×
1541
    if (url == null) {
×
1542
      logger.warn("Couldn't load the configuration from any of the known sources.");
×
1543
      return;
×
1544
    }
1545

1546
    Properties commonProperties = new Properties();
×
1547
    try (InputStream inputStream = url.openStream()) {
×
1548
      logger.info("Start to reload config file {}", url);
×
1549
      commonProperties.load(inputStream);
×
1550
    } catch (Exception e) {
×
1551
      logger.warn("Fail to reload config file {}", url, e);
×
1552
      throw new QueryProcessException(
×
1553
          String.format("Fail to reload config file %s because %s", url, e.getMessage()));
×
1554
    }
×
1555

1556
    url = getPropsUrl(IoTDBConfig.CONFIG_NAME);
×
1557
    if (url == null) {
×
1558
      logger.warn("Couldn't load the configuration from any of the known sources.");
×
1559
      return;
×
1560
    }
1561
    try (InputStream inputStream = url.openStream()) {
×
1562
      logger.info("Start to reload config file {}", url);
×
1563
      Properties properties = new Properties();
×
1564
      properties.load(inputStream);
×
1565
      commonProperties.putAll(properties);
×
1566
      loadHotModifiedProps(commonProperties);
×
1567
    } catch (Exception e) {
×
1568
      logger.warn("Fail to reload config file {}", url, e);
×
1569
      throw new QueryProcessException(
×
1570
          String.format("Fail to reload config file %s because %s", url, e.getMessage()));
×
1571
    }
×
1572
    ReloadLevel reloadLevel = MetricConfigDescriptor.getInstance().loadHotProps(commonProperties);
×
1573
    logger.info("Reload metric service in level {}", reloadLevel);
×
1574
    if (reloadLevel == ReloadLevel.RESTART_INTERNAL_REPORTER) {
×
1575
      IoTDBInternalReporter internalReporter;
1576
      if (MetricConfigDescriptor.getInstance().getMetricConfig().getInternalReportType()
×
1577
          == InternalReporterType.IOTDB) {
1578
        internalReporter = new IoTDBInternalLocalReporter();
×
1579
      } else {
1580
        internalReporter = new IoTDBInternalMemoryReporter();
×
1581
      }
1582
      MetricService.getInstance().reloadInternalReporter(internalReporter);
×
1583
    } else {
×
1584
      MetricService.getInstance().reloadService(reloadLevel);
×
1585
    }
1586
  }
×
1587

1588
  private void initMemoryAllocate(Properties properties) {
1589
    String memoryAllocateProportion =
1✔
1590
        properties.getProperty("storage_query_schema_consensus_free_memory_proportion");
1✔
1591
    if (memoryAllocateProportion != null) {
1✔
1592
      String[] proportions = memoryAllocateProportion.split(":");
×
1593
      int proportionSum = 0;
×
1594
      for (String proportion : proportions) {
×
1595
        proportionSum += Integer.parseInt(proportion.trim());
×
1596
      }
1597
      long maxMemoryAvailable = Runtime.getRuntime().maxMemory();
×
1598
      if (proportionSum != 0) {
×
1599
        conf.setAllocateMemoryForStorageEngine(
×
1600
            maxMemoryAvailable * Integer.parseInt(proportions[0].trim()) / proportionSum);
×
1601
        conf.setAllocateMemoryForRead(
×
1602
            maxMemoryAvailable * Integer.parseInt(proportions[1].trim()) / proportionSum);
×
1603
        conf.setAllocateMemoryForSchema(
×
1604
            maxMemoryAvailable * Integer.parseInt(proportions[2].trim()) / proportionSum);
×
1605
        conf.setAllocateMemoryForConsensus(
×
1606
            maxMemoryAvailable * Integer.parseInt(proportions[3].trim()) / proportionSum);
×
1607
      }
1608
    }
1609

1610
    logger.info("initial allocateMemoryForRead = {}", conf.getAllocateMemoryForRead());
1✔
1611
    logger.info("initial allocateMemoryForWrite = {}", conf.getAllocateMemoryForStorageEngine());
1✔
1612
    logger.info("initial allocateMemoryForSchema = {}", conf.getAllocateMemoryForSchema());
1✔
1613
    logger.info("initial allocateMemoryForConsensus = {}", conf.getAllocateMemoryForConsensus());
1✔
1614

1615
    initSchemaMemoryAllocate(properties);
1✔
1616
    initStorageEngineAllocate(properties);
1✔
1617

1618
    conf.setEnableQueryMemoryEstimation(
1✔
1619
        Boolean.parseBoolean(
1✔
1620
            properties.getProperty(
1✔
1621
                "enable_query_memory_estimation",
1622
                Boolean.toString(conf.isEnableQueryMemoryEstimation()))));
1✔
1623

1624
    String queryMemoryAllocateProportion =
1✔
1625
        properties.getProperty("chunk_timeseriesmeta_free_memory_proportion");
1✔
1626
    if (queryMemoryAllocateProportion != null) {
1✔
1627
      String[] proportions = queryMemoryAllocateProportion.split(":");
×
1628
      int proportionSum = 0;
×
1629
      for (String proportion : proportions) {
×
1630
        proportionSum += Integer.parseInt(proportion.trim());
×
1631
      }
1632
      long maxMemoryAvailable = conf.getAllocateMemoryForRead();
×
1633
      if (proportionSum != 0) {
×
1634
        try {
1635
          conf.setAllocateMemoryForBloomFilterCache(
×
1636
              maxMemoryAvailable * Integer.parseInt(proportions[0].trim()) / proportionSum);
×
1637
          conf.setAllocateMemoryForChunkCache(
×
1638
              maxMemoryAvailable * Integer.parseInt(proportions[1].trim()) / proportionSum);
×
1639
          conf.setAllocateMemoryForTimeSeriesMetaDataCache(
×
1640
              maxMemoryAvailable * Integer.parseInt(proportions[2].trim()) / proportionSum);
×
1641
          conf.setAllocateMemoryForCoordinator(
×
1642
              maxMemoryAvailable * Integer.parseInt(proportions[3].trim()) / proportionSum);
×
1643
          conf.setAllocateMemoryForOperators(
×
1644
              maxMemoryAvailable * Integer.parseInt(proportions[4].trim()) / proportionSum);
×
1645
          conf.setAllocateMemoryForDataExchange(
×
1646
              maxMemoryAvailable * Integer.parseInt(proportions[5].trim()) / proportionSum);
×
1647
          conf.setAllocateMemoryForTimeIndex(
×
1648
              maxMemoryAvailable * Integer.parseInt(proportions[6].trim()) / proportionSum);
×
1649
        } catch (Exception e) {
×
1650
          throw new RuntimeException(
×
1651
              "Each subsection of configuration item chunkmeta_chunk_timeseriesmeta_free_memory_proportion"
1652
                  + " should be an integer, which is "
1653
                  + queryMemoryAllocateProportion);
1654
        }
×
1655
      }
1656
    }
1657

1658
    // metadata cache is disabled, we need to move all their allocated memory to other parts
1659
    if (!conf.isMetaDataCacheEnable()) {
1✔
1660
      long sum =
×
1661
          conf.getAllocateMemoryForBloomFilterCache()
×
1662
              + conf.getAllocateMemoryForChunkCache()
×
1663
              + conf.getAllocateMemoryForTimeSeriesMetaDataCache();
×
1664
      conf.setAllocateMemoryForBloomFilterCache(0);
×
1665
      conf.setAllocateMemoryForChunkCache(0);
×
1666
      conf.setAllocateMemoryForTimeSeriesMetaDataCache(0);
×
1667
      long partForDataExchange = sum / 2;
×
1668
      long partForOperators = sum - partForDataExchange;
×
1669
      conf.setAllocateMemoryForDataExchange(
×
1670
          conf.getAllocateMemoryForDataExchange() + partForDataExchange);
×
1671
      conf.setAllocateMemoryForOperators(conf.getAllocateMemoryForOperators() + partForOperators);
×
1672
    }
1673
  }
1✔
1674

1675
  private void initStorageEngineAllocate(Properties properties) {
1676
    long storageMemoryTotal = conf.getAllocateMemoryForStorageEngine();
1✔
1677

1678
    int proportionSum = 10;
1✔
1679
    int writeProportion = 8;
1✔
1680
    int compactionProportion = 2;
1✔
1681
    int writeProportionSum = 20;
1✔
1682
    int memTableProportion = 19;
1✔
1683
    int timePartitionInfo = 1;
1✔
1684

1685
    String storageMemoryAllocatePortion =
1✔
1686
        properties.getProperty("storage_engine_memory_proportion");
1✔
1687
    if (storageMemoryAllocatePortion != null) {
1✔
1688
      String[] proportions = storageMemoryAllocatePortion.split(":");
×
1689
      int loadedProportionSum = 0;
×
1690
      for (String proportion : proportions) {
×
1691
        loadedProportionSum += Integer.parseInt(proportion.trim());
×
1692
      }
1693

1694
      if (loadedProportionSum != 0) {
×
1695
        proportionSum = loadedProportionSum;
×
1696
        writeProportion = Integer.parseInt(proportions[0].trim());
×
1697
        compactionProportion = Integer.parseInt(proportions[1].trim());
×
1698
      }
1699
      conf.setCompactionProportion((double) compactionProportion / (double) proportionSum);
×
1700
    }
1701

1702
    String allocationRatioForWrite = properties.getProperty("write_memory_proportion");
1✔
1703
    if (allocationRatioForWrite != null) {
1✔
1704
      String[] proportions = allocationRatioForWrite.split(":");
×
1705
      int loadedProportionSum = 0;
×
1706
      for (String proportion : proportions) {
×
1707
        loadedProportionSum += Integer.parseInt(proportion.trim());
×
1708
      }
1709

1710
      if (loadedProportionSum != 0) {
×
1711
        writeProportionSum = loadedProportionSum;
×
1712
        memTableProportion = Integer.parseInt(proportions[0].trim());
×
1713
        timePartitionInfo = Integer.parseInt(proportions[1].trim());
×
1714
      }
1715
      // memtableProportionForWrite = 19/20 default
1716
      double memtableProportionForWrite =
×
1717
          ((double) memTableProportion / (double) writeProportionSum);
1718

1719
      // timePartitionInfoForWrite = 1/20 default
1720
      double timePartitionInfoForWrite = ((double) timePartitionInfo / (double) writeProportionSum);
×
1721
      // proportionForWrite = 8/10 default
1722
      double proportionForWrite = ((double) (writeProportion) / (double) proportionSum);
×
1723
      // writeProportionForMemtable = 8/10 * 19/20 = 0.76 default
1724
      conf.setWriteProportionForMemtable(proportionForWrite * memtableProportionForWrite);
×
1725
      // allocateMemoryForTimePartitionInfo = storageMemoryTotal * 8/10 * 1/20 default
1726
      conf.setAllocateMemoryForTimePartitionInfo(
×
1727
          (long) ((proportionForWrite * timePartitionInfoForWrite) * storageMemoryTotal));
1728
    }
1729
  }
1✔
1730

1731
  private void initSchemaMemoryAllocate(Properties properties) {
1732
    long schemaMemoryTotal = conf.getAllocateMemoryForSchema();
1✔
1733

1734
    String schemaMemoryPortionInput = properties.getProperty("schema_memory_proportion");
1✔
1735
    if (schemaMemoryPortionInput != null) {
1✔
1736
      String[] proportions = schemaMemoryPortionInput.split(":");
×
1737
      int loadedProportionSum = 0;
×
1738
      for (String proportion : proportions) {
×
1739
        loadedProportionSum += Integer.parseInt(proportion.trim());
×
1740
      }
1741

1742
      if (loadedProportionSum != 0) {
×
1743
        conf.setSchemaMemoryProportion(
×
1744
            new int[] {
1745
              Integer.parseInt(proportions[0].trim()),
×
1746
              Integer.parseInt(proportions[1].trim()),
×
1747
              Integer.parseInt(proportions[2].trim())
×
1748
            });
1749
      }
1750

1751
    } else {
×
1752
      schemaMemoryPortionInput = properties.getProperty("schema_memory_allocate_proportion");
1✔
1753
      if (schemaMemoryPortionInput != null) {
1✔
1754
        String[] proportions = schemaMemoryPortionInput.split(":");
×
1755
        int loadedProportionSum = 0;
×
1756
        for (String proportion : proportions) {
×
1757
          loadedProportionSum += Integer.parseInt(proportion.trim());
×
1758
        }
1759

1760
        if (loadedProportionSum != 0) {
×
1761
          conf.setSchemaMemoryProportion(
×
1762
              new int[] {
1763
                Integer.parseInt(proportions[0].trim()),
×
1764
                Integer.parseInt(proportions[1].trim()) + Integer.parseInt(proportions[3].trim()),
×
1765
                Integer.parseInt(proportions[2].trim())
×
1766
              });
1767
        }
1768
      }
1769
    }
1770

1771
    int proportionSum = 0;
1✔
1772
    for (int proportion : conf.getSchemaMemoryProportion()) {
1✔
1773
      proportionSum += proportion;
1✔
1774
    }
1775

1776
    conf.setAllocateMemoryForSchemaRegion(
1✔
1777
        schemaMemoryTotal * conf.getSchemaMemoryProportion()[0] / proportionSum);
1✔
1778
    logger.info("allocateMemoryForSchemaRegion = {}", conf.getAllocateMemoryForSchemaRegion());
1✔
1779

1780
    conf.setAllocateMemoryForSchemaCache(
1✔
1781
        schemaMemoryTotal * conf.getSchemaMemoryProportion()[1] / proportionSum);
1✔
1782
    logger.info("allocateMemoryForSchemaCache = {}", conf.getAllocateMemoryForSchemaCache());
1✔
1783

1784
    conf.setAllocateMemoryForPartitionCache(
1✔
1785
        schemaMemoryTotal * conf.getSchemaMemoryProportion()[2] / proportionSum);
1✔
1786
    logger.info("allocateMemoryForPartitionCache = {}", conf.getAllocateMemoryForPartitionCache());
1✔
1787
  }
1✔
1788

1789
  @SuppressWarnings("squid:S3518") // "proportionSum" can't be zero
1790
  private void loadUDFProps(Properties properties) {
1791
    String initialByteArrayLengthForMemoryControl =
1✔
1792
        properties.getProperty("udf_initial_byte_array_length_for_memory_control");
1✔
1793
    if (initialByteArrayLengthForMemoryControl != null) {
1✔
1794
      conf.setUdfInitialByteArrayLengthForMemoryControl(
×
1795
          Integer.parseInt(initialByteArrayLengthForMemoryControl));
×
1796
    }
1797

1798
    conf.setUdfDir(properties.getProperty("udf_lib_dir", conf.getUdfDir()));
1✔
1799

1800
    String memoryBudgetInMb = properties.getProperty("udf_memory_budget_in_mb");
1✔
1801
    if (memoryBudgetInMb != null) {
1✔
1802
      conf.setUdfMemoryBudgetInMB(
×
1803
          (float)
1804
              Math.min(Float.parseFloat(memoryBudgetInMb), 0.2 * conf.getAllocateMemoryForRead()));
×
1805
    }
1806

1807
    String readerTransformerCollectorMemoryProportion =
1✔
1808
        properties.getProperty("udf_reader_transformer_collector_memory_proportion");
1✔
1809
    if (readerTransformerCollectorMemoryProportion != null) {
1✔
1810
      String[] proportions = readerTransformerCollectorMemoryProportion.split(":");
×
1811
      int proportionSum = 0;
×
1812
      for (String proportion : proportions) {
×
1813
        proportionSum += Integer.parseInt(proportion.trim());
×
1814
      }
1815
      float maxMemoryAvailable = conf.getUdfMemoryBudgetInMB();
×
1816
      try {
1817
        conf.setUdfReaderMemoryBudgetInMB(
×
1818
            maxMemoryAvailable * Integer.parseInt(proportions[0].trim()) / proportionSum);
×
1819
        conf.setUdfTransformerMemoryBudgetInMB(
×
1820
            maxMemoryAvailable * Integer.parseInt(proportions[1].trim()) / proportionSum);
×
1821
        conf.setUdfCollectorMemoryBudgetInMB(
×
1822
            maxMemoryAvailable * Integer.parseInt(proportions[2].trim()) / proportionSum);
×
1823
      } catch (Exception e) {
×
1824
        throw new RuntimeException(
×
1825
            "Each subsection of configuration item udf_reader_transformer_collector_memory_proportion"
1826
                + " should be an integer, which is "
1827
                + readerTransformerCollectorMemoryProportion);
1828
      }
×
1829
    }
1830
  }
1✔
1831

1832
  private void loadTriggerProps(Properties properties) {
1833
    conf.setTriggerDir(properties.getProperty("trigger_lib_dir", conf.getTriggerDir()));
1✔
1834
    conf.setRetryNumToFindStatefulTrigger(
1✔
1835
        Integer.parseInt(
1✔
1836
            properties.getProperty(
1✔
1837
                "stateful_trigger_retry_num_when_not_found",
1838
                Integer.toString(conf.getRetryNumToFindStatefulTrigger()))));
1✔
1839

1840
    int tlogBufferSize =
1✔
1841
        Integer.parseInt(
1✔
1842
            properties.getProperty("tlog_buffer_size", Integer.toString(conf.getTlogBufferSize())));
1✔
1843
    if (tlogBufferSize > 0) {
1✔
1844
      conf.setTlogBufferSize(tlogBufferSize);
1✔
1845
    }
1846

1847
    conf.setTriggerForwardMaxQueueNumber(
1✔
1848
        Integer.parseInt(
1✔
1849
            properties.getProperty(
1✔
1850
                "trigger_forward_max_queue_number",
1851
                Integer.toString(conf.getTriggerForwardMaxQueueNumber()))));
1✔
1852
    conf.setTriggerForwardMaxSizePerQueue(
1✔
1853
        Integer.parseInt(
1✔
1854
            properties.getProperty(
1✔
1855
                "trigger_forward_max_size_per_queue",
1856
                Integer.toString(conf.getTriggerForwardMaxSizePerQueue()))));
1✔
1857
    conf.setTriggerForwardBatchSize(
1✔
1858
        Integer.parseInt(
1✔
1859
            properties.getProperty(
1✔
1860
                "trigger_forward_batch_size",
1861
                Integer.toString(conf.getTriggerForwardBatchSize()))));
1✔
1862
    conf.setTriggerForwardHTTPPoolSize(
1✔
1863
        Integer.parseInt(
1✔
1864
            properties.getProperty(
1✔
1865
                "trigger_forward_http_pool_size",
1866
                Integer.toString(conf.getTriggerForwardHTTPPoolSize()))));
1✔
1867
    conf.setTriggerForwardHTTPPOOLMaxPerRoute(
1✔
1868
        Integer.parseInt(
1✔
1869
            properties.getProperty(
1✔
1870
                "trigger_forward_http_pool_max_per_route",
1871
                Integer.toString(conf.getTriggerForwardHTTPPOOLMaxPerRoute()))));
1✔
1872
    conf.setTriggerForwardMQTTPoolSize(
1✔
1873
        Integer.parseInt(
1✔
1874
            properties.getProperty(
1✔
1875
                "trigger_forward_mqtt_pool_size",
1876
                Integer.toString(conf.getTriggerForwardMQTTPoolSize()))));
1✔
1877
  }
1✔
1878

1879
  private void loadPipeProps(Properties properties) {
1880
    conf.setPipeLibDir(properties.getProperty("pipe_lib_dir", conf.getPipeLibDir()));
1✔
1881

1882
    conf.setPipeReceiverFileDir(
1✔
1883
        properties.getProperty("pipe_receiver_file_dir", conf.getPipeReceiverFileDir()));
1✔
1884
  }
1✔
1885

1886
  private void loadCQProps(Properties properties) {
1887
    conf.setContinuousQueryThreadNum(
1✔
1888
        Integer.parseInt(
1✔
1889
            properties.getProperty(
1✔
1890
                "continuous_query_thread_num",
1891
                Integer.toString(conf.getContinuousQueryThreadNum()))));
1✔
1892
    if (conf.getContinuousQueryThreadNum() <= 0) {
1✔
1893
      conf.setContinuousQueryThreadNum(Runtime.getRuntime().availableProcessors() / 2);
×
1894
    }
1895

1896
    conf.setContinuousQueryMinimumEveryInterval(
1✔
1897
        DateTimeUtils.convertDurationStrToLong(
1✔
1898
            properties.getProperty("continuous_query_minimum_every_interval", "1s"),
1✔
1899
            CommonDescriptor.getInstance().getConfig().getTimestampPrecision()));
1✔
1900
  }
1✔
1901

1902
  public void loadClusterProps(Properties properties) {
1903
    String configNodeUrls = properties.getProperty(IoTDBConstant.DN_TARGET_CONFIG_NODE_LIST);
1✔
1904
    if (configNodeUrls != null) {
1✔
1905
      try {
1906
        configNodeUrls = configNodeUrls.trim();
×
1907
        conf.setTargetConfigNodeList(NodeUrlUtils.parseTEndPointUrls(configNodeUrls));
×
1908
      } catch (BadNodeUrlException e) {
×
1909
        logger.error(
×
1910
            "Config nodes are set in wrong format, please set them like 127.0.0.1:10710,127.0.0.1:10712");
1911
      }
×
1912
    }
1913

1914
    conf.setInternalAddress(
1✔
1915
        properties
1916
            .getProperty(IoTDBConstant.DN_INTERNAL_ADDRESS, conf.getInternalAddress())
1✔
1917
            .trim());
1✔
1918

1919
    conf.setInternalPort(
1✔
1920
        Integer.parseInt(
1✔
1921
            properties
1922
                .getProperty(
1✔
1923
                    IoTDBConstant.DN_INTERNAL_PORT, Integer.toString(conf.getInternalPort()))
1✔
1924
                .trim()));
1✔
1925

1926
    conf.setDataRegionConsensusPort(
1✔
1927
        Integer.parseInt(
1✔
1928
            properties
1929
                .getProperty(
1✔
1930
                    "dn_data_region_consensus_port",
1931
                    Integer.toString(conf.getDataRegionConsensusPort()))
1✔
1932
                .trim()));
1✔
1933

1934
    conf.setSchemaRegionConsensusPort(
1✔
1935
        Integer.parseInt(
1✔
1936
            properties
1937
                .getProperty(
1✔
1938
                    "dn_schema_region_consensus_port",
1939
                    Integer.toString(conf.getSchemaRegionConsensusPort()))
1✔
1940
                .trim()));
1✔
1941
    conf.setJoinClusterRetryIntervalMs(
1✔
1942
        Long.parseLong(
1✔
1943
            properties
1944
                .getProperty(
1✔
1945
                    "dn_join_cluster_retry_interval_ms",
1946
                    Long.toString(conf.getJoinClusterRetryIntervalMs()))
1✔
1947
                .trim()));
1✔
1948
  }
1✔
1949

1950
  public void loadShuffleProps(Properties properties) {
1951
    conf.setMppDataExchangePort(
1✔
1952
        Integer.parseInt(
1✔
1953
            properties.getProperty(
1✔
1954
                "dn_mpp_data_exchange_port", Integer.toString(conf.getMppDataExchangePort()))));
1✔
1955
    conf.setMppDataExchangeCorePoolSize(
1✔
1956
        Integer.parseInt(
1✔
1957
            properties.getProperty(
1✔
1958
                "mpp_data_exchange_core_pool_size",
1959
                Integer.toString(conf.getMppDataExchangeCorePoolSize()))));
1✔
1960
    conf.setMppDataExchangeMaxPoolSize(
1✔
1961
        Integer.parseInt(
1✔
1962
            properties.getProperty(
1✔
1963
                "mpp_data_exchange_max_pool_size",
1964
                Integer.toString(conf.getMppDataExchangeMaxPoolSize()))));
1✔
1965
    conf.setMppDataExchangeKeepAliveTimeInMs(
1✔
1966
        Integer.parseInt(
1✔
1967
            properties.getProperty(
1✔
1968
                "mpp_data_exchange_keep_alive_time_in_ms",
1969
                Integer.toString(conf.getMppDataExchangeKeepAliveTimeInMs()))));
1✔
1970

1971
    conf.setPartitionCacheSize(
1✔
1972
        Integer.parseInt(
1✔
1973
            properties.getProperty(
1✔
1974
                "partition_cache_size", Integer.toString(conf.getPartitionCacheSize()))));
1✔
1975

1976
    conf.setDriverTaskExecutionTimeSliceInMs(
1✔
1977
        Integer.parseInt(
1✔
1978
            properties.getProperty(
1✔
1979
                "driver_task_execution_time_slice_in_ms",
1980
                Integer.toString(conf.getDriverTaskExecutionTimeSliceInMs()))));
1✔
1981
  }
1✔
1982

1983
  /** Get default encode algorithm by data type */
1984
  public TSEncoding getDefaultEncodingByType(TSDataType dataType) {
1985
    switch (dataType) {
1✔
1986
      case BOOLEAN:
1987
        return conf.getDefaultBooleanEncoding();
×
1988
      case INT32:
1989
        return conf.getDefaultInt32Encoding();
1✔
1990
      case INT64:
1991
        return conf.getDefaultInt64Encoding();
×
1992
      case FLOAT:
1993
        return conf.getDefaultFloatEncoding();
1✔
1994
      case DOUBLE:
1995
        return conf.getDefaultDoubleEncoding();
×
1996
      default:
1997
        return conf.getDefaultTextEncoding();
×
1998
    }
1999
  }
2000

2001
  // These configurations are received from config node when registering
2002
  public void loadGlobalConfig(TGlobalConfig globalConfig) {
2003
    conf.setSeriesPartitionExecutorClass(globalConfig.getSeriesPartitionExecutorClass());
×
2004
    conf.setSeriesPartitionSlotNum(globalConfig.getSeriesPartitionSlotNum());
×
2005
    conf.setReadConsistencyLevel(globalConfig.getReadConsistencyLevel());
×
2006
  }
×
2007

2008
  public void loadRatisConfig(TRatisConfig ratisConfig) {
2009
    conf.setDataRatisConsensusLogAppenderBufferSizeMax(ratisConfig.getDataAppenderBufferSize());
×
2010
    conf.setSchemaRatisConsensusLogAppenderBufferSizeMax(ratisConfig.getSchemaAppenderBufferSize());
×
2011

2012
    conf.setDataRatisConsensusSnapshotTriggerThreshold(
×
2013
        ratisConfig.getDataSnapshotTriggerThreshold());
×
2014
    conf.setSchemaRatisConsensusSnapshotTriggerThreshold(
×
2015
        ratisConfig.getSchemaSnapshotTriggerThreshold());
×
2016

2017
    conf.setDataRatisConsensusLogUnsafeFlushEnable(ratisConfig.isDataLogUnsafeFlushEnable());
×
2018
    conf.setSchemaRatisConsensusLogUnsafeFlushEnable(ratisConfig.isSchemaLogUnsafeFlushEnable());
×
2019
    conf.setDataRatisConsensusLogForceSyncNum(ratisConfig.getDataRegionLogForceSyncNum());
×
2020

2021
    conf.setDataRatisConsensusLogSegmentSizeMax(ratisConfig.getDataLogSegmentSizeMax());
×
2022
    conf.setSchemaRatisConsensusLogSegmentSizeMax(ratisConfig.getSchemaLogSegmentSizeMax());
×
2023

2024
    conf.setDataRatisConsensusGrpcFlowControlWindow(ratisConfig.getDataGrpcFlowControlWindow());
×
2025
    conf.setSchemaRatisConsensusGrpcFlowControlWindow(ratisConfig.getSchemaGrpcFlowControlWindow());
×
2026
    conf.setDataRatisConsensusGrpcLeaderOutstandingAppendsMax(
×
2027
        ratisConfig.getDataRegionGrpcLeaderOutstandingAppendsMax());
×
2028

2029
    conf.setDataRatisConsensusLeaderElectionTimeoutMinMs(
×
2030
        ratisConfig.getDataLeaderElectionTimeoutMin());
×
2031
    conf.setSchemaRatisConsensusLeaderElectionTimeoutMinMs(
×
2032
        ratisConfig.getSchemaLeaderElectionTimeoutMin());
×
2033

2034
    conf.setDataRatisConsensusLeaderElectionTimeoutMaxMs(
×
2035
        ratisConfig.getDataLeaderElectionTimeoutMax());
×
2036
    conf.setSchemaRatisConsensusLeaderElectionTimeoutMaxMs(
×
2037
        ratisConfig.getSchemaLeaderElectionTimeoutMax());
×
2038

2039
    conf.setDataRatisConsensusRequestTimeoutMs(ratisConfig.getDataRequestTimeout());
×
2040
    conf.setSchemaRatisConsensusRequestTimeoutMs(ratisConfig.getSchemaRequestTimeout());
×
2041

2042
    conf.setDataRatisConsensusMaxRetryAttempts(ratisConfig.getDataMaxRetryAttempts());
×
2043
    conf.setDataRatisConsensusInitialSleepTimeMs(ratisConfig.getDataInitialSleepTime());
×
2044
    conf.setDataRatisConsensusMaxSleepTimeMs(ratisConfig.getDataMaxSleepTime());
×
2045

2046
    conf.setSchemaRatisConsensusMaxRetryAttempts(ratisConfig.getSchemaMaxRetryAttempts());
×
2047
    conf.setSchemaRatisConsensusInitialSleepTimeMs(ratisConfig.getSchemaInitialSleepTime());
×
2048
    conf.setSchemaRatisConsensusMaxSleepTimeMs(ratisConfig.getSchemaMaxSleepTime());
×
2049

2050
    conf.setDataRatisConsensusPreserveWhenPurge(ratisConfig.getDataPreserveWhenPurge());
×
2051
    conf.setSchemaRatisConsensusPreserveWhenPurge(ratisConfig.getSchemaPreserveWhenPurge());
×
2052

2053
    conf.setRatisFirstElectionTimeoutMinMs(ratisConfig.getFirstElectionTimeoutMin());
×
2054
    conf.setRatisFirstElectionTimeoutMaxMs(ratisConfig.getFirstElectionTimeoutMax());
×
2055

2056
    conf.setSchemaRatisLogMax(ratisConfig.getSchemaRegionRatisLogMax());
×
2057
    conf.setDataRatisLogMax(ratisConfig.getDataRegionRatisLogMax());
×
2058
  }
×
2059

2060
  public void loadCQConfig(TCQConfig cqConfig) {
2061
    conf.setCqMinEveryIntervalInMs(cqConfig.getCqMinEveryIntervalInMs());
×
2062
  }
×
2063

2064
  public void reclaimConsensusMemory() {
2065
    conf.setAllocateMemoryForStorageEngine(
×
2066
        conf.getAllocateMemoryForStorageEngine() + conf.getAllocateMemoryForConsensus());
×
2067
    SystemInfo.getInstance().allocateWriteMemory();
×
2068
  }
×
2069

2070
  private static class IoTDBDescriptorHolder {
2071

2072
    private static final IoTDBDescriptor INSTANCE = new IoTDBDescriptor();
1✔
2073

2074
    private IoTDBDescriptorHolder() {}
2075
  }
2076
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc