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

taosdata / TDengine / #4473

08 Jul 2025 09:38AM UTC coverage: 62.922% (+0.7%) from 62.22%
#4473

push

travis-ci

web-flow
Merge pull request #31712 from taosdata/merge/mainto3.0

merge: from main to 3.0 branch

158525 of 321496 branches covered (49.31%)

Branch coverage included in aggregate %.

56 of 60 new or added lines in 13 files covered. (93.33%)

1333 existing lines in 67 files now uncovered.

245526 of 320647 relevant lines covered (76.57%)

17689640.25 hits per line

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

67.42
/source/common/src/tglobal.c
1
/*
2
 * Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
3
 *
4
 * This program is free software: you can use, redistribute, and/or modify
5
 * it under the terms of the GNU Affero General Public License, version 3
6
 * or later ("AGPL"), as published by the Free Software Foundation.
7
 *
8
 * This program is distributed in the hope that it will be useful, but WITHOUT
9
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10
 * FITNESS FOR A PARTICULAR PURPOSE.
11
 *
12
 * You should have received a copy of the GNU Affero General Public License
13
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
14
 */
15

16
#define _DEFAULT_SOURCE
17
#include "cJSON.h"
18
#include "defines.h"
19
#include "os.h"
20
#include "osString.h"
21
#include "tconfig.h"
22
#include "tglobal.h"
23
#include "tgrant.h"
24
#include "tjson.h"
25
#include "tlog.h"
26
#include "tmisce.h"
27
#include "tunit.h"
28

29
#include "tutil.h"
30

31
#define CONFIG_PATH_LEN (TSDB_FILENAME_LEN + 12)
32
#define CONFIG_FILE_LEN (CONFIG_PATH_LEN + 32)
33

34
// GRANT_CFG_DECLARE;
35

36
SConfig *tsCfg = NULL;
37
// cluster
38
char          tsFirst[TSDB_EP_LEN] = {0};
39
char          tsSecond[TSDB_EP_LEN] = {0};
40
char          tsLocalFqdn[TSDB_FQDN_LEN] = {0};
41
char          tsLocalEp[TSDB_EP_LEN] = {0};  // Local End Point, hostname:port
42
char          tsVersionName[16] = "community";
43
uint16_t      tsServerPort = 6030;
44
int32_t       tsVersion = 30000000;
45
int32_t       tsForceReadConfig = 0;
46
int32_t       tsdmConfigVersion = -1;
47
int32_t       tsConfigInited = 0;
48
int32_t       tsStatusInterval = 1;   // second
49
int32_t       tsNumOfSupportVnodes = 256;
50
uint16_t      tsMqttPort = 6083;
51
char          tsEncryptAlgorithm[16] = {0};
52
char          tsEncryptScope[100] = {0};
53
EEncryptAlgor tsiEncryptAlgorithm = 0;
54
EEncryptScope tsiEncryptScope = 0;
55
// char     tsAuthCode[500] = {0};
56
// char     tsEncryptKey[17] = {0};
57
char   tsEncryptKey[17] = {0};
58
int8_t tsEnableStrongPassword = 1;
59
char          tsEncryptPassAlgorithm[16] = {0};
60
EEncryptAlgor tsiEncryptPassAlgorithm = 0;
61

62
// common
63
int32_t tsMaxShellConns = 50000;
64
int32_t tsShellActivityTimer = 3;  // second
65

66
// memory pool
67
int8_t tsMemPoolFullFunc = 0;
68
#ifndef TD_ASTRA
69
int8_t tsQueryUseMemoryPool = 1;
70
#else
71
int8_t  tsQueryUseMemoryPool = 0;
72
#endif
73
int32_t tsQueryBufferPoolSize = 0;       // MB
74
int32_t tsSingleQueryMaxMemorySize = 0;  // MB
75
int32_t tsMinReservedMemorySize = 0;     // MB
76
int64_t tsCurrentAvailMemorySize = 0;
77
int8_t  tsNeedTrim = 0;
78

79
// queue & threads
80
int32_t tsQueryMinConcurrentTaskNum = 1;
81
int32_t tsQueryMaxConcurrentTaskNum = 0;
82
int32_t tsQueryConcurrentTaskNum = 0;
83
int32_t tsQueryNoFetchTimeoutSec = 3600 * 5;
84

85
int32_t tsNumOfRpcThreads = 1;
86
int32_t tsNumOfRpcSessions = 30000;
87
#ifdef WINDOWS
88
int32_t tsShareConnLimit = 1;
89
#else
90
int32_t tsShareConnLimit = 10;
91
#endif
92

93
int32_t tsReadTimeout = 900;
94
int32_t tsTimeToGetAvailableConn = 500000;
95
int8_t  tsEnableIpv6 = 0;
96

97
int32_t tsNumOfQueryThreads = 0;
98
int32_t tsNumOfCommitThreads = 2;
99
int32_t tsNumOfTaskQueueThreads = 16;
100
int32_t tsNumOfMnodeQueryThreads = 16;
101
int32_t tsNumOfMnodeFetchThreads = 1;
102
int32_t tsNumOfMnodeReadThreads = 1;
103
int32_t tsNumOfVnodeQueryThreads = 16;
104
float   tsRatioOfVnodeStreamThreads = 0.5F;
105
int32_t tsNumOfVnodeFetchThreads = 4;
106
int32_t tsNumOfVnodeRsmaThreads = 2;
107
int32_t tsNumOfQnodeQueryThreads = 16;
108
int32_t tsNumOfQnodeFetchThreads = 1;
109
int32_t tsNumOfSnodeStreamThreads = 4;
110
int32_t tsNumOfSnodeWriteThreads = 1;
111
int32_t tsMaxStreamBackendCache = 128;  // M
112
int32_t tsPQSortMemThreshold = 16;      // M
113
int32_t tsRetentionSpeedLimitMB = 0;    // unlimited
114

115
int32_t tsNumOfCompactThreads = 2;
116
int32_t tsNumOfRetentionThreads = 1;
117

118
// sync raft
119
int32_t tsElectInterval = 25 * 1000;
120
int32_t tsHeartbeatInterval = 1000;
121
int32_t tsHeartbeatTimeout = 20 * 1000;
122
int32_t tsSnapReplMaxWaitN = 128;
123
int64_t tsLogBufferMemoryAllowed = 0;  // bytes
124
int32_t tsRoutineReportInterval = 300;
125
bool    tsSyncLogHeartbeat = false;
126

127
// mnode
128
int64_t tsMndSdbWriteDelta = 200;
129
int64_t tsMndLogRetention = 2000;
130
bool    tsMndSkipGrant = false;
131
bool    tsEnableWhiteList = false;  // ip white list cfg
132
bool    tsForceKillTrans = false;
133

134
// arbitrator
135
int32_t tsArbHeartBeatIntervalSec = 2;
136
int32_t tsArbCheckSyncIntervalSec = 3;
137
int32_t tsArbSetAssignedTimeoutSec = 14;
138

139
// dnode
140
int64_t tsDndStart = 0;
141
int64_t tsDndStartOsUptime = 0;
142
int64_t tsDndUpTime = 0;
143

144
// dnode misc
145
uint32_t tsEncryptionKeyChksum = 0;
146
int8_t   tsEncryptionKeyStat = ENCRYPT_KEY_STAT_UNSET;
147
uint32_t tsGrant = 1;
148

149
bool tsCompareAsStrInGreatest = true;
150

151
// monitor
152
#ifdef USE_MONITOR
153
bool tsEnableMonitor = true;
154
#else
155
bool    tsEnableMonitor = false;
156
#endif
157
int32_t  tsMonitorInterval = 30;
158
char     tsMonitorFqdn[TSDB_FQDN_LEN] = {0};
159
uint16_t tsMonitorPort = 6043;
160
int32_t  tsMonitorMaxLogs = 100;
161
bool     tsMonitorComp = false;
162
bool     tsMonitorLogProtocol = false;
163
int32_t  tsEnableMetrics = 0;    // 0: disable, 1: enable
164
int32_t  tsMetricsLevel = 0;      // 0: only high level metrics, 1: full metrics
165
int32_t  tsMetricsInterval = 30;  // second
166
#ifdef USE_MONITOR
167
bool tsMonitorForceV2 = true;
168
#else
169
bool    tsMonitorForceV2 = false;
170
#endif
171

172

173
// audit
174
#ifdef USE_AUDIT
175
bool    tsEnableAudit = true;
176
bool    tsEnableAuditCreateTable = true;
177
bool    tsEnableAuditDelete = true;
178
int32_t tsAuditInterval = 5000;
179
#else
180
bool    tsEnableAudit = false;
181
bool    tsEnableAuditCreateTable = false;
182
bool    tsEnableAuditDelete = false;
183
int32_t tsAuditInterval = 200000;
184
#endif
185

186
// telem
187
#if defined(TD_ENTERPRISE) || !defined(USE_REPORT)
188
bool tsEnableTelem = false;
189
#else
190
bool    tsEnableTelem = true;
191
#endif
192
int32_t  tsTelemInterval = 86400;
193
char     tsTelemServer[TSDB_FQDN_LEN] = "telemetry.tdengine.com";
194
uint16_t tsTelemPort = 80;
195
char    *tsTelemUri = "/report";
196

197
#if defined(TD_ENTERPRISE) || !defined(USE_REPORT)
198
bool tsEnableCrashReport = false;
199
#else
200
bool    tsEnableCrashReport = true;
201
#endif
202
char   *tsClientCrashReportUri = "/ccrashreport";
203
char   *tsSvrCrashReportUri = "/dcrashreport";
204
int32_t tsSafetyCheckLevel = TSDB_SAFETY_CHECK_LEVELL_NORMAL;
205

206
// schemaless
207
bool tsSmlDot2Underline = true;
208
char tsSmlTsDefaultName[TSDB_COL_NAME_LEN] = "_ts";
209
char tsSmlTagName[TSDB_COL_NAME_LEN] = "_tag_null";
210
char tsSmlChildTableName[TSDB_TABLE_NAME_LEN] = "";  // user defined child table name can be specified in tag value.
211
char tsSmlAutoChildTableNameDelimiter[TSDB_TABLE_NAME_LEN] = "";
212
// If set to empty system will generate table name using MD5 hash.
213
// true means that the name and order of cols in each line are the same(only for influx protocol)
214
// bool    tsSmlDataFormat = false;
215
// int32_t tsSmlBatchSize = 10000;
216

217
// checkpoint backup
218
char    tsSnodeAddress[TSDB_FQDN_LEN] = {0};
219
int32_t tsRsyncPort = 873;
220
#ifdef WINDOWS
221
char tsCheckpointBackupDir[PATH_MAX] = "C:\\TDengine\\data\\backup\\checkpoint\\";
222
#else
223
char    tsCheckpointBackupDir[PATH_MAX] = "/var/lib/taos/backup/checkpoint/";
224
#endif
225

226
// tmq
227
int32_t tmqMaxTopicNum = 20;
228
int32_t tmqRowSize = 1000;
229
// query
230
int32_t tsQueryPolicy = 1;
231
bool    tsQueryTbNotExistAsEmpty = false;
232
int32_t tsQueryRspPolicy = 0;
233
int64_t tsQueryMaxConcurrentTables = 200;  // unit is TSDB_TABLE_NUM_UNIT
234
bool    tsEnableQueryHb = true;
235
bool    tsEnableScience = false;  // on taos-cli show float and doulbe with scientific notation if true
236
int32_t tsQuerySmaOptimize = 0;
237
int32_t tsQueryRsmaTolerance = 1000;  // the tolerance time (ms) to judge from which level to query rsma data.
238
bool    tsQueryPlannerTrace = false;
239
int32_t tsQueryNodeChunkSize = 32 * 1024;
240
bool    tsQueryUseNodeAllocator = true;
241
bool    tsKeepColumnName = false;
242
int32_t tsRedirectPeriod = 10;
243
int32_t tsRedirectFactor = 2;
244
int32_t tsRedirectMaxPeriod = 1000;
245
int32_t tsMaxRetryWaitTime = 10000;
246
bool    tsUseAdapter = false;
247
int32_t tsMetaCacheMaxSize = -1;                   // MB
248
int32_t tsSlowLogThreshold = 10;                   // seconds
249
char    tsSlowLogExceptDb[TSDB_DB_NAME_LEN] = "";  // seconds
250
int32_t tsSlowLogScope = SLOW_LOG_TYPE_QUERY;
251
char   *tsSlowLogScopeString = "query";
252
int32_t tsSlowLogMaxLen = 4096;
253
int32_t tsTimeSeriesThreshold = 50;
254
bool    tsMultiResultFunctionStarReturnTags = false;
255

256
/*
257
 * denote if the server needs to compress response message at the application layer to client, including query rsp,
258
 * metricmeta rsp, and multi-meter query rsp message body. The client compress the submit message to server.
259
 *
260
 * 0: all data are compressed
261
 * -1: all data are not compressed
262
 * other values: if the message payload size is greater than the tsCompressMsgSize, the message will be compressed.
263
 */
264
int32_t tsCompressMsgSize = -1;
265

266
// count/hyperloglog function always return values in case of all NULL data or Empty data set.
267
int32_t tsCountAlwaysReturnValue = 1;
268

269
// 1 ms for sliding time, the value will changed in case of time precision changed
270
int32_t tsMinSlidingTime = 1;
271

272
// 1 database precision unit for interval time range, changed accordingly
273
int32_t tsMinIntervalTime = 1;
274

275
// maximum batch rows numbers imported from a single csv load
276
int32_t tsMaxInsertBatchRows = 1000000;
277

278
float   tsSelectivityRatio = 1.0;
279
int32_t tsTagFilterResCacheSize = 1024 * 10;
280
char    tsTagFilterCache = 0;
281

282
int32_t tsBypassFlag = 0;
283

284
// the maximum allowed query buffer size during query processing for each data node.
285
// -1 no limit (default)
286
// 0  no query allowed, queries are disabled
287
// positive value (in MB)
288
int32_t tsQueryBufferSize = -1;
289
int64_t tsQueryBufferSizeBytes = -1;
290
int32_t tsCacheLazyLoadThreshold = 500;
291

292
int32_t  tsDiskCfgNum = 0;
293
SDiskCfg tsDiskCfg[TFS_MAX_DISKS] = {0};
294
int64_t  tsMinDiskFreeSize = TFS_MIN_DISK_FREE_SIZE;
295

296
// stream scheduler
297
bool tsDeployOnSnode = true;
298

299
/*
300
 * minimum scale for whole system, millisecond by default
301
 * for TSDB_TIME_PRECISION_MILLI: 60000L
302
 *     TSDB_TIME_PRECISION_MICRO: 60000000L
303
 *     TSDB_TIME_PRECISION_NANO:  60000000000L
304
 */
305
int64_t tsTickPerMin[] = {60000L, 60000000L, 60000000000L};
306
/*
307
 * millisecond by default
308
 * for TSDB_TIME_PRECISION_MILLI: 3600000L
309
 *     TSDB_TIME_PRECISION_MICRO: 3600000000L
310
 *     TSDB_TIME_PRECISION_NANO:  3600000000000L
311
 */
312
int64_t tsTickPerHour[] = {3600000L, 3600000000L, 3600000000000L};
313

314
// lossy compress 7
315
char tsLossyColumns[32] = "float|double";  // "float|double" means all float and double columns can be lossy compressed.
316
                                           // set empty can close lossy compress.
317
// below option can take effect when tsLossyColumns not empty
318
float    tsFPrecision = 1E-8;                   // float column precision
319
double   tsDPrecision = 1E-16;                  // double column precision
320
uint32_t tsMaxRange = 500;                      // max quantization intervals
321
uint32_t tsCurRange = 100;                      // current quantization intervals
322
bool     tsIfAdtFse = false;                    // ADT-FSE algorithom or original huffman algorithom
323
char     tsCompressor[32] = "ZSTD_COMPRESSOR";  // ZSTD_COMPRESSOR or GZIP_COMPRESSOR
324

325
// udf
326
#if defined(WINDOWS) || !defined(USE_UDF)
327
bool tsStartUdfd = false;
328
#else
329
bool    tsStartUdfd = true;
330
#endif
331

332
// wal
333
int64_t tsWalFsyncDataSizeLimit = (100 * 1024 * 1024L);
334

335
// ttl
336
bool    tsTtlChangeOnWrite = false;  // if true, ttl delete time changes on last write
337
int32_t tsTtlFlushThreshold = 100;   /* maximum number of dirty items in memory.
338
                                      * if -1, flush will not be triggered by write-ops
339
                                      */
340
int32_t tsTtlBatchDropNum = 10000;   // number of tables dropped per batch
341

342
// internal
343
bool    tsDiskIDCheckEnabled = false;
344
int32_t tsTransPullupInterval = 2;
345
int32_t tsCompactPullupInterval = 10;
346
int32_t tsMqRebalanceInterval = 2;
347
int32_t tsStreamCheckpointInterval = 300;
348
float   tsSinkDataRate = 2.0;
349
int32_t tsThresholdItemsInWriteQueue = 1000;
350
int32_t tsThresholdItemsInStreamQueue = 25;
351
int32_t tsStreamNodeCheckInterval = 240;   // 3min
352
int32_t tsMaxConcurrentCheckpoint = 1;
353
int32_t tsTtlUnit = 86400;
354
int32_t tsTtlPushIntervalSec = 10;
355
int32_t tsTrimVDbIntervalSec = 60 * 60;    // interval of trimming db in all vgroups
356
int32_t tsS3MigrateIntervalSec = 60 * 60;  // interval of s3migrate db in all vgroups
357
bool    tsS3MigrateEnabled = 0;
358
int32_t tsGrantHBInterval = 60;
359
int32_t tsUptimeInterval = 300;    // seconds
360
char    tsUdfdResFuncs[512] = "";  // udfd resident funcs that teardown when udfd exits
361
char    tsUdfdLdLibPath[512] = "";
362
#ifdef USE_STREAM
363
bool tsDisableStream = false;
364
#else
365
bool    tsDisableStream = true;
366
#endif
367
int64_t tsStreamBufferSize = 128 * 1024 * 1024;
368
int64_t tsStreamFailedTimeout = 30 * 60 * 1000;
369
bool    tsFilterScalarMode = false;
370
int     tsStreamAggCnt = 100000;
371
bool    tsStreamCoverage = false;
372

373
char     tsAdapterFqdn[TSDB_FQDN_LEN] = "localhost";
374
uint16_t tsAdapterPort = 6041;
375
char     tsAdapterToken[512] = "cm9vdDp0YW9zZGF0YQ==";
376

377
bool tsUpdateCacheBatch = true;
378

379
int8_t tsS3EpNum = 0;
380
char   tsS3Endpoint[TSDB_MAX_EP_NUM][TSDB_FQDN_LEN] = {"<endpoint>"};
381
char   tsS3AccessKey[TSDB_MAX_EP_NUM][TSDB_FQDN_LEN] = {"<accesskey>"};
382
char   tsS3AccessKeyId[TSDB_MAX_EP_NUM][TSDB_FQDN_LEN] = {"<accesskeyid>"};
383
char   tsS3AccessKeySecret[TSDB_MAX_EP_NUM][TSDB_FQDN_LEN] = {"<accesskeysecrect>"};
384
char   tsS3BucketName[TSDB_FQDN_LEN] = "<bucketname>";
385
char   tsS3AppId[TSDB_MAX_EP_NUM][TSDB_FQDN_LEN] = {"<appid>"};
386
int8_t tsS3Enabled = false;
387
int8_t tsS3EnabledCfg = false;
388
int8_t tsS3Oss[TSDB_MAX_EP_NUM] = {false};
389
int8_t tsS3Ablob = false;
390
int8_t tsS3StreamEnabled = false;
391

392
int8_t tsS3Https[TSDB_MAX_EP_NUM] = {true};
393
char   tsS3Hostname[TSDB_MAX_EP_NUM][TSDB_FQDN_LEN] = {"<hostname>"};
394

395
int32_t tsS3BlockSize = -1;        // number of tsdb pages (4096)
396
int32_t tsS3BlockCacheSize = 16;   // number of blocks
397
int32_t tsS3PageCacheSize = 4096;  // number of pages
398
int32_t tsS3UploadDelaySec = 60;
399

400
bool tsExperimental = true;
401

402
int32_t tsMaxTsmaNum = 3;
403
int32_t tsMaxTsmaCalcDelay = 600;
404
int64_t tsmaDataDeleteMark = 1000 * 60 * 60 * 24;  // in ms, default to 1d
405
void   *pTimezoneNameMap = NULL;
406

407
int32_t tsStreamNotifyMessageSize = 8 * 1024;  // KB, default 8MB
408
int32_t tsStreamNotifyFrameSize = 256;         // KB, default 256KB
409

410
int32_t tsStreamVirtualMergeMaxDelayMs = 10 * 1000;  // 10s
411
int32_t tsStreamVirtualMergeMaxMemKb = 16 * 1024;    // 16MB
412
int32_t tsStreamVirtualMergeWaitMode = 0;            // 0 wait forever, 1 wait for max delay, 2 wait for max mem
413

414
int32_t taosCheckCfgStrValueLen(const char *name, const char *value, int32_t len);
415

416
#define TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, pName) \
417
  if ((pItem = cfgGetItem(pCfg, pName)) == NULL) {  \
418
    TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND);           \
419
  }
420

421
#ifndef _STORAGE
422
int32_t taosSetTfsCfg(SConfig *pCfg) {
423
  SConfigItem *pItem = NULL;
424
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "dataDir");
425
  (void)memset(tsDataDir, 0, PATH_MAX);
426

427
  int32_t size = taosArrayGetSize(pItem->array);
428
  tsDiskCfgNum = 1;
429
  tstrncpy(tsDiskCfg[0].dir, pItem->str, TSDB_FILENAME_LEN);
430
  tsDiskCfg[0].level = 0;
431
  tsDiskCfg[0].primary = 1;
432
  tsDiskCfg[0].disable = 0;
433
  tstrncpy(tsDataDir, pItem->str, PATH_MAX);
434
  if (taosMulMkDir(tsDataDir) != 0) {
435
    int32_t code = TAOS_SYSTEM_ERROR(ERRNO);
436
    uError("failed to create dataDir:%s, since:%s", tsDataDir, tstrerror(code));
437
    TAOS_RETURN(code);
438
  }
439
  TAOS_RETURN(TSDB_CODE_SUCCESS);
440
}
441
#else
442
int32_t taosSetTfsCfg(SConfig *pCfg);
443
#endif
444

445
#ifndef _STORAGE
446
int32_t cfgUpdateTfsItemDisable(SConfig *pCfg, const char *value, void *pTfs) { return TSDB_CODE_INVALID_CFG; }
447
#else
448
int32_t cfgUpdateTfsItemDisable(SConfig *pCfg, const char *value, void *pTfs);
449
#endif
450

451
int32_t taosUpdateTfsItemDisable(SConfig *pCfg, const char *value, void *pTfs) {
×
452
  return cfgUpdateTfsItemDisable(pCfg, value, pTfs);
×
453
}
454

455
static int32_t taosSplitS3Cfg(SConfig *pCfg, const char *name, char gVarible[TSDB_MAX_EP_NUM][TSDB_FQDN_LEN],
8,876✔
456
                              int8_t *pNum) {
457
  int32_t code = TSDB_CODE_SUCCESS;
8,876✔
458

459
  SConfigItem *pItem = NULL;
8,876✔
460
  int32_t      num = 0;
8,876✔
461
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, name);
8,876!
462

463
  char *strDup = NULL;
8,876✔
464
  if ((strDup = taosStrdup(pItem->str)) == NULL) {
8,876!
465
    code = terrno;
×
466
    goto _exit;
×
467
  }
468

469
  char **slices = strsplit(strDup, ",", &num);
8,876✔
470
  if (num > TSDB_MAX_EP_NUM) {
8,876!
471
    code = TSDB_CODE_INVALID_CFG;
×
472
    goto _exit;
×
473
  }
474

475
  for (int i = 0; i < num; ++i) {
17,752✔
476
    tstrncpy(gVarible[i], slices[i], TSDB_FQDN_LEN);
8,876✔
477
  }
478
  *pNum = num;
8,876✔
479

480
_exit:
8,876✔
481
  taosMemoryFreeClear(slices);
8,876!
482
  taosMemoryFreeClear(strDup);
8,876!
483
  TAOS_RETURN(code);
8,876✔
484
}
485

486
int32_t taosSetS3Cfg(SConfig *pCfg) {
8,874✔
487
  int8_t num = 0;
8,874✔
488

489
  TAOS_CHECK_RETURN(taosSplitS3Cfg(pCfg, "s3Accesskey", tsS3AccessKey, &num));
8,874!
490
  if (num == 0) TAOS_RETURN(TSDB_CODE_SUCCESS);
8,874!
491

492
  tsS3EpNum = num;
8,874✔
493

494
  if (tsS3AccessKey[0][0] == '<') {
8,874✔
495
    TAOS_RETURN(TSDB_CODE_SUCCESS);
8,872✔
496
  }
497
  for (int i = 0; i < tsS3EpNum; ++i) {
4✔
498
    char *colon = strchr(tsS3AccessKey[i], ':');
2✔
499
    if (!colon) {
2!
500
      uError("invalid access key:%s", tsS3AccessKey[i]);
×
501
      TAOS_RETURN(TSDB_CODE_INVALID_CFG);
×
502
    }
503
    *colon = '\0';
2✔
504
    tstrncpy(tsS3AccessKeyId[i], tsS3AccessKey[i], TSDB_FQDN_LEN);
2✔
505
    tstrncpy(tsS3AccessKeySecret[i], colon + 1, TSDB_FQDN_LEN);
2✔
506
  }
507

508
  TAOS_CHECK_RETURN(taosSplitS3Cfg(pCfg, "s3Endpoint", tsS3Endpoint, &num));
2!
509
  if (num != tsS3EpNum) {
2!
510
    uError("invalid s3 ep num:%d, expected:%d, ", num, tsS3EpNum);
×
511
    TAOS_RETURN(TSDB_CODE_INVALID_CFG);
×
512
  }
513

514
  SConfigItem *pItem = NULL;
2✔
515
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "s3BucketName");
2!
516
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen("s3BucketName", pItem->str, TSDB_FQDN_LEN));
2!
517
  tstrncpy(tsS3BucketName, pItem->str, TSDB_FQDN_LEN);
2✔
518

519
  for (int i = 0; i < tsS3EpNum; ++i) {
4✔
520
    char *proto = strstr(tsS3Endpoint[i], "https://");
2✔
521
    if (!proto) {
2✔
522
      tstrncpy(tsS3Hostname[i], tsS3Endpoint[i] + 7, TSDB_FQDN_LEN);
1✔
523
    } else {
524
      tstrncpy(tsS3Hostname[i], tsS3Endpoint[i] + 8, TSDB_FQDN_LEN);
1✔
525
    }
526

527
    char *cos = strstr(tsS3Endpoint[i], "cos.");
2✔
528
    if (cos) {
2!
529
      char *appid = strrchr(tsS3BucketName, '-');
×
530
      if (!appid) {
×
531
        uError("failed to locate appid in bucket:%s", tsS3BucketName);
×
532
        TAOS_RETURN(TSDB_CODE_INVALID_CFG);
×
533
      } else {
534
        tstrncpy(tsS3AppId[i], appid + 1, TSDB_FQDN_LEN);
×
535
      }
536
    }
537
    tsS3Https[i] = (strstr(tsS3Endpoint[i], "https://") != NULL);
2✔
538
    tsS3Oss[i] = (strstr(tsS3Endpoint[i], "aliyuncs.") != NULL);
2✔
539
    tsS3Ablob = (strstr(tsS3Endpoint[i], ".blob.core.windows.net") != NULL);
2✔
540
  }
541

542
  if (tsS3BucketName[0] != '<') {
2!
543
#if defined(USE_COS) || defined(USE_S3)
544
#ifdef TD_ENTERPRISE
545
    /*if (tsDiskCfgNum > 1) */ tsS3Enabled = true;
2✔
546
    tsS3EnabledCfg = true;
2✔
547
#endif
548
    tsS3StreamEnabled = true;
2✔
549
#endif
550
  }
551

552
  TAOS_RETURN(TSDB_CODE_SUCCESS);
2✔
553
}
554

555
struct SConfig *taosGetCfg() {
10,147✔
556
  return tsCfg;
10,147✔
557
}
558

559
static int32_t taosLoadCfg(SConfig *pCfg, const char **envCmd, const char *inputCfgDir, const char *envFile,
48,995✔
560
                           char *apolloUrl) {
561
  int32_t code = 0;
48,995✔
562
  char    cfgDir[PATH_MAX] = {0};
48,995✔
563
  char    cfgFile[PATH_MAX + 100] = {0};
48,995✔
564

565
  TAOS_CHECK_RETURN(taosExpandDir(inputCfgDir, cfgDir, PATH_MAX));
48,995!
566
  int32_t pos = strlen(cfgDir);
48,995✔
567
  if (pos > 0) {
48,995✔
568
    pos -= 1;
48,994✔
569
  }
570
  char  lastC = cfgDir[pos];
48,995✔
571
  char *tdDirsep = TD_DIRSEP;
48,995✔
572
  if (lastC == '\\' || lastC == '/') {
48,995!
573
    tdDirsep = "";
31,175✔
574
  }
575
  if (taosIsDir(cfgDir)) {
48,995✔
576
#ifdef CUS_PROMPT
577
    (void)snprintf(cfgFile, sizeof(cfgFile),
48,657✔
578
                   "%s"
579
                   "%s"
580
                   "%s.cfg",
581
                   cfgDir, tdDirsep, CUS_PROMPT);
582
#else
583
    (void)snprintf(cfgFile, sizeof(cfgFile),
584
                   "%s"
585
                   "%s"
586
                   "taos.cfg",
587
                   cfgDir, tdDirsep);
588
#endif
589
  } else {
590
    tstrncpy(cfgFile, cfgDir, sizeof(cfgDir));
338✔
591
  }
592

593
  if (apolloUrl != NULL && apolloUrl[0] == '\0') {
48,995✔
594
    (void)(cfgGetApollUrl(envCmd, envFile, apolloUrl));
6,234✔
595
  }
596

597
  if ((code = cfgLoad(pCfg, CFG_STYPE_APOLLO_URL, apolloUrl)) != 0) {
48,995✔
598
    (void)printf("failed to load from apollo url:%s since %s\n", apolloUrl, tstrerror(code));
1✔
599
    TAOS_RETURN(code);
1✔
600
  }
601

602
  if ((code = cfgLoad(pCfg, CFG_STYPE_CFG_FILE, cfgFile)) != 0) {
48,994!
603
    (void)printf("failed to load from cfg file:%s since %s\n", cfgFile, tstrerror(code));
×
604
    TAOS_RETURN(code);
×
605
  }
606

607
  if ((code = cfgLoad(pCfg, CFG_STYPE_ENV_FILE, envFile)) != 0) {
48,994✔
608
    (void)printf("failed to load from env file:%s since %s\n", envFile, tstrerror(code));
1✔
609
    TAOS_RETURN(code);
1✔
610
  }
611

612
  if ((code = cfgLoad(pCfg, CFG_STYPE_ENV_VAR, NULL)) != 0) {
48,993!
613
    (void)printf("failed to load from global env variables since %s\n", tstrerror(code));
×
614
    TAOS_RETURN(code);
×
615
  }
616

617
  if ((code = cfgLoad(pCfg, CFG_STYPE_ENV_CMD, envCmd)) != 0) {
48,993!
618
    (void)printf("failed to load from cmd env variables since %s\n", tstrerror(code));
×
619
    TAOS_RETURN(code);
×
620
  }
621

622
  TAOS_RETURN(TSDB_CODE_SUCCESS);
48,993✔
623
}
624

625
int32_t taosAddClientLogCfg(SConfig *pCfg) {
48,994✔
626
  TAOS_CHECK_RETURN(cfgAddDir(pCfg, "configDir", configDir, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
48,994!
627
  TAOS_CHECK_RETURN(cfgAddDir(pCfg, "scriptDir", configDir, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
48,994!
628
  TAOS_CHECK_RETURN(cfgAddDir(pCfg, "logDir", tsLogDir, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
48,994!
629
  TAOS_CHECK_RETURN(
48,994!
630
      cfgAddFloat(pCfg, "minimalLogDirGB", 1.0f, 0.001f, 10000000, CFG_SCOPE_BOTH, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
631
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfLogLines", tsNumOfLogLines, 1000, 2000000000, CFG_SCOPE_BOTH,
48,994!
632
                                CFG_DYN_ENT_BOTH, CFG_CATEGORY_LOCAL));
633
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "asyncLog", tsAsyncLog, CFG_SCOPE_BOTH, CFG_DYN_BOTH, CFG_CATEGORY_LOCAL));
48,994!
634
  TAOS_CHECK_RETURN(
48,994!
635
      cfgAddInt32(pCfg, "logKeepDays", 0, -365000, 365000, CFG_SCOPE_BOTH, CFG_DYN_ENT_BOTH, CFG_CATEGORY_LOCAL));
636
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "debugFlag", 0, 0, 255, CFG_SCOPE_BOTH, CFG_DYN_BOTH, CFG_CATEGORY_LOCAL));
48,994!
637
  TAOS_CHECK_RETURN(
48,994!
638
      cfgAddInt32(pCfg, "simDebugFlag", simDebugFlag, 0, 255, CFG_SCOPE_BOTH, CFG_DYN_BOTH, CFG_CATEGORY_LOCAL));
639
  TAOS_CHECK_RETURN(
48,994!
640
      cfgAddInt32(pCfg, "tmrDebugFlag", tmrDebugFlag, 0, 255, CFG_SCOPE_BOTH, CFG_DYN_BOTH, CFG_CATEGORY_LOCAL));
641
  TAOS_CHECK_RETURN(
48,994!
642
      cfgAddInt32(pCfg, "uDebugFlag", uDebugFlag, 0, 255, CFG_SCOPE_BOTH, CFG_DYN_BOTH, CFG_CATEGORY_LOCAL));
643
  TAOS_CHECK_RETURN(
48,994!
644
      cfgAddInt32(pCfg, "rpcDebugFlag", rpcDebugFlag, 0, 255, CFG_SCOPE_BOTH, CFG_DYN_BOTH, CFG_CATEGORY_LOCAL));
645
  TAOS_CHECK_RETURN(
48,994!
646
      cfgAddInt32(pCfg, "jniDebugFlag", jniDebugFlag, 0, 255, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
647
  TAOS_CHECK_RETURN(
48,994!
648
      cfgAddInt32(pCfg, "qDebugFlag", qDebugFlag, 0, 255, CFG_SCOPE_BOTH, CFG_DYN_BOTH, CFG_CATEGORY_LOCAL));
649
  TAOS_CHECK_RETURN(
48,994!
650
      cfgAddInt32(pCfg, "cDebugFlag", cDebugFlag, 0, 255, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
651
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tqClientDebugFlag", tqClientDebugFlag, 0, 255, CFG_SCOPE_CLIENT, CFG_DYN_SERVER,
48,994!
652
                                CFG_CATEGORY_LOCAL));
653
  TAOS_RETURN(TSDB_CODE_SUCCESS);
48,994✔
654
}
655

656
static int32_t taosAddServerLogCfg(SConfig *pCfg) {
12,768✔
657
  TAOS_CHECK_RETURN(
12,768!
658
      cfgAddInt32(pCfg, "dDebugFlag", dDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
659
  TAOS_CHECK_RETURN(
12,768!
660
      cfgAddInt32(pCfg, "vDebugFlag", vDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
661
  TAOS_CHECK_RETURN(
12,768!
662
      cfgAddInt32(pCfg, "mDebugFlag", mDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
663
  TAOS_CHECK_RETURN(
12,768!
664
      cfgAddInt32(pCfg, "wDebugFlag", wDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
665
  TAOS_CHECK_RETURN(
12,768!
666
      cfgAddInt32(pCfg, "azDebugFlag", azDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
667
  TAOS_CHECK_RETURN(
12,768!
668
      cfgAddInt32(pCfg, "sDebugFlag", sDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
669
  TAOS_CHECK_RETURN(
12,768!
670
      cfgAddInt32(pCfg, "tsdbDebugFlag", tsdbDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
671
  TAOS_CHECK_RETURN(
12,768!
672
      cfgAddInt32(pCfg, "tqDebugFlag", tqDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
673
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tqClientDebug", tqClientDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER,
12,768!
674
                                CFG_CATEGORY_LOCAL));
675
  TAOS_CHECK_RETURN(
12,768!
676
      cfgAddInt32(pCfg, "fsDebugFlag", fsDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
677
  TAOS_CHECK_RETURN(
12,768!
678
      cfgAddInt32(pCfg, "udfDebugFlag", udfDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
679
  TAOS_CHECK_RETURN(
12,768!
680
      cfgAddInt32(pCfg, "smaDebugFlag", smaDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
681
  TAOS_CHECK_RETURN(
12,768!
682
      cfgAddInt32(pCfg, "idxDebugFlag", idxDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
683
  TAOS_CHECK_RETURN(
12,768!
684
      cfgAddInt32(pCfg, "tdbDebugFlag", tdbDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
685
  TAOS_CHECK_RETURN(
12,768!
686
      cfgAddInt32(pCfg, "metaDebugFlag", metaDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
687
  TAOS_CHECK_RETURN(
12,768!
688
      cfgAddInt32(pCfg, "stDebugFlag", stDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
689
  TAOS_CHECK_RETURN(
12,768!
690
      cfgAddInt32(pCfg, "sndDebugFlag", sndDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
691
  TAOS_CHECK_RETURN(
12,768!
692
      cfgAddInt32(pCfg, "bndDebugFlag", bndDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
693
  TAOS_RETURN(TSDB_CODE_SUCCESS);
12,768✔
694
}
695

696
static int32_t taosAddClientCfg(SConfig *pCfg) {
24,496✔
697
  char    defaultFqdn[TSDB_FQDN_LEN] = {0};
24,496✔
698
  int32_t defaultServerPort = 6030;
24,496✔
699
  int32_t defaultMqttPort = 6083;
24,496✔
700
  if (taosGetFqdn(defaultFqdn) != 0) {
24,496!
701
    tstrncpy(defaultFqdn, "localhost", TSDB_FQDN_LEN);
×
702
  }
703

704
  TAOS_CHECK_RETURN(
24,496!
705
      cfgAddBool(pCfg, "forceReadConfig", tsForceReadConfig, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
706
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "firstEp", "", CFG_SCOPE_BOTH, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
24,496!
707
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "secondEp", "", CFG_SCOPE_BOTH, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
24,496!
708
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "fqdn", defaultFqdn, CFG_SCOPE_SERVER, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
24,496!
709
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "serverPort", defaultServerPort, 1, 65056, CFG_SCOPE_SERVER, CFG_DYN_CLIENT,
24,496!
710
                                CFG_CATEGORY_LOCAL));
711
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "mqttPort", defaultMqttPort, 1, 65056, CFG_SCOPE_SERVER, CFG_DYN_CLIENT,
24,496!
712
                                CFG_CATEGORY_LOCAL));
713
  TAOS_CHECK_RETURN(cfgAddDir(pCfg, "tempDir", tsTempDir, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
24,496!
714
  TAOS_CHECK_RETURN(
24,496!
715
      cfgAddFloat(pCfg, "minimalTmpDirGB", 1.0f, 0.001f, 10000000, CFG_SCOPE_BOTH, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
716
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "shellActivityTimer", tsShellActivityTimer, 1, 120, CFG_SCOPE_BOTH, CFG_DYN_BOTH,
24,496!
717
                                CFG_CATEGORY_GLOBAL));
718
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "compressMsgSize", tsCompressMsgSize, -1, 100000000, CFG_SCOPE_BOTH,
24,496!
719
                                CFG_DYN_BOTH_LAZY, CFG_CATEGORY_GLOBAL));
720
  TAOS_CHECK_RETURN(
24,496!
721
      cfgAddInt32(pCfg, "queryPolicy", tsQueryPolicy, 1, 4, CFG_SCOPE_CLIENT, CFG_DYN_ENT_CLIENT, CFG_CATEGORY_LOCAL));
722
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "queryTableNotExistAsEmpty", tsQueryTbNotExistAsEmpty, CFG_SCOPE_CLIENT,
24,496!
723
                               CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
724
  TAOS_CHECK_RETURN(
24,496!
725
      cfgAddBool(pCfg, "enableQueryHb", tsEnableQueryHb, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
726
  TAOS_CHECK_RETURN(
24,496!
727
      cfgAddBool(pCfg, "enableScience", tsEnableScience, CFG_SCOPE_CLIENT, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
728
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "querySmaOptimize", tsQuerySmaOptimize, 0, 1, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT,
24,496!
729
                                CFG_CATEGORY_LOCAL));
730
  TAOS_CHECK_RETURN(
24,496!
731
      cfgAddBool(pCfg, "queryPlannerTrace", tsQueryPlannerTrace, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
732
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryNodeChunkSize", tsQueryNodeChunkSize, 1024, 128 * 1024, CFG_SCOPE_CLIENT,
24,496!
733
                                CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
734
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "queryUseNodeAllocator", tsQueryUseNodeAllocator, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT,
24,496!
735
                               CFG_CATEGORY_LOCAL));
736
  TAOS_CHECK_RETURN(
24,496!
737
      cfgAddBool(pCfg, "keepColumnName", tsKeepColumnName, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
738
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "smlChildTableName", tsSmlChildTableName, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT,
24,496!
739
                                 CFG_CATEGORY_LOCAL));
740
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "smlAutoChildTableNameDelimiter", tsSmlAutoChildTableNameDelimiter,
24,496!
741
                                 CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
742
  TAOS_CHECK_RETURN(
24,496!
743
      cfgAddString(pCfg, "smlTagName", tsSmlTagName, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
744
  TAOS_CHECK_RETURN(
24,496!
745
      cfgAddString(pCfg, "smlTsDefaultName", tsSmlTsDefaultName, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
746
  TAOS_CHECK_RETURN(
24,496!
747
      cfgAddBool(pCfg, "smlDot2Underline", tsSmlDot2Underline, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
748

749
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "minSlidingTime", tsMinSlidingTime, 1, 1000000, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT,
24,496!
750
                                CFG_CATEGORY_LOCAL));
751
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "minIntervalTime", tsMinIntervalTime, 1, 1000000, CFG_SCOPE_CLIENT,
24,496!
752
                                CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
753
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxInsertBatchRows", tsMaxInsertBatchRows, 1, INT32_MAX, CFG_SCOPE_CLIENT,
24,496!
754
                                CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL) != 0);
755
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxRetryWaitTime", tsMaxRetryWaitTime, 3000, 86400000, CFG_SCOPE_SERVER,
24,496!
756
                                CFG_DYN_BOTH_LAZY, CFG_CATEGORY_GLOBAL));
757
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "useAdapter", tsUseAdapter, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
24,496!
758
  TAOS_CHECK_RETURN(
24,496!
759
      cfgAddBool(pCfg, "crashReporting", tsEnableCrashReport, CFG_SCOPE_BOTH, CFG_DYN_BOTH, CFG_CATEGORY_GLOBAL));
760
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "queryMaxConcurrentTables", tsQueryMaxConcurrentTables, INT64_MIN, INT64_MAX,
24,496!
761
                                CFG_SCOPE_CLIENT, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
762
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "metaCacheMaxSize", tsMetaCacheMaxSize, -1, INT32_MAX, CFG_SCOPE_CLIENT,
24,496!
763
                                CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
764
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "randErrorChance", tsRandErrChance, 0, 10000, CFG_SCOPE_BOTH, CFG_DYN_BOTH,
24,496!
765
                                CFG_CATEGORY_GLOBAL));
766
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "randErrorDivisor", tsRandErrDivisor, 1, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_BOTH,
24,496!
767
                                CFG_CATEGORY_GLOBAL));
768
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "randErrorScope", tsRandErrScope, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_BOTH,
24,496!
769
                                CFG_CATEGORY_GLOBAL));
770
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "safetyCheckLevel", tsSafetyCheckLevel, 0, 5, CFG_SCOPE_BOTH, CFG_DYN_BOTH,
24,496!
771
                                CFG_CATEGORY_GLOBAL));
772
  TAOS_CHECK_RETURN(
24,496!
773
      cfgAddInt32(pCfg, "bypassFlag", tsBypassFlag, 0, INT32_MAX, CFG_SCOPE_BOTH, CFG_DYN_BOTH, CFG_CATEGORY_LOCAL));
774
  tsNumOfRpcThreads = tsNumOfCores / 2;
24,496✔
775
  tsNumOfRpcThreads = TRANGE(tsNumOfRpcThreads, 2, TSDB_MAX_RPC_THREADS);
24,496✔
776
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfRpcThreads", tsNumOfRpcThreads, 1, 1024, CFG_SCOPE_BOTH, CFG_DYN_BOTH_LAZY,
24,496!
777
                                CFG_CATEGORY_LOCAL));
778

779
  tsNumOfRpcSessions = TRANGE(tsNumOfRpcSessions, 100, 100000);
24,496✔
780
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfRpcSessions", tsNumOfRpcSessions, 1, 100000, CFG_SCOPE_BOTH,
24,496!
781
                                CFG_DYN_BOTH_LAZY, CFG_CATEGORY_LOCAL));
782

783
  tsShareConnLimit = TRANGE(tsShareConnLimit, 1, 512);
24,496✔
784
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "shareConnLimit", tsShareConnLimit, 1, 512, CFG_SCOPE_BOTH, CFG_DYN_BOTH_LAZY,
24,496!
785
                                CFG_CATEGORY_GLOBAL));
786

787
  tsReadTimeout = TRANGE(tsReadTimeout, 64, 24 * 3600 * 7);
24,496✔
788
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "readTimeout", tsReadTimeout, 64, 24 * 3600 * 7, CFG_SCOPE_BOTH,
24,496!
789
                                CFG_DYN_BOTH_LAZY, CFG_CATEGORY_GLOBAL));
790

791
  tsTimeToGetAvailableConn = TRANGE(tsTimeToGetAvailableConn, 20, 10000000);
24,496✔
792
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "timeToGetAvailableConn", tsTimeToGetAvailableConn, 20, 1000000, CFG_SCOPE_BOTH,
24,496!
793
                                CFG_DYN_BOTH_LAZY, CFG_CATEGORY_GLOBAL));
794
  tsNumOfTaskQueueThreads = tsNumOfCores * 2;
24,496✔
795
  tsNumOfTaskQueueThreads = TMAX(tsNumOfTaskQueueThreads, 16);
24,496✔
796

797
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfTaskQueueThreads", tsNumOfTaskQueueThreads, 4, 1024, CFG_SCOPE_CLIENT,
24,496!
798
                                CFG_DYN_CLIENT_LAZY, CFG_CATEGORY_LOCAL));
799
  TAOS_CHECK_RETURN(
24,496!
800
      cfgAddBool(pCfg, "experimental", tsExperimental, CFG_SCOPE_BOTH, CFG_DYN_BOTH_LAZY, CFG_CATEGORY_GLOBAL));
801
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "multiResultFunctionStarReturnTags", tsMultiResultFunctionStarReturnTags,
24,496!
802
                               CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
803
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "countAlwaysReturnValue", tsCountAlwaysReturnValue, 0, 1, CFG_SCOPE_BOTH,
24,496!
804
                                CFG_DYN_BOTH, CFG_CATEGORY_LOCAL));
805
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxTsmaCalcDelay", tsMaxTsmaCalcDelay, 600, 86400, CFG_SCOPE_CLIENT,
24,496!
806
                                CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
807
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tsmaDataDeleteMark", tsmaDataDeleteMark, 60 * 60 * 1000, INT64_MAX,
24,496!
808
                                CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
809

810
  TAOS_CHECK_RETURN(
24,496!
811
      cfgAddBool(pCfg, "streamCoverage", tsStreamCoverage, CFG_DYN_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
812

813
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "compareAsStrInGreatest", tsCompareAsStrInGreatest, CFG_SCOPE_CLIENT,
24,496!
814
                               CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
815
  TAOS_RETURN(TSDB_CODE_SUCCESS);
24,496✔
816
}
817

818
static int32_t taosAddSystemCfg(SConfig *pCfg) {
24,496✔
819
  SysNameInfo info = taosGetSysNameInfo();
24,496✔
820

821
  TAOS_CHECK_RETURN(cfgAddTimezone(pCfg, "timezone", tsTimezoneStr, CFG_SCOPE_BOTH, CFG_DYN_BOTH, CFG_CATEGORY_GLOBAL));
24,496!
822
  TAOS_CHECK_RETURN(cfgAddLocale(pCfg, "locale", tsLocale, CFG_SCOPE_BOTH, CFG_DYN_BOTH, CFG_CATEGORY_GLOBAL));
24,496!
823
  TAOS_CHECK_RETURN(cfgAddCharset(pCfg, "charset", tsCharset, CFG_SCOPE_BOTH, CFG_DYN_BOTH, CFG_CATEGORY_GLOBAL));
24,496!
824
  TAOS_CHECK_RETURN(
24,496!
825
      cfgAddBool(pCfg, "enableCoreFile", tsEnableCoreFile, CFG_SCOPE_BOTH, CFG_DYN_BOTH_LAZY, CFG_CATEGORY_GLOBAL));
826
  TAOS_CHECK_RETURN(
24,496!
827
      cfgAddFloat(pCfg, "numOfCores", tsNumOfCores, 1, 100000, CFG_SCOPE_BOTH, CFG_DYN_BOTH_LAZY, CFG_CATEGORY_LOCAL));
828

829
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "simdEnable", tsSIMDEnable, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
24,496!
830
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "AVX512Enable", tsAVX512Enable, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
24,496!
831
  TAOS_CHECK_RETURN(
24,496!
832
      cfgAddBool(pCfg, "tagFilterCache", tsTagFilterCache, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
833

834
  TAOS_CHECK_RETURN(
24,496!
835
      cfgAddInt64(pCfg, "openMax", tsOpenMax, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
836
#if !defined(_ALPINE)
837
  TAOS_CHECK_RETURN(
24,496!
838
      cfgAddInt64(pCfg, "streamMax", tsStreamMax, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
839
#endif
840
  TAOS_CHECK_RETURN(
24,496!
841
      cfgAddInt32(pCfg, "pageSizeKB", tsPageSizeKB, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
842
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "totalMemoryKB", tsTotalMemoryKB, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_NONE,
24,496!
843
                                CFG_CATEGORY_LOCAL));
844
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "os sysname", info.sysname, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
24,496!
845
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "os nodename", info.nodename, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
24,496!
846
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "os release", info.release, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
24,496!
847
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "os version", info.version, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
24,496!
848
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "os machine", info.machine, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
24,496!
849

850
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "version", td_version, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
24,496!
851
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "compatible_version", td_compatible_version, CFG_SCOPE_BOTH, CFG_DYN_NONE,
24,496!
852
                                 CFG_CATEGORY_LOCAL));
853
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "gitinfo", td_gitinfo, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
24,496!
854
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "buildinfo", td_buildinfo, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
24,496!
855

856
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "enableIpv6", tsEnableIpv6, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
24,496!
857
  TAOS_RETURN(TSDB_CODE_SUCCESS);
24,496✔
858
}
859

860
static int32_t taosAddServerCfg(SConfig *pCfg) {
6,383✔
861
  tsNumOfCommitThreads = tsNumOfCores / 2;
6,383✔
862
  tsNumOfCommitThreads = TRANGE(tsNumOfCommitThreads, 2, 4);
6,383✔
863

864
  tsNumOfSupportVnodes = tsNumOfCores * 2 + 5;
6,383✔
865
  tsNumOfSupportVnodes = TMAX(tsNumOfSupportVnodes, 2);
6,383✔
866

867
  tsNumOfMnodeReadThreads = tsNumOfCores / 8;
6,383✔
868
  tsNumOfMnodeReadThreads = TRANGE(tsNumOfMnodeReadThreads, 1, 4);
6,383✔
869

870
  tsNumOfVnodeQueryThreads = tsNumOfCores * 2;
6,383✔
871
  tsNumOfVnodeQueryThreads = TMAX(tsNumOfVnodeQueryThreads, 16);
6,383✔
872

873
  tsNumOfVnodeFetchThreads = tsNumOfCores / 4;
6,383✔
874
  tsNumOfVnodeFetchThreads = TMAX(tsNumOfVnodeFetchThreads, 4);
6,383✔
875

876
  tsNumOfVnodeRsmaThreads = tsNumOfCores / 4;
6,383✔
877
  tsNumOfVnodeRsmaThreads = TMAX(tsNumOfVnodeRsmaThreads, 4);
6,383✔
878

879
  tsNumOfQnodeQueryThreads = tsNumOfCores * 2;
6,383✔
880
  tsNumOfQnodeQueryThreads = TMAX(tsNumOfQnodeQueryThreads, 16);
6,383✔
881

882
  tsNumOfSnodeStreamThreads = tsNumOfCores / 4;
6,383✔
883
  tsNumOfSnodeStreamThreads = TRANGE(tsNumOfSnodeStreamThreads, 2, 4);
6,383✔
884

885
  tsNumOfSnodeWriteThreads = tsNumOfCores / 4;
6,383✔
886
  tsNumOfSnodeWriteThreads = TRANGE(tsNumOfSnodeWriteThreads, 2, 4);
6,383✔
887

888
  tsQueueMemoryAllowed = tsTotalMemoryKB * 1024 * RPC_MEMORY_USAGE_RATIO * QUEUE_MEMORY_USAGE_RATIO;
6,383✔
889
  tsQueueMemoryAllowed = TRANGE(tsQueueMemoryAllowed, TSDB_MAX_MSG_SIZE * QUEUE_MEMORY_USAGE_RATIO * 10LL,
6,383!
890
                                TSDB_MAX_MSG_SIZE * QUEUE_MEMORY_USAGE_RATIO * 10000LL);
891

892
  tsApplyMemoryAllowed = tsTotalMemoryKB * 1024 * RPC_MEMORY_USAGE_RATIO * (1 - QUEUE_MEMORY_USAGE_RATIO);
6,383✔
893
  tsApplyMemoryAllowed = TRANGE(tsApplyMemoryAllowed, TSDB_MAX_MSG_SIZE * (1 - QUEUE_MEMORY_USAGE_RATIO) * 10LL,
6,383!
894
                                TSDB_MAX_MSG_SIZE * (1 - QUEUE_MEMORY_USAGE_RATIO) * 10000LL);
895

896
  tsLogBufferMemoryAllowed = tsTotalMemoryKB * 1024 * 0.1;
6,383✔
897
  tsLogBufferMemoryAllowed = TRANGE(tsLogBufferMemoryAllowed, TSDB_MAX_MSG_SIZE * 10LL, TSDB_MAX_MSG_SIZE * 10000LL);
6,383✔
898

899
  // clang-format off
900
  TAOS_CHECK_RETURN(cfgAddDir(pCfg, "dataDir", tsDataDir, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
6,383!
901
  TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "minimalDataDirGB", 2.0f, 0.001f, 10000000, CFG_SCOPE_SERVER, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
6,383!
902
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "supportVnodes", tsNumOfSupportVnodes, 0, 4096, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER, CFG_CATEGORY_LOCAL));
6,383!
903

904
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "encryptAlgorithm", tsEncryptAlgorithm, CFG_SCOPE_SERVER, CFG_DYN_NONE, CFG_CATEGORY_GLOBAL));
6,383!
905
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "encryptScope", tsEncryptScope, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_GLOBAL));
6,383!
906
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "enableStrongPassword", tsEnableStrongPassword, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
907
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "encryptPassAlgorithm", tsEncryptPassAlgorithm, CFG_SCOPE_SERVER, CFG_DYN_NONE, CFG_CATEGORY_GLOBAL));
6,383!
908

909
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "statusInterval", tsStatusInterval, 1, 30, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
6,383!
910
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "metricsInterval", tsMetricsInterval, 1, 3600, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_LOCAL));
6,383!
911
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "enableMetrics", tsEnableMetrics, 0, 1, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_LOCAL));
6,383!
912
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "metricsLevel", tsMetricsLevel, 0, 1, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_LOCAL));
6,383!
913
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxShellConns", tsMaxShellConns, 10, 50000000, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY, CFG_CATEGORY_LOCAL));
6,383!
914

915
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryBufferSize", tsQueryBufferSize, -1, 500000000000, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY, CFG_CATEGORY_LOCAL));
6,383!
916
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryRspPolicy", tsQueryRspPolicy, 0, 1, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
917
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfCommitThreads", tsNumOfCommitThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
6,383!
918
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfCompactThreads", tsNumOfCompactThreads, 1, 16, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_LOCAL));
6,383!
919
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "retentionSpeedLimitMB", tsRetentionSpeedLimitMB, 0, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
920
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "queryUseMemoryPool", tsQueryUseMemoryPool, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL) != 0);
6,383!
921
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "memPoolFullFunc", tsMemPoolFullFunc, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL) != 0);
6,383!
922
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "singleQueryMaxMemorySize", tsSingleQueryMaxMemorySize, 0, 1000000000, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL) != 0);
6,383!
923
  //TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryBufferPoolSize", tsQueryBufferPoolSize, 0, 1000000000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0);
924
  TAOS_CHECK_RETURN(cfgAddInt32Ex(pCfg, "minReservedMemorySize", 0, 1024, 1000000000, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_LOCAL) != 0);
6,383!
925
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryNoFetchTimeoutSec", tsQueryNoFetchTimeoutSec, 60, 1000000000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_LOCAL) != 0);
6,383!
926

927
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfMnodeReadThreads", tsNumOfMnodeReadThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
6,383!
928
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfVnodeQueryThreads", tsNumOfVnodeQueryThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
6,383!
929
  TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "ratioOfVnodeStreamThreads", tsRatioOfVnodeStreamThreads, 0.01, 4, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
6,383!
930
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfVnodeFetchThreads", tsNumOfVnodeFetchThreads, 4, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
6,383!
931

932
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfVnodeRsmaThreads", tsNumOfVnodeRsmaThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
6,383!
933
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfQnodeQueryThreads", tsNumOfQnodeQueryThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
6,383!
934

935
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfSnodeSharedThreads", tsNumOfSnodeStreamThreads, 2, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
6,383!
936
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfSnodeUniqueThreads", tsNumOfSnodeWriteThreads, 2, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
6,383!
937
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "rpcQueueMemoryAllowed", tsQueueMemoryAllowed, TSDB_MAX_MSG_SIZE * RPC_MEMORY_USAGE_RATIO * 10L, INT64_MAX, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_LOCAL));
6,383!
938
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncElectInterval", tsElectInterval, 10, 1000 * 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
939
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncHeartbeatInterval", tsHeartbeatInterval, 10, 1000 * 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
940
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncHeartbeatTimeout", tsHeartbeatTimeout, 10, 1000 * 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
941
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncSnapReplMaxWaitN", tsSnapReplMaxWaitN, 16, (TSDB_SYNC_SNAP_BUFFER_SIZE >> 2), CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
942
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "syncLogBufferMemoryAllowed", tsLogBufferMemoryAllowed, TSDB_MAX_MSG_SIZE * 10L, INT64_MAX, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_LOCAL));
6,383!
943
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncRoutineReportInterval", tsRoutineReportInterval, 5, 600, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_LOCAL));
6,383!
944
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "syncLogHeartbeat", tsSyncLogHeartbeat, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_LOCAL));
6,383!
945

946
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "arbHeartBeatIntervalSec", tsArbHeartBeatIntervalSec, 1, 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
947
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "arbCheckSyncIntervalSec", tsArbCheckSyncIntervalSec, 1, 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
948
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "arbSetAssignedTimeoutSec", tsArbSetAssignedTimeoutSec, 1, 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
949

950
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "mndSdbWriteDelta", tsMndSdbWriteDelta, 20, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
951
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "mndLogRetention", tsMndLogRetention, 500, 10000, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
952
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "skipGrant", tsMndSkipGrant, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_GLOBAL));
6,383!
953

954
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "monitor", tsEnableMonitor, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
955
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "monitorInterval", tsMonitorInterval, 1, 86400, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
956

957
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "slowLogThreshold", tsSlowLogThreshold, 1, INT32_MAX, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
958
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "slowLogMaxLen", tsSlowLogMaxLen, 1, 16384, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
959
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "slowLogScope", tsSlowLogScopeString, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
960
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "slowLogExceptDb", tsSlowLogExceptDb, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
961

962
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "monitorFqdn", tsMonitorFqdn, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY, CFG_CATEGORY_LOCAL));
6,383!
963
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "monitorPort", tsMonitorPort, 1, 65056, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY, CFG_CATEGORY_LOCAL));
6,383!
964
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "monitorMaxLogs", tsMonitorMaxLogs, 1, 1000000, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
965
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "monitorComp", tsMonitorComp, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
6,383!
966
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "monitorLogProtocol", tsMonitorLogProtocol, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
967
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "monitorForceV2", tsMonitorForceV2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
968

969
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "audit", tsEnableAudit, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
970
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "enableAuditDelete", tsEnableAuditDelete, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_GLOBAL));
6,383!
971
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "auditCreateTable", tsEnableAuditCreateTable, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
972
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "auditInterval", tsAuditInterval, 500, 200000, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
973

974
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "telemetryReporting", tsEnableTelem, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
975
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "telemetryInterval", tsTelemInterval, 1, 200000, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
976
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "telemetryServer", tsTelemServer, CFG_SCOPE_SERVER, CFG_DYN_BOTH,CFG_CATEGORY_GLOBAL));
6,383!
977
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "telemetryPort", tsTelemPort, 1, 65056, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
6,383!
978

979
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "rsyncPort", tsRsyncPort, 1, 65535, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
6,383!
980
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "snodeAddress", tsSnodeAddress, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
6,383!
981
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "checkpointBackupDir", tsCheckpointBackupDir, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
6,383!
982

983
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tmqMaxTopicNum", tmqMaxTopicNum, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
984

985
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tmqRowSize", tmqRowSize, 1, 1000000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
986

987
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxTsmaNum", tsMaxTsmaNum, 0, 3, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
988
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "diskIDCheckEnabled", tsDiskIDCheckEnabled,  CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
6,383!
989
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "transPullupInterval", tsTransPullupInterval, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
990
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "compactPullupInterval", tsCompactPullupInterval, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
991
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "mqRebalanceInterval", tsMqRebalanceInterval, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
992

993
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "ttlUnit", tsTtlUnit, 1, 86400 * 365, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
994
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "ttlPushInterval", tsTtlPushIntervalSec, 1, 100000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
995
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "ttlBatchDropNum", tsTtlBatchDropNum, 0, INT32_MAX, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
996
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "ttlChangeOnWrite", tsTtlChangeOnWrite, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
997
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "ttlFlushThreshold", tsTtlFlushThreshold, -1, 1000000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
998
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "trimVDbIntervalSec", tsTrimVDbIntervalSec, 1, 100000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
999
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "s3MigrateIntervalSec", tsS3MigrateIntervalSec, 600, 100000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
1000
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "s3MigrateEnabled", tsS3MigrateEnabled, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
1001
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "uptimeInterval", tsUptimeInterval, 1, 100000, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
1002
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryRsmaTolerance", tsQueryRsmaTolerance, 0, 900000, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
1003
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "timeseriesThreshold", tsTimeSeriesThreshold, 0, 2000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
1004

1005
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "walFsyncDataSizeLimit", tsWalFsyncDataSizeLimit, 100 * 1024 * 1024, INT64_MAX, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
1006

1007
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "udf", tsStartUdfd, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
6,383!
1008
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "udfdResFuncs", tsUdfdResFuncs, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
6,383!
1009
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "udfdLdLibPath", tsUdfdLdLibPath, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
6,383!
1010

1011
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "disableStream", tsDisableStream, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
6,383!
1012
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "streamBufferSize", tsStreamBufferSize, 0, INT64_MAX, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
6,383!
1013
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "streamFailedTimeout", tsStreamFailedTimeout, 0, INT64_MAX, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
6,383!
1014
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "streamAggCnt", tsStreamAggCnt, 2, INT32_MAX, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_GLOBAL));
6,383!
1015

1016
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "checkpointInterval", tsStreamCheckpointInterval, 60, 1800, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
1017
  TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "streamSinkDataRate", tsSinkDataRate, 0.1, 5, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY, CFG_CATEGORY_GLOBAL));
6,383!
1018
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "concurrentCheckpoint", tsMaxConcurrentCheckpoint, 1, 10, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
1019
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "itemsInWriteQ", tsThresholdItemsInWriteQueue, 100, 100000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
1020
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "itemsInStreamQ", tsThresholdItemsInStreamQueue, 10, 5000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
1021

1022
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "cacheLazyLoadThreshold", tsCacheLazyLoadThreshold, 0, 100000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
1023

1024
  TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "fPrecision", tsFPrecision, 0.0f, 100000.0f, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
1025
  TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "dPrecision", tsDPrecision, 0.0f, 1000000.0f, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
1026
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxRange", tsMaxRange, 0, 65536, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
6,383!
1027
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "curRange", tsCurRange, 0, 65536, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
6,383!
1028
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "ifAdtFse", tsIfAdtFse, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
6,383!
1029
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "compressor", tsCompressor, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
6,383!
1030

1031
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "filterScalarMode", tsFilterScalarMode, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
6,383!
1032
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxStreamBackendCache", tsMaxStreamBackendCache, 16, 1024, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER_LAZY,CFG_CATEGORY_LOCAL));
6,383!
1033
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "pqSortMemThreshold", tsPQSortMemThreshold, 1, 10240, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
6,383!
1034

1035
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "s3Accesskey", tsS3AccessKey[0], CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
6,383!
1036
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "s3Endpoint", tsS3Endpoint[0], CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
6,383!
1037
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "s3BucketName", tsS3BucketName, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER_LAZY,CFG_CATEGORY_LOCAL));
6,383!
1038

1039
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "s3PageCacheSize", tsS3PageCacheSize, 4, 1024 * 1024 * 1024, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
6,383!
1040
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "s3UploadDelaySec", tsS3UploadDelaySec, 1, 60 * 60 * 24 * 30, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
1041

1042
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "minDiskFreeSize", tsMinDiskFreeSize, TFS_MIN_DISK_FREE_SIZE, TFS_MIN_DISK_FREE_SIZE_MAX, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_LOCAL));
6,383!
1043
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "enableWhiteList", tsEnableWhiteList, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
6,383!
1044
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "forceKillTrans", tsForceKillTrans, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_GLOBAL));
6,383!
1045

1046
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "streamNotifyMessageSize", tsStreamNotifyMessageSize, 8, 1024 * 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
6,383!
1047
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "streamNotifyFrameSize", tsStreamNotifyFrameSize, 8, 1024 * 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
6,383!
1048

1049
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "adapterFqdn", tsAdapterFqdn, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY, CFG_CATEGORY_LOCAL));
6,383!
1050
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "adapterPort", tsAdapterPort, 1, 65056, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY, CFG_CATEGORY_LOCAL));
6,383!
1051
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "adapterToken", tsAdapterToken, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY, CFG_CATEGORY_LOCAL));
6,383!
1052

1053
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "streamVirtualMergeMaxDelay", tsStreamVirtualMergeMaxDelayMs, 500, 10 * 60 * 1000, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
6,383!
1054
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "streamVirtualMergeMaxMem", tsStreamVirtualMergeMaxMemKb, 8 * 1024, 1 * 1024 * 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
6,383!
1055
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "streamVirtualMergeWaitMode", tsStreamVirtualMergeWaitMode, 0, 2, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
6,383!
1056

1057
  // clang-format on
1058

1059
  // GRANT_CFG_ADD;
1060
  TAOS_RETURN(TSDB_CODE_SUCCESS);
6,383✔
1061
}
1062

1063
static int32_t taosUpdateServerCfg(SConfig *pCfg) {
8,874✔
1064
  SConfigItem *pItem;
1065
  ECfgSrcType  stype;
1066
  int32_t      numOfCores;
1067
  int64_t      totalMemoryKB;
1068

1069
  pItem = cfgGetItem(pCfg, "numOfCores");
8,874✔
1070
  if (pItem == NULL) {
8,874!
1071
    TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND);
×
1072
  } else {
1073
    stype = pItem->stype;
8,874✔
1074
    numOfCores = pItem->fval;
8,874✔
1075
  }
1076

1077
  pItem = cfgGetItem(pCfg, "supportVnodes");
8,874✔
1078
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
8,874!
1079
    tsNumOfSupportVnodes = numOfCores * 2 + 5;
24✔
1080
    tsNumOfSupportVnodes = TMAX(tsNumOfSupportVnodes, 2);
24✔
1081
    pItem->i32 = tsNumOfSupportVnodes;
24✔
1082
    pItem->stype = stype;
24✔
1083
  }
1084

1085
  pItem = cfgGetItem(pCfg, "numOfRpcThreads");
8,874✔
1086
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
8,874!
1087
    tsNumOfRpcThreads = TRANGE(tsNumOfRpcThreads, 1, TSDB_MAX_RPC_THREADS);
8,874✔
1088
    pItem->i32 = tsNumOfRpcThreads;
8,874✔
1089
    pItem->stype = stype;
8,874✔
1090
  }
1091

1092
  pItem = cfgGetItem(pCfg, "numOfRpcSessions");
8,874✔
1093
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
8,874!
1094
    tsNumOfRpcSessions = TRANGE(tsNumOfRpcSessions, 100, 10000);
8,874✔
1095
    pItem->i32 = tsNumOfRpcSessions;
8,874✔
1096
    pItem->stype = stype;
8,874✔
1097
  }
1098

1099
  pItem = cfgGetItem(pCfg, "shareConnLimit");
8,874✔
1100
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
8,874!
1101
    tsShareConnLimit = TRANGE(tsShareConnLimit, 1, 512);
8,874✔
1102
    pItem->i32 = tsShareConnLimit;
8,874✔
1103
    pItem->stype = stype;
8,874✔
1104
  }
1105

1106
  pItem = cfgGetItem(pCfg, "readTimeout");
8,874✔
1107
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
8,874!
1108
    tsReadTimeout = TRANGE(tsReadTimeout, 64, 24 * 3600 * 7);
8,874✔
1109
    pItem->i32 = tsReadTimeout;
8,874✔
1110
    pItem->stype = stype;
8,874✔
1111
  }
1112

1113
  pItem = cfgGetItem(pCfg, "timeToGetAvailableConn");
8,874✔
1114
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
8,874!
1115
    tsTimeToGetAvailableConn = TRANGE(tsTimeToGetAvailableConn, 20, 1000000);
8,874✔
1116
    pItem->i32 = tsTimeToGetAvailableConn;
8,874✔
1117
    pItem->stype = stype;
8,874✔
1118
  }
1119

1120
  pItem = cfgGetItem(pCfg, "numOfCommitThreads");
8,874✔
1121
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
8,874!
1122
    tsNumOfCommitThreads = numOfCores / 2;
8,874✔
1123
    tsNumOfCommitThreads = TRANGE(tsNumOfCommitThreads, 2, 4);
8,874✔
1124
    pItem->i32 = tsNumOfCommitThreads;
8,874✔
1125
    pItem->stype = stype;
8,874✔
1126
  }
1127

1128
  pItem = cfgGetItem(pCfg, "numOfCompactThreads");
8,874✔
1129
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
8,874!
1130
    pItem->i32 = tsNumOfCompactThreads;
8,874✔
1131
    pItem->stype = stype;
8,874✔
1132
  }
1133

1134
  pItem = cfgGetItem(pCfg, "numOfMnodeReadThreads");
8,874✔
1135
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
8,874!
1136
    tsNumOfMnodeReadThreads = numOfCores / 8;
8,874✔
1137
    tsNumOfMnodeReadThreads = TRANGE(tsNumOfMnodeReadThreads, 1, 4);
8,874✔
1138
    pItem->i32 = tsNumOfMnodeReadThreads;
8,874✔
1139
    pItem->stype = stype;
8,874✔
1140
  }
1141

1142
  pItem = cfgGetItem(pCfg, "numOfVnodeQueryThreads");
8,874✔
1143
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
8,874!
1144
    tsNumOfVnodeQueryThreads = numOfCores * 2;
8,862✔
1145
    tsNumOfVnodeQueryThreads = TMAX(tsNumOfVnodeQueryThreads, 16);
8,862✔
1146
    pItem->i32 = tsNumOfVnodeQueryThreads;
8,862✔
1147
    pItem->stype = stype;
8,862✔
1148
  }
1149

1150
  pItem = cfgGetItem(pCfg, "ratioOfVnodeStreamThreads");
8,874✔
1151
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
8,874!
1152
    pItem->fval = tsRatioOfVnodeStreamThreads;
8,868✔
1153
    pItem->stype = stype;
8,868✔
1154
  }
1155

1156
  pItem = cfgGetItem(pCfg, "itemsInWriteQ");
8,874✔
1157
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
8,874!
1158
    pItem->i32 = tsThresholdItemsInWriteQueue;
8,874✔
1159
    pItem->stype = stype;
8,874✔
1160
  }
1161

1162
  pItem = cfgGetItem(pCfg, "itemsInStreamQ");
8,874✔
1163
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
8,874!
1164
    pItem->i32 = tsThresholdItemsInStreamQueue;
8,874✔
1165
    pItem->stype = stype;
8,874✔
1166
  }
1167

1168
  pItem = cfgGetItem(pCfg, "disableStream");
8,874✔
1169
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
8,874!
1170
    pItem->bval = tsDisableStream;
8,874✔
1171
    pItem->stype = stype;
8,874✔
1172
  }
1173

1174
  pItem = cfgGetItem(pCfg, "numOfVnodeFetchThreads");
8,874✔
1175
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
8,874!
1176
    tsNumOfVnodeFetchThreads = numOfCores / 4;
8,874✔
1177
    tsNumOfVnodeFetchThreads = TMAX(tsNumOfVnodeFetchThreads, 4);
8,874✔
1178
    pItem->i32 = tsNumOfVnodeFetchThreads;
8,874✔
1179
    pItem->stype = stype;
8,874✔
1180
  }
1181

1182
  pItem = cfgGetItem(pCfg, "numOfVnodeRsmaThreads");
8,874✔
1183
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
8,874!
1184
    tsNumOfVnodeRsmaThreads = numOfCores;
8,874✔
1185
    tsNumOfVnodeRsmaThreads = TMAX(tsNumOfVnodeRsmaThreads, 4);
8,874✔
1186
    pItem->i32 = tsNumOfVnodeRsmaThreads;
8,874✔
1187
    pItem->stype = stype;
8,874✔
1188
  }
1189

1190
  pItem = cfgGetItem(pCfg, "numOfQnodeQueryThreads");
8,874✔
1191
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
8,874!
1192
    tsNumOfQnodeQueryThreads = numOfCores * 2;
8,874✔
1193
    tsNumOfQnodeQueryThreads = TMAX(tsNumOfQnodeQueryThreads, 16);
8,874✔
1194
    pItem->i32 = tsNumOfQnodeQueryThreads;
8,874✔
1195
    pItem->stype = stype;
8,874✔
1196
  }
1197

1198
  pItem = cfgGetItem(pCfg, "numOfSnodeSharedThreads");
8,874✔
1199
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
8,874!
1200
    tsNumOfSnodeStreamThreads = numOfCores / 4;
8,874✔
1201
    tsNumOfSnodeStreamThreads = TRANGE(tsNumOfSnodeStreamThreads, 2, 4);
8,874✔
1202
    pItem->i32 = tsNumOfSnodeStreamThreads;
8,874✔
1203
    pItem->stype = stype;
8,874✔
1204
  }
1205

1206
  pItem = cfgGetItem(pCfg, "numOfSnodeUniqueThreads");
8,874✔
1207
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
8,874!
1208
    tsNumOfSnodeWriteThreads = numOfCores / 4;
8,874✔
1209
    tsNumOfSnodeWriteThreads = TRANGE(tsNumOfSnodeWriteThreads, 2, 4);
8,874✔
1210
    pItem->i32 = tsNumOfSnodeWriteThreads;
8,874✔
1211
    pItem->stype = stype;
8,874✔
1212
  }
1213

1214
  pItem = cfgGetItem(pCfg, "totalMemoryKB");
8,874✔
1215
  if (pItem == NULL) {
8,874!
1216
    TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND);
×
1217
  } else {
1218
    stype = pItem->stype;
8,874✔
1219
    totalMemoryKB = pItem->i64;
8,874✔
1220
  }
1221

1222
  pItem = cfgGetItem(pCfg, "rpcQueueMemoryAllowed");
8,874✔
1223
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
8,874!
1224
    tsQueueMemoryAllowed = totalMemoryKB * 1024 * 0.1;
8,870✔
1225
    tsQueueMemoryAllowed = TRANGE(tsQueueMemoryAllowed, TSDB_MAX_MSG_SIZE * 10LL, TSDB_MAX_MSG_SIZE * 10000LL);
8,870✔
1226
    pItem->i64 = tsQueueMemoryAllowed;
8,870✔
1227
    pItem->stype = stype;
8,870✔
1228
  }
1229

1230
  pItem = cfgGetItem(tsCfg, "syncLogBufferMemoryAllowed");
8,874✔
1231
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
8,874!
1232
    tsLogBufferMemoryAllowed = totalMemoryKB * 1024 * 0.1;
8,870✔
1233
    tsLogBufferMemoryAllowed = TRANGE(tsLogBufferMemoryAllowed, TSDB_MAX_MSG_SIZE * 10LL, TSDB_MAX_MSG_SIZE * 10000LL);
8,870✔
1234
    pItem->i64 = tsLogBufferMemoryAllowed;
8,870✔
1235
    pItem->stype = stype;
8,870✔
1236
  }
1237

1238
  TAOS_RETURN(TSDB_CODE_SUCCESS);
8,874✔
1239
}
1240

1241
static int32_t taosSetLogOutput(SConfig *pCfg) {
48,992✔
1242
  if (tsLogOutput) {
48,992✔
1243
    char *pLog = tsLogOutput;
28✔
1244
    char *pEnd = NULL;
28✔
1245
    if (strcasecmp(pLog, "stdout") && strcasecmp(pLog, "stderr") && strcasecmp(pLog, "/dev/null")) {
28!
1246
      if ((pEnd = strrchr(pLog, '/')) || (pEnd = strrchr(pLog, '\\'))) {
22!
1247
        int32_t pathLen = POINTER_DISTANCE(pEnd, pLog) + 1;
14✔
1248
        if (*pLog == '/' || *pLog == '\\') {
14!
1249
          if (pathLen <= 0 || pathLen > PATH_MAX) TAOS_RETURN(TSDB_CODE_OUT_OF_RANGE);
6!
1250
          tstrncpy(tsLogDir, pLog, pathLen);
6✔
1251
        } else {
1252
          int32_t len = strlen(tsLogDir);
8✔
1253
          if (len < 0 || len >= (PATH_MAX - 1)) TAOS_RETURN(TSDB_CODE_OUT_OF_RANGE);
8!
1254
          if (len == 0 || (tsLogDir[len - 1] != '/' && tsLogDir[len - 1] != '\\')) {
8!
1255
            tsLogDir[len++] = TD_DIRSEP_CHAR;
8✔
1256
          }
1257
          int32_t remain = PATH_MAX - len - 1;
8✔
1258
          if (remain < pathLen) TAOS_RETURN(TSDB_CODE_OUT_OF_RANGE);
8!
1259
          tstrncpy(tsLogDir + len, pLog, pathLen);
8✔
1260
        }
1261
        TAOS_CHECK_RETURN(cfgSetItem(pCfg, "logDir", tsLogDir, CFG_STYPE_DEFAULT, true));
14!
1262
      }
1263
    } else {
1264
      tstrncpy(tsLogDir, pLog, PATH_MAX);
6✔
1265
      TAOS_CHECK_RETURN(cfgSetItem(pCfg, "logDir", tsLogDir, CFG_STYPE_DEFAULT, true));
6!
1266
    }
1267
  }
1268
  return 0;
48,992✔
1269
}
1270

1271
static int32_t taosSetClientLogCfg(SConfig *pCfg) {
48,992✔
1272
  SConfigItem *pItem = NULL;
48,992✔
1273

1274
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "logDir");
48,992!
1275
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, PATH_MAX));
48,992!
1276
  tstrncpy(tsLogDir, pItem->str, PATH_MAX);
48,992✔
1277
  TAOS_CHECK_RETURN(taosExpandDir(tsLogDir, tsLogDir, PATH_MAX));
48,992!
1278
  TAOS_CHECK_RETURN(taosSetLogOutput(pCfg));
48,992!
1279

1280
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minimalLogDirGB");
48,992!
1281
  tsLogSpace.reserved = (int64_t)(((double)pItem->fval) * 1024 * 1024 * 1024);
48,992✔
1282

1283
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfLogLines");
48,992!
1284
  tsNumOfLogLines = pItem->i32;
48,992✔
1285

1286
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "asyncLog");
48,992!
1287
  tsAsyncLog = pItem->bval;
48,992✔
1288

1289
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "logKeepDays");
48,992!
1290
  tsLogKeepDays = pItem->i32;
48,992✔
1291

1292
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tmrDebugFlag");
48,992!
1293
  tmrDebugFlag = pItem->i32;
48,992✔
1294

1295
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "uDebugFlag");
48,992!
1296
  uDebugFlag = pItem->i32;
48,992✔
1297

1298
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "jniDebugFlag");
48,992!
1299
  jniDebugFlag = pItem->i32;
48,992✔
1300

1301
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "rpcDebugFlag");
48,992!
1302
  rpcDebugFlag = pItem->i32;
48,992✔
1303

1304
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "qDebugFlag");
48,992!
1305
  qDebugFlag = pItem->i32;
48,992✔
1306

1307
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "cDebugFlag");
48,992!
1308
  cDebugFlag = pItem->i32;
48,992✔
1309

1310
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "simDebugFlag");
48,992!
1311
  simDebugFlag = pItem->i32;
48,992✔
1312

1313
  TAOS_RETURN(TSDB_CODE_SUCCESS);
48,992✔
1314
}
1315

1316
static int32_t taosSetServerLogCfg(SConfig *pCfg) {
6,383✔
1317
  SConfigItem *pItem = NULL;
6,383✔
1318
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "dDebugFlag");
6,383!
1319
  dDebugFlag = pItem->i32;
6,383✔
1320

1321
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "vDebugFlag");
6,383!
1322
  vDebugFlag = pItem->i32;
6,383✔
1323

1324
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "mDebugFlag");
6,383!
1325
  mDebugFlag = pItem->i32;
6,383✔
1326

1327
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "wDebugFlag");
6,383!
1328
  wDebugFlag = pItem->i32;
6,383✔
1329

1330
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "azDebugFlag");
6,383!
1331
  azDebugFlag = pItem->i32;
6,383✔
1332

1333
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "sDebugFlag");
6,383!
1334
  sDebugFlag = pItem->i32;
6,383✔
1335

1336
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tsdbDebugFlag");
6,383!
1337
  tsdbDebugFlag = pItem->i32;
6,383✔
1338

1339
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tqDebugFlag");
6,383!
1340
  tqDebugFlag = pItem->i32;
6,383✔
1341

1342
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "fsDebugFlag");
6,383!
1343
  fsDebugFlag = pItem->i32;
6,383✔
1344

1345
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "udfDebugFlag");
6,383!
1346
  udfDebugFlag = pItem->i32;
6,383✔
1347

1348
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "smaDebugFlag");
6,383!
1349
  smaDebugFlag = pItem->i32;
6,383✔
1350

1351
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "idxDebugFlag");
6,383!
1352
  idxDebugFlag = pItem->i32;
6,383✔
1353

1354
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tdbDebugFlag");
6,383!
1355
  tdbDebugFlag = pItem->i32;
6,383✔
1356

1357
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "metaDebugFlag");
6,383!
1358
  metaDebugFlag = pItem->i32;
6,383✔
1359

1360
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "stDebugFlag");
6,383!
1361
  stDebugFlag = pItem->i32;
6,383✔
1362

1363
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "sndDebugFlag");
6,383!
1364
  sndDebugFlag = pItem->i32;
6,383✔
1365

1366
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "bndDebugFlag");
6,383!
1367
  bndDebugFlag = pItem->i32;
6,383✔
1368

1369
  TAOS_RETURN(TSDB_CODE_SUCCESS);
6,383✔
1370
}
1371

1372
int32_t taosSetSlowLogScope(char *pScopeStr, int32_t *pScope) {
10,372✔
1373
  if (NULL == pScopeStr || 0 == strlen(pScopeStr)) {
10,372!
1374
    *pScope = SLOW_LOG_TYPE_QUERY;
×
1375
    TAOS_RETURN(TSDB_CODE_SUCCESS);
×
1376
  }
1377

1378
  int32_t slowScope = 0;
10,372✔
1379

1380
  char *scope = NULL;
10,372✔
1381
  char *tmp = NULL;
10,372✔
1382
  while ((scope = strsep(&pScopeStr, "|")) != NULL) {
20,744✔
1383
    taosMemoryFreeClear(tmp);
10,372!
1384
    tmp = taosStrdup(scope);
10,372!
1385
    if (tmp == NULL) {
10,372!
1386
      TAOS_RETURN(terrno);
×
1387
    }
1388
    (void)strtrim(tmp);
10,372✔
1389
    if (0 == strcasecmp(tmp, "all")) {
10,372✔
1390
      slowScope |= SLOW_LOG_TYPE_ALL;
298✔
1391
      continue;
298✔
1392
    }
1393

1394
    if (0 == strcasecmp(tmp, "query")) {
10,074✔
1395
      slowScope |= SLOW_LOG_TYPE_QUERY;
9,161✔
1396
      continue;
9,161✔
1397
    }
1398

1399
    if (0 == strcasecmp(tmp, "insert")) {
913✔
1400
      slowScope |= SLOW_LOG_TYPE_INSERT;
312✔
1401
      continue;
312✔
1402
    }
1403

1404
    if (0 == strcasecmp(tmp, "others")) {
601✔
1405
      slowScope |= SLOW_LOG_TYPE_OTHERS;
298✔
1406
      continue;
298✔
1407
    }
1408

1409
    if (0 == strcasecmp(tmp, "none")) {
303!
1410
      slowScope |= SLOW_LOG_TYPE_NULL;
303✔
1411
      continue;
303✔
1412
    }
1413

1414
    taosMemoryFreeClear(tmp);
×
1415
    uError("Invalid slowLog scope value:%s", pScopeStr);
×
1416
    TAOS_RETURN(TSDB_CODE_INVALID_CFG_VALUE);
×
1417
  }
1418

1419
  *pScope = slowScope;
10,372✔
1420
  taosMemoryFreeClear(tmp);
10,372!
1421
  TAOS_RETURN(TSDB_CODE_SUCCESS);
10,372✔
1422
}
1423

1424
// for common configs
1425
static int32_t taosSetClientCfg(SConfig *pCfg) {
26,995✔
1426
  SConfigItem *pItem = NULL;
26,995✔
1427

1428
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "fqdn");
26,995✔
1429
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_FQDN_LEN));
26,987!
1430
  tstrncpy(tsLocalFqdn, pItem->str, TSDB_FQDN_LEN);
26,987✔
1431

1432
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "forceReadConfig");
26,987!
1433
  tsForceReadConfig = pItem->bval;
26,987✔
1434

1435
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "serverPort");
26,987!
1436
  tsServerPort = (uint16_t)pItem->i32;
26,987✔
1437
  (void)snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
26,987✔
1438

1439
  char defaultFirstEp[TSDB_EP_LEN] = {0};
26,987✔
1440
  (void)snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort);
26,987✔
1441

1442
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "mqttPort");
26,987!
1443
  tsMqttPort = (uint16_t)pItem->i32;
26,987✔
1444
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableIpv6");
26,987!
1445
  tsEnableIpv6 = pItem->bval;
26,987✔
1446

1447
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "firstEp");
26,987!
1448
  SEp firstEp = {0};
26,987✔
1449
  TAOS_CHECK_RETURN(taosGetFqdnPortFromEp(strlen(pItem->str) == 0 ? defaultFirstEp : pItem->str, &firstEp));
26,987!
1450
  (void)snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port);
26,987✔
1451
  TAOS_CHECK_RETURN(cfgSetItem(pCfg, "firstEp", tsFirst, pItem->stype, true));
26,987!
1452

1453
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "secondEp");
26,987!
1454
  SEp secondEp = {0};
26,987✔
1455
  TAOS_CHECK_RETURN(taosGetFqdnPortFromEp(strlen(pItem->str) == 0 ? defaultFirstEp : pItem->str, &secondEp));
26,987!
1456
  (void)snprintf(tsSecond, sizeof(tsSecond), "%s:%u", secondEp.fqdn, secondEp.port);
26,987✔
1457
  TAOS_CHECK_RETURN(cfgSetItem(pCfg, "secondEp", tsSecond, pItem->stype, true));
26,987!
1458

1459
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tempDir");
26,987!
1460
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, PATH_MAX));
26,987!
1461
  tstrncpy(tsTempDir, pItem->str, PATH_MAX);
26,987✔
1462
  TAOS_CHECK_RETURN(taosExpandDir(tsTempDir, tsTempDir, PATH_MAX));
26,987!
1463

1464
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minimalTmpDirGB");
26,987!
1465
  tsTempSpace.reserved = (int64_t)(((double)pItem->fval) * 1024 * 1024 * 1024);
26,987✔
1466
  if (taosMulMkDir(tsTempDir) != 0) {
26,987!
1467
    int32_t code = TAOS_SYSTEM_ERROR(ERRNO);
×
1468
    uError("failed to create tempDir:%s since %s", tsTempDir, tstrerror(code));
×
1469
    TAOS_RETURN(code);
×
1470
  }
1471

1472
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "smlAutoChildTableNameDelimiter");
26,987!
1473
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_TABLE_NAME_LEN));
26,987!
1474
  tstrncpy(tsSmlAutoChildTableNameDelimiter, pItem->str, TSDB_TABLE_NAME_LEN);
26,987✔
1475

1476
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "smlChildTableName");
26,987!
1477
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_TABLE_NAME_LEN));
26,987!
1478
  tstrncpy(tsSmlChildTableName, pItem->str, TSDB_TABLE_NAME_LEN);
26,987✔
1479

1480
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "smlTagName");
26,987!
1481
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_COL_NAME_LEN));
26,987!
1482
  tstrncpy(tsSmlTagName, pItem->str, TSDB_COL_NAME_LEN);
26,987✔
1483

1484
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "smlTsDefaultName");
26,987!
1485
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_COL_NAME_LEN));
26,987!
1486
  tstrncpy(tsSmlTsDefaultName, pItem->str, TSDB_COL_NAME_LEN);
26,987✔
1487

1488
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "smlDot2Underline");
26,987!
1489
  tsSmlDot2Underline = pItem->bval;
26,987✔
1490

1491
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxInsertBatchRows");
26,987!
1492
  tsMaxInsertBatchRows = pItem->i32;
26,987✔
1493

1494
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "shellActivityTimer");
26,987!
1495
  tsShellActivityTimer = pItem->i32;
26,987✔
1496

1497
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "compressMsgSize");
26,987!
1498
  tsCompressMsgSize = pItem->i32;
26,987✔
1499

1500
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfTaskQueueThreads");
26,987!
1501
  tsNumOfTaskQueueThreads = pItem->i32;
26,987✔
1502

1503
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryPolicy");
26,987!
1504
  tsQueryPolicy = pItem->i32;
26,987✔
1505

1506
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryTableNotExistAsEmpty");
26,987!
1507
  tsQueryTbNotExistAsEmpty = pItem->bval;
26,987✔
1508

1509
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableQueryHb");
26,987!
1510
  tsEnableQueryHb = pItem->bval;
26,987✔
1511

1512
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableScience");
26,987!
1513
  tsEnableScience = pItem->bval;
26,987✔
1514

1515
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "querySmaOptimize");
26,987!
1516
  tsQuerySmaOptimize = pItem->i32;
26,987✔
1517

1518
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryPlannerTrace");
26,987!
1519
  tsQueryPlannerTrace = pItem->bval;
26,987✔
1520

1521
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryNodeChunkSize");
26,987!
1522
  tsQueryNodeChunkSize = pItem->i32;
26,987✔
1523

1524
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryUseNodeAllocator");
26,987!
1525
  tsQueryUseNodeAllocator = pItem->bval;
26,987✔
1526

1527
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "keepColumnName");
26,987!
1528
  tsKeepColumnName = pItem->bval;
26,987✔
1529

1530
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "useAdapter");
26,987!
1531
  tsUseAdapter = pItem->bval;
26,987✔
1532

1533
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "crashReporting");
26,987!
1534
  tsEnableCrashReport = pItem->bval;
26,987✔
1535

1536
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryMaxConcurrentTables");
26,987!
1537
  tsQueryMaxConcurrentTables = pItem->i64;
26,987✔
1538

1539
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "metaCacheMaxSize");
26,987!
1540
  tsMetaCacheMaxSize = pItem->i32;
26,987✔
1541

1542
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "randErrorChance");
26,987!
1543
  tsRandErrChance = pItem->i32;
26,987✔
1544

1545
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "randErrorDivisor");
26,987!
1546
  tsRandErrDivisor = pItem->i64;
26,987✔
1547

1548
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "randErrorScope");
26,987!
1549
  tsRandErrScope = pItem->i64;
26,987✔
1550

1551
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "countAlwaysReturnValue");
26,987!
1552
  tsCountAlwaysReturnValue = pItem->i32;
26,987✔
1553

1554
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxRetryWaitTime");
26,987!
1555
  tsMaxRetryWaitTime = pItem->i32;
26,987✔
1556

1557
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfRpcThreads");
26,987!
1558
  tsNumOfRpcThreads = pItem->i32;
26,987✔
1559

1560
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfRpcSessions");
26,987!
1561
  tsNumOfRpcSessions = pItem->i32;
26,987✔
1562

1563
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "shareConnLimit");
26,987!
1564
  tsShareConnLimit = pItem->i32;
26,987✔
1565

1566
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "readTimeout");
26,987!
1567
  tsReadTimeout = pItem->i32;
26,987✔
1568

1569
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "timeToGetAvailableConn");
26,987!
1570
  tsTimeToGetAvailableConn = pItem->i32;
26,987✔
1571

1572
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "experimental");
26,987!
1573
  tsExperimental = pItem->bval;
26,987✔
1574

1575
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "multiResultFunctionStarReturnTags");
26,987!
1576
  tsMultiResultFunctionStarReturnTags = pItem->bval;
26,987✔
1577

1578
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxTsmaCalcDelay");
26,987!
1579
  tsMaxTsmaCalcDelay = pItem->i32;
26,987✔
1580

1581
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tsmaDataDeleteMark");
26,987!
1582
  tsmaDataDeleteMark = pItem->i32;
26,987✔
1583

1584
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "safetyCheckLevel");
26,987!
1585
  tsSafetyCheckLevel = pItem->i32;
26,987✔
1586

1587
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "bypassFlag");
26,987!
1588
  tsBypassFlag = pItem->i32;
26,987✔
1589

1590
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamCoverage");
26,987!
1591
  tsStreamCoverage = pItem->bval;
26,987✔
1592

1593
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "compareAsStrInGreatest");
26,987!
1594
  tsCompareAsStrInGreatest = pItem->bval;
26,987✔
1595

1596
  TAOS_RETURN(TSDB_CODE_SUCCESS);
26,987✔
1597
}
1598

1599
static int32_t taosSetSystemCfg(SConfig *pCfg) {
26,987✔
1600
  SConfigItem *pItem = NULL;
26,987✔
1601

1602
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableCoreFile");
26,987!
1603
  tsEnableCoreFile = pItem->bval;
26,987✔
1604
  taosSetCoreDump(tsEnableCoreFile);
26,987✔
1605

1606
  // todo
1607
  tsVersion = 30000000;
26,987✔
1608

1609
  TAOS_RETURN(TSDB_CODE_SUCCESS);
26,987✔
1610
}
1611

1612
// for server configs
1613
static int32_t taosSetServerCfg(SConfig *pCfg) {
8,874✔
1614
  SConfigItem *pItem = NULL;
8,874✔
1615

1616
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minimalDataDirGB");
8,874!
1617
  tsDataSpace.reserved = (int64_t)(((double)pItem->fval) * 1024 * 1024 * 1024);
8,874✔
1618

1619
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "supportVnodes");
8,874!
1620
  tsNumOfSupportVnodes = pItem->i32;
8,874✔
1621

1622
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxShellConns");
8,874!
1623
  tsMaxShellConns = pItem->i32;
8,874✔
1624

1625
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "statusInterval");
8,874!
1626
  tsStatusInterval = pItem->i32;
8,874✔
1627

1628
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableMetrics");
8,874!
1629
  tsEnableMetrics = pItem->bval;
8,874✔
1630

1631
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "metricsLevel");
8,874!
1632
  tsMetricsLevel = pItem->i32;
8,874✔
1633

1634
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "metricsInterval");
8,874!
1635
  tsMetricsInterval = pItem->i32;
8,874✔
1636

1637
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minSlidingTime");
8,874!
1638
  tsMinSlidingTime = pItem->i32;
8,874✔
1639

1640
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minIntervalTime");
8,874!
1641
  tsMinIntervalTime = pItem->i32;
8,874✔
1642

1643
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryBufferSize");
8,874!
1644
  tsQueryBufferSize = pItem->i32;
8,874✔
1645

1646
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "encryptAlgorithm");
8,874!
1647
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, 16));
8,874!
1648
  tstrncpy(tsEncryptAlgorithm, pItem->str, 16);
8,874✔
1649

1650
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "encryptScope");
8,874!
1651
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, 100));
8,874!
1652
  tstrncpy(tsEncryptScope, pItem->str, 100);
8,874✔
1653

1654
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableStrongPassword");
8,874!
1655
  tsEnableStrongPassword = pItem->i32;
8,874✔
1656

1657
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "encryptPassAlgorithm");
8,874!
1658
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, 16));
8,874!
1659
  tstrncpy(tsEncryptPassAlgorithm, pItem->str, 16);
8,874✔
1660

1661
  if (strlen(tsEncryptPassAlgorithm) > 0) {
8,874✔
1662
    if (strcmp(tsEncryptPassAlgorithm, "sm4") == 0) {
3!
1663
      tsiEncryptPassAlgorithm = DND_CA_SM4;
3✔
1664
    } else {
1665
      uError("invalid tsEncryptAlgorithm:%s", tsEncryptPassAlgorithm);
×
1666
    }
1667
  }
1668

1669
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfRpcThreads");
8,874!
1670
  tsNumOfRpcThreads = pItem->i32;
8,874✔
1671

1672
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfRpcSessions");
8,874!
1673
  tsNumOfRpcSessions = pItem->i32;
8,874✔
1674

1675
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "shareConnLimit");
8,874!
1676
  tsShareConnLimit = pItem->i32;
8,874✔
1677

1678
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "readTimeout");
8,874!
1679
  tsReadTimeout = pItem->i32;
8,874✔
1680

1681
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "timeToGetAvailableConn");
8,874!
1682
  tsTimeToGetAvailableConn = pItem->i32;
8,874✔
1683

1684
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfCommitThreads");
8,874!
1685
  tsNumOfCommitThreads = pItem->i32;
8,874✔
1686

1687
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfCompactThreads");
8,874!
1688
  tsNumOfCompactThreads = pItem->i32;
8,874✔
1689

1690
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableIpv6");
8,874!
1691
  tsEnableIpv6 = pItem->bval;
8,874✔
1692

1693
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "retentionSpeedLimitMB");
8,874!
1694
  tsRetentionSpeedLimitMB = pItem->i32;
8,874✔
1695

1696
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfMnodeReadThreads");
8,874!
1697
  tsNumOfMnodeReadThreads = pItem->i32;
8,874✔
1698

1699
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfVnodeQueryThreads");
8,874!
1700
  tsNumOfVnodeQueryThreads = pItem->i32;
8,874✔
1701

1702
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ratioOfVnodeStreamThreads");
8,874!
1703
  tsRatioOfVnodeStreamThreads = pItem->fval;
8,874✔
1704

1705
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "itemsInWriteQ");
8,874!
1706
  tsThresholdItemsInWriteQueue = pItem->i32;
8,874✔
1707

1708
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "itemsInStreamQ");
8,874!
1709
  tsThresholdItemsInStreamQueue = pItem->i32;
8,874✔
1710

1711
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfVnodeFetchThreads");
8,874!
1712
  tsNumOfVnodeFetchThreads = pItem->i32;
8,874✔
1713

1714
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfVnodeRsmaThreads");
8,874!
1715
  tsNumOfVnodeRsmaThreads = pItem->i32;
8,874✔
1716

1717
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfQnodeQueryThreads");
8,874!
1718
  tsNumOfQnodeQueryThreads = pItem->i32;
8,874✔
1719

1720
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfSnodeSharedThreads");
8,874!
1721
  tsNumOfSnodeStreamThreads = pItem->i32;
8,874✔
1722

1723
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfSnodeUniqueThreads");
8,874!
1724
  tsNumOfSnodeWriteThreads = pItem->i32;
8,874✔
1725

1726
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "rpcQueueMemoryAllowed");
8,874!
1727
  tsQueueMemoryAllowed = cfgGetItem(pCfg, "rpcQueueMemoryAllowed")->i64 * QUEUE_MEMORY_USAGE_RATIO;
8,874✔
1728
  tsApplyMemoryAllowed = cfgGetItem(pCfg, "rpcQueueMemoryAllowed")->i64 * (1 - QUEUE_MEMORY_USAGE_RATIO);
8,874✔
1729

1730
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "simdEnable");
8,874!
1731
  tsSIMDEnable = (bool)pItem->bval;
8,874✔
1732

1733
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "AVX512Enable");
8,874!
1734
  tsAVX512Enable = (bool)pItem->bval;
8,874✔
1735

1736
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tagFilterCache");
8,874!
1737
  tsTagFilterCache = (bool)pItem->bval;
8,874✔
1738

1739
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "slowLogExceptDb");
8,874!
1740
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_DB_NAME_LEN));
8,874!
1741
  tstrncpy(tsSlowLogExceptDb, pItem->str, TSDB_DB_NAME_LEN);
8,874✔
1742

1743
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "slowLogThreshold");
8,874!
1744
  tsSlowLogThreshold = pItem->i32;
8,874✔
1745

1746
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "slowLogMaxLen");
8,874!
1747
  tsSlowLogMaxLen = pItem->i32;
8,874✔
1748

1749
  int32_t scope = 0;
8,874✔
1750
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "slowLogScope");
8,874!
1751
  TAOS_CHECK_RETURN(taosSetSlowLogScope(pItem->str, &scope));
8,874!
1752
  tsSlowLogScope = scope;
8,874✔
1753

1754
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryRspPolicy");
8,874!
1755
  tsQueryRspPolicy = pItem->i32;
8,874✔
1756
#ifdef USE_MONITOR
1757
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitor");
8,874!
1758
  tsEnableMonitor = pItem->bval;
8,874✔
1759

1760
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorInterval");
8,874!
1761
  tsMonitorInterval = pItem->i32;
8,874✔
1762

1763
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorFqdn");
8,874!
1764
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_FQDN_LEN));
8,874!
1765
  tstrncpy(tsMonitorFqdn, pItem->str, TSDB_FQDN_LEN);
8,874✔
1766

1767
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorPort");
8,874!
1768
  tsMonitorPort = (uint16_t)pItem->i32;
8,874✔
1769

1770
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorMaxLogs");
8,874!
1771
  tsMonitorMaxLogs = pItem->i32;
8,874✔
1772

1773
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorComp");
8,874!
1774
  tsMonitorComp = pItem->bval;
8,874✔
1775

1776
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorLogProtocol");
8,874!
1777
  tsMonitorLogProtocol = pItem->bval;
8,874✔
1778

1779
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorForceV2");
8,874!
1780
  tsMonitorForceV2 = pItem->i32;
8,874✔
1781
#endif
1782
#ifdef USE_AUDIT
1783
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "audit");
8,874!
1784
  tsEnableAudit = pItem->bval;
8,874✔
1785

1786
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "auditCreateTable");
8,874!
1787
  tsEnableAuditCreateTable = pItem->bval;
8,874✔
1788

1789
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableAuditDelete");
8,874!
1790
  tsEnableAuditDelete = pItem->bval;
8,874✔
1791

1792
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "auditInterval");
8,874!
1793
  tsAuditInterval = pItem->i32;
8,874✔
1794
#endif
1795
#ifdef USE_REPORT
1796
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "telemetryReporting");
8,874!
1797
  tsEnableTelem = pItem->bval;
8,874✔
1798

1799
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "crashReporting");
8,874!
1800
  tsEnableCrashReport = pItem->bval;
8,874✔
1801

1802
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "telemetryInterval");
8,874!
1803
  tsTelemInterval = pItem->i32;
8,874✔
1804

1805
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "telemetryServer");
8,874!
1806
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_FQDN_LEN));
8,874!
1807
  tstrncpy(tsTelemServer, pItem->str, TSDB_FQDN_LEN);
8,874✔
1808
#endif
1809

1810
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ttlChangeOnWrite");
8,874!
1811
  tsTtlChangeOnWrite = pItem->bval;
8,874✔
1812

1813
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ttlFlushThreshold");
8,874!
1814
  tsTtlFlushThreshold = pItem->i32;
8,874✔
1815

1816
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "rsyncPort");
8,874!
1817
  tsRsyncPort = pItem->i32;
8,874✔
1818

1819
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "snodeAddress");
8,874!
1820
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_FQDN_LEN));
8,874!
1821
  tstrncpy(tsSnodeAddress, pItem->str, TSDB_FQDN_LEN);
8,874✔
1822

1823
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "checkpointBackupDir");
8,874!
1824
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, PATH_MAX));
8,874!
1825
  tstrncpy(tsCheckpointBackupDir, pItem->str, PATH_MAX);
8,874✔
1826

1827
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "telemetryPort");
8,874!
1828
  tsTelemPort = (uint16_t)pItem->i32;
8,874✔
1829

1830
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tmqMaxTopicNum");
8,874!
1831
  tmqMaxTopicNum = pItem->i32;
8,874✔
1832

1833
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tmqRowSize");
8,874!
1834
  tmqRowSize = pItem->i32;
8,874✔
1835

1836
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxTsmaNum");
8,874!
1837
  tsMaxTsmaNum = pItem->i32;
8,874✔
1838

1839
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "diskIDCheckEnabled");
8,874!
1840
  tsDiskIDCheckEnabled = pItem->bval;
8,874✔
1841

1842
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "transPullupInterval");
8,874!
1843
  tsTransPullupInterval = pItem->i32;
8,874✔
1844

1845
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "compactPullupInterval");
8,874!
1846
  tsCompactPullupInterval = pItem->i32;
8,874✔
1847

1848
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "mqRebalanceInterval");
8,874!
1849
  tsMqRebalanceInterval = pItem->i32;
8,874✔
1850

1851
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ttlUnit");
8,874!
1852
  tsTtlUnit = pItem->i32;
8,874✔
1853

1854
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ttlPushInterval");
8,874!
1855
  tsTtlPushIntervalSec = pItem->i32;
8,874✔
1856

1857
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ttlBatchDropNum");
8,874!
1858
  tsTtlBatchDropNum = pItem->i32;
8,874✔
1859

1860
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "trimVDbIntervalSec");
8,874!
1861
  tsTrimVDbIntervalSec = pItem->i32;
8,874✔
1862

1863
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "uptimeInterval");
8,874!
1864
  tsUptimeInterval = pItem->i32;
8,874✔
1865

1866
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryRsmaTolerance");
8,874!
1867
  tsQueryRsmaTolerance = pItem->i32;
8,874✔
1868

1869
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "timeseriesThreshold");
8,874!
1870
  tsTimeSeriesThreshold = pItem->i32;
8,874✔
1871

1872
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "walFsyncDataSizeLimit");
8,874!
1873
  tsWalFsyncDataSizeLimit = pItem->i64;
8,874✔
1874

1875
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncElectInterval");
8,874!
1876
  tsElectInterval = pItem->i32;
8,874✔
1877

1878
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncHeartbeatInterval");
8,874!
1879
  tsHeartbeatInterval = pItem->i32;
8,874✔
1880

1881
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncHeartbeatTimeout");
8,874!
1882
  tsHeartbeatTimeout = pItem->i32;
8,874✔
1883

1884
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncSnapReplMaxWaitN");
8,874!
1885
  tsSnapReplMaxWaitN = pItem->i32;
8,874✔
1886

1887
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncLogBufferMemoryAllowed");
8,874!
1888
  tsLogBufferMemoryAllowed = pItem->i64;
8,874✔
1889

1890
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncRoutineReportInterval");
8,874!
1891
  tsRoutineReportInterval = pItem->i32;
8,874✔
1892

1893
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncLogHeartbeat");
8,874!
1894
  tsSyncLogHeartbeat = pItem->bval;
8,874✔
1895

1896
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "arbHeartBeatIntervalSec");
8,874!
1897
  tsArbHeartBeatIntervalSec = pItem->i32;
8,874✔
1898

1899
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "arbCheckSyncIntervalSec");
8,874!
1900
  tsArbCheckSyncIntervalSec = pItem->i32;
8,874✔
1901

1902
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "arbSetAssignedTimeoutSec");
8,874!
1903
  tsArbSetAssignedTimeoutSec = pItem->i32;
8,874✔
1904

1905
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "mndSdbWriteDelta");
8,874!
1906
  tsMndSdbWriteDelta = pItem->i64;
8,874✔
1907

1908
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "mndLogRetention");
8,874!
1909
  tsMndLogRetention = pItem->i64;
8,874✔
1910

1911
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "skipGrant");
8,874!
1912
  tsMndSkipGrant = pItem->bval;
8,874✔
1913

1914
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableWhiteList");
8,874!
1915
  tsEnableWhiteList = pItem->bval;
8,874✔
1916

1917
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "forceKillTrans");
8,874!
1918
  tsForceKillTrans = pItem->bval;
8,874✔
1919
#ifdef USE_UDF
1920
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "udf");
8,874!
1921
  tsStartUdfd = pItem->bval;
8,874✔
1922

1923
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "udfdResFuncs");
8,874!
1924
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, sizeof(tsUdfdResFuncs)));
8,874!
1925
  tstrncpy(tsUdfdResFuncs, pItem->str, sizeof(tsUdfdResFuncs));
8,874✔
1926

1927
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "udfdLdLibPath");
8,874!
1928
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, sizeof(tsUdfdLdLibPath)));
8,874!
1929
  tstrncpy(tsUdfdLdLibPath, pItem->str, sizeof(tsUdfdLdLibPath));
8,874✔
1930
  if (tsQueryBufferSize >= 0) {
8,874✔
1931
    tsQueryBufferSizeBytes = tsQueryBufferSize * 1048576UL;
5✔
1932
  }
1933
#endif
1934
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "cacheLazyLoadThreshold");
8,874!
1935
  tsCacheLazyLoadThreshold = pItem->i32;
8,874✔
1936

1937
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "fPrecision");
8,874!
1938
  tsFPrecision = pItem->fval;
8,874✔
1939

1940
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "dPrecision");
8,874!
1941
  tsDPrecision = pItem->fval;
8,874✔
1942

1943
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxRange");
8,874!
1944
  tsMaxRange = pItem->i32;
8,874✔
1945

1946
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "curRange");
8,874!
1947
  tsCurRange = pItem->i32;
8,874✔
1948

1949
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ifAdtFse");
8,874!
1950
  tsIfAdtFse = pItem->bval;
8,874✔
1951

1952
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "compressor");
8,874!
1953
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, sizeof(tsCompressor)));
8,874!
1954
  tstrncpy(tsCompressor, pItem->str, sizeof(tsCompressor));
8,874✔
1955

1956
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "disableStream");
8,874!
1957
  tsDisableStream = pItem->bval;
8,874✔
1958

1959
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamBufferSize");
8,874!
1960
  tsStreamBufferSize = pItem->i64;
8,874✔
1961

1962
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamFailedTimeout");
8,874!
1963
  tsStreamFailedTimeout = pItem->i64;
8,874✔
1964

1965
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamAggCnt");
8,874!
1966
  tsStreamAggCnt = pItem->i32;
8,874✔
1967

1968
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "checkpointInterval");
8,874!
1969
  tsStreamCheckpointInterval = pItem->i32;
8,874✔
1970

1971
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "concurrentCheckpoint");
8,874!
1972
  tsMaxConcurrentCheckpoint = pItem->i32;
8,874✔
1973

1974
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamSinkDataRate");
8,874!
1975
  tsSinkDataRate = pItem->fval;
8,874✔
1976

1977
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "filterScalarMode");
8,874!
1978
  tsFilterScalarMode = pItem->bval;
8,874✔
1979

1980
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxStreamBackendCache");
8,874!
1981
  tsMaxStreamBackendCache = pItem->i32;
8,874✔
1982

1983
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "pqSortMemThreshold");
8,874!
1984
  tsPQSortMemThreshold = pItem->i32;
8,874✔
1985

1986
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minDiskFreeSize");
8,874!
1987
  tsMinDiskFreeSize = pItem->i64;
8,874✔
1988
#ifdef USE_S3
1989
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "s3MigrateIntervalSec");
8,874!
1990
  tsS3MigrateIntervalSec = pItem->i32;
8,874✔
1991

1992
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "s3MigrateEnabled");
8,874!
1993
  tsS3MigrateEnabled = (bool)pItem->bval;
8,874✔
1994

1995
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "s3PageCacheSize");
8,874!
1996
  tsS3PageCacheSize = pItem->i32;
8,874✔
1997

1998
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "s3UploadDelaySec");
8,874!
1999
  tsS3UploadDelaySec = pItem->i32;
8,874✔
2000
#endif
2001
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "experimental");
8,874!
2002
  tsExperimental = pItem->bval;
8,874✔
2003

2004
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryUseMemoryPool");
8,874!
2005
  tsQueryUseMemoryPool = pItem->bval;
8,874✔
2006

2007
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "memPoolFullFunc");
8,874!
2008
  tsMemPoolFullFunc = pItem->bval;
8,874✔
2009

2010
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "singleQueryMaxMemorySize");
8,874!
2011
  tsSingleQueryMaxMemorySize = pItem->i32;
8,874✔
2012

2013
  // TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryBufferPoolSize");
2014
  // tsQueryBufferPoolSize = pItem->i32;
2015

2016
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minReservedMemorySize");
8,874!
2017
  tsMinReservedMemorySize = pItem->i32;
8,874✔
2018

2019
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamNotifyMessageSize");
8,874!
2020
  tsStreamNotifyMessageSize = pItem->i32;
8,874✔
2021

2022
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamNotifyFrameSize");
8,874!
2023
  tsStreamNotifyFrameSize = pItem->i32;
8,874✔
2024

2025
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "adapterFqdn");
8,874!
2026
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_FQDN_LEN));
8,874!
2027
  tstrncpy(tsAdapterFqdn, pItem->str, TSDB_FQDN_LEN);
8,874✔
2028

2029
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "adapterPort");
8,874!
2030
  tsAdapterPort = (uint16_t)pItem->i32;
8,874✔
2031

2032
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "adapterToken");
8,874!
2033
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, tListLen(tsAdapterToken)));
8,874!
2034
  tstrncpy(tsAdapterToken, pItem->str, tListLen(tsAdapterToken));
8,874✔
2035

2036
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamVirtualMergeMaxDelay");
8,874!
2037
  tsStreamVirtualMergeMaxDelayMs = pItem->i32;
8,874✔
2038

2039
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamVirtualMergeMaxMem");
8,874!
2040
  tsStreamVirtualMergeMaxMemKb = pItem->i32;
8,874✔
2041

2042
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamVirtualMergeWaitMode");
8,874!
2043
  tsStreamVirtualMergeWaitMode = pItem->i32;
8,874✔
2044

2045
  // GRANT_CFG_GET;
2046
  TAOS_RETURN(TSDB_CODE_SUCCESS);
8,874✔
2047
}
2048

2049
#ifndef TD_ENTERPRISE
2050
static int32_t taosSetReleaseCfg(SConfig *pCfg) { return 0; }
2051
#else
2052
int32_t taosSetReleaseCfg(SConfig *pCfg);
2053
#endif
2054

2055
static int32_t taosSetAllDebugFlag(SConfig *pCfg, int32_t flag);
2056

2057
static int8_t tsLogCreated = 0;
2058

2059
int32_t taosCreateLog(const char *logname, int32_t logFileNum, const char *cfgDir, const char **envCmd,
25,021✔
2060
                      const char *envFile, char *apolloUrl, SArray *pArgs, bool tsc) {
2061
  int32_t  code = TSDB_CODE_SUCCESS;
25,021✔
2062
  int32_t  lino = 0;
25,021✔
2063
  int32_t  mode = tsc ? LOG_MODE_TAOSC : LOG_MODE_TAOSD;
25,021✔
2064
  SConfig *pCfg = NULL;
25,021✔
2065

2066
  if (atomic_val_compare_exchange_8(&tsLogCreated, 0, 1) != 0) return 0;
25,021✔
2067

2068
  if (tsCfg == NULL) {
24,498!
2069
    TAOS_CHECK_GOTO(osDefaultInit(), &lino, _exit);
24,498!
2070
  }
2071

2072
  TAOS_CHECK_GOTO(cfgInit(&pCfg), &lino, _exit);
24,498!
2073

2074
#ifdef TAOSD_INTEGRATED
2075
  mode |= LOG_MODE_TAOSD;
2076
  tsLogEmbedded = 1;
2077
#else
2078
  tsLogEmbedded = (mode & LOG_MODE_TAOSC) ? 0 : 1;
24,498✔
2079
#endif
2080
  TAOS_CHECK_GOTO(taosAddClientLogCfg(pCfg), &lino, _exit);
24,498!
2081
  if (mode & LOG_MODE_TAOSD) {
24,498✔
2082
    TAOS_CHECK_GOTO(taosAddServerLogCfg(pCfg), &lino, _exit);
6,385!
2083
  }
2084

2085
  if ((code = taosLoadCfg(pCfg, envCmd, cfgDir, envFile, apolloUrl)) != TSDB_CODE_SUCCESS) {
24,498✔
2086
    (void)printf("failed to load cfg since %s\n", tstrerror(code));
2✔
2087
    goto _exit;
2✔
2088
  }
2089

2090
  if ((code = cfgLoadFromArray(pCfg, pArgs)) != TSDB_CODE_SUCCESS) {
24,496!
2091
    (void)printf("failed to load cfg from array since %s\n", tstrerror(code));
×
2092
    goto _exit;
×
2093
  }
2094

2095
  TAOS_CHECK_GOTO(taosSetClientLogCfg(pCfg), &lino, _exit);
24,496!
2096
  if (mode & LOG_MODE_TAOSD) {
24,496✔
2097
    TAOS_CHECK_GOTO(taosSetServerLogCfg(pCfg), &lino, _exit);
6,383!
2098
  }
2099

2100
  SConfigItem *pDebugItem = NULL;
24,496✔
2101
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pDebugItem, "debugFlag");
24,496!
2102
  TAOS_CHECK_GOTO(taosSetAllDebugFlag(pCfg, pDebugItem->i32), &lino, _exit);
24,496!
2103

2104
  if ((code = taosMulModeMkDir(tsLogDir, 0777, true)) != TSDB_CODE_SUCCESS) {
24,496!
2105
    (void)printf("failed to create dir:%s since %s\n", tsLogDir, tstrerror(code));
×
2106
    goto _exit;
×
2107
  }
2108

2109
  if ((code = taosInitLog(logname, logFileNum, mode)) != 0) {
24,496!
2110
    (void)printf("failed to init log file since %s\n", tstrerror(code));
×
2111
    goto _exit;
×
2112
  }
2113

2114
_exit:
24,496✔
2115
  if (TSDB_CODE_SUCCESS != code) {
24,498✔
2116
    (void)printf("failed to create log at %d since %s\n", lino, tstrerror(code));
2✔
2117
  }
2118

2119
  cfgCleanup(pCfg);
24,498✔
2120
  TAOS_RETURN(code);
24,498✔
2121
}
2122

2123
int32_t taosReadDataFolder(const char *cfgDir, const char **envCmd, const char *envFile, char *apolloUrl,
1✔
2124
                           SArray *pArgs) {
2125
  int32_t code = TSDB_CODE_SUCCESS;
1✔
2126
  int32_t lino = -1;
1✔
2127
  if (tsCfg == NULL) code = osDefaultInit();
1!
2128
  if (code != 0) {
1!
2129
    (void)printf("failed to init os since %s\n", tstrerror(code));
×
2130
  }
2131

2132
  SConfig *pCfg = NULL;
1✔
2133
  TAOS_CHECK_RETURN(cfgInit(&pCfg));
1!
2134
  TAOS_CHECK_GOTO(cfgAddDir(pCfg, "dataDir", tsDataDir, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL), &lino,
1!
2135
                  _exit);
2136
  TAOS_CHECK_GOTO(
1!
2137
      cfgAddInt32(pCfg, "debugFlag", dDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL), &lino,
2138
      _exit);
2139
  TAOS_CHECK_GOTO(
1!
2140
      cfgAddInt32(pCfg, "dDebugFlag", dDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL), &lino,
2141
      _exit);
2142

2143
  if ((code = taosLoadCfg(pCfg, envCmd, cfgDir, envFile, apolloUrl)) != 0) {
1!
2144
    (void)printf("failed to load cfg since %s\n", tstrerror(code));
×
2145
    goto _exit;
×
2146
  }
2147

2148
  if ((code = cfgLoadFromArray(pCfg, pArgs)) != 0) {
1!
2149
    (void)printf("failed to load cfg from array since %s\n", tstrerror(code));
×
2150
    goto _exit;
×
2151
  }
2152

2153
  TAOS_CHECK_GOTO(taosSetTfsCfg(pCfg), &lino, _exit);
1!
2154

2155
  SConfigItem *pItem = NULL;
1✔
2156
  if ((pItem = cfgGetItem(pCfg, "dDebugFlag")) == NULL) {
1!
2157
    code = TSDB_CODE_CFG_NOT_FOUND;
×
2158
    goto _exit;
×
2159
  }
2160

2161
  dDebugFlag = pItem->i32;
1✔
2162

2163
_exit:
1✔
2164
  cfgCleanup(pCfg);
1✔
2165
  TAOS_RETURN(code);
1✔
2166
}
2167

2168
static int32_t taosCheckGlobalCfg() {
24,496✔
2169
  SIpAddr addr = {0};
24,496✔
2170
  uInfo("check global fqdn:%s and port:%u", tsLocalFqdn, tsServerPort);
24,496!
2171
  int32_t code = taosGetIpFromFqdn(tsEnableIpv6, tsLocalFqdn, &addr);
24,496✔
2172
  if (code) {
24,496!
2173
    uError("failed to get ip from fqdn:%s since %s, can not be initialized", tsLocalFqdn, tstrerror(code));
×
2174
    TAOS_RETURN(TSDB_CODE_RPC_FQDN_ERROR);
×
2175
  }
2176

2177
  if (tsServerPort <= 0) {
24,496!
2178
    uError("invalid server port:%u, can not be initialized", tsServerPort);
×
2179
    TAOS_RETURN(TSDB_CODE_RPC_FQDN_ERROR);
×
2180
  }
2181

2182
  if (tsMqttPort <= 0 || tsMqttPort == tsServerPort) {
24,496!
2183
    uError("invalid mqtt port:%u, can not be initialized", tsMqttPort);
×
2184
    TAOS_RETURN(TSDB_CODE_RPC_FQDN_ERROR);
×
2185
  }
2186

2187
  TAOS_RETURN(TSDB_CODE_SUCCESS);
24,496✔
2188
}
2189

2190
static int32_t cfgInitWrapper(SConfig **pCfg) {
24,496✔
2191
  if (*pCfg == NULL) {
24,496!
2192
    TAOS_CHECK_RETURN(cfgInit(pCfg));
24,496!
2193
  }
2194
  TAOS_RETURN(TSDB_CODE_SUCCESS);
24,496✔
2195
}
2196

2197
int32_t setAllConfigs(SConfig *pCfg) {
2,499✔
2198
  int32_t code = 0;
2,499✔
2199
  int32_t lino = -1;
2,499✔
2200
  TAOS_CHECK_GOTO(taosSetClientCfg(tsCfg), &lino, _exit);
2,499✔
2201
  TAOS_CHECK_GOTO(taosUpdateServerCfg(tsCfg), &lino, _exit);
2,491!
2202
  TAOS_CHECK_GOTO(taosSetServerCfg(tsCfg), &lino, _exit);
2,491!
2203
  TAOS_CHECK_GOTO(taosSetReleaseCfg(tsCfg), &lino, _exit);
2,491!
2204
  TAOS_CHECK_GOTO(taosSetTfsCfg(tsCfg), &lino, _exit);
2,491!
2205
  TAOS_CHECK_GOTO(taosSetS3Cfg(tsCfg), &lino, _exit);
2,491!
2206
  TAOS_CHECK_GOTO(taosSetSystemCfg(tsCfg), &lino, _exit);
2,491!
2207
  TAOS_CHECK_GOTO(taosSetFileHandlesLimit(), &lino, _exit);
2,491!
2208
_exit:
2,491✔
2209
  TAOS_RETURN(code);
2,499✔
2210
}
2211

2212
int32_t cfgDeserialize(SArray *array, char *buf, bool isGlobal) {
2,532✔
2213
  int32_t code = TSDB_CODE_SUCCESS;
2,532✔
2214

2215
  cJSON *pRoot = cJSON_Parse(buf);
2,532✔
2216
  if (pRoot == NULL) {
2,532!
2217
    return TSDB_CODE_OUT_OF_MEMORY;
×
2218
  }
2219
  if (isGlobal) {
2,532✔
2220
    cJSON *pItem = cJSON_GetObjectItem(pRoot, "version");
1,266✔
2221
    if (pItem == NULL) {
1,266!
2222
      code = TSDB_CODE_OUT_OF_MEMORY;
×
2223
      goto _exit;
×
2224
    }
2225
    tsdmConfigVersion = pItem->valueint;
1,266✔
2226
  }
2227

2228
  int32_t sz = taosArrayGetSize(array);
2,532✔
2229
  cJSON  *configs = cJSON_GetObjectItem(pRoot, "configs");
2,532✔
2230
  if (configs == NULL) {
2,532!
2231
    code = TSDB_CODE_OUT_OF_MEMORY;
×
2232
    goto _exit;
×
2233
  }
2234
  for (int i = 0; i < sz; i++) {
293,712✔
2235
    SConfigItem *pItem = (SConfigItem *)taosArrayGet(array, i);
291,180✔
2236
    cJSON       *pJson = cJSON_GetObjectItem(configs, pItem->name);
291,180✔
2237
    if (pJson == NULL) {
291,180✔
2238
      continue;
1,266✔
2239
    }
2240
    if (strcasecmp(pItem->name, "dataDir") == 0) {
289,914✔
2241
      if (!tsDiskIDCheckEnabled) {
1,266!
2242
        continue;
1,266✔
2243
      }
2244
      int    sz = cJSON_GetArraySize(pJson);
×
2245
      cJSON *filed = NULL;
×
2246
      // check disk id for each dir
2247
      for (int j = 0; j < sz; j++) {
×
2248
        cJSON *diskCfgJson = cJSON_GetArrayItem(pJson, j);
×
2249
        if (diskCfgJson == NULL) {
×
2250
          code = TSDB_CODE_OUT_OF_MEMORY;
×
2251
          goto _exit;
×
2252
        }
2253

2254
        filed = cJSON_GetObjectItem(diskCfgJson, "dir");
×
2255
        if (filed == NULL) {
×
2256
          code = TSDB_CODE_OUT_OF_MEMORY;
×
2257
          goto _exit;
×
2258
        }
2259

2260
        char *dir = cJSON_GetStringValue(filed);
×
2261
        filed = cJSON_GetObjectItem(diskCfgJson, "disk_id");
×
2262
        if (filed == NULL) {
×
2263
          code = TSDB_CODE_OUT_OF_MEMORY;
×
2264
          goto _exit;
×
2265
        }
2266

2267
        int64_t actDiskID = 0;
×
2268
        int64_t expDiskID = taosStr2Int64(cJSON_GetStringValue(filed), NULL, 10);
×
2269
        if ((code = taosGetFileDiskID(dir, &actDiskID)) != 0) {
×
2270
          uError("failed to get disk id for dir:%s, since %s", dir, tstrerror(code));
×
2271
          goto _exit;
×
2272
        }
2273
        if (actDiskID != expDiskID) {
×
2274
          uError("failed to check disk id for dir:%s, actDiskID%" PRId64 ", expDiskID%" PRId64, dir, actDiskID,
×
2275
                 expDiskID);
2276
          code = TSDB_CODE_INVALID_DISK_ID;
×
2277
          goto _exit;
×
2278
        }
2279
      }
2280
      continue;
×
2281
    }
2282
    switch (pItem->dtype) {
288,648!
2283
      {
2284
        case CFG_DTYPE_NONE:
×
2285
          break;
×
2286
        case CFG_DTYPE_BOOL:
51,906✔
2287
          pItem->bval = cJSON_IsTrue(pJson);
51,906✔
2288
          break;
51,906✔
2289
        case CFG_DTYPE_INT32:
156,984✔
2290
          pItem->i32 = pJson->valueint;
156,984✔
2291
          break;
156,984✔
2292
        case CFG_DTYPE_INT64:
18,990✔
2293
          pItem->i64 = atoll(cJSON_GetStringValue(pJson));
18,990✔
2294
          break;
18,990✔
2295
        case CFG_DTYPE_FLOAT:
10,128✔
2296
        case CFG_DTYPE_DOUBLE:
2297
          pItem->fval = taosStr2Float(cJSON_GetStringValue(pJson), NULL);
10,128✔
2298
          break;
10,128✔
2299
        case CFG_DTYPE_STRING:
50,640✔
2300
        case CFG_DTYPE_DIR:
2301
        case CFG_DTYPE_LOCALE:
2302
        case CFG_DTYPE_CHARSET:
2303
        case CFG_DTYPE_TIMEZONE:
2304
          taosMemoryFree(pItem->str);
50,640!
2305
          pItem->str = taosStrdup(pJson->valuestring);
50,640!
2306
          if (pItem->str == NULL) {
50,640!
2307
            code = terrno;
×
2308
            goto _exit;
×
2309
          }
2310
          break;
50,640✔
2311
      }
2312
    }
2313
  }
2314
_exit:
2,532✔
2315
  if (code != TSDB_CODE_SUCCESS) {
2,532!
2316
    uError("failed to deserialize config since %s", tstrerror(code));
×
2317
  }
2318
  cJSON_Delete(pRoot);
2,532✔
2319
  return code;
2,532✔
2320
}
2321

2322
int32_t stypeConfigDeserialize(SArray *array, char *buf) {
1,266✔
2323
  int32_t code = TSDB_CODE_SUCCESS;
1,266✔
2324
  cJSON  *pRoot = cJSON_Parse(buf);
1,266✔
2325
  if (pRoot == NULL) {
1,266!
2326
    return TSDB_CODE_OUT_OF_MEMORY;
×
2327
  }
2328
  cJSON *stypes = cJSON_GetObjectItem(pRoot, "config_stypes");
1,266✔
2329
  if (stypes == NULL) {
1,266!
2330
    code = TSDB_CODE_OUT_OF_MEMORY;
×
2331
    goto _exit;
×
2332
  }
2333
  int32_t sz = taosArrayGetSize(array);
1,266✔
2334
  for (int i = 0; i < sz; i++) {
174,708✔
2335
    SConfigItem *pItem = (SConfigItem *)taosArrayGet(array, i);
173,442✔
2336
    cJSON       *pJson = cJSON_GetObjectItem(stypes, pItem->name);
173,442✔
2337
    if (pJson == NULL) {
173,442!
2338
      continue;
×
2339
    }
2340
    pItem->stype = pJson->valueint;
173,442✔
2341
  }
2342
  cJSON_Delete(pRoot);
1,266✔
2343
_exit:
1,266✔
2344
  return code;
1,266✔
2345
}
2346

2347
int32_t readStypeConfigFile(const char *path) {
6,383✔
2348
  int32_t   code = 0;
6,383✔
2349
  char      filename[CONFIG_FILE_LEN] = {0};
6,383✔
2350
  SArray   *array = NULL;
6,383✔
2351
  char     *buf = NULL;
6,383✔
2352
  TdFilePtr pFile = NULL;
6,383✔
2353

2354
  array = taosGetLocalCfg(tsCfg);
6,383✔
2355
  if (array == NULL) {
6,383!
2356
    code = TSDB_CODE_OUT_OF_MEMORY;
×
2357
    goto _exit;
×
2358
  }
2359

2360
  snprintf(filename, sizeof(filename), "%s%sdnode%sconfig%sstype.json", path, TD_DIRSEP, TD_DIRSEP, TD_DIRSEP);
6,383✔
2361
  uInfo("start to read stype config file:%s", filename);
6,383!
2362
  if (!taosCheckExistFile(filename)) {
6,383✔
2363
    uInfo("stype config file:%s does not exist", filename);
5,117!
2364
    goto _exit;
5,117✔
2365
  }
2366
  int64_t fileSize = 0;
1,266✔
2367
  if (taosStatFile(filename, &fileSize, NULL, NULL) < 0) {
1,266!
2368
    code = terrno;
×
2369
    goto _exit;
×
2370
  }
2371
  buf = (char *)taosMemoryMalloc(fileSize + 1);
1,266!
2372
  if (buf == NULL) {
1,266!
2373
    code = terrno;
×
2374
    goto _exit;
×
2375
  }
2376
  pFile = taosOpenFile(filename, TD_FILE_READ);
1,266✔
2377
  if (pFile == NULL) {
1,266!
2378
    code = terrno;
×
2379
    goto _exit;
×
2380
  }
2381
  if (taosReadFile(pFile, buf, fileSize) != fileSize) {
1,266!
2382
    code = terrno;
×
2383
    goto _exit;
×
2384
  }
2385
  buf[fileSize] = '\0';
1,266✔
2386

2387
  code = stypeConfigDeserialize(array, buf);
1,266✔
2388
  if (code != TSDB_CODE_SUCCESS) {
1,266!
2389
    uError("failed to deserialize stype config file:%s since %s", filename, tstrerror(code));
×
2390
    goto _exit;
×
2391
  }
2392

2393
_exit:
1,266✔
2394
  if (code != TSDB_CODE_SUCCESS) {
6,383!
2395
    uError("failed to read stype config file:%s since %s", filename, tstrerror(code));
×
2396
  }
2397
  taosMemoryFree(buf);
6,383!
2398
  (void)taosCloseFile(&pFile);
6,383✔
2399
  TAOS_RETURN(code);
6,383✔
2400
}
2401

2402
int32_t readCfgFile(const char *path, bool isGlobal) {
12,766✔
2403
  int32_t code = 0;
12,766✔
2404
  char    filename[CONFIG_FILE_LEN] = {0};
12,766✔
2405
  SArray *array = NULL;
12,766✔
2406
  if (isGlobal) {
12,766✔
2407
    array = taosGetGlobalCfg(tsCfg);
6,383✔
2408
    snprintf(filename, sizeof(filename), "%s%sdnode%sconfig%sglobal.json", path, TD_DIRSEP, TD_DIRSEP, TD_DIRSEP);
6,383✔
2409
  } else {
2410
    array = taosGetLocalCfg(tsCfg);
6,383✔
2411
    snprintf(filename, sizeof(filename), "%s%sdnode%sconfig%slocal.json", path, TD_DIRSEP, TD_DIRSEP, TD_DIRSEP);
6,383✔
2412
  }
2413
  uInfo("start to read config file:%s", filename);
12,766!
2414

2415
  if (!taosCheckExistFile(filename)) {
12,766✔
2416
    uInfo("config file:%s does not exist", filename);
10,234!
2417
    TAOS_RETURN(TSDB_CODE_SUCCESS);
10,234✔
2418
  }
2419
  int64_t fileSize = 0;
2,532✔
2420
  char   *buf = NULL;
2,532✔
2421
  if (taosStatFile(filename, &fileSize, NULL, NULL) < 0) {
2,532!
2422
    code = terrno;
×
2423
    uError("failed to stat file:%s , since %s", filename, tstrerror(code));
×
2424
    TAOS_RETURN(code);
×
2425
  }
2426
  if (fileSize == 0) {
2,532!
2427
    uInfo("config file:%s is empty", filename);
×
2428
    TAOS_RETURN(TSDB_CODE_SUCCESS);
×
2429
  }
2430
  TdFilePtr pFile = taosOpenFile(filename, TD_FILE_READ);
2,532✔
2431
  if (pFile == NULL) {
2,532!
2432
    code = terrno;
×
2433
    uError("failed to open file:%s , since %s", filename, tstrerror(code));
×
2434
    goto _exit;
×
2435
  }
2436
  buf = (char *)taosMemoryMalloc(fileSize + 1);
2,532!
2437
  if (buf == NULL) {
2,532!
2438
    code = terrno;
×
2439
    uError("failed to malloc memory for file:%s , since %s", filename, tstrerror(code));
×
2440
    goto _exit;
×
2441
  }
2442
  if (taosReadFile(pFile, buf, fileSize) != fileSize) {
2,532!
2443
    code = terrno;
×
2444
    uError("failed to read file:%s , config since %s", filename, tstrerror(code));
×
2445
    goto _exit;
×
2446
  }
2447
  buf[fileSize] = '\0';  // 添加字符串结束符
2,532✔
2448
  code = cfgDeserialize(array, buf, isGlobal);
2,532✔
2449
  if (code != TSDB_CODE_SUCCESS) {
2,532!
2450
    uError("failed to deserialize config from %s since %s", filename, tstrerror(code));
×
2451
    goto _exit;
×
2452
  }
2453

2454
_exit:
2,532✔
2455
  if (code != TSDB_CODE_SUCCESS) {
2,532!
2456
    uError("failed to read config from %s since %s", filename, tstrerror(code));
×
2457
  }
2458
  taosMemoryFree(buf);
2,532!
2459
  (void)taosCloseFile(&pFile);
2,532✔
2460
  TAOS_RETURN(code);
2,532✔
2461
}
2462

2463
int32_t tryLoadCfgFromDataDir(SConfig *pCfg) {
6,383✔
2464
  int32_t      code = 0;
6,383✔
2465
  SConfigItem *pItem = NULL;
6,383✔
2466
  TAOS_CHECK_GET_CFG_ITEM(tsCfg, pItem, "forceReadConfig");
6,383!
2467
  tsForceReadConfig = pItem->i32;
6,383✔
2468
  code = readCfgFile(tsDataDir, true);
6,383✔
2469
  if (code != TSDB_CODE_SUCCESS) {
6,383!
2470
    uError("failed to read global config from %s since %s", tsDataDir, tstrerror(code));
×
2471
    TAOS_RETURN(code);
×
2472
  }
2473
  if (!tsForceReadConfig) {
6,383!
2474
    uInfo("load config from tsDataDir:%s", tsDataDir);
6,383!
2475
    code = readCfgFile(tsDataDir, false);
6,383✔
2476
    if (code != TSDB_CODE_SUCCESS) {
6,383!
2477
      uError("failed to read local config from %s since %s", tsDataDir, tstrerror(code));
×
2478
      TAOS_RETURN(code);
×
2479
    }
2480
    code = readStypeConfigFile(tsDataDir);
6,383✔
2481
    if (code != TSDB_CODE_SUCCESS) {
6,383!
2482
      uError("failed to read stype config from %s since %s", tsDataDir, tstrerror(code));
×
2483
      TAOS_RETURN(code);
×
2484
    }
2485
  }
2486
  TAOS_RETURN(code);
6,383✔
2487
}
2488

2489
int32_t taosInitCfg(const char *cfgDir, const char **envCmd, const char *envFile, char *apolloUrl, SArray *pArgs,
25,019✔
2490
                    bool tsc) {
2491
  if (tsCfg != NULL) TAOS_RETURN(TSDB_CODE_SUCCESS);
25,019✔
2492

2493
  int32_t code = TSDB_CODE_SUCCESS;
24,496✔
2494
  int32_t lino = -1;
24,496✔
2495

2496
  TAOS_CHECK_GOTO(cfgInitWrapper(&tsCfg), &lino, _exit);
24,496!
2497

2498
  if (tsc) {
24,496✔
2499
    TAOS_CHECK_GOTO(taosAddClientCfg(tsCfg), &lino, _exit);
18,113!
2500
    TAOS_CHECK_GOTO(taosAddClientLogCfg(tsCfg), &lino, _exit);
18,113!
2501
  } else {
2502
    TAOS_CHECK_GOTO(taosAddClientCfg(tsCfg), &lino, _exit);
6,383!
2503
    TAOS_CHECK_GOTO(taosAddServerCfg(tsCfg), &lino, _exit);
6,383!
2504
    TAOS_CHECK_GOTO(taosAddClientLogCfg(tsCfg), &lino, _exit);
6,383!
2505
    TAOS_CHECK_GOTO(taosAddServerLogCfg(tsCfg), &lino, _exit);
6,383!
2506
  }
2507

2508
  TAOS_CHECK_GOTO(taosAddSystemCfg(tsCfg), &lino, _exit);
24,496!
2509

2510
  if ((code = taosLoadCfg(tsCfg, envCmd, cfgDir, envFile, apolloUrl)) != 0) {
24,496!
2511
    (void)printf("failed to load cfg since %s\n", tstrerror(code));
×
2512
    cfgCleanup(tsCfg);
×
2513
    tsCfg = NULL;
×
2514
    TAOS_RETURN(code);
×
2515
  }
2516

2517
  if ((code = cfgLoadFromArray(tsCfg, pArgs)) != 0) {
24,496!
2518
    (void)printf("failed to load cfg from array since %s\n", tstrerror(code));
×
2519
    cfgCleanup(tsCfg);
×
2520
    tsCfg = NULL;
×
2521
    TAOS_RETURN(code);
×
2522
  }
2523

2524
  if (!tsc) {
24,496✔
2525
    TAOS_CHECK_GOTO(taosSetTfsCfg(tsCfg), &lino, _exit);
6,383!
2526
    TAOS_CHECK_GOTO(tryLoadCfgFromDataDir(tsCfg), &lino, _exit);
6,383!
2527
  }
2528

2529
  if (tsc) {
24,496✔
2530
    TAOS_CHECK_GOTO(taosSetClientLogCfg(tsCfg), &lino, _exit);
18,113!
2531
    TAOS_CHECK_GOTO(taosSetClientCfg(tsCfg), &lino, _exit);
18,113!
2532
  } else {
2533
    TAOS_CHECK_GOTO(taosSetClientLogCfg(tsCfg), &lino, _exit);
6,383!
2534
    TAOS_CHECK_GOTO(taosSetClientCfg(tsCfg), &lino, _exit);
6,383!
2535
    TAOS_CHECK_GOTO(taosUpdateServerCfg(tsCfg), &lino, _exit);
6,383!
2536
    TAOS_CHECK_GOTO(taosSetServerCfg(tsCfg), &lino, _exit);
6,383!
2537
    TAOS_CHECK_GOTO(taosSetReleaseCfg(tsCfg), &lino, _exit);
6,383!
2538
    TAOS_CHECK_GOTO(taosSetS3Cfg(tsCfg), &lino, _exit);
6,383!
2539
  }
2540

2541
  TAOS_CHECK_GOTO(taosSetSystemCfg(tsCfg), &lino, _exit);
24,496!
2542
  TAOS_CHECK_GOTO(taosSetFileHandlesLimit(), &lino, _exit);
24,496!
2543

2544
  SConfigItem *pItem = cfgGetItem(tsCfg, "debugFlag");
24,496✔
2545
  if (NULL == pItem) {
24,496!
2546
    (void)printf("debugFlag not found in cfg\n");
×
2547
    TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND);
×
2548
  }
2549
  TAOS_CHECK_GOTO(taosSetAllDebugFlag(tsCfg, pItem->i32), &lino, _exit);
24,496!
2550

2551
  cfgDumpCfg(tsCfg, tsc, false);
24,496✔
2552
  TAOS_CHECK_GOTO(taosCheckGlobalCfg(), &lino, _exit);
24,496!
2553

2554
_exit:
24,496✔
2555
  if (TSDB_CODE_SUCCESS != code) {
24,496!
2556
    cfgCleanup(tsCfg);
×
2557
    tsCfg = NULL;
×
2558
    (void)printf("failed to init cfg at %d since %s\n", lino, tstrerror(code));
×
2559
  }
2560

2561
  TAOS_RETURN(code);
24,496✔
2562
}
2563

2564
void taosCleanupCfg() {
24,502✔
2565
  if (tsCfg) {
24,502!
2566
    cfgCleanup(tsCfg);
24,502✔
2567
    tsCfg = NULL;
24,502✔
2568
  }
2569
}
24,502✔
2570

2571
typedef struct {
2572
  const char *optionName;
2573
  void       *optionVar;
2574
} OptionNameAndVar;
2575

2576
static int32_t taosCfgSetOption(OptionNameAndVar *pOptions, int32_t optionSize, SConfigItem *pItem, bool isDebugflag) {
5,886✔
2577
  int32_t code = TSDB_CODE_CFG_NOT_FOUND;
5,886✔
2578
  char   *name = pItem->name;
5,886✔
2579
  for (int32_t d = 0; d < optionSize; ++d) {
89,948✔
2580
    const char *optName = pOptions[d].optionName;
87,041✔
2581
    if (taosStrcasecmp(name, optName) != 0) continue;
87,041✔
2582
    code = TSDB_CODE_SUCCESS;
2,979✔
2583
    switch (pItem->dtype) {
2,979!
2584
      case CFG_DTYPE_BOOL: {
149✔
2585
        int32_t flag = pItem->i32;
149✔
2586
        bool   *pVar = pOptions[d].optionVar;
149✔
2587
        uInfo("%s set from %d to %d", optName, *pVar, flag);
149!
2588
        *pVar = flag;
149✔
2589
      } break;
149✔
2590
      case CFG_DTYPE_INT32: {
2,774✔
2591
        int32_t  flag = pItem->i32;
2,774✔
2592
        int32_t *pVar = pOptions[d].optionVar;
2,774✔
2593
        uInfo("%s set from %d to %d", optName, *pVar, flag);
2,774!
2594
        *pVar = flag;
2,774✔
2595

2596
        if (isDebugflag) {
2,774✔
2597
          TAOS_CHECK_RETURN(taosSetDebugFlag(pOptions[d].optionVar, optName, flag));
72!
2598
        }
2599
      } break;
2,774✔
2600
      case CFG_DTYPE_INT64: {
44✔
2601
        int64_t  flag = pItem->i64;
44✔
2602
        int64_t *pVar = pOptions[d].optionVar;
44✔
2603
        uInfo("%s set from %" PRId64 " to %" PRId64, optName, *pVar, flag);
44!
2604
        *pVar = flag;
44✔
2605
      } break;
44✔
2606
      case CFG_DTYPE_FLOAT:
12✔
2607
      case CFG_DTYPE_DOUBLE: {
2608
        float  flag = pItem->fval;
12✔
2609
        float *pVar = pOptions[d].optionVar;
12✔
2610
        uInfo("%s set from %f to %f", optName, *pVar, flag);
12!
2611
        *pVar = flag;
12✔
2612
      } break;
12✔
2613
      case CFG_DTYPE_STRING:
×
2614
      case CFG_DTYPE_DIR:
2615
      case CFG_DTYPE_LOCALE:
2616
      case CFG_DTYPE_CHARSET:
2617
      case CFG_DTYPE_TIMEZONE: {
2618
        if (strcasecmp(pItem->name, "slowLogExceptDb") == 0) {
×
2619
          TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_DB_NAME_LEN));
×
2620
          tstrncpy(tsSlowLogExceptDb, pItem->str, TSDB_DB_NAME_LEN);
×
2621
        } else {
2622
          uError("not support string type for %s", optName);
×
2623
          code = TSDB_CODE_INVALID_CFG;
×
2624
          break;
×
2625
        }
2626
        uInfo("%s set to %s", optName, pItem->str);
×
2627
      } break;
×
2628
      default:
×
2629
        code = TSDB_CODE_INVALID_CFG;
×
2630
        break;
×
2631
    }
2632

2633
    break;
2,979✔
2634
  }
2635

2636
  TAOS_RETURN(code);
5,886✔
2637
}
2638

2639
extern void tsdbAlterNumCompactThreads();
2640

2641
static int32_t taosCfgDynamicOptionsForServer(SConfig *pCfg, const char *name) {
1,399✔
2642
  int32_t code = TSDB_CODE_SUCCESS;
1,399✔
2643
  int32_t lino = -1;
1,399✔
2644

2645
  if (strcasecmp("timezone", name) == 0) {
1,399!
2646
    TAOS_RETURN(TSDB_CODE_SUCCESS);
×
2647
  }
2648

2649
  if (strcasecmp(name, "resetlog") == 0) {
1,399✔
2650
    // trigger, no item in cfg
2651
    taosResetLog();
2✔
2652
    cfgDumpCfg(tsCfg, 0, false);
2✔
2653
    TAOS_RETURN(TSDB_CODE_SUCCESS);
2✔
2654
  }
2655

2656
  cfgLock(pCfg);
1,397✔
2657

2658
  SConfigItem *pItem = cfgGetItem(pCfg, name);
1,397✔
2659
  if (!pItem || (pItem->dynScope == CFG_DYN_CLIENT)) {
1,397!
2660
    uError("failed to config:%s, not support", name);
×
2661
    code = TSDB_CODE_INVALID_CFG;
×
2662
    goto _exit;
×
2663
  }
2664

2665
  if (strncasecmp(name, "debugFlag", 9) == 0) {
1,397✔
2666
    code = taosSetAllDebugFlag(pCfg, pItem->i32);
10✔
2667
    goto _exit;
10✔
2668
  }
2669

2670
  if (strncasecmp(name, "enableCoreFile", 9) == 0) {
1,387!
2671
    tsEnableCoreFile = pItem->bval;
×
2672
    taosSetCoreDump(tsEnableCoreFile);
×
2673
    uInfo("%s set to %d", name, tsEnableCoreFile);
×
2674
    goto _exit;
×
2675
  }
2676

2677
  if (strcasecmp("slowLogScope", name) == 0) {
1,387✔
2678
    int32_t scope = 0;
751✔
2679
    TAOS_CHECK_GOTO(taosSetSlowLogScope(pItem->str, &scope), &lino, _exit);
751!
2680
    tsSlowLogScope = scope;
751✔
2681
    code = TSDB_CODE_SUCCESS;
751✔
2682
    goto _exit;
751✔
2683
  }
2684

2685
  if (strcasecmp("slowLogExceptDb", name) == 0) {
636✔
2686
    tstrncpy(tsSlowLogExceptDb, pItem->str, TSDB_DB_NAME_LEN);
6✔
2687
    code = TSDB_CODE_SUCCESS;
6✔
2688
    goto _exit;
6✔
2689
  }
2690
  if (strcasecmp(name, "dataDir") == 0) {
630!
2691
    code = TSDB_CODE_SUCCESS;
×
2692
    goto _exit;
×
2693
  }
2694
  if (strcasecmp("rpcQueueMemoryAllowed", name) == 0) {
630✔
2695
    tsQueueMemoryAllowed = cfgGetItem(pCfg, "rpcQueueMemoryAllowed")->i64 * QUEUE_MEMORY_USAGE_RATIO;
6✔
2696
    tsApplyMemoryAllowed = cfgGetItem(pCfg, "rpcQueueMemoryAllowed")->i64 * (1 - QUEUE_MEMORY_USAGE_RATIO);
6✔
2697
    code = TSDB_CODE_SUCCESS;
6✔
2698
    goto _exit;
6✔
2699
  }
2700

2701
  if (strcasecmp(name, "numOfCompactThreads") == 0) {
624!
2702
#ifdef TD_ENTERPRISE
2703
    tsNumOfCompactThreads = pItem->i32;
×
2704
    code = TSDB_CODE_SUCCESS;
×
2705
    // tsdbAlterNumCompactThreads();
2706
#else
2707
    code = TSDB_CODE_INVALID_CFG;
2708
#endif
2709
    goto _exit;
×
2710
  }
2711

2712
  if (strcasecmp(name, "minReservedMemorySize") == 0) {
624!
2713
    tsMinReservedMemorySize = pItem->i32;
×
2714
    code = taosMemoryPoolCfgUpdateReservedSize(tsMinReservedMemorySize);
×
2715
    goto _exit;
×
2716
  }
2717

2718
  {  //  'bool/int32_t/int64_t/float/double' variables with general modification function
2719
    static OptionNameAndVar debugOptions[] = {
2720
        {"dDebugFlag", &dDebugFlag},       {"vDebugFlag", &vDebugFlag},
2721
        {"mDebugFlag", &mDebugFlag},       {"wDebugFlag", &wDebugFlag},
2722
        {"azDebugFlag", &azDebugFlag},     {"sDebugFlag", &sDebugFlag},
2723
        {"tsdbDebugFlag", &tsdbDebugFlag}, {"tqDebugFlag", &tqDebugFlag},
2724
        {"fsDebugFlag", &fsDebugFlag},     {"udfDebugFlag", &udfDebugFlag},
2725
        {"smaDebugFlag", &smaDebugFlag},   {"idxDebugFlag", &idxDebugFlag},
2726
        {"tdbDebugFlag", &tdbDebugFlag},   {"tmrDebugFlag", &tmrDebugFlag},
2727
        {"uDebugFlag", &uDebugFlag},       {"smaDebugFlag", &smaDebugFlag},
2728
        {"rpcDebugFlag", &rpcDebugFlag},   {"qDebugFlag", &qDebugFlag},
2729
        {"metaDebugFlag", &metaDebugFlag}, {"stDebugFlag", &stDebugFlag},
2730
        {"sndDebugFlag", &sndDebugFlag},   {"bndDebugFlag", &bndDebugFlag},
2731
        {"tqClientDebugFlag", &tqClientDebugFlag},
2732
    };
2733

2734
    static OptionNameAndVar options[] = {{"audit", &tsEnableAudit},
2735
                                         {"asynclog", &tsAsyncLog},
2736
                                         {"disableStream", &tsDisableStream},
2737
                                         {"enableWhiteList", &tsEnableWhiteList},
2738
                                         {"statusInterval", &tsStatusInterval},
2739
                                         {"telemetryReporting", &tsEnableTelem},
2740
                                         {"monitor", &tsEnableMonitor},
2741
                                         {"monitorInterval", &tsMonitorInterval},
2742
                                         {"monitorComp", &tsMonitorComp},
2743
                                         {"monitorForceV2", &tsMonitorForceV2},
2744
                                         {"monitorLogProtocol", &tsMonitorLogProtocol},
2745
                                         {"monitorMaxLogs", &tsMonitorMaxLogs},
2746
                                         {"auditCreateTable", &tsEnableAuditCreateTable},
2747
                                         {"auditInterval", &tsAuditInterval},
2748
                                         {"slowLogThreshold", &tsSlowLogThreshold},
2749
                                         {"compressMsgSize", &tsCompressMsgSize},
2750
                                         {"compressor", &tsCompressor},
2751
                                         {"dPrecision", &tsDPrecision},
2752
                                         {"fPrecision", &tsFPrecision},
2753
                                         {"maxRange", &tsMaxRange},
2754
                                         {"maxTsmaNum", &tsMaxTsmaNum},
2755
                                         {"queryRsmaTolerance", &tsQueryRsmaTolerance},
2756
                                         {"uptimeInterval", &tsUptimeInterval},
2757

2758
                                         {"slowLogMaxLen", &tsSlowLogMaxLen},
2759
                                         {"slowLogScope", &tsSlowLogScope},
2760
                                         {"slowLogExceptDb", &tsSlowLogExceptDb},
2761

2762
                                         {"mndSdbWriteDelta", &tsMndSdbWriteDelta},
2763
                                         {"minDiskFreeSize", &tsMinDiskFreeSize},
2764
                                         {"randErrorChance", &tsRandErrChance},
2765
                                         {"randErrorDivisor", &tsRandErrDivisor},
2766
                                         {"randErrorScope", &tsRandErrScope},
2767
                                         {"syncLogBufferMemoryAllowed", &tsLogBufferMemoryAllowed},
2768
                                         {"syncHeartbeatInterval", &tsHeartbeatInterval},
2769
                                         {"syncHeartbeatTimeout", &tsHeartbeatTimeout},
2770
                                         {"syncSnapReplMaxWaitN", &tsSnapReplMaxWaitN},
2771
                                         {"syncRoutineReportInterval", &tsRoutineReportInterval},
2772
                                         {"syncLogHeartbeat", &tsSyncLogHeartbeat},
2773
                                         {"walFsyncDataSizeLimit", &tsWalFsyncDataSizeLimit},
2774

2775
                                         {"numOfCores", &tsNumOfCores},
2776

2777
                                         {"enableCoreFile", &tsEnableCoreFile},
2778

2779
                                         {"telemetryInterval", &tsTelemInterval},
2780

2781
                                         {"cacheLazyLoadThreshold", &tsCacheLazyLoadThreshold},
2782
                                         {"checkpointInterval", &tsStreamCheckpointInterval},
2783
                                         {"concurrentCheckpoint", &tsMaxConcurrentCheckpoint},
2784

2785
                                         {"retentionSpeedLimitMB", &tsRetentionSpeedLimitMB},
2786
                                         {"ttlChangeOnWrite", &tsTtlChangeOnWrite},
2787

2788
                                         {"logKeepDays", &tsLogKeepDays},
2789
                                         {"maxStreamBackendCache", &tsMaxStreamBackendCache},
2790
                                         {"mqRebalanceInterval", &tsMqRebalanceInterval},
2791
                                         {"numOfLogLines", &tsNumOfLogLines},
2792
                                         {"queryRspPolicy", &tsQueryRspPolicy},
2793
                                         {"timeseriesThreshold", &tsTimeSeriesThreshold},
2794
                                         {"tmqMaxTopicNum", &tmqMaxTopicNum},
2795
                                         {"tmqRowSize", &tmqRowSize},
2796
                                         {"transPullupInterval", &tsTransPullupInterval},
2797
                                         {"compactPullupInterval", &tsCompactPullupInterval},
2798
                                         {"trimVDbIntervalSec", &tsTrimVDbIntervalSec},
2799
                                         {"ttlBatchDropNum", &tsTtlBatchDropNum},
2800
                                         {"ttlFlushThreshold", &tsTtlFlushThreshold},
2801
                                         {"ttlPushInterval", &tsTtlPushIntervalSec},
2802
                                         {"ttlUnit", &tsTtlUnit},
2803
                                         {"s3MigrateIntervalSec", &tsS3MigrateIntervalSec},
2804
                                         {"s3MigrateEnabled", &tsS3MigrateEnabled},
2805
                                         //{"s3BlockSize", &tsS3BlockSize},
2806
                                         {"s3BlockCacheSize", &tsS3BlockCacheSize},
2807
                                         {"s3PageCacheSize", &tsS3PageCacheSize},
2808
                                         {"s3UploadDelaySec", &tsS3UploadDelaySec},
2809
                                         {"mndLogRetention", &tsMndLogRetention},
2810
                                         {"supportVnodes", &tsNumOfSupportVnodes},
2811
                                         {"experimental", &tsExperimental},
2812

2813
                                         {"numOfRpcSessions", &tsNumOfRpcSessions},
2814
                                         {"shellActivityTimer", &tsShellActivityTimer},
2815
                                         {"readTimeout", &tsReadTimeout},
2816
                                         {"safetyCheckLevel", &tsSafetyCheckLevel},
2817
                                         {"bypassFlag", &tsBypassFlag},
2818
                                         {"arbHeartBeatIntervalSec", &tsArbHeartBeatIntervalSec},
2819
                                         {"arbCheckSyncIntervalSec", &tsArbCheckSyncIntervalSec},
2820
                                         {"arbSetAssignedTimeoutSec", &tsArbSetAssignedTimeoutSec},
2821
                                         {"queryNoFetchTimeoutSec", &tsQueryNoFetchTimeoutSec},
2822
                                         {"enableStrongPassword", &tsEnableStrongPassword},
2823
                                         {"enableMetrics", &tsEnableMetrics},
2824
                                         {"metricsInterval", &tsMetricsInterval},
2825
                                         {"metricsLevel", &tsMetricsLevel},
2826
                                         {"forceKillTrans", &tsForceKillTrans}};
2827

2828
    if ((code = taosCfgSetOption(debugOptions, tListLen(debugOptions), pItem, true)) != TSDB_CODE_SUCCESS) {
624✔
2829
      code = taosCfgSetOption(options, tListLen(options), pItem, false);
552✔
2830
    }
2831
  }
2832

2833
_exit:
72✔
2834
  cfgUnLock(pCfg);
1,397✔
2835
  TAOS_RETURN(code);
1,397✔
2836
}
2837

2838
static int32_t taosCfgDynamicOptionsForClient(SConfig *pCfg, const char *name) {
2,375✔
2839
  int32_t code = TSDB_CODE_SUCCESS;
2,375✔
2840
  int32_t lino = 0;
2,375✔
2841

2842
  if (strcasecmp("charset", name) == 0 || strcasecmp("timezone", name) == 0) {
2,375!
2843
    TAOS_RETURN(TSDB_CODE_SUCCESS);
3✔
2844
  }
2845

2846
  cfgLock(pCfg);
2,372✔
2847

2848
  SConfigItem *pItem = cfgGetItem(pCfg, name);
2,372✔
2849
  if ((pItem == NULL) || pItem->dynScope == CFG_DYN_SERVER) {
2,372!
2850
    uError("failed to config:%s, not support", name);
×
2851
    code = TSDB_CODE_INVALID_CFG;
×
2852
    goto _out;
×
2853
  }
2854

2855
  bool matched = false;
2,372✔
2856

2857
  int32_t len = strlen(name);
2,372✔
2858
  char    lowcaseName[CFG_NAME_MAX_LEN + 1] = {0};
2,372✔
2859
  (void)strntolower(lowcaseName, name, TMIN(CFG_NAME_MAX_LEN, len));
2,372✔
2860

2861
  switch (lowcaseName[0]) {
2,372✔
2862
    case 'd': {
5✔
2863
      if (strcasecmp("debugFlag", name) == 0) {
5!
2864
        code = taosSetAllDebugFlag(pCfg, pItem->i32);
5✔
2865
        matched = true;
5✔
2866
      }
2867
      break;
5✔
2868
    }
2869
    case 'e': {
2✔
2870
      if (strcasecmp("enableCoreFile", name) == 0) {
2!
2871
        tsEnableCoreFile = pItem->bval;
×
2872
        taosSetCoreDump(tsEnableCoreFile);
×
2873
        uInfo("%s set to %d", name, tsEnableCoreFile);
×
2874
        matched = true;
×
2875
      }
2876
      break;
2✔
2877
    }
2878
    case 'f': {
2✔
2879
      if (strcasecmp("fqdn", name) == 0) {
2✔
2880
        SConfigItem *pFqdnItem = cfgGetItem(pCfg, "fqdn");
1✔
2881
        SConfigItem *pServerPortItem = cfgGetItem(pCfg, "serverPort");
1✔
2882
        SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp");
1✔
2883
        if (pFqdnItem == NULL || pServerPortItem == NULL || pFirstEpItem == NULL) {
1!
2884
          uError("failed to get fqdn or serverPort or firstEp from cfg");
×
2885
          code = TSDB_CODE_CFG_NOT_FOUND;
×
2886
          goto _out;
×
2887
        }
2888

2889
        tstrncpy(tsLocalFqdn, pFqdnItem->str, TSDB_FQDN_LEN);
1✔
2890
        tsServerPort = (uint16_t)pServerPortItem->i32;
1✔
2891
        (void)snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
1✔
2892

2893
        char defaultFirstEp[TSDB_EP_LEN] = {0};
1✔
2894
        (void)snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort);
1✔
2895

2896
        SEp firstEp = {0};
1✔
2897
        TAOS_CHECK_GOTO(
1!
2898
            taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp), &lino,
2899
            _out);
2900
        (void)snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port);
1✔
2901

2902
        TAOS_CHECK_GOTO(cfgSetItem(pCfg, "firstEp", tsFirst, pFirstEpItem->stype, false), &lino, _out);
1!
2903
        uInfo("localEp set to '%s', tsFirst set to '%s'", tsLocalEp, tsFirst);
1!
2904
        matched = true;
1✔
2905
      } else if (strcasecmp("firstEp", name) == 0) {
1!
2906
        SConfigItem *pFqdnItem = cfgGetItem(pCfg, "fqdn");
1✔
2907
        SConfigItem *pServerPortItem = cfgGetItem(pCfg, "serverPort");
1✔
2908
        SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp");
1✔
2909
        if (pFqdnItem == NULL || pServerPortItem == NULL || pFirstEpItem == NULL) {
1!
2910
          uError("failed to get fqdn or serverPort or firstEp from cfg");
×
2911
          code = TSDB_CODE_CFG_NOT_FOUND;
×
2912
          goto _out;
×
2913
        }
2914

2915
        tstrncpy(tsLocalFqdn, pFqdnItem->str, TSDB_FQDN_LEN);
1✔
2916
        tsServerPort = (uint16_t)pServerPortItem->i32;
1✔
2917
        (void)snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
1✔
2918

2919
        char defaultFirstEp[TSDB_EP_LEN] = {0};
1✔
2920
        (void)snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort);
1✔
2921

2922
        SEp firstEp = {0};
1✔
2923
        TAOS_CHECK_GOTO(
1!
2924
            taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp), &lino,
2925
            _out);
2926
        (void)snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port);
1✔
2927

2928
        TAOS_CHECK_GOTO(cfgSetItem(pCfg, "firstEp", tsFirst, pFirstEpItem->stype, false), &lino, _out);
1!
2929
        uInfo("localEp set to '%s', tsFirst set to '%s'", tsLocalEp, tsFirst);
1!
2930
        matched = true;
1✔
2931
      }
2932
      break;
2✔
2933
    }
2934
    case 'l': {
2✔
2935
      if (strcasecmp("locale", name) == 0) {
2!
2936
        SConfigItem *pLocaleItem = cfgGetItem(pCfg, "locale");
×
2937
        if (pLocaleItem == NULL) {
×
2938
          uError("failed to get locale from cfg");
×
2939
          code = TSDB_CODE_CFG_NOT_FOUND;
×
2940
          goto _out;
×
2941
        }
2942

2943
        const char *locale = pLocaleItem->str;
×
2944
        TAOS_CHECK_GOTO(taosSetSystemLocale(locale), &lino, _out);
×
2945
        uInfo("locale set to '%s'", locale);
×
2946
        matched = true;
×
2947
      }
2948
      break;
2✔
2949
    }
2950
    case 'm': {
12✔
2951
      if (strcasecmp("metaCacheMaxSize", name) == 0) {
12✔
2952
        atomic_store_32(&tsMetaCacheMaxSize, pItem->i32);
1✔
2953
        uInfo("%s set to %d", name, atomic_load_32(&tsMetaCacheMaxSize));
1!
2954
        matched = true;
1✔
2955
      } else if (strcasecmp("minimalTmpDirGB", name) == 0) {
11✔
2956
        tsTempSpace.reserved = (int64_t)(((double)pItem->fval) * 1024 * 1024 * 1024);
2✔
2957
        uInfo("%s set to %" PRId64, name, tsTempSpace.reserved);
2!
2958
        matched = true;
2✔
2959
      } else if (strcasecmp("minimalLogDirGB", name) == 0) {
9✔
2960
        tsLogSpace.reserved = (int64_t)(((double)pItem->fval) * 1024 * 1024 * 1024);
1✔
2961
        uInfo("%s set to %" PRId64, name, tsLogSpace.reserved);
1!
2962
        matched = true;
1✔
2963
      }
2964
      break;
12✔
2965
    }
2966
    case 's': {
28✔
2967
      if (strcasecmp("secondEp", name) == 0) {
28✔
2968
        SEp secondEp = {0};
1✔
2969
        TAOS_CHECK_GOTO(taosGetFqdnPortFromEp(strlen(pItem->str) == 0 ? tsFirst : pItem->str, &secondEp), &lino, _out);
1!
2970
        (void)snprintf(tsSecond, sizeof(tsSecond), "%s:%u", secondEp.fqdn, secondEp.port);
1✔
2971
        TAOS_CHECK_GOTO(cfgSetItem(pCfg, "secondEp", tsSecond, pItem->stype, false), &lino, _out);
1!
2972
        uInfo("%s set to %s", name, tsSecond);
1!
2973
        matched = true;
1✔
2974
      } else if (strcasecmp("smlChildTableName", name) == 0) {
27✔
2975
        TAOS_CHECK_GOTO(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_TABLE_NAME_LEN), &lino, _out);
1!
2976
        uInfo("%s set from %s to %s", name, tsSmlChildTableName, pItem->str);
1!
2977
        tstrncpy(tsSmlChildTableName, pItem->str, TSDB_TABLE_NAME_LEN);
1✔
2978
        matched = true;
1✔
2979
      } else if (strcasecmp("smlAutoChildTableNameDelimiter", name) == 0) {
26✔
2980
        TAOS_CHECK_GOTO(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_TABLE_NAME_LEN), &lino, _out);
1!
2981
        uInfo("%s set from %s to %s", name, tsSmlAutoChildTableNameDelimiter, pItem->str);
1!
2982
        tstrncpy(tsSmlAutoChildTableNameDelimiter, pItem->str, TSDB_TABLE_NAME_LEN);
1✔
2983
        matched = true;
1✔
2984
      } else if (strcasecmp("smlTagName", name) == 0) {
25✔
2985
        TAOS_CHECK_GOTO(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_COL_NAME_LEN), &lino, _out);
1!
2986
        uInfo("%s set from %s to %s", name, tsSmlTagName, pItem->str);
1!
2987
        tstrncpy(tsSmlTagName, pItem->str, TSDB_COL_NAME_LEN);
1✔
2988
        matched = true;
1✔
2989
      } else if (strcasecmp("smlTsDefaultName", name) == 0) {
24✔
2990
        TAOS_CHECK_GOTO(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_COL_NAME_LEN), &lino, _out);
1!
2991
        uInfo("%s set from %s to %s", name, tsSmlTsDefaultName, pItem->str);
1!
2992
        tstrncpy(tsSmlTsDefaultName, pItem->str, TSDB_COL_NAME_LEN);
1✔
2993
        matched = true;
1✔
2994
      } else if (strcasecmp("serverPort", name) == 0) {
23✔
2995
        SConfigItem *pFqdnItem = cfgGetItem(pCfg, "fqdn");
1✔
2996
        SConfigItem *pServerPortItem = cfgGetItem(pCfg, "serverPort");
1✔
2997
        SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp");
1✔
2998
        if (pFqdnItem == NULL || pServerPortItem == NULL || pFirstEpItem == NULL) {
1!
2999
          uError("failed to get fqdn or serverPort or firstEp from cfg");
×
3000
          code = TSDB_CODE_CFG_NOT_FOUND;
×
3001
          goto _out;
×
3002
        }
3003

3004
        TAOS_CHECK_GOTO(taosCheckCfgStrValueLen(pFqdnItem->name, pFqdnItem->str, TSDB_FQDN_LEN), &lino, _out);
1!
3005
        tstrncpy(tsLocalFqdn, pFqdnItem->str, TSDB_FQDN_LEN);
1✔
3006
        tsServerPort = (uint16_t)pServerPortItem->i32;
1✔
3007
        (void)snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
1✔
3008

3009
        char defaultFirstEp[TSDB_EP_LEN] = {0};
1✔
3010
        (void)snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort);
1✔
3011

3012
        SEp firstEp = {0};
1✔
3013
        TAOS_CHECK_GOTO(
1!
3014
            taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp), &lino,
3015
            _out);
3016
        (void)snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port);
1✔
3017

3018
        TAOS_CHECK_GOTO(cfgSetItem(pCfg, "firstEp", tsFirst, pFirstEpItem->stype, false), &lino, _out);
1!
3019
        uInfo("localEp set to '%s', tsFirst set to '%s'", tsLocalEp, tsFirst);
1!
3020
        matched = true;
1✔
3021
      }
3022
      break;
28✔
3023
    }
3024
    case 't': {
2✔
3025
      if (strcasecmp("tempDir", name) == 0) {
2!
3026
        TAOS_CHECK_GOTO(taosCheckCfgStrValueLen(pItem->name, pItem->str, PATH_MAX), &lino, _out);
×
3027
        uInfo("%s set from %s to %s", name, tsTempDir, pItem->str);
×
3028
        tstrncpy(tsTempDir, pItem->str, PATH_MAX);
×
3029
        TAOS_CHECK_GOTO(taosExpandDir(tsTempDir, tsTempDir, PATH_MAX), &lino, _out);
×
3030
        if (taosMulMkDir(tsTempDir) != 0) {
×
3031
          code = TAOS_SYSTEM_ERROR(ERRNO);
×
3032
          uError("failed to create tempDir:%s since %s", tsTempDir, tstrerror(code));
×
3033
          goto _out;
×
3034
        }
3035
        matched = true;
×
3036
      }
3037
      break;
2✔
3038
    }
3039
    default:
2,319✔
3040
      code = TSDB_CODE_CFG_NOT_FOUND;
2,319✔
3041
      break;
2,319✔
3042
  }
3043

3044
  if (matched) goto _out;
2,372✔
3045

3046
  {  //  'bool/int32_t/int64_t/float/double' variables with general modification function
3047
    static OptionNameAndVar debugOptions[] = {
3048
        {"cDebugFlag", &cDebugFlag},     {"dDebugFlag", &dDebugFlag},     {"fsDebugFlag", &fsDebugFlag},
3049
        {"idxDebugFlag", &idxDebugFlag}, {"jniDebugFlag", &jniDebugFlag}, {"qDebugFlag", &qDebugFlag},
3050
        {"rpcDebugFlag", &rpcDebugFlag}, {"smaDebugFlag", &smaDebugFlag}, {"tmrDebugFlag", &tmrDebugFlag},
3051
        {"uDebugFlag", &uDebugFlag},     {"simDebugFlag", &simDebugFlag},
3052
    };
3053

3054
    static OptionNameAndVar options[] = {{"asyncLog", &tsAsyncLog},
3055
                                         {"compressMsgSize", &tsCompressMsgSize},
3056
                                         {"countAlwaysReturnValue", &tsCountAlwaysReturnValue},
3057
                                         {"crashReporting", &tsEnableCrashReport},
3058
                                         {"enableQueryHb", &tsEnableQueryHb},
3059
                                         {"keepColumnName", &tsKeepColumnName},
3060
                                         {"logKeepDays", &tsLogKeepDays},
3061
                                         {"maxInsertBatchRows", &tsMaxInsertBatchRows},
3062
                                         {"minSlidingTime", &tsMinSlidingTime},
3063
                                         {"minIntervalTime", &tsMinIntervalTime},
3064
                                         {"numOfLogLines", &tsNumOfLogLines},
3065
                                         {"querySmaOptimize", &tsQuerySmaOptimize},
3066
                                         {"queryPolicy", &tsQueryPolicy},
3067
                                         {"queryTableNotExistAsEmpty", &tsQueryTbNotExistAsEmpty},
3068
                                         {"queryPlannerTrace", &tsQueryPlannerTrace},
3069
                                         {"queryNodeChunkSize", &tsQueryNodeChunkSize},
3070
                                         {"queryUseNodeAllocator", &tsQueryUseNodeAllocator},
3071
                                         {"smlDot2Underline", &tsSmlDot2Underline},
3072
                                         {"useAdapter", &tsUseAdapter},
3073
                                         {"multiResultFunctionStarReturnTags", &tsMultiResultFunctionStarReturnTags},
3074
                                         {"maxTsmaCalcDelay", &tsMaxTsmaCalcDelay},
3075
                                         {"tsmaDataDeleteMark", &tsmaDataDeleteMark},
3076
                                         {"numOfRpcSessions", &tsNumOfRpcSessions},
3077
                                         {"bypassFlag", &tsBypassFlag},
3078
                                         {"safetyCheckLevel", &tsSafetyCheckLevel},
3079
                                         {"streamCoverage", &tsStreamCoverage},
3080
                                         {"compareAsStrInGreatest", &tsCompareAsStrInGreatest}};
3081

3082
    if ((code = taosCfgSetOption(debugOptions, tListLen(debugOptions), pItem, true)) != TSDB_CODE_SUCCESS) {
2,355!
3083
      code = taosCfgSetOption(options, tListLen(options), pItem, false);
2,355✔
3084
    }
3085
  }
3086

3087
_out:
×
3088
  if (TSDB_CODE_SUCCESS != code) {
2,372!
3089
    uError("failed to set option:%s, lino:%d, since:%s", name, lino, tstrerror(code));
×
3090
  }
3091

3092
  cfgUnLock(pCfg);
2,372✔
3093
  TAOS_RETURN(code);
2,372✔
3094
}
3095

3096
int32_t taosCfgDynamicOptions(SConfig *pCfg, const char *name, bool forServer) {
3,774✔
3097
  if (forServer) {
3,774✔
3098
    return taosCfgDynamicOptionsForServer(pCfg, name);
1,399✔
3099
  } else {
3100
    return taosCfgDynamicOptionsForClient(pCfg, name);
2,375✔
3101
  }
3102
}
3103

3104
int32_t taosSetDebugFlag(int32_t *pFlagPtr, const char *flagName, int32_t flagVal) {
72,841✔
3105
  SConfigItem *pItem = NULL;
72,841✔
3106
  TAOS_CHECK_GET_CFG_ITEM(tsCfg, pItem, flagName);
72,841✔
3107
  pItem->i32 = flagVal;
16,348✔
3108
  if (pFlagPtr != NULL) {
16,348!
3109
    *pFlagPtr = flagVal;
16,348✔
3110
  }
3111
  TAOS_RETURN(TSDB_CODE_SUCCESS);
16,348✔
3112
}
3113

3114
static int taosLogVarComp(void const *lp, void const *rp) {
7,744✔
3115
  SLogVar *lpVar = (SLogVar *)lp;
7,744✔
3116
  SLogVar *rpVar = (SLogVar *)rp;
7,744✔
3117
  return taosStrcasecmp(lpVar->name, rpVar->name);
7,744✔
3118
}
3119

3120
static void taosCheckAndSetDebugFlag(int32_t *pFlagPtr, char *name, int32_t flag, SArray *noNeedToSetVars) {
73,117✔
3121
  if (noNeedToSetVars != NULL && taosArraySearch(noNeedToSetVars, name, taosLogVarComp, TD_EQ) != NULL) {
73,117✔
3122
    return;
348✔
3123
  }
3124
  int32_t code = 0;
72,769✔
3125
  if ((code = taosSetDebugFlag(pFlagPtr, name, flag)) != 0) {
72,769✔
3126
    if (code != TSDB_CODE_CFG_NOT_FOUND) {
56,493!
3127
      uError("failed to set flag %s to %d, since:%s", name, flag, tstrerror(code));
×
3128
    } else {
3129
      uTrace("failed to set flag %s to %d, since:%s", name, flag, tstrerror(code));
56,493✔
3130
    }
3131
  }
3132
  return;
72,769✔
3133
}
3134

3135
int32_t taosSetGlobalDebugFlag(int32_t flag) { return taosSetAllDebugFlag(tsCfg, flag); }
×
3136

3137
// NOTE: set all command does not change the tmrDebugFlag
3138
static int32_t taosSetAllDebugFlag(SConfig *pCfg, int32_t flag) {
49,007✔
3139
  if (flag < 0) TAOS_RETURN(TSDB_CODE_INVALID_PARA);
49,007!
3140
  if (flag == 0) TAOS_RETURN(TSDB_CODE_SUCCESS);  // just ignore
49,007✔
3141

3142
  SArray      *noNeedToSetVars = NULL;
3,179✔
3143
  SConfigItem *pItem = NULL;
3,179✔
3144
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "debugFlag");
3,179!
3145

3146
  pItem->i32 = flag;
3,179✔
3147
  noNeedToSetVars = pItem->array;
3,179✔
3148

3149
  taosCheckAndSetDebugFlag(&simDebugFlag, "simDebugFlag", flag, noNeedToSetVars);
3,179✔
3150
  taosCheckAndSetDebugFlag(&uDebugFlag, "uDebugFlag", flag, noNeedToSetVars);
3,179✔
3151
  taosCheckAndSetDebugFlag(&rpcDebugFlag, "rpcDebugFlag", flag, noNeedToSetVars);
3,179✔
3152
  taosCheckAndSetDebugFlag(&qDebugFlag, "qDebugFlag", flag, noNeedToSetVars);
3,179✔
3153

3154
  taosCheckAndSetDebugFlag(&jniDebugFlag, "jniDebugFlag", flag, noNeedToSetVars);
3,179✔
3155
  taosCheckAndSetDebugFlag(&cDebugFlag, "cDebugFlag", flag, noNeedToSetVars);
3,179✔
3156

3157
  taosCheckAndSetDebugFlag(&dDebugFlag, "dDebugFlag", flag, noNeedToSetVars);
3,179✔
3158
  taosCheckAndSetDebugFlag(&vDebugFlag, "vDebugFlag", flag, noNeedToSetVars);
3,179✔
3159
  taosCheckAndSetDebugFlag(&mDebugFlag, "mDebugFlag", flag, noNeedToSetVars);
3,179✔
3160
  taosCheckAndSetDebugFlag(&wDebugFlag, "wDebugFlag", flag, noNeedToSetVars);
3,179✔
3161
  taosCheckAndSetDebugFlag(&azDebugFlag, "azDebugFlag", flag, noNeedToSetVars);
3,179✔
3162
  taosCheckAndSetDebugFlag(&sDebugFlag, "sDebugFlag", flag, noNeedToSetVars);
3,179✔
3163
  taosCheckAndSetDebugFlag(&tsdbDebugFlag, "tsdbDebugFlag", flag, noNeedToSetVars);
3,179✔
3164
  taosCheckAndSetDebugFlag(&tqDebugFlag, "tqDebugFlag", flag, noNeedToSetVars);
3,179✔
3165
  taosCheckAndSetDebugFlag(&fsDebugFlag, "fsDebugFlag", flag, noNeedToSetVars);
3,179✔
3166
  taosCheckAndSetDebugFlag(&udfDebugFlag, "udfDebugFlag", flag, noNeedToSetVars);
3,179✔
3167
  taosCheckAndSetDebugFlag(&smaDebugFlag, "smaDebugFlag", flag, noNeedToSetVars);
3,179✔
3168
  taosCheckAndSetDebugFlag(&idxDebugFlag, "idxDebugFlag", flag, noNeedToSetVars);
3,179✔
3169
  taosCheckAndSetDebugFlag(&tdbDebugFlag, "tdbDebugFlag", flag, noNeedToSetVars);
3,179✔
3170
  taosCheckAndSetDebugFlag(&metaDebugFlag, "metaDebugFlag", flag, noNeedToSetVars);
3,179✔
3171
  taosCheckAndSetDebugFlag(&stDebugFlag, "stDebugFlag", flag, noNeedToSetVars);
3,179✔
3172
  taosCheckAndSetDebugFlag(&sndDebugFlag, "sndDebugFlag", flag, noNeedToSetVars);
3,179✔
3173
  taosCheckAndSetDebugFlag(&bndDebugFlag, "bndDebugFlag", flag, noNeedToSetVars);
3,179✔
3174

3175
  taosArrayClear(noNeedToSetVars);  // reset array
3,179✔
3176

3177
  uInfo("all debug flag are set to %d", flag);
3,179!
3178
  TAOS_RETURN(TSDB_CODE_SUCCESS);
3,179✔
3179
}
3180

3181
int32_t taosGranted(int8_t type) {
6,071,345✔
3182
  switch (type) {
6,071,345!
3183
    case TSDB_GRANT_ALL: {
6,073,950✔
3184
      if (atomic_load_32(&tsGrant) & GRANT_FLAG_ALL) {
6,073,950!
3185
        return 0;
6,073,459✔
3186
      }
3187
      int32_t grantVal = atomic_load_32(&tsGrant);
×
3188
      if (grantVal & GRANT_FLAG_EX_MULTI_TIER) {
×
3189
        return TSDB_CODE_GRANT_MULTI_STORAGE_EXPIRED;
×
3190
      } else if (grantVal & GRANT_FLAG_EX_STORAGE) {
×
3191
        return TSDB_CODE_GRANT_STORAGE_LIMITED;
×
3192
      }
UNCOV
3193
      return TSDB_CODE_GRANT_EXPIRED;
×
3194
    }
3195
    case TSDB_GRANT_AUDIT: {
6✔
3196
      return (atomic_load_32(&tsGrant) & GRANT_FLAG_AUDIT) ? 0 : TSDB_CODE_GRANT_AUDIT_EXPIRED;
6!
3197
    }
3198
    case TSDB_GRANT_VIEW:
534✔
3199
      return (atomic_load_32(&tsGrant) & GRANT_FLAG_VIEW) ? 0 : TSDB_CODE_GRANT_VIEW_EXPIRED;
534✔
3200
    default:
×
UNCOV
3201
      uWarn("undefined grant type:%" PRIi8, type);
×
3202
      break;
×
3203
  }
UNCOV
3204
  return 0;
×
3205
}
3206

3207
int32_t globalConfigSerialize(int32_t version, SArray *array, char **serialized) {
3,813✔
3208
  char   buf[30];
3209
  cJSON *json = cJSON_CreateObject();
3,813✔
3210
  if (json == NULL) goto _exit;
3,813!
3211
  if (cJSON_AddNumberToObject(json, "file_version", GLOBAL_CONFIG_FILE_VERSION) == NULL) goto _exit;
3,813!
3212
  if (cJSON_AddNumberToObject(json, "version", version) == NULL) goto _exit;
3,813!
3213
  int sz = taosArrayGetSize(array);
3,813✔
3214

3215
  cJSON *cField = cJSON_CreateObject();
3,813✔
3216
  if (cField == NULL) goto _exit;
3,813!
3217

3218
  if (!cJSON_AddItemToObject(json, "configs", cField)) goto _exit;
3,813!
3219

3220
  // cjson only support int32_t or double
3221
  // string are used to prohibit the loss of precision
3222
  for (int i = 0; i < sz; i++) {
356,562✔
3223
    SConfigItem *item = (SConfigItem *)taosArrayGet(array, i);
352,749✔
3224
    switch (item->dtype) {
352,749!
3225
      {
UNCOV
3226
        case CFG_DTYPE_NONE:
×
UNCOV
3227
          break;
×
3228
        case CFG_DTYPE_BOOL:
75,860✔
3229
          if (cJSON_AddBoolToObject(cField, item->name, item->bval) == NULL) goto _exit;
75,860!
3230
          break;
75,860✔
3231
        case CFG_DTYPE_INT32:
182,064✔
3232
          if (cJSON_AddNumberToObject(cField, item->name, item->i32) == NULL) goto _exit;
182,064!
3233
          break;
182,064✔
3234
        case CFG_DTYPE_INT64:
30,344✔
3235
          (void)sprintf(buf, "%" PRId64, item->i64);
30,344✔
3236
          if (cJSON_AddStringToObject(cField, item->name, buf) == NULL) goto _exit;
30,344!
3237
          break;
30,344✔
3238
        case CFG_DTYPE_FLOAT:
11,379✔
3239
        case CFG_DTYPE_DOUBLE:
3240
          (void)sprintf(buf, "%f", item->fval);
11,379✔
3241
          if (cJSON_AddStringToObject(cField, item->name, buf) == NULL) goto _exit;
11,379!
3242
          break;
11,379✔
3243
        case CFG_DTYPE_STRING:
53,102✔
3244
        case CFG_DTYPE_DIR:
3245
        case CFG_DTYPE_LOCALE:
3246
        case CFG_DTYPE_CHARSET:
3247
        case CFG_DTYPE_TIMEZONE:
3248
          if (cJSON_AddStringToObject(cField, item->name, item->str) == NULL) goto _exit;
53,102!
3249
          break;
53,102✔
3250
      }
3251
    }
3252
  }
3253
  char *pSerialized = tjsonToString(json);
3,813✔
3254
_exit:
3,813✔
3255
  if (terrno != TSDB_CODE_SUCCESS) {
3,813✔
3256
    uError("failed to serialize global config since %s", tstrerror(terrno));
12!
3257
  }
3258
  cJSON_Delete(json);
3,813✔
3259
  *serialized = pSerialized;
3,813✔
3260
  return terrno;
3,813✔
3261
}
3262

3263
int32_t localConfigSerialize(SArray *array, char **serialized) {
3,288✔
3264
  char   buf[30];
3265
  cJSON *json = cJSON_CreateObject();
3,288✔
3266
  if (json == NULL) goto _exit;
3,288!
3267

3268
  int sz = taosArrayGetSize(array);
3,288✔
3269

3270
  cJSON *cField = cJSON_CreateObject();
3,288✔
3271
  if (cField == NULL) goto _exit;
3,288!
3272
  if (cJSON_AddNumberToObject(json, "file_version", LOCAL_CONFIG_FILE_VERSION) == NULL) goto _exit;
3,288!
3273
  if (!cJSON_AddItemToObject(json, "configs", cField)) goto _exit;
3,288!
3274

3275
  // cjson only support int32_t or double
3276
  // string are used to prohibit the loss of precision
3277
  for (int i = 0; i < sz; i++) {
453,744✔
3278
    SConfigItem *item = (SConfigItem *)taosArrayGet(array, i);
450,456✔
3279
    if (strcasecmp(item->name, "dataDir") == 0) {
450,456✔
3280
      int32_t sz = taosArrayGetSize(item->array);
3,288✔
3281
      cJSON  *dataDirs = cJSON_CreateArray();
3,288✔
3282
      if (!cJSON_AddItemToObject(cField, item->name, dataDirs)) {
3,288!
UNCOV
3283
        uError("failed to serialize global config since %s", tstrerror(terrno));
×
UNCOV
3284
        goto _exit;
×
3285
      }
3286
      for (int j = 0; j < sz; j++) {
6,610✔
3287
        SDiskCfg *disk = (SDiskCfg *)taosArrayGet(item->array, j);
3,322✔
3288
        cJSON    *dataDir = cJSON_CreateObject();
3,322✔
3289
        if (dataDir == NULL) goto _exit;
3,322!
3290
        if (!cJSON_AddItemToArray(dataDirs, dataDir)) {
3,322!
UNCOV
3291
          uError("failed to serialize global config since %s", tstrerror(terrno));
×
UNCOV
3292
          goto _exit;
×
3293
        }
3294
        if (cJSON_AddStringToObject(dataDir, "dir", disk->dir) == NULL) goto _exit;
3,322!
3295
        if (cJSON_AddNumberToObject(dataDir, "level", disk->level) == NULL) goto _exit;
3,322!
3296
        if (disk->diskId == 0) {
3,322✔
3297
          if (taosGetFileDiskID(disk->dir, &disk->diskId) != 0) {
3,113!
UNCOV
3298
            uError("failed to get disk id for %s", disk->dir);
×
UNCOV
3299
            goto _exit;
×
3300
          }
3301
        }
3302
        (void)sprintf(buf, "%" PRId64, disk->diskId);
3,322✔
3303
        if (cJSON_AddStringToObject(dataDir, "disk_id", buf) == NULL) goto _exit;
3,322!
3304
        if (cJSON_AddNumberToObject(dataDir, "primary", disk->primary) == NULL) goto _exit;
3,322!
3305
        if (cJSON_AddNumberToObject(dataDir, "disable", disk->disable) == NULL) goto _exit;
3,322!
3306
      }
3307
      continue;
3,288✔
3308
    }
3309
    if (strcasecmp(item->name, "forceReadConfig") == 0) {
447,168✔
3310
      continue;
3,288✔
3311
    }
3312
    switch (item->dtype) {
443,880!
3313
      {
UNCOV
3314
        case CFG_DTYPE_NONE:
×
UNCOV
3315
          break;
×
3316
        case CFG_DTYPE_BOOL:
69,048✔
3317
          if (cJSON_AddBoolToObject(cField, item->name, item->bval) == NULL) goto _exit;
69,048!
3318
          break;
69,048✔
3319
        case CFG_DTYPE_INT32:
249,888✔
3320
          if (cJSON_AddNumberToObject(cField, item->name, item->i32) == NULL) goto _exit;
249,888!
3321
          break;
249,888✔
3322
        case CFG_DTYPE_INT64:
23,016✔
3323
          (void)sprintf(buf, "%" PRId64, item->i64);
23,016✔
3324
          if (cJSON_AddStringToObject(cField, item->name, buf) == NULL) goto _exit;
23,016!
3325
          break;
23,016✔
3326
        case CFG_DTYPE_FLOAT:
16,440✔
3327
        case CFG_DTYPE_DOUBLE:
3328
          (void)sprintf(buf, "%f", item->fval);
16,440✔
3329
          if (cJSON_AddStringToObject(cField, item->name, buf) == NULL) goto _exit;
16,440!
3330
          break;
16,440✔
3331
        case CFG_DTYPE_STRING:
85,488✔
3332
        case CFG_DTYPE_DIR:
3333
        case CFG_DTYPE_LOCALE:
3334
        case CFG_DTYPE_CHARSET:
3335
        case CFG_DTYPE_TIMEZONE:
3336
          if (cJSON_AddStringToObject(cField, item->name, item->str) == NULL) goto _exit;
85,488!
3337
          break;
85,488✔
3338
      }
3339
    }
3340
  }
3341
  char *pSerialized = tjsonToString(json);
3,288✔
3342
_exit:
3,288✔
3343
  if (terrno != TSDB_CODE_SUCCESS) {
3,288!
UNCOV
3344
    uError("failed to serialize local config since %s", tstrerror(terrno));
×
3345
  }
3346
  cJSON_Delete(json);
3,288✔
3347
  *serialized = pSerialized;
3,288✔
3348
  return terrno;
3,288✔
3349
}
3350

3351
int32_t stypeConfigSerialize(SArray *array, char **serialized) {
3,288✔
3352
  char   buf[30];
3353
  cJSON *json = cJSON_CreateObject();
3,288✔
3354
  if (json == NULL) goto _exit;
3,288!
3355

3356
  int sz = taosArrayGetSize(array);
3,288✔
3357

3358
  cJSON *cField = cJSON_CreateObject();
3,288✔
3359
  if (cField == NULL) goto _exit;
3,288!
3360
  if (cJSON_AddNumberToObject(json, "file_version", LOCAL_CONFIG_FILE_VERSION) == NULL) goto _exit;
3,288!
3361
  if (!cJSON_AddItemToObject(json, "config_stypes", cField)) goto _exit;
3,288!
3362

3363
  // cjson only support int32_t or double
3364
  // string are used to prohibit the loss of precision
3365
  for (int i = 0; i < sz; i++) {
453,744✔
3366
    SConfigItem *item = (SConfigItem *)taosArrayGet(array, i);
450,456✔
3367
    if (cJSON_AddNumberToObject(cField, item->name, item->stype) == NULL) goto _exit;
450,456!
3368
  }
3369
  char *pSerialized = tjsonToString(json);
3,288✔
3370
_exit:
3,288✔
3371
  if (terrno != TSDB_CODE_SUCCESS) {
3,288!
UNCOV
3372
    uError("failed to serialize local config since %s", tstrerror(terrno));
×
3373
  }
3374
  cJSON_Delete(json);
3,288✔
3375
  *serialized = pSerialized;
3,288✔
3376
  return terrno;
3,288✔
3377
}
3378

3379
int32_t taosPersistGlobalConfig(SArray *array, const char *path, int32_t version) {
3,813✔
3380
  int32_t   code = 0;
3,813✔
3381
  int32_t   lino = 0;
3,813✔
3382
  char     *buffer = NULL;
3,813✔
3383
  TdFilePtr pFile = NULL;
3,813✔
3384
  char     *serialized = NULL;
3,813✔
3385
  char      filepath[CONFIG_FILE_LEN] = {0};
3,813✔
3386
  char      filename[CONFIG_FILE_LEN] = {0};
3,813✔
3387
  snprintf(filepath, sizeof(filepath), "%s%sconfig", path, TD_DIRSEP);
3,813✔
3388
  snprintf(filename, sizeof(filename), "%s%sconfig%sglobal.json", path, TD_DIRSEP, TD_DIRSEP);
3,813✔
3389

3390
  TAOS_CHECK_GOTO(taosMkDir(filepath), &lino, _exit);
3,813!
3391

3392
  TdFilePtr pConfigFile =
3,813✔
3393
      taosOpenFile(filename, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_TRUNC | TD_FILE_WRITE_THROUGH);
3,813✔
3394

3395
  if (pConfigFile == NULL) {
3,813!
3396
    code = TAOS_SYSTEM_ERROR(ERRNO);
×
UNCOV
3397
    uError("failed to open file:%s since %s", filename, tstrerror(code));
×
UNCOV
3398
    TAOS_RETURN(code);
×
3399
  }
3400
  TAOS_CHECK_GOTO(globalConfigSerialize(version, array, &serialized), &lino, _exit);
3,813✔
3401

3402
  if (taosWriteFile(pConfigFile, serialized, strlen(serialized)) < 0) {
3,801!
3403
    lino = __LINE__;
×
3404
    code = TAOS_SYSTEM_ERROR(ERRNO);
×
UNCOV
3405
    uError("failed to write file:%s since %s", filename, tstrerror(code));
×
UNCOV
3406
    goto _exit;
×
3407
  }
3408

3409
_exit:
3,801✔
3410
  if (code != TSDB_CODE_SUCCESS) {
3,813✔
3411
    uError("failed to persist global config at line:%d, since %s", lino, tstrerror(code));
12!
3412
  }
3413
  (void)taosCloseFile(&pConfigFile);
3,813✔
3414
  taosMemoryFree(serialized);
3,813!
3415
  return code;
3,813✔
3416
}
3417

3418
int32_t taosPersistLocalConfig(const char *path) {
3,288✔
3419
  int32_t   code = 0;
3,288✔
3420
  int32_t   lino = 0;
3,288✔
3421
  char     *buffer = NULL;
3,288✔
3422
  TdFilePtr pFile = NULL;
3,288✔
3423
  char     *serializedCfg = NULL;
3,288✔
3424
  char     *serializedStype = NULL;
3,288✔
3425
  char      filepath[CONFIG_FILE_LEN] = {0};
3,288✔
3426
  char      filename[CONFIG_FILE_LEN] = {0};
3,288✔
3427
  char      stypeFilename[CONFIG_FILE_LEN] = {0};
3,288✔
3428
  snprintf(filepath, sizeof(filepath), "%s%sconfig", path, TD_DIRSEP);
3,288✔
3429
  snprintf(filename, sizeof(filename), "%s%sconfig%slocal.json", path, TD_DIRSEP, TD_DIRSEP);
3,288✔
3430
  snprintf(stypeFilename, sizeof(stypeFilename), "%s%sconfig%sstype.json", path, TD_DIRSEP, TD_DIRSEP);
3,288✔
3431

3432
  // TODO(beryl) need to check if the file is existed
3433
  TAOS_CHECK_GOTO(taosMkDir(filepath), &lino, _exit);
3,288!
3434

3435
  TdFilePtr pConfigFile =
3,288✔
3436
      taosOpenFile(filename, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_TRUNC | TD_FILE_WRITE_THROUGH);
3,288✔
3437

3438
  if (pConfigFile == NULL) {
3,288!
3439
    code = TAOS_SYSTEM_ERROR(terrno);
×
UNCOV
3440
    uError("failed to open file:%s since %s", filename, tstrerror(code));
×
UNCOV
3441
    TAOS_RETURN(code);
×
3442
  }
3443

3444
  TdFilePtr pStypeFile =
3,288✔
3445
      taosOpenFile(stypeFilename, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_TRUNC | TD_FILE_WRITE_THROUGH);
3,288✔
3446
  if (pStypeFile == NULL) {
3,288!
3447
    code = TAOS_SYSTEM_ERROR(terrno);
×
UNCOV
3448
    uError("failed to open file:%s since %s", stypeFilename, tstrerror(code));
×
UNCOV
3449
    TAOS_RETURN(code);
×
3450
  }
3451

3452
  TAOS_CHECK_GOTO(localConfigSerialize(taosGetLocalCfg(tsCfg), &serializedCfg), &lino, _exit);
3,288!
3453
  if (taosWriteFile(pConfigFile, serializedCfg, strlen(serializedCfg)) < 0) {
3,288!
3454
    lino = __LINE__;
×
3455
    code = TAOS_SYSTEM_ERROR(terrno);
×
UNCOV
3456
    uError("failed to write file:%s since %s", filename, tstrerror(code));
×
UNCOV
3457
    goto _exit;
×
3458
  }
3459

3460
  TAOS_CHECK_GOTO(stypeConfigSerialize(taosGetLocalCfg(tsCfg), &serializedStype), &lino, _exit);
3,288!
3461
  if (taosWriteFile(pStypeFile, serializedStype, strlen(serializedStype)) < 0) {
3,288!
3462
    lino = __LINE__;
×
3463
    code = TAOS_SYSTEM_ERROR(terrno);
×
UNCOV
3464
    uError("failed to write file:%s since %s", stypeFilename, tstrerror(code));
×
UNCOV
3465
    goto _exit;
×
3466
  }
3467

3468
_exit:
3,288✔
3469
  if (code != TSDB_CODE_SUCCESS) {
3,288!
UNCOV
3470
    uError("failed to persist local config at line:%d, since %s", lino, tstrerror(code));
×
3471
  }
3472
  (void)taosCloseFile(&pConfigFile);
3,288✔
3473
  (void)taosCloseFile(&pStypeFile);
3,288✔
3474
  taosMemoryFree(serializedCfg);
3,288!
3475
  taosMemoryFree(serializedStype);
3,288!
3476
  return code;
3,288✔
3477
}
3478

3479
int32_t tSerializeSConfigArray(SEncoder *pEncoder, SArray *array) {
6,216✔
3480
  int32_t code = 0;
6,216✔
3481
  int32_t lino = 0;
6,216✔
3482
  int32_t sz = taosArrayGetSize(array);
6,216✔
3483
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, sz));
6,216!
3484
  for (int i = 0; i < sz; i++) {
466,380✔
3485
    SConfigItem *item = (SConfigItem *)taosArrayGet(array, i);
460,164✔
3486
    TAOS_CHECK_EXIT(tEncodeCStr(pEncoder, item->name));
920,328!
3487
    TAOS_CHECK_EXIT(tEncodeI32(pEncoder, item->dtype));
920,328!
3488
    switch (item->dtype) {
460,164!
3489
      {
UNCOV
3490
        case CFG_DTYPE_NONE:
×
UNCOV
3491
          break;
×
3492
        case CFG_DTYPE_BOOL:
98,960✔
3493
          TAOS_CHECK_EXIT(tEncodeBool(pEncoder, item->bval));
98,960!
3494
          break;
98,960✔
3495
        case CFG_DTYPE_INT32:
237,504✔
3496
          TAOS_CHECK_EXIT(tEncodeI32(pEncoder, item->i32));
475,008!
3497
          break;
237,504✔
3498
        case CFG_DTYPE_INT64:
39,584✔
3499
          TAOS_CHECK_EXIT(tEncodeI64(pEncoder, item->i64));
79,168!
3500
          break;
39,584✔
3501
        case CFG_DTYPE_FLOAT:
14,844✔
3502
        case CFG_DTYPE_DOUBLE:
3503
          TAOS_CHECK_EXIT(tEncodeFloat(pEncoder, item->fval));
29,688!
3504
          break;
14,844✔
3505
        case CFG_DTYPE_STRING:
69,272✔
3506
        case CFG_DTYPE_DIR:
3507
        case CFG_DTYPE_LOCALE:
3508
        case CFG_DTYPE_CHARSET:
3509
        case CFG_DTYPE_TIMEZONE:
3510
          TAOS_CHECK_EXIT(tEncodeCStr(pEncoder, item->str));
138,544!
3511
          break;
69,272✔
3512
      }
3513
    }
3514
  }
3515
_exit:
6,216✔
3516
  return code;
6,216✔
3517
}
3518

3519
int32_t tDeserializeSConfigArray(SDecoder *pDecoder, SArray *array) {
3,099✔
3520
  int32_t code = 0;
3,099✔
3521
  int32_t lino = 0;
3,099✔
3522
  int32_t sz = 0;
3,099✔
3523
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &sz));
3,099!
3524
  for (int i = 0; i < sz; i++) {
234,762✔
3525
    SConfigItem item = {0};
231,663✔
3526
    TAOS_CHECK_EXIT(tDecodeCStr(pDecoder, &item.name));
231,663!
3527
    TAOS_CHECK_EXIT(tDecodeI32(pDecoder, (int32_t *)&item.dtype));
231,663!
3528
    switch (item.dtype) {
231,663!
3529
      {
UNCOV
3530
        case CFG_DTYPE_NONE:
×
UNCOV
3531
          break;
×
3532
        case CFG_DTYPE_BOOL:
49,820✔
3533
          TAOS_CHECK_EXIT(tDecodeBool(pDecoder, &item.bval));
49,820!
3534
          break;
49,820✔
3535
        case CFG_DTYPE_INT32:
119,568✔
3536
          TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &item.i32));
119,568!
3537
          break;
119,568✔
3538
        case CFG_DTYPE_INT64:
19,928✔
3539
          TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &item.i64));
19,928!
3540
          break;
19,928✔
3541
        case CFG_DTYPE_FLOAT:
7,473✔
3542
        case CFG_DTYPE_DOUBLE:
3543
          TAOS_CHECK_EXIT(tDecodeFloat(pDecoder, &item.fval));
7,473!
3544
          break;
7,473✔
3545
        case CFG_DTYPE_STRING:
34,874✔
3546
        case CFG_DTYPE_DIR:
3547
        case CFG_DTYPE_LOCALE:
3548
        case CFG_DTYPE_CHARSET:
3549
        case CFG_DTYPE_TIMEZONE:
3550
          TAOS_CHECK_EXIT(tDecodeCStr(pDecoder, &item.str));
34,874!
3551
          break;
34,874✔
3552
      }
3553
    }
3554
    if (taosArrayPush(array, &item) == NULL) {
231,663!
UNCOV
3555
      code = terrno;
×
UNCOV
3556
      goto _exit;
×
3557
    }
3558
  }
3559
_exit:
3,099✔
3560
  if (code != TSDB_CODE_SUCCESS) {
3,099!
UNCOV
3561
    uError("failed to deserialize SConfigItem at line:%d, since %s", lino, tstrerror(code));
×
3562
  }
3563
  return code;
3,099✔
3564
}
3565

3566
bool isConifgItemLazyMode(SConfigItem *item) {
1,511✔
3567
  if (item->dynScope == CFG_DYN_CLIENT_LAZY || item->dynScope == CFG_DYN_SERVER_LAZY ||
1,511!
3568
      item->dynScope == CFG_DYN_BOTH_LAZY) {
1,445✔
3569
    return true;
114✔
3570
  }
3571
  return false;
1,397✔
3572
}
3573

3574
int32_t taosCheckCfgStrValueLen(const char *name, const char *value, int32_t len) {
326,283✔
3575
  if (strlen(value) > len) {
326,283!
UNCOV
3576
    uError("invalid config:%s, value:%s, length should be less than %d", name, value, len);
×
UNCOV
3577
    TAOS_RETURN(TSDB_CODE_INVALID_CFG_VALUE);
×
3578
  }
3579
  TAOS_RETURN(TSDB_CODE_SUCCESS);
326,283✔
3580
}
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