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

apache / iotdb / #9920

25 Aug 2023 06:16AM UTC coverage: 47.839% (-0.02%) from 47.862%
#9920

push

travis_ci

web-flow
Remove some useless configs (#10949)

80233 of 167714 relevant lines covered (47.84%)

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

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

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

78
public class IoTDBDescriptor {
79

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

341
    initMemoryAllocate(properties);
1✔
342

343
    loadWALProps(properties);
1✔
344

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

712
    conf.setRpcSelectorThreadCount(rpcSelectorThreadNum);
1✔
713

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

723
    conf.setRpcMinConcurrentClientNum(minConcurrentClientNum);
1✔
724

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

734
    conf.setRpcMaxConcurrentClientNum(maxConcurrentClientNum);
1✔
735

736
    loadAutoCreateSchemaProps(properties);
1✔
737

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1112
    loadCompactionIsEnabledHotModifiedProps(properties);
×
1113

1114
    boolean restartCompactionTaskManager = loadCompactionThreadCountHotModifiedProps(properties);
×
1115

1116
    restartCompactionTaskManager |= loadCompactionSubTaskCountHotModifiedProps(properties);
×
1117

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2163
  private static class IoTDBDescriptorHolder {
2164

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

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