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

apache / iotdb / #10009

06 Sep 2023 07:16AM UTC coverage: 47.654% (-0.04%) from 47.697%
#10009

push

travis_ci

web-flow
[To rel/1.2] add hot load compaction configs (#10759)

60 of 60 new or added lines in 1 file covered. (100.0%)

80169 of 168232 relevant lines covered (47.65%)

0.48 hits per line

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

72.55
/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.CompactionTaskManager;
39
import org.apache.iotdb.db.storageengine.dataregion.compaction.schedule.constant.CompactionPriority;
40
import org.apache.iotdb.db.storageengine.dataregion.compaction.selector.constant.CrossCompactionSelector;
41
import org.apache.iotdb.db.storageengine.dataregion.compaction.selector.constant.InnerSequenceCompactionSelector;
42
import org.apache.iotdb.db.storageengine.dataregion.compaction.selector.constant.InnerUnsequenceCompactionSelector;
43
import org.apache.iotdb.db.storageengine.dataregion.wal.WALManager;
44
import org.apache.iotdb.db.storageengine.dataregion.wal.utils.WALMode;
45
import org.apache.iotdb.db.storageengine.rescon.disk.TierManager;
46
import org.apache.iotdb.db.storageengine.rescon.memory.SystemInfo;
47
import org.apache.iotdb.db.utils.DateTimeUtils;
48
import org.apache.iotdb.db.utils.datastructure.TVListSortAlgorithm;
49
import org.apache.iotdb.external.api.IPropertiesLoader;
50
import org.apache.iotdb.metrics.config.MetricConfigDescriptor;
51
import org.apache.iotdb.metrics.config.ReloadLevel;
52
import org.apache.iotdb.metrics.reporter.iotdb.IoTDBInternalMemoryReporter;
53
import org.apache.iotdb.metrics.reporter.iotdb.IoTDBInternalReporter;
54
import org.apache.iotdb.metrics.utils.InternalReporterType;
55
import org.apache.iotdb.metrics.utils.NodeType;
56
import org.apache.iotdb.rpc.RpcTransportFactory;
57
import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
58
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
59
import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
60
import org.apache.iotdb.tsfile.fileSystem.FSType;
61
import org.apache.iotdb.tsfile.utils.FilePathUtils;
62

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

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

77
public class IoTDBDescriptor {
78

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

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

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

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

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

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

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

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

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

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

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

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

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

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

248
    if (properties.getProperty("dn_core_connection_for_internal_service", null) != null) {
1✔
249
      conf.setCoreClientNumForEachNode(
×
250
          Integer.parseInt(
×
251
              properties.getProperty("dn_core_connection_for_internal_service").trim()));
×
252
      logger.warn(
×
253
          "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.");
254
    }
255
    conf.setCoreClientNumForEachNode(
1✔
256
        Integer.parseInt(
1✔
257
            properties
258
                .getProperty(
1✔
259
                    "dn_core_client_count_for_each_node_in_client_manager",
260
                    String.valueOf(conf.getCoreClientNumForEachNode()))
1✔
261
                .trim()));
1✔
262

263
    if (properties.getProperty("dn_max_connection_for_internal_service", null) != null) {
1✔
264
      conf.setMaxClientNumForEachNode(
×
265
          Integer.parseInt(
×
266
              properties.getProperty("dn_max_connection_for_internal_service").trim()));
×
267
      logger.warn(
×
268
          "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.");
269
    }
270
    conf.setMaxClientNumForEachNode(
1✔
271
        Integer.parseInt(
1✔
272
            properties
273
                .getProperty(
1✔
274
                    "dn_max_client_count_for_each_node_in_client_manager",
275
                    String.valueOf(conf.getMaxClientNumForEachNode()))
1✔
276
                .trim()));
1✔
277

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

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

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

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

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

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

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

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

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

340
    initMemoryAllocate(properties);
1✔
341

342
    loadWALProps(properties);
1✔
343

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

711
    conf.setRpcSelectorThreadCount(rpcSelectorThreadNum);
1✔
712

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

722
    conf.setRpcMinConcurrentClientNum(minConcurrentClientNum);
1✔
723

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

733
    conf.setRpcMaxConcurrentClientNum(maxConcurrentClientNum);
1✔
734

735
    loadAutoCreateSchemaProps(properties);
1✔
736

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1105
  private void loadCompactionHotModifiedProps(Properties properties) throws InterruptedException {
1106
    conf.setCompactionValidationLevel(
×
1107
        CompactionValidationLevel.valueOf(
×
1108
            properties.getProperty(
×
1109
                "compaction_validation_level", conf.getCompactionValidationLevel().toString())));
×
1110

1111
    loadCompactionIsEnabledHotModifiedProps(properties);
×
1112

1113
    boolean restartCompactionTaskManager = loadCompactionThreadCountHotModifiedProps(properties);
×
1114

1115
    restartCompactionTaskManager |= loadCompactionSubTaskCountHotModifiedProps(properties);
×
1116

1117
    if (restartCompactionTaskManager) {
×
1118
      CompactionTaskManager.getInstance().restart();
×
1119
    }
1120
  }
×
1121

1122
  private boolean loadCompactionThreadCountHotModifiedProps(Properties properties) {
1123
    int newConfigCompactionThreadCount =
×
1124
        Integer.parseInt(
×
1125
            properties.getProperty(
×
1126
                "compaction_thread_count", Integer.toString(conf.getCompactionThreadCount())));
×
1127
    if (newConfigCompactionThreadCount <= 0) {
×
1128
      logger.error("compaction_thread_count must greater than 0");
×
1129
      return false;
×
1130
    }
1131
    if (newConfigCompactionThreadCount == conf.getCompactionThreadCount()) {
×
1132
      return false;
×
1133
    }
1134
    conf.setCompactionThreadCount(
×
1135
        Integer.parseInt(
×
1136
            properties.getProperty(
×
1137
                "compaction_thread_count", Integer.toString(conf.getCompactionThreadCount()))));
×
1138
    return true;
×
1139
  }
1140

1141
  private boolean loadCompactionSubTaskCountHotModifiedProps(Properties properties) {
1142
    int newConfigSubtaskNum =
×
1143
        Integer.parseInt(
×
1144
            properties.getProperty(
×
1145
                "sub_compaction_thread_count", Integer.toString(conf.getSubCompactionTaskNum())));
×
1146
    if (newConfigSubtaskNum <= 0) {
×
1147
      logger.error("sub_compaction_thread_count must greater than 0");
×
1148
      return false;
×
1149
    }
1150
    if (newConfigSubtaskNum == conf.getSubCompactionTaskNum()) {
×
1151
      return false;
×
1152
    }
1153
    conf.setSubCompactionTaskNum(newConfigSubtaskNum);
×
1154
    return true;
×
1155
  }
1156

1157
  private void loadCompactionIsEnabledHotModifiedProps(Properties properties) {
1158
    boolean isCompactionEnabled =
×
1159
        conf.isEnableSeqSpaceCompaction()
×
1160
            || conf.isEnableUnseqSpaceCompaction()
×
1161
            || conf.isEnableCrossSpaceCompaction();
×
1162

1163
    boolean newConfigEnableCrossSpaceCompaction =
×
1164
        Boolean.parseBoolean(
×
1165
            properties.getProperty(
×
1166
                "enable_cross_space_compaction",
1167
                Boolean.toString(conf.isEnableCrossSpaceCompaction())));
×
1168
    boolean newConfigEnableSeqSpaceCompaction =
×
1169
        Boolean.parseBoolean(
×
1170
            properties.getProperty(
×
1171
                "enable_seq_space_compaction",
1172
                Boolean.toString(conf.isEnableSeqSpaceCompaction())));
×
1173
    boolean newConfigEnableUnseqSpaceCompaction =
×
1174
        Boolean.parseBoolean(
×
1175
            properties.getProperty(
×
1176
                "enable_unseq_space_compaction",
1177
                Boolean.toString(conf.isEnableUnseqSpaceCompaction())));
×
1178
    boolean compactionEnabledInNewConfig =
×
1179
        newConfigEnableCrossSpaceCompaction
1180
            || newConfigEnableSeqSpaceCompaction
1181
            || newConfigEnableUnseqSpaceCompaction;
1182

1183
    if (!isCompactionEnabled && compactionEnabledInNewConfig) {
×
1184
      logger.error("Compaction cannot start in current status.");
×
1185
      return;
×
1186
    }
1187

1188
    conf.setEnableCrossSpaceCompaction(newConfigEnableCrossSpaceCompaction);
×
1189
    conf.setEnableSeqSpaceCompaction(newConfigEnableSeqSpaceCompaction);
×
1190
    conf.setEnableUnseqSpaceCompaction(newConfigEnableUnseqSpaceCompaction);
×
1191
  }
×
1192

1193
  private void loadWALHotModifiedProps(Properties properties) {
1194
    long walAsyncModeFsyncDelayInMs =
1✔
1195
        Long.parseLong(
1✔
1196
            properties.getProperty(
1✔
1197
                "wal_async_mode_fsync_delay_in_ms",
1198
                Long.toString(conf.getWalAsyncModeFsyncDelayInMs())));
1✔
1199
    if (walAsyncModeFsyncDelayInMs > 0) {
1✔
1200
      conf.setWalAsyncModeFsyncDelayInMs(walAsyncModeFsyncDelayInMs);
1✔
1201
    }
1202

1203
    long walSyncModeFsyncDelayInMs =
1✔
1204
        Long.parseLong(
1✔
1205
            properties.getProperty(
1✔
1206
                "wal_sync_mode_fsync_delay_in_ms",
1207
                Long.toString(conf.getWalSyncModeFsyncDelayInMs())));
1✔
1208
    if (walSyncModeFsyncDelayInMs > 0) {
1✔
1209
      conf.setWalSyncModeFsyncDelayInMs(walSyncModeFsyncDelayInMs);
1✔
1210
    }
1211

1212
    long walFileSizeThreshold =
1✔
1213
        Long.parseLong(
1✔
1214
            properties.getProperty(
1✔
1215
                "wal_file_size_threshold_in_byte",
1216
                Long.toString(conf.getWalFileSizeThresholdInByte())));
1✔
1217
    if (walFileSizeThreshold > 0) {
1✔
1218
      conf.setWalFileSizeThresholdInByte(walFileSizeThreshold);
1✔
1219
    }
1220

1221
    double walMinEffectiveInfoRatio =
1✔
1222
        Double.parseDouble(
1✔
1223
            properties.getProperty(
1✔
1224
                "wal_min_effective_info_ratio",
1225
                Double.toString(conf.getWalMinEffectiveInfoRatio())));
1✔
1226
    if (walMinEffectiveInfoRatio > 0) {
1✔
1227
      conf.setWalMinEffectiveInfoRatio(walMinEffectiveInfoRatio);
1✔
1228
    }
1229

1230
    long walMemTableSnapshotThreshold =
1✔
1231
        Long.parseLong(
1✔
1232
            properties.getProperty(
1✔
1233
                "wal_memtable_snapshot_threshold_in_byte",
1234
                Long.toString(conf.getWalMemTableSnapshotThreshold())));
1✔
1235
    if (walMemTableSnapshotThreshold > 0) {
1✔
1236
      conf.setWalMemTableSnapshotThreshold(walMemTableSnapshotThreshold);
1✔
1237
    }
1238

1239
    int maxWalMemTableSnapshotNum =
1✔
1240
        Integer.parseInt(
1✔
1241
            properties.getProperty(
1✔
1242
                "max_wal_memtable_snapshot_num",
1243
                Integer.toString(conf.getMaxWalMemTableSnapshotNum())));
1✔
1244
    if (maxWalMemTableSnapshotNum > 0) {
1✔
1245
      conf.setMaxWalMemTableSnapshotNum(maxWalMemTableSnapshotNum);
1✔
1246
    }
1247

1248
    long deleteWalFilesPeriod =
1✔
1249
        Long.parseLong(
1✔
1250
            properties.getProperty(
1✔
1251
                "delete_wal_files_period_in_ms",
1252
                Long.toString(conf.getDeleteWalFilesPeriodInMs())));
1✔
1253
    if (deleteWalFilesPeriod > 0) {
1✔
1254
      conf.setDeleteWalFilesPeriodInMs(deleteWalFilesPeriod);
1✔
1255
    }
1256

1257
    long throttleDownThresholdInByte =
1✔
1258
        Long.parseLong(
1✔
1259
            properties.getProperty(
1✔
1260
                "iot_consensus_throttle_threshold_in_byte",
1261
                Long.toString(conf.getThrottleThreshold())));
1✔
1262
    if (throttleDownThresholdInByte > 0) {
1✔
1263
      conf.setThrottleThreshold(throttleDownThresholdInByte);
1✔
1264
    }
1265

1266
    long cacheWindowInMs =
1✔
1267
        Long.parseLong(
1✔
1268
            properties.getProperty(
1✔
1269
                "iot_consensus_cache_window_time_in_ms",
1270
                Long.toString(conf.getCacheWindowTimeInMs())));
1✔
1271
    if (cacheWindowInMs > 0) {
1✔
1272
      conf.setCacheWindowTimeInMs(cacheWindowInMs);
1✔
1273
    }
1274
  }
1✔
1275

1276
  private void loadAutoCreateSchemaProps(Properties properties) {
1277
    conf.setAutoCreateSchemaEnabled(
1✔
1278
        Boolean.parseBoolean(
1✔
1279
            properties.getProperty(
1✔
1280
                "enable_auto_create_schema",
1281
                Boolean.toString(conf.isAutoCreateSchemaEnabled()).trim())));
1✔
1282
    conf.setBooleanStringInferType(
1✔
1283
        TSDataType.valueOf(
1✔
1284
            properties.getProperty(
1✔
1285
                "boolean_string_infer_type", conf.getBooleanStringInferType().toString())));
1✔
1286
    conf.setIntegerStringInferType(
1✔
1287
        TSDataType.valueOf(
1✔
1288
            properties.getProperty(
1✔
1289
                "integer_string_infer_type", conf.getIntegerStringInferType().toString())));
1✔
1290
    conf.setLongStringInferType(
1✔
1291
        TSDataType.valueOf(
1✔
1292
            properties.getProperty(
1✔
1293
                "long_string_infer_type", conf.getLongStringInferType().toString())));
1✔
1294
    conf.setFloatingStringInferType(
1✔
1295
        TSDataType.valueOf(
1✔
1296
            properties.getProperty(
1✔
1297
                "floating_string_infer_type", conf.getFloatingStringInferType().toString())));
1✔
1298
    conf.setNanStringInferType(
1✔
1299
        TSDataType.valueOf(
1✔
1300
            properties.getProperty(
1✔
1301
                "nan_string_infer_type", conf.getNanStringInferType().toString())));
1✔
1302
    conf.setDefaultStorageGroupLevel(
1✔
1303
        Integer.parseInt(
1✔
1304
            properties.getProperty(
1✔
1305
                "default_storage_group_level",
1306
                Integer.toString(conf.getDefaultStorageGroupLevel()))));
1✔
1307
    conf.setDefaultBooleanEncoding(
1✔
1308
        properties.getProperty(
1✔
1309
            "default_boolean_encoding", conf.getDefaultBooleanEncoding().toString()));
1✔
1310
    conf.setDefaultInt32Encoding(
1✔
1311
        properties.getProperty(
1✔
1312
            "default_int32_encoding", conf.getDefaultInt32Encoding().toString()));
1✔
1313
    conf.setDefaultInt64Encoding(
1✔
1314
        properties.getProperty(
1✔
1315
            "default_int64_encoding", conf.getDefaultInt64Encoding().toString()));
1✔
1316
    conf.setDefaultFloatEncoding(
1✔
1317
        properties.getProperty(
1✔
1318
            "default_float_encoding", conf.getDefaultFloatEncoding().toString()));
1✔
1319
    conf.setDefaultDoubleEncoding(
1✔
1320
        properties.getProperty(
1✔
1321
            "default_double_encoding", conf.getDefaultDoubleEncoding().toString()));
1✔
1322
    conf.setDefaultTextEncoding(
1✔
1323
        properties.getProperty("default_text_encoding", conf.getDefaultTextEncoding().toString()));
1✔
1324
  }
1✔
1325

1326
  private void loadTsFileProps(Properties properties) {
1327
    TSFileDescriptor.getInstance()
1✔
1328
        .getConfig()
1✔
1329
        .setGroupSizeInByte(
1✔
1330
            Integer.parseInt(
1✔
1331
                properties.getProperty(
1✔
1332
                    "group_size_in_byte",
1333
                    Integer.toString(
1✔
1334
                        TSFileDescriptor.getInstance().getConfig().getGroupSizeInByte()))));
1✔
1335
    TSFileDescriptor.getInstance()
1✔
1336
        .getConfig()
1✔
1337
        .setPageSizeInByte(
1✔
1338
            Integer.parseInt(
1✔
1339
                properties.getProperty(
1✔
1340
                    "page_size_in_byte",
1341
                    Integer.toString(
1✔
1342
                        TSFileDescriptor.getInstance().getConfig().getPageSizeInByte()))));
1✔
1343
    if (TSFileDescriptor.getInstance().getConfig().getPageSizeInByte()
1✔
1344
        > TSFileDescriptor.getInstance().getConfig().getGroupSizeInByte()) {
1✔
1345
      logger.warn("page_size is greater than group size, will set it as the same with group size");
×
1346
      TSFileDescriptor.getInstance()
×
1347
          .getConfig()
×
1348
          .setPageSizeInByte(TSFileDescriptor.getInstance().getConfig().getGroupSizeInByte());
×
1349
    }
1350
    TSFileDescriptor.getInstance()
1✔
1351
        .getConfig()
1✔
1352
        .setMaxNumberOfPointsInPage(
1✔
1353
            Integer.parseInt(
1✔
1354
                properties.getProperty(
1✔
1355
                    "max_number_of_points_in_page",
1356
                    Integer.toString(
1✔
1357
                        TSFileDescriptor.getInstance().getConfig().getMaxNumberOfPointsInPage()))));
1✔
1358
    TSFileDescriptor.getInstance()
1✔
1359
        .getConfig()
1✔
1360
        .setMaxStringLength(
1✔
1361
            Integer.parseInt(
1✔
1362
                properties.getProperty(
1✔
1363
                    "max_string_length",
1364
                    Integer.toString(
1✔
1365
                        TSFileDescriptor.getInstance().getConfig().getMaxStringLength()))));
1✔
1366
    TSFileDescriptor.getInstance()
1✔
1367
        .getConfig()
1✔
1368
        .setBloomFilterErrorRate(
1✔
1369
            Double.parseDouble(
1✔
1370
                properties.getProperty(
1✔
1371
                    "bloom_filter_error_rate",
1372
                    Double.toString(
1✔
1373
                        TSFileDescriptor.getInstance().getConfig().getBloomFilterErrorRate()))));
1✔
1374
    TSFileDescriptor.getInstance()
1✔
1375
        .getConfig()
1✔
1376
        .setFloatPrecision(
1✔
1377
            Integer.parseInt(
1✔
1378
                properties.getProperty(
1✔
1379
                    "float_precision",
1380
                    Integer.toString(
1✔
1381
                        TSFileDescriptor.getInstance().getConfig().getFloatPrecision()))));
1✔
1382
    TSFileDescriptor.getInstance()
1✔
1383
        .getConfig()
1✔
1384
        .setValueEncoder(
1✔
1385
            properties.getProperty(
1✔
1386
                "value_encoder", TSFileDescriptor.getInstance().getConfig().getValueEncoder()));
1✔
1387
    TSFileDescriptor.getInstance()
1✔
1388
        .getConfig()
1✔
1389
        .setCompressor(
1✔
1390
            properties.getProperty(
1✔
1391
                "compressor",
1392
                TSFileDescriptor.getInstance().getConfig().getCompressor().toString()));
1✔
1393
    TSFileDescriptor.getInstance()
1✔
1394
        .getConfig()
1✔
1395
        .setMaxDegreeOfIndexNode(
1✔
1396
            Integer.parseInt(
1✔
1397
                properties.getProperty(
1✔
1398
                    "max_degree_of_index_node",
1399
                    Integer.toString(
1✔
1400
                        TSFileDescriptor.getInstance().getConfig().getMaxDegreeOfIndexNode()))));
1✔
1401
    TSFileDescriptor.getInstance()
1✔
1402
        .getConfig()
1✔
1403
        .setMaxTsBlockSizeInBytes(
1✔
1404
            Integer.parseInt(
1✔
1405
                properties.getProperty(
1✔
1406
                    "max_tsblock_size_in_bytes",
1407
                    Integer.toString(
1✔
1408
                        TSFileDescriptor.getInstance().getConfig().getMaxTsBlockSizeInBytes()))));
1✔
1409

1410
    // min(default_size, maxBytesForQuery)
1411
    TSFileDescriptor.getInstance()
1✔
1412
        .getConfig()
1✔
1413
        .setMaxTsBlockSizeInBytes(
1✔
1414
            (int)
1415
                Math.min(
1✔
1416
                    TSFileDescriptor.getInstance().getConfig().getMaxTsBlockSizeInBytes(),
1✔
1417
                    conf.getMaxBytesPerFragmentInstance()));
1✔
1418

1419
    TSFileDescriptor.getInstance()
1✔
1420
        .getConfig()
1✔
1421
        .setMaxTsBlockLineNumber(
1✔
1422
            Integer.parseInt(
1✔
1423
                properties.getProperty(
1✔
1424
                    "max_tsblock_line_number",
1425
                    Integer.toString(
1✔
1426
                        TSFileDescriptor.getInstance().getConfig().getMaxTsBlockLineNumber()))));
1✔
1427
  }
1✔
1428

1429
  // Mqtt related
1430
  private void loadMqttProps(Properties properties) {
1431
    conf.setMqttDir(properties.getProperty("mqtt_root_dir", conf.getMqttDir()));
1✔
1432

1433
    if (properties.getProperty(IoTDBConstant.MQTT_HOST_NAME) != null) {
1✔
1434
      conf.setMqttHost(properties.getProperty(IoTDBConstant.MQTT_HOST_NAME));
×
1435
    } else {
1436
      logger.info("MQTT host is not configured, will use dn_rpc_address.");
1✔
1437
      conf.setMqttHost(
1✔
1438
          properties.getProperty(IoTDBConstant.DN_RPC_ADDRESS, conf.getRpcAddress().trim()));
1✔
1439
    }
1440

1441
    if (properties.getProperty(IoTDBConstant.MQTT_PORT_NAME) != null) {
1✔
1442
      conf.setMqttPort(Integer.parseInt(properties.getProperty(IoTDBConstant.MQTT_PORT_NAME)));
×
1443
    }
1444

1445
    if (properties.getProperty(IoTDBConstant.MQTT_HANDLER_POOL_SIZE_NAME) != null) {
1✔
1446
      conf.setMqttHandlerPoolSize(
×
1447
          Integer.parseInt(properties.getProperty(IoTDBConstant.MQTT_HANDLER_POOL_SIZE_NAME)));
×
1448
    }
1449

1450
    if (properties.getProperty(IoTDBConstant.MQTT_PAYLOAD_FORMATTER_NAME) != null) {
1✔
1451
      conf.setMqttPayloadFormatter(
×
1452
          properties.getProperty(IoTDBConstant.MQTT_PAYLOAD_FORMATTER_NAME));
×
1453
    }
1454

1455
    if (properties.getProperty(IoTDBConstant.ENABLE_MQTT) != null) {
1✔
1456
      conf.setEnableMQTTService(
×
1457
          Boolean.parseBoolean(properties.getProperty(IoTDBConstant.ENABLE_MQTT)));
×
1458
    }
1459

1460
    if (properties.getProperty(IoTDBConstant.MQTT_MAX_MESSAGE_SIZE) != null) {
1✔
1461
      conf.setMqttMaxMessageSize(
×
1462
          Integer.parseInt(properties.getProperty(IoTDBConstant.MQTT_MAX_MESSAGE_SIZE)));
×
1463
    }
1464
  }
1✔
1465

1466
  // timed flush memtable
1467
  private void loadTimedService(Properties properties) {
1468
    conf.setEnableTimedFlushSeqMemtable(
1✔
1469
        Boolean.parseBoolean(
1✔
1470
            properties.getProperty(
1✔
1471
                "enable_timed_flush_seq_memtable",
1472
                Boolean.toString(conf.isEnableTimedFlushSeqMemtable()))));
1✔
1473

1474
    long seqMemTableFlushInterval =
1✔
1475
        Long.parseLong(
1✔
1476
            properties
1477
                .getProperty(
1✔
1478
                    "seq_memtable_flush_interval_in_ms",
1479
                    Long.toString(conf.getSeqMemtableFlushInterval()))
1✔
1480
                .trim());
1✔
1481
    if (seqMemTableFlushInterval > 0) {
1✔
1482
      conf.setSeqMemtableFlushInterval(seqMemTableFlushInterval);
1✔
1483
    }
1484

1485
    long seqMemTableFlushCheckInterval =
1✔
1486
        Long.parseLong(
1✔
1487
            properties
1488
                .getProperty(
1✔
1489
                    "seq_memtable_flush_check_interval_in_ms",
1490
                    Long.toString(conf.getSeqMemtableFlushCheckInterval()))
1✔
1491
                .trim());
1✔
1492
    if (seqMemTableFlushCheckInterval > 0) {
1✔
1493
      conf.setSeqMemtableFlushCheckInterval(seqMemTableFlushCheckInterval);
1✔
1494
    }
1495

1496
    conf.setEnableTimedFlushUnseqMemtable(
1✔
1497
        Boolean.parseBoolean(
1✔
1498
            properties.getProperty(
1✔
1499
                "enable_timed_flush_unseq_memtable",
1500
                Boolean.toString(conf.isEnableTimedFlushUnseqMemtable()))));
1✔
1501

1502
    long unseqMemTableFlushInterval =
1✔
1503
        Long.parseLong(
1✔
1504
            properties
1505
                .getProperty(
1✔
1506
                    "unseq_memtable_flush_interval_in_ms",
1507
                    Long.toString(conf.getUnseqMemtableFlushInterval()))
1✔
1508
                .trim());
1✔
1509
    if (unseqMemTableFlushInterval > 0) {
1✔
1510
      conf.setUnseqMemtableFlushInterval(unseqMemTableFlushInterval);
1✔
1511
    }
1512

1513
    long unseqMemTableFlushCheckInterval =
1✔
1514
        Long.parseLong(
1✔
1515
            properties
1516
                .getProperty(
1✔
1517
                    "unseq_memtable_flush_check_interval_in_ms",
1518
                    Long.toString(conf.getUnseqMemtableFlushCheckInterval()))
1✔
1519
                .trim());
1✔
1520
    if (unseqMemTableFlushCheckInterval > 0) {
1✔
1521
      conf.setUnseqMemtableFlushCheckInterval(unseqMemTableFlushCheckInterval);
1✔
1522
    }
1523
  }
1✔
1524

1525
  private String[][] parseDataDirs(String dataDirs) {
1526
    String[] tiers = dataDirs.split(IoTDBConstant.TIER_SEPARATOR);
1✔
1527
    String[][] tierDataDirs = new String[tiers.length][];
1✔
1528
    for (int i = 0; i < tiers.length; ++i) {
1✔
1529
      tierDataDirs[i] = tiers[i].split(",");
1✔
1530
    }
1531
    return tierDataDirs;
1✔
1532
  }
1533

1534
  public void loadHotModifiedProps(Properties properties) throws QueryProcessException {
1535
    try {
1536
      // update data dirs
1537
      String dataDirs = properties.getProperty("dn_data_dirs", null);
×
1538
      if (dataDirs != null) {
×
1539
        conf.reloadDataDirs(parseDataDirs(dataDirs));
×
1540
      }
1541

1542
      // update dir strategy
1543
      String multiDirStrategyClassName = properties.getProperty("dn_multi_dir_strategy", null);
×
1544
      if (multiDirStrategyClassName != null
×
1545
          && !multiDirStrategyClassName.equals(conf.getMultiDirStrategyClassName())) {
×
1546
        conf.setMultiDirStrategyClassName(multiDirStrategyClassName);
×
1547
        conf.confirmMultiDirStrategy();
×
1548
      }
1549

1550
      TierManager.getInstance().resetFolders();
×
1551

1552
      // update timed flush & close conf
1553
      loadTimedService(properties);
×
1554
      StorageEngine.getInstance().rebootTimedService();
×
1555

1556
      long memTableSizeThreshold =
×
1557
          Long.parseLong(
×
1558
              properties
1559
                  .getProperty(
×
1560
                      "memtable_size_threshold", Long.toString(conf.getMemtableSizeThreshold()))
×
1561
                  .trim());
×
1562
      if (memTableSizeThreshold > 0) {
×
1563
        conf.setMemtableSizeThreshold(memTableSizeThreshold);
×
1564
      }
1565

1566
      // update params of creating schemaengine automatically
1567
      loadAutoCreateSchemaProps(properties);
×
1568

1569
      // update tsfile-format config
1570
      loadTsFileProps(properties);
×
1571
      // update slow_query_threshold
1572
      conf.setSlowQueryThreshold(
×
1573
          Long.parseLong(
×
1574
              properties.getProperty(
×
1575
                  "slow_query_threshold", Long.toString(conf.getSlowQueryThreshold()))));
×
1576
      // update merge_write_throughput_mb_per_sec
1577
      conf.setCompactionWriteThroughputMbPerSec(
×
1578
          Integer.parseInt(
×
1579
              properties.getProperty(
×
1580
                  "merge_write_throughput_mb_per_sec",
1581
                  Integer.toString(conf.getCompactionWriteThroughputMbPerSec()))));
×
1582

1583
      // update select into operation max buffer size
1584
      conf.setIntoOperationBufferSizeInByte(
×
1585
          Long.parseLong(
×
1586
              properties.getProperty(
×
1587
                  "into_operation_buffer_size_in_byte",
1588
                  String.valueOf(conf.getIntoOperationBufferSizeInByte()))));
×
1589
      // update insert-tablet-plan's row limit for select-into
1590
      conf.setSelectIntoInsertTabletPlanRowLimit(
×
1591
          Integer.parseInt(
×
1592
              properties.getProperty(
×
1593
                  "select_into_insert_tablet_plan_row_limit",
1594
                  String.valueOf(conf.getSelectIntoInsertTabletPlanRowLimit()))));
×
1595

1596
      // update enable query memory estimation for memory control
1597
      conf.setEnableQueryMemoryEstimation(
×
1598
          Boolean.parseBoolean(
×
1599
              properties.getProperty(
×
1600
                  "enable_query_memory_estimation",
1601
                  Boolean.toString(conf.isEnableQueryMemoryEstimation()))));
×
1602

1603
      // update wal config
1604
      long prevDeleteWalFilesPeriodInMs = conf.getDeleteWalFilesPeriodInMs();
×
1605
      loadWALHotModifiedProps(properties);
×
1606
      if (prevDeleteWalFilesPeriodInMs != conf.getDeleteWalFilesPeriodInMs()) {
×
1607
        WALManager.getInstance().rebootWALDeleteThread();
×
1608
      }
1609

1610
      // update compaction config
1611
      loadCompactionHotModifiedProps(properties);
×
1612

1613
      // update schema quota configuration
1614
      conf.setClusterSchemaLimitLevel(
×
1615
          properties
1616
              .getProperty("cluster_schema_limit_level", conf.getClusterSchemaLimitLevel())
×
1617
              .trim());
×
1618
      conf.setClusterSchemaLimitThreshold(
×
1619
          Long.parseLong(
×
1620
              properties
1621
                  .getProperty(
×
1622
                      "cluster_schema_limit_threshold",
1623
                      Long.toString(conf.getClusterSchemaLimitThreshold()))
×
1624
                  .trim()));
×
1625
      DataNodeSchemaQuotaManager.getInstance().updateConfiguration();
×
1626
    } catch (Exception e) {
×
1627
      throw new QueryProcessException(String.format("Fail to reload configuration because %s", e));
×
1628
    }
×
1629
  }
×
1630

1631
  public void loadHotModifiedProps() throws QueryProcessException {
1632
    URL url = getPropsUrl(CommonConfig.CONFIG_NAME);
×
1633
    if (url == null) {
×
1634
      logger.warn("Couldn't load the configuration from any of the known sources.");
×
1635
      return;
×
1636
    }
1637

1638
    Properties commonProperties = new Properties();
×
1639
    try (InputStream inputStream = url.openStream()) {
×
1640
      logger.info("Start to reload config file {}", url);
×
1641
      commonProperties.load(inputStream);
×
1642
    } catch (Exception e) {
×
1643
      logger.warn("Fail to reload config file {}", url, e);
×
1644
      throw new QueryProcessException(
×
1645
          String.format("Fail to reload config file %s because %s", url, e.getMessage()));
×
1646
    }
×
1647

1648
    url = getPropsUrl(IoTDBConfig.CONFIG_NAME);
×
1649
    if (url == null) {
×
1650
      logger.warn("Couldn't load the configuration from any of the known sources.");
×
1651
      return;
×
1652
    }
1653
    try (InputStream inputStream = url.openStream()) {
×
1654
      logger.info("Start to reload config file {}", url);
×
1655
      Properties properties = new Properties();
×
1656
      properties.load(inputStream);
×
1657
      commonProperties.putAll(properties);
×
1658
      loadHotModifiedProps(commonProperties);
×
1659
    } catch (Exception e) {
×
1660
      logger.warn("Fail to reload config file {}", url, e);
×
1661
      throw new QueryProcessException(
×
1662
          String.format("Fail to reload config file %s because %s", url, e.getMessage()));
×
1663
    }
×
1664
    ReloadLevel reloadLevel = MetricConfigDescriptor.getInstance().loadHotProps(commonProperties);
×
1665
    logger.info("Reload metric service in level {}", reloadLevel);
×
1666
    if (reloadLevel == ReloadLevel.RESTART_INTERNAL_REPORTER) {
×
1667
      IoTDBInternalReporter internalReporter;
1668
      if (MetricConfigDescriptor.getInstance().getMetricConfig().getInternalReportType()
×
1669
          == InternalReporterType.IOTDB) {
1670
        internalReporter = new IoTDBInternalLocalReporter();
×
1671
      } else {
1672
        internalReporter = new IoTDBInternalMemoryReporter();
×
1673
      }
1674
      MetricService.getInstance().reloadInternalReporter(internalReporter);
×
1675
    } else {
×
1676
      MetricService.getInstance().reloadService(reloadLevel);
×
1677
    }
1678
  }
×
1679

1680
  private void initMemoryAllocate(Properties properties) {
1681
    String memoryAllocateProportion =
1✔
1682
        properties.getProperty("storage_query_schema_consensus_free_memory_proportion");
1✔
1683
    if (memoryAllocateProportion != null) {
1✔
1684
      String[] proportions = memoryAllocateProportion.split(":");
×
1685
      int proportionSum = 0;
×
1686
      for (String proportion : proportions) {
×
1687
        proportionSum += Integer.parseInt(proportion.trim());
×
1688
      }
1689
      long maxMemoryAvailable = Runtime.getRuntime().maxMemory();
×
1690
      if (proportionSum != 0) {
×
1691
        conf.setAllocateMemoryForStorageEngine(
×
1692
            maxMemoryAvailable * Integer.parseInt(proportions[0].trim()) / proportionSum);
×
1693
        conf.setAllocateMemoryForRead(
×
1694
            maxMemoryAvailable * Integer.parseInt(proportions[1].trim()) / proportionSum);
×
1695
        conf.setAllocateMemoryForSchema(
×
1696
            maxMemoryAvailable * Integer.parseInt(proportions[2].trim()) / proportionSum);
×
1697
        conf.setAllocateMemoryForConsensus(
×
1698
            maxMemoryAvailable * Integer.parseInt(proportions[3].trim()) / proportionSum);
×
1699
      }
1700
    }
1701

1702
    logger.info("initial allocateMemoryForRead = {}", conf.getAllocateMemoryForRead());
1✔
1703
    logger.info("initial allocateMemoryForWrite = {}", conf.getAllocateMemoryForStorageEngine());
1✔
1704
    logger.info("initial allocateMemoryForSchema = {}", conf.getAllocateMemoryForSchema());
1✔
1705
    logger.info("initial allocateMemoryForConsensus = {}", conf.getAllocateMemoryForConsensus());
1✔
1706

1707
    initSchemaMemoryAllocate(properties);
1✔
1708
    initStorageEngineAllocate(properties);
1✔
1709

1710
    conf.setEnableQueryMemoryEstimation(
1✔
1711
        Boolean.parseBoolean(
1✔
1712
            properties.getProperty(
1✔
1713
                "enable_query_memory_estimation",
1714
                Boolean.toString(conf.isEnableQueryMemoryEstimation()))));
1✔
1715

1716
    String queryMemoryAllocateProportion =
1✔
1717
        properties.getProperty("chunk_timeseriesmeta_free_memory_proportion");
1✔
1718
    if (queryMemoryAllocateProportion != null) {
1✔
1719
      String[] proportions = queryMemoryAllocateProportion.split(":");
×
1720
      int proportionSum = 0;
×
1721
      for (String proportion : proportions) {
×
1722
        proportionSum += Integer.parseInt(proportion.trim());
×
1723
      }
1724
      long maxMemoryAvailable = conf.getAllocateMemoryForRead();
×
1725
      if (proportionSum != 0) {
×
1726
        try {
1727
          conf.setAllocateMemoryForBloomFilterCache(
×
1728
              maxMemoryAvailable * Integer.parseInt(proportions[0].trim()) / proportionSum);
×
1729
          conf.setAllocateMemoryForChunkCache(
×
1730
              maxMemoryAvailable * Integer.parseInt(proportions[1].trim()) / proportionSum);
×
1731
          conf.setAllocateMemoryForTimeSeriesMetaDataCache(
×
1732
              maxMemoryAvailable * Integer.parseInt(proportions[2].trim()) / proportionSum);
×
1733
          conf.setAllocateMemoryForCoordinator(
×
1734
              maxMemoryAvailable * Integer.parseInt(proportions[3].trim()) / proportionSum);
×
1735
          conf.setAllocateMemoryForOperators(
×
1736
              maxMemoryAvailable * Integer.parseInt(proportions[4].trim()) / proportionSum);
×
1737
          conf.setAllocateMemoryForDataExchange(
×
1738
              maxMemoryAvailable * Integer.parseInt(proportions[5].trim()) / proportionSum);
×
1739
          conf.setAllocateMemoryForTimeIndex(
×
1740
              maxMemoryAvailable * Integer.parseInt(proportions[6].trim()) / proportionSum);
×
1741
        } catch (Exception e) {
×
1742
          throw new RuntimeException(
×
1743
              "Each subsection of configuration item chunkmeta_chunk_timeseriesmeta_free_memory_proportion"
1744
                  + " should be an integer, which is "
1745
                  + queryMemoryAllocateProportion);
1746
        }
×
1747
      }
1748
    }
1749

1750
    // metadata cache is disabled, we need to move all their allocated memory to other parts
1751
    if (!conf.isMetaDataCacheEnable()) {
1✔
1752
      long sum =
×
1753
          conf.getAllocateMemoryForBloomFilterCache()
×
1754
              + conf.getAllocateMemoryForChunkCache()
×
1755
              + conf.getAllocateMemoryForTimeSeriesMetaDataCache();
×
1756
      conf.setAllocateMemoryForBloomFilterCache(0);
×
1757
      conf.setAllocateMemoryForChunkCache(0);
×
1758
      conf.setAllocateMemoryForTimeSeriesMetaDataCache(0);
×
1759
      long partForDataExchange = sum / 2;
×
1760
      long partForOperators = sum - partForDataExchange;
×
1761
      conf.setAllocateMemoryForDataExchange(
×
1762
          conf.getAllocateMemoryForDataExchange() + partForDataExchange);
×
1763
      conf.setAllocateMemoryForOperators(conf.getAllocateMemoryForOperators() + partForOperators);
×
1764
    }
1765
  }
1✔
1766

1767
  private void initStorageEngineAllocate(Properties properties) {
1768
    long storageMemoryTotal = conf.getAllocateMemoryForStorageEngine();
1✔
1769

1770
    int proportionSum = 10;
1✔
1771
    int writeProportion = 8;
1✔
1772
    int compactionProportion = 2;
1✔
1773
    int writeProportionSum = 20;
1✔
1774
    int memTableProportion = 19;
1✔
1775
    int timePartitionInfo = 1;
1✔
1776

1777
    String storageMemoryAllocatePortion =
1✔
1778
        properties.getProperty("storage_engine_memory_proportion");
1✔
1779
    if (storageMemoryAllocatePortion != null) {
1✔
1780
      String[] proportions = storageMemoryAllocatePortion.split(":");
×
1781
      int loadedProportionSum = 0;
×
1782
      for (String proportion : proportions) {
×
1783
        loadedProportionSum += Integer.parseInt(proportion.trim());
×
1784
      }
1785

1786
      if (loadedProportionSum != 0) {
×
1787
        proportionSum = loadedProportionSum;
×
1788
        writeProportion = Integer.parseInt(proportions[0].trim());
×
1789
        compactionProportion = Integer.parseInt(proportions[1].trim());
×
1790
      }
1791
      conf.setCompactionProportion((double) compactionProportion / (double) proportionSum);
×
1792
    }
1793

1794
    String allocationRatioForWrite = properties.getProperty("write_memory_proportion");
1✔
1795
    if (allocationRatioForWrite != null) {
1✔
1796
      String[] proportions = allocationRatioForWrite.split(":");
×
1797
      int loadedProportionSum = 0;
×
1798
      for (String proportion : proportions) {
×
1799
        loadedProportionSum += Integer.parseInt(proportion.trim());
×
1800
      }
1801

1802
      if (loadedProportionSum != 0) {
×
1803
        writeProportionSum = loadedProportionSum;
×
1804
        memTableProportion = Integer.parseInt(proportions[0].trim());
×
1805
        timePartitionInfo = Integer.parseInt(proportions[1].trim());
×
1806
      }
1807
      // memtableProportionForWrite = 19/20 default
1808
      double memtableProportionForWrite =
×
1809
          ((double) memTableProportion / (double) writeProportionSum);
1810

1811
      // timePartitionInfoForWrite = 1/20 default
1812
      double timePartitionInfoForWrite = ((double) timePartitionInfo / (double) writeProportionSum);
×
1813
      // proportionForWrite = 8/10 default
1814
      double proportionForWrite = ((double) (writeProportion) / (double) proportionSum);
×
1815
      // writeProportionForMemtable = 8/10 * 19/20 = 0.76 default
1816
      conf.setWriteProportionForMemtable(proportionForWrite * memtableProportionForWrite);
×
1817
      // allocateMemoryForTimePartitionInfo = storageMemoryTotal * 8/10 * 1/20 default
1818
      conf.setAllocateMemoryForTimePartitionInfo(
×
1819
          (long) ((proportionForWrite * timePartitionInfoForWrite) * storageMemoryTotal));
1820
    }
1821
  }
1✔
1822

1823
  private void initSchemaMemoryAllocate(Properties properties) {
1824
    long schemaMemoryTotal = conf.getAllocateMemoryForSchema();
1✔
1825

1826
    String schemaMemoryPortionInput = properties.getProperty("schema_memory_proportion");
1✔
1827
    if (schemaMemoryPortionInput != null) {
1✔
1828
      String[] proportions = schemaMemoryPortionInput.split(":");
×
1829
      int loadedProportionSum = 0;
×
1830
      for (String proportion : proportions) {
×
1831
        loadedProportionSum += Integer.parseInt(proportion.trim());
×
1832
      }
1833

1834
      if (loadedProportionSum != 0) {
×
1835
        conf.setSchemaMemoryProportion(
×
1836
            new int[] {
1837
              Integer.parseInt(proportions[0].trim()),
×
1838
              Integer.parseInt(proportions[1].trim()),
×
1839
              Integer.parseInt(proportions[2].trim())
×
1840
            });
1841
      }
1842

1843
    } else {
×
1844
      schemaMemoryPortionInput = properties.getProperty("schema_memory_allocate_proportion");
1✔
1845
      if (schemaMemoryPortionInput != null) {
1✔
1846
        String[] proportions = schemaMemoryPortionInput.split(":");
×
1847
        int loadedProportionSum = 0;
×
1848
        for (String proportion : proportions) {
×
1849
          loadedProportionSum += Integer.parseInt(proportion.trim());
×
1850
        }
1851

1852
        if (loadedProportionSum != 0) {
×
1853
          conf.setSchemaMemoryProportion(
×
1854
              new int[] {
1855
                Integer.parseInt(proportions[0].trim()),
×
1856
                Integer.parseInt(proportions[1].trim()) + Integer.parseInt(proportions[3].trim()),
×
1857
                Integer.parseInt(proportions[2].trim())
×
1858
              });
1859
        }
1860
      }
1861
    }
1862

1863
    int proportionSum = 0;
1✔
1864
    for (int proportion : conf.getSchemaMemoryProportion()) {
1✔
1865
      proportionSum += proportion;
1✔
1866
    }
1867

1868
    conf.setAllocateMemoryForSchemaRegion(
1✔
1869
        schemaMemoryTotal * conf.getSchemaMemoryProportion()[0] / proportionSum);
1✔
1870
    logger.info("allocateMemoryForSchemaRegion = {}", conf.getAllocateMemoryForSchemaRegion());
1✔
1871

1872
    conf.setAllocateMemoryForSchemaCache(
1✔
1873
        schemaMemoryTotal * conf.getSchemaMemoryProportion()[1] / proportionSum);
1✔
1874
    logger.info("allocateMemoryForSchemaCache = {}", conf.getAllocateMemoryForSchemaCache());
1✔
1875

1876
    conf.setAllocateMemoryForPartitionCache(
1✔
1877
        schemaMemoryTotal * conf.getSchemaMemoryProportion()[2] / proportionSum);
1✔
1878
    logger.info("allocateMemoryForPartitionCache = {}", conf.getAllocateMemoryForPartitionCache());
1✔
1879
  }
1✔
1880

1881
  @SuppressWarnings("squid:S3518") // "proportionSum" can't be zero
1882
  private void loadUDFProps(Properties properties) {
1883
    String initialByteArrayLengthForMemoryControl =
1✔
1884
        properties.getProperty("udf_initial_byte_array_length_for_memory_control");
1✔
1885
    if (initialByteArrayLengthForMemoryControl != null) {
1✔
1886
      conf.setUdfInitialByteArrayLengthForMemoryControl(
×
1887
          Integer.parseInt(initialByteArrayLengthForMemoryControl));
×
1888
    }
1889

1890
    conf.setUdfDir(properties.getProperty("udf_lib_dir", conf.getUdfDir()));
1✔
1891

1892
    String memoryBudgetInMb = properties.getProperty("udf_memory_budget_in_mb");
1✔
1893
    if (memoryBudgetInMb != null) {
1✔
1894
      conf.setUdfMemoryBudgetInMB(
×
1895
          (float)
1896
              Math.min(Float.parseFloat(memoryBudgetInMb), 0.2 * conf.getAllocateMemoryForRead()));
×
1897
    }
1898

1899
    String readerTransformerCollectorMemoryProportion =
1✔
1900
        properties.getProperty("udf_reader_transformer_collector_memory_proportion");
1✔
1901
    if (readerTransformerCollectorMemoryProportion != null) {
1✔
1902
      String[] proportions = readerTransformerCollectorMemoryProportion.split(":");
×
1903
      int proportionSum = 0;
×
1904
      for (String proportion : proportions) {
×
1905
        proportionSum += Integer.parseInt(proportion.trim());
×
1906
      }
1907
      float maxMemoryAvailable = conf.getUdfMemoryBudgetInMB();
×
1908
      try {
1909
        conf.setUdfReaderMemoryBudgetInMB(
×
1910
            maxMemoryAvailable * Integer.parseInt(proportions[0].trim()) / proportionSum);
×
1911
        conf.setUdfTransformerMemoryBudgetInMB(
×
1912
            maxMemoryAvailable * Integer.parseInt(proportions[1].trim()) / proportionSum);
×
1913
        conf.setUdfCollectorMemoryBudgetInMB(
×
1914
            maxMemoryAvailable * Integer.parseInt(proportions[2].trim()) / proportionSum);
×
1915
      } catch (Exception e) {
×
1916
        throw new RuntimeException(
×
1917
            "Each subsection of configuration item udf_reader_transformer_collector_memory_proportion"
1918
                + " should be an integer, which is "
1919
                + readerTransformerCollectorMemoryProportion);
1920
      }
×
1921
    }
1922
  }
1✔
1923

1924
  private void loadTriggerProps(Properties properties) {
1925
    conf.setTriggerDir(properties.getProperty("trigger_lib_dir", conf.getTriggerDir()));
1✔
1926
    conf.setRetryNumToFindStatefulTrigger(
1✔
1927
        Integer.parseInt(
1✔
1928
            properties.getProperty(
1✔
1929
                "stateful_trigger_retry_num_when_not_found",
1930
                Integer.toString(conf.getRetryNumToFindStatefulTrigger()))));
1✔
1931

1932
    int tlogBufferSize =
1✔
1933
        Integer.parseInt(
1✔
1934
            properties.getProperty("tlog_buffer_size", Integer.toString(conf.getTlogBufferSize())));
1✔
1935
    if (tlogBufferSize > 0) {
1✔
1936
      conf.setTlogBufferSize(tlogBufferSize);
1✔
1937
    }
1938

1939
    conf.setTriggerForwardMaxQueueNumber(
1✔
1940
        Integer.parseInt(
1✔
1941
            properties.getProperty(
1✔
1942
                "trigger_forward_max_queue_number",
1943
                Integer.toString(conf.getTriggerForwardMaxQueueNumber()))));
1✔
1944
    conf.setTriggerForwardMaxSizePerQueue(
1✔
1945
        Integer.parseInt(
1✔
1946
            properties.getProperty(
1✔
1947
                "trigger_forward_max_size_per_queue",
1948
                Integer.toString(conf.getTriggerForwardMaxSizePerQueue()))));
1✔
1949
    conf.setTriggerForwardBatchSize(
1✔
1950
        Integer.parseInt(
1✔
1951
            properties.getProperty(
1✔
1952
                "trigger_forward_batch_size",
1953
                Integer.toString(conf.getTriggerForwardBatchSize()))));
1✔
1954
    conf.setTriggerForwardHTTPPoolSize(
1✔
1955
        Integer.parseInt(
1✔
1956
            properties.getProperty(
1✔
1957
                "trigger_forward_http_pool_size",
1958
                Integer.toString(conf.getTriggerForwardHTTPPoolSize()))));
1✔
1959
    conf.setTriggerForwardHTTPPOOLMaxPerRoute(
1✔
1960
        Integer.parseInt(
1✔
1961
            properties.getProperty(
1✔
1962
                "trigger_forward_http_pool_max_per_route",
1963
                Integer.toString(conf.getTriggerForwardHTTPPOOLMaxPerRoute()))));
1✔
1964
    conf.setTriggerForwardMQTTPoolSize(
1✔
1965
        Integer.parseInt(
1✔
1966
            properties.getProperty(
1✔
1967
                "trigger_forward_mqtt_pool_size",
1968
                Integer.toString(conf.getTriggerForwardMQTTPoolSize()))));
1✔
1969
  }
1✔
1970

1971
  private void loadPipeProps(Properties properties) {
1972
    conf.setPipeLibDir(properties.getProperty("pipe_lib_dir", conf.getPipeLibDir()));
1✔
1973

1974
    conf.setPipeReceiverFileDir(
1✔
1975
        properties.getProperty("pipe_receiver_file_dir", conf.getPipeReceiverFileDir()));
1✔
1976
  }
1✔
1977

1978
  private void loadCQProps(Properties properties) {
1979
    conf.setContinuousQueryThreadNum(
1✔
1980
        Integer.parseInt(
1✔
1981
            properties.getProperty(
1✔
1982
                "continuous_query_thread_num",
1983
                Integer.toString(conf.getContinuousQueryThreadNum()))));
1✔
1984
    if (conf.getContinuousQueryThreadNum() <= 0) {
1✔
1985
      conf.setContinuousQueryThreadNum(Runtime.getRuntime().availableProcessors() / 2);
×
1986
    }
1987

1988
    conf.setContinuousQueryMinimumEveryInterval(
1✔
1989
        DateTimeUtils.convertDurationStrToLong(
1✔
1990
            properties.getProperty("continuous_query_minimum_every_interval", "1s"),
1✔
1991
            CommonDescriptor.getInstance().getConfig().getTimestampPrecision()));
1✔
1992
  }
1✔
1993

1994
  public void loadClusterProps(Properties properties) {
1995
    String configNodeUrls = properties.getProperty(IoTDBConstant.DN_TARGET_CONFIG_NODE_LIST);
1✔
1996
    if (configNodeUrls != null) {
1✔
1997
      try {
1998
        configNodeUrls = configNodeUrls.trim();
×
1999
        conf.setTargetConfigNodeList(NodeUrlUtils.parseTEndPointUrls(configNodeUrls));
×
2000
      } catch (BadNodeUrlException e) {
×
2001
        logger.error(
×
2002
            "Config nodes are set in wrong format, please set them like 127.0.0.1:10710,127.0.0.1:10712");
2003
      }
×
2004
    }
2005

2006
    conf.setInternalAddress(
1✔
2007
        properties
2008
            .getProperty(IoTDBConstant.DN_INTERNAL_ADDRESS, conf.getInternalAddress())
1✔
2009
            .trim());
1✔
2010

2011
    conf.setInternalPort(
1✔
2012
        Integer.parseInt(
1✔
2013
            properties
2014
                .getProperty(
1✔
2015
                    IoTDBConstant.DN_INTERNAL_PORT, Integer.toString(conf.getInternalPort()))
1✔
2016
                .trim()));
1✔
2017

2018
    conf.setDataRegionConsensusPort(
1✔
2019
        Integer.parseInt(
1✔
2020
            properties
2021
                .getProperty(
1✔
2022
                    "dn_data_region_consensus_port",
2023
                    Integer.toString(conf.getDataRegionConsensusPort()))
1✔
2024
                .trim()));
1✔
2025

2026
    conf.setSchemaRegionConsensusPort(
1✔
2027
        Integer.parseInt(
1✔
2028
            properties
2029
                .getProperty(
1✔
2030
                    "dn_schema_region_consensus_port",
2031
                    Integer.toString(conf.getSchemaRegionConsensusPort()))
1✔
2032
                .trim()));
1✔
2033
    conf.setJoinClusterRetryIntervalMs(
1✔
2034
        Long.parseLong(
1✔
2035
            properties
2036
                .getProperty(
1✔
2037
                    "dn_join_cluster_retry_interval_ms",
2038
                    Long.toString(conf.getJoinClusterRetryIntervalMs()))
1✔
2039
                .trim()));
1✔
2040
  }
1✔
2041

2042
  public void loadShuffleProps(Properties properties) {
2043
    conf.setMppDataExchangePort(
1✔
2044
        Integer.parseInt(
1✔
2045
            properties.getProperty(
1✔
2046
                "dn_mpp_data_exchange_port", Integer.toString(conf.getMppDataExchangePort()))));
1✔
2047
    conf.setMppDataExchangeCorePoolSize(
1✔
2048
        Integer.parseInt(
1✔
2049
            properties.getProperty(
1✔
2050
                "mpp_data_exchange_core_pool_size",
2051
                Integer.toString(conf.getMppDataExchangeCorePoolSize()))));
1✔
2052
    conf.setMppDataExchangeMaxPoolSize(
1✔
2053
        Integer.parseInt(
1✔
2054
            properties.getProperty(
1✔
2055
                "mpp_data_exchange_max_pool_size",
2056
                Integer.toString(conf.getMppDataExchangeMaxPoolSize()))));
1✔
2057
    conf.setMppDataExchangeKeepAliveTimeInMs(
1✔
2058
        Integer.parseInt(
1✔
2059
            properties.getProperty(
1✔
2060
                "mpp_data_exchange_keep_alive_time_in_ms",
2061
                Integer.toString(conf.getMppDataExchangeKeepAliveTimeInMs()))));
1✔
2062

2063
    conf.setPartitionCacheSize(
1✔
2064
        Integer.parseInt(
1✔
2065
            properties.getProperty(
1✔
2066
                "partition_cache_size", Integer.toString(conf.getPartitionCacheSize()))));
1✔
2067

2068
    conf.setDriverTaskExecutionTimeSliceInMs(
1✔
2069
        Integer.parseInt(
1✔
2070
            properties.getProperty(
1✔
2071
                "driver_task_execution_time_slice_in_ms",
2072
                Integer.toString(conf.getDriverTaskExecutionTimeSliceInMs()))));
1✔
2073
  }
1✔
2074

2075
  /** Get default encode algorithm by data type */
2076
  public TSEncoding getDefaultEncodingByType(TSDataType dataType) {
2077
    switch (dataType) {
1✔
2078
      case BOOLEAN:
2079
        return conf.getDefaultBooleanEncoding();
×
2080
      case INT32:
2081
        return conf.getDefaultInt32Encoding();
1✔
2082
      case INT64:
2083
        return conf.getDefaultInt64Encoding();
×
2084
      case FLOAT:
2085
        return conf.getDefaultFloatEncoding();
1✔
2086
      case DOUBLE:
2087
        return conf.getDefaultDoubleEncoding();
×
2088
      default:
2089
        return conf.getDefaultTextEncoding();
×
2090
    }
2091
  }
2092

2093
  // These configurations are received from config node when registering
2094
  public void loadGlobalConfig(TGlobalConfig globalConfig) {
2095
    conf.setSeriesPartitionExecutorClass(globalConfig.getSeriesPartitionExecutorClass());
×
2096
    conf.setSeriesPartitionSlotNum(globalConfig.getSeriesPartitionSlotNum());
×
2097
    conf.setReadConsistencyLevel(globalConfig.getReadConsistencyLevel());
×
2098
  }
×
2099

2100
  public void loadRatisConfig(TRatisConfig ratisConfig) {
2101
    conf.setDataRatisConsensusLogAppenderBufferSizeMax(ratisConfig.getDataAppenderBufferSize());
×
2102
    conf.setSchemaRatisConsensusLogAppenderBufferSizeMax(ratisConfig.getSchemaAppenderBufferSize());
×
2103

2104
    conf.setDataRatisConsensusSnapshotTriggerThreshold(
×
2105
        ratisConfig.getDataSnapshotTriggerThreshold());
×
2106
    conf.setSchemaRatisConsensusSnapshotTriggerThreshold(
×
2107
        ratisConfig.getSchemaSnapshotTriggerThreshold());
×
2108

2109
    conf.setDataRatisConsensusLogUnsafeFlushEnable(ratisConfig.isDataLogUnsafeFlushEnable());
×
2110
    conf.setSchemaRatisConsensusLogUnsafeFlushEnable(ratisConfig.isSchemaLogUnsafeFlushEnable());
×
2111
    conf.setDataRatisConsensusLogForceSyncNum(ratisConfig.getDataRegionLogForceSyncNum());
×
2112

2113
    conf.setDataRatisConsensusLogSegmentSizeMax(ratisConfig.getDataLogSegmentSizeMax());
×
2114
    conf.setSchemaRatisConsensusLogSegmentSizeMax(ratisConfig.getSchemaLogSegmentSizeMax());
×
2115

2116
    conf.setDataRatisConsensusGrpcFlowControlWindow(ratisConfig.getDataGrpcFlowControlWindow());
×
2117
    conf.setSchemaRatisConsensusGrpcFlowControlWindow(ratisConfig.getSchemaGrpcFlowControlWindow());
×
2118
    conf.setDataRatisConsensusGrpcLeaderOutstandingAppendsMax(
×
2119
        ratisConfig.getDataRegionGrpcLeaderOutstandingAppendsMax());
×
2120

2121
    conf.setDataRatisConsensusLeaderElectionTimeoutMinMs(
×
2122
        ratisConfig.getDataLeaderElectionTimeoutMin());
×
2123
    conf.setSchemaRatisConsensusLeaderElectionTimeoutMinMs(
×
2124
        ratisConfig.getSchemaLeaderElectionTimeoutMin());
×
2125

2126
    conf.setDataRatisConsensusLeaderElectionTimeoutMaxMs(
×
2127
        ratisConfig.getDataLeaderElectionTimeoutMax());
×
2128
    conf.setSchemaRatisConsensusLeaderElectionTimeoutMaxMs(
×
2129
        ratisConfig.getSchemaLeaderElectionTimeoutMax());
×
2130

2131
    conf.setDataRatisConsensusRequestTimeoutMs(ratisConfig.getDataRequestTimeout());
×
2132
    conf.setSchemaRatisConsensusRequestTimeoutMs(ratisConfig.getSchemaRequestTimeout());
×
2133

2134
    conf.setDataRatisConsensusMaxRetryAttempts(ratisConfig.getDataMaxRetryAttempts());
×
2135
    conf.setDataRatisConsensusInitialSleepTimeMs(ratisConfig.getDataInitialSleepTime());
×
2136
    conf.setDataRatisConsensusMaxSleepTimeMs(ratisConfig.getDataMaxSleepTime());
×
2137

2138
    conf.setSchemaRatisConsensusMaxRetryAttempts(ratisConfig.getSchemaMaxRetryAttempts());
×
2139
    conf.setSchemaRatisConsensusInitialSleepTimeMs(ratisConfig.getSchemaInitialSleepTime());
×
2140
    conf.setSchemaRatisConsensusMaxSleepTimeMs(ratisConfig.getSchemaMaxSleepTime());
×
2141

2142
    conf.setDataRatisConsensusPreserveWhenPurge(ratisConfig.getDataPreserveWhenPurge());
×
2143
    conf.setSchemaRatisConsensusPreserveWhenPurge(ratisConfig.getSchemaPreserveWhenPurge());
×
2144

2145
    conf.setRatisFirstElectionTimeoutMinMs(ratisConfig.getFirstElectionTimeoutMin());
×
2146
    conf.setRatisFirstElectionTimeoutMaxMs(ratisConfig.getFirstElectionTimeoutMax());
×
2147

2148
    conf.setSchemaRatisLogMax(ratisConfig.getSchemaRegionRatisLogMax());
×
2149
    conf.setDataRatisLogMax(ratisConfig.getDataRegionRatisLogMax());
×
2150
  }
×
2151

2152
  public void loadCQConfig(TCQConfig cqConfig) {
2153
    conf.setCqMinEveryIntervalInMs(cqConfig.getCqMinEveryIntervalInMs());
×
2154
  }
×
2155

2156
  public void reclaimConsensusMemory() {
2157
    conf.setAllocateMemoryForStorageEngine(
×
2158
        conf.getAllocateMemoryForStorageEngine() + conf.getAllocateMemoryForConsensus());
×
2159
    SystemInfo.getInstance().allocateWriteMemory();
×
2160
  }
×
2161

2162
  private static class IoTDBDescriptorHolder {
2163

2164
    private static final IoTDBDescriptor INSTANCE = new IoTDBDescriptor();
1✔
2165

2166
    private IoTDBDescriptorHolder() {}
2167
  }
2168
}
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