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

taosdata / TDengine / #3531

19 Nov 2024 10:42AM UTC coverage: 60.213% (-0.006%) from 60.219%
#3531

push

travis-ci

web-flow
Merge pull request #28777 from taosdata/fix/3.0/TD-32366

fix:TD-32366/stmt add geometry datatype check

118529 of 252344 branches covered (46.97%)

Branch coverage included in aggregate %.

7 of 48 new or added lines in 3 files covered. (14.58%)

2282 existing lines in 115 files now uncovered.

199096 of 275161 relevant lines covered (72.36%)

6067577.83 hits per line

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

66.33
/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 "tglobal.h"
18
#include "defines.h"
19
#include "os.h"
20
#include "tconfig.h"
21
#include "tgrant.h"
22
#include "tlog.h"
23
#include "tmisce.h"
24
#include "tunit.h"
25

26
#if defined(CUS_NAME) || defined(CUS_PROMPT) || defined(CUS_EMAIL)
27
#include "cus_name.h"
28
#endif
29

30
// GRANT_CFG_DECLARE;
31

32
SConfig *tsCfg = NULL;
33

34
// cluster
35
char          tsFirst[TSDB_EP_LEN] = {0};
36
char          tsSecond[TSDB_EP_LEN] = {0};
37
char          tsLocalFqdn[TSDB_FQDN_LEN] = {0};
38
char          tsLocalEp[TSDB_EP_LEN] = {0};  // Local End Point, hostname:port
39
char          tsVersionName[16] = "community";
40
uint16_t      tsServerPort = 6030;
41
int32_t       tsVersion = 30000000;
42
int32_t       tsStatusInterval = 1;  // second
43
int32_t       tsNumOfSupportVnodes = 256;
44
char          tsEncryptAlgorithm[16] = {0};
45
char          tsEncryptScope[100] = {0};
46
EEncryptAlgor tsiEncryptAlgorithm = 0;
47
EEncryptScope tsiEncryptScope = 0;
48
// char     tsAuthCode[500] = {0};
49
// char     tsEncryptKey[17] = {0};
50
char tsEncryptKey[17] = {0};
51

52
// common
53
int32_t tsMaxShellConns = 50000;
54
int32_t tsShellActivityTimer = 3;  // second
55

56
// queue & threads
57
int32_t tsNumOfRpcThreads = 1;
58
int32_t tsNumOfRpcSessions = 30000;
59
int32_t tsShareConnLimit = 10;
60
int32_t tsReadTimeout = 900;
61
int32_t tsTimeToGetAvailableConn = 500000;
62

63
int32_t tsNumOfCommitThreads = 2;
64
int32_t tsNumOfTaskQueueThreads = 16;
65
int32_t tsNumOfMnodeQueryThreads = 16;
66
int32_t tsNumOfMnodeFetchThreads = 1;
67
int32_t tsNumOfMnodeReadThreads = 1;
68
int32_t tsNumOfVnodeQueryThreads = 16;
69
float   tsRatioOfVnodeStreamThreads = 0.5F;
70
int32_t tsNumOfVnodeFetchThreads = 4;
71
int32_t tsNumOfVnodeRsmaThreads = 2;
72
int32_t tsNumOfQnodeQueryThreads = 16;
73
int32_t tsNumOfQnodeFetchThreads = 1;
74
int32_t tsNumOfSnodeStreamThreads = 4;
75
int32_t tsNumOfSnodeWriteThreads = 1;
76
int32_t tsMaxStreamBackendCache = 128;  // M
77
int32_t tsPQSortMemThreshold = 16;      // M
78
int32_t tsRetentionSpeedLimitMB = 0;    // unlimited
79

80
// sync raft
81
int32_t tsElectInterval = 25 * 1000;
82
int32_t tsHeartbeatInterval = 1000;
83
int32_t tsHeartbeatTimeout = 20 * 1000;
84
int32_t tsSnapReplMaxWaitN = 128;
85
int64_t tsLogBufferMemoryAllowed = 0;  // bytes
86

87
// mnode
88
int64_t tsMndSdbWriteDelta = 200;
89
int64_t tsMndLogRetention = 2000;
90
bool    tsMndSkipGrant = false;
91
bool    tsEnableWhiteList = false;  // ip white list cfg
92

93
// arbitrator
94
int32_t tsArbHeartBeatIntervalSec = 5;
95
int32_t tsArbCheckSyncIntervalSec = 10;
96
int32_t tsArbSetAssignedTimeoutSec = 30;
97

98
// dnode
99
int64_t tsDndStart = 0;
100
int64_t tsDndStartOsUptime = 0;
101
int64_t tsDndUpTime = 0;
102

103
// dnode misc
104
uint32_t tsEncryptionKeyChksum = 0;
105
int8_t   tsEncryptionKeyStat = ENCRYPT_KEY_STAT_UNSET;
106
int8_t   tsGrant = 1;
107

108
// monitor
109
bool     tsEnableMonitor = true;
110
int32_t  tsMonitorInterval = 30;
111
char     tsMonitorFqdn[TSDB_FQDN_LEN] = {0};
112
uint16_t tsMonitorPort = 6043;
113
int32_t  tsMonitorMaxLogs = 100;
114
bool     tsMonitorComp = false;
115
bool     tsMonitorLogProtocol = false;
116
bool     tsMonitorForceV2 = true;
117

118
// audit
119
bool    tsEnableAudit = true;
120
bool    tsEnableAuditCreateTable = true;
121
bool    tsEnableAuditDelete = true;
122
int32_t tsAuditInterval = 5000;
123

124
// telem
125
#ifdef TD_ENTERPRISE
126
bool tsEnableTelem = false;
127
#else
128
bool    tsEnableTelem = true;
129
#endif
130
int32_t  tsTelemInterval = 43200;
131
char     tsTelemServer[TSDB_FQDN_LEN] = "telemetry.tdengine.com";
132
uint16_t tsTelemPort = 80;
133
char    *tsTelemUri = "/report";
134

135
#ifdef TD_ENTERPRISE
136
bool tsEnableCrashReport = false;
137
#else
138
bool    tsEnableCrashReport = true;
139
#endif
140
char  *tsClientCrashReportUri = "/ccrashreport";
141
char  *tsSvrCrashReportUri = "/dcrashreport";
142
int8_t tsSafetyCheckLevel = TSDB_SAFETY_CHECK_LEVELL_NORMAL;
143

144
// schemaless
145
bool tsSmlDot2Underline = true;
146
char tsSmlTsDefaultName[TSDB_COL_NAME_LEN] = "_ts";
147
char tsSmlTagName[TSDB_COL_NAME_LEN] = "_tag_null";
148
char tsSmlChildTableName[TSDB_TABLE_NAME_LEN] = "";  // user defined child table name can be specified in tag value.
149
char tsSmlAutoChildTableNameDelimiter[TSDB_TABLE_NAME_LEN] = "";
150
// If set to empty system will generate table name using MD5 hash.
151
// true means that the name and order of cols in each line are the same(only for influx protocol)
152
// bool    tsSmlDataFormat = false;
153
// int32_t tsSmlBatchSize = 10000;
154

155
// checkpoint backup
156
char    tsSnodeAddress[TSDB_FQDN_LEN] = {0};
157
int32_t tsRsyncPort = 873;
158
#ifdef WINDOWS
159
char tsCheckpointBackupDir[PATH_MAX] = "C:\\TDengine\\data\\backup\\checkpoint\\";
160
#else
161
char    tsCheckpointBackupDir[PATH_MAX] = "/var/lib/taos/backup/checkpoint/";
162
#endif
163

164
// tmq
165
int32_t tmqMaxTopicNum = 20;
166
int32_t tmqRowSize = 4096;
167
// query
168
int32_t tsQueryPolicy = 1;
169
bool    tsQueryTbNotExistAsEmpty = false;
170
int32_t tsQueryRspPolicy = 0;
171
int64_t tsQueryMaxConcurrentTables = 200;  // unit is TSDB_TABLE_NUM_UNIT
172
bool    tsEnableQueryHb = true;
173
bool    tsEnableScience = false;  // on taos-cli show float and doulbe with scientific notation if true
174
int32_t tsQuerySmaOptimize = 0;
175
int32_t tsQueryRsmaTolerance = 1000;  // the tolerance time (ms) to judge from which level to query rsma data.
176
bool    tsQueryPlannerTrace = false;
177
int32_t tsQueryNodeChunkSize = 32 * 1024;
178
bool    tsQueryUseNodeAllocator = true;
179
bool    tsKeepColumnName = false;
180
int32_t tsRedirectPeriod = 10;
181
int32_t tsRedirectFactor = 2;
182
int32_t tsRedirectMaxPeriod = 1000;
183
int32_t tsMaxRetryWaitTime = 10000;
184
bool    tsUseAdapter = false;
185
int32_t tsMetaCacheMaxSize = -1;                   // MB
186
int32_t tsSlowLogThreshold = 10;                   // seconds
187
char    tsSlowLogExceptDb[TSDB_DB_NAME_LEN] = "";  // seconds
188
int32_t tsSlowLogScope = SLOW_LOG_TYPE_QUERY;
189
char   *tsSlowLogScopeString = "query";
190
int32_t tsSlowLogMaxLen = 4096;
191
int32_t tsTimeSeriesThreshold = 50;
192
bool    tsMultiResultFunctionStarReturnTags = false;
193

194
/*
195
 * denote if the server needs to compress response message at the application layer to client, including query rsp,
196
 * metricmeta rsp, and multi-meter query rsp message body. The client compress the submit message to server.
197
 *
198
 * 0: all data are compressed
199
 * -1: all data are not compressed
200
 * other values: if the message payload size is greater than the tsCompressMsgSize, the message will be compressed.
201
 */
202
int32_t tsCompressMsgSize = -1;
203

204
// count/hyperloglog function always return values in case of all NULL data or Empty data set.
205
int32_t tsCountAlwaysReturnValue = 1;
206

207
// 1 ms for sliding time, the value will changed in case of time precision changed
208
int32_t tsMinSlidingTime = 1;
209

210
// 1 database precision unit for interval time range, changed accordingly
211
int32_t tsMinIntervalTime = 1;
212

213
// maximum batch rows numbers imported from a single csv load
214
int32_t tsMaxInsertBatchRows = 1000000;
215

216
float   tsSelectivityRatio = 1.0;
217
int32_t tsTagFilterResCacheSize = 1024 * 10;
218
char    tsTagFilterCache = 0;
219

220
int32_t tsBypassFlag = 0;
221

222
// the maximum allowed query buffer size during query processing for each data node.
223
// -1 no limit (default)
224
// 0  no query allowed, queries are disabled
225
// positive value (in MB)
226
int32_t tsQueryBufferSize = -1;
227
int64_t tsQueryBufferSizeBytes = -1;
228
int32_t tsCacheLazyLoadThreshold = 500;
229

230
int32_t  tsDiskCfgNum = 0;
231
SDiskCfg tsDiskCfg[TFS_MAX_DISKS] = {0};
232
int64_t  tsMinDiskFreeSize = TFS_MIN_DISK_FREE_SIZE;
233

234
// stream scheduler
235
bool tsDeployOnSnode = true;
236

237
/*
238
 * minimum scale for whole system, millisecond by default
239
 * for TSDB_TIME_PRECISION_MILLI: 60000L
240
 *     TSDB_TIME_PRECISION_MICRO: 60000000L
241
 *     TSDB_TIME_PRECISION_NANO:  60000000000L
242
 */
243
int64_t tsTickPerMin[] = {60000L, 60000000L, 60000000000L};
244
/*
245
 * millisecond by default
246
 * for TSDB_TIME_PRECISION_MILLI: 3600000L
247
 *     TSDB_TIME_PRECISION_MICRO: 3600000000L
248
 *     TSDB_TIME_PRECISION_NANO:  3600000000000L
249
 */
250
int64_t tsTickPerHour[] = {3600000L, 3600000000L, 3600000000000L};
251

252
// lossy compress 7
253
char tsLossyColumns[32] = "float|double";  // "float|double" means all float and double columns can be lossy compressed.
254
                                           // set empty can close lossy compress.
255
// below option can take effect when tsLossyColumns not empty
256
float    tsFPrecision = 1E-8;                   // float column precision
257
double   tsDPrecision = 1E-16;                  // double column precision
258
uint32_t tsMaxRange = 500;                      // max quantization intervals
259
uint32_t tsCurRange = 100;                      // current quantization intervals
260
bool     tsIfAdtFse = false;                    // ADT-FSE algorithom or original huffman algorithom
261
char     tsCompressor[32] = "ZSTD_COMPRESSOR";  // ZSTD_COMPRESSOR or GZIP_COMPRESSOR
262

263
// udf
264
#ifdef WINDOWS
265
bool tsStartUdfd = false;
266
#else
267
bool    tsStartUdfd = true;
268
#endif
269

270
// wal
271
int64_t tsWalFsyncDataSizeLimit = (100 * 1024 * 1024L);
272

273
// ttl
274
bool    tsTtlChangeOnWrite = false;  // if true, ttl delete time changes on last write
275
int32_t tsTtlFlushThreshold = 100;   /* maximum number of dirty items in memory.
276
                                      * if -1, flush will not be triggered by write-ops
277
                                      */
278
int32_t tsTtlBatchDropNum = 10000;   // number of tables dropped per batch
279

280
// internal
281
int32_t tsTransPullupInterval = 2;
282
int32_t tsCompactPullupInterval = 10;
283
int32_t tsMqRebalanceInterval = 2;
284
int32_t tsStreamCheckpointInterval = 60;
285
float   tsSinkDataRate = 2.0;
286
int32_t tsStreamNodeCheckInterval = 20;
287
int32_t tsMaxConcurrentCheckpoint = 1;
288
int32_t tsTtlUnit = 86400;
289
int32_t tsTtlPushIntervalSec = 10;
290
int32_t tsTrimVDbIntervalSec = 60 * 60;    // interval of trimming db in all vgroups
291
int32_t tsS3MigrateIntervalSec = 60 * 60;  // interval of s3migrate db in all vgroups
292
bool    tsS3MigrateEnabled = 0;
293
int32_t tsGrantHBInterval = 60;
294
int32_t tsUptimeInterval = 300;    // seconds
295
char    tsUdfdResFuncs[512] = "";  // udfd resident funcs that teardown when udfd exits
296
char    tsUdfdLdLibPath[512] = "";
297
bool    tsDisableStream = false;
298
int64_t tsStreamBufferSize = 128 * 1024 * 1024;
299
bool    tsFilterScalarMode = false;
300
int     tsResolveFQDNRetryTime = 100;  // seconds
301
int     tsStreamAggCnt = 100000;
302

303
int8_t tsS3EpNum = 0;
304
char   tsS3Endpoint[TSDB_MAX_EP_NUM][TSDB_FQDN_LEN] = {"<endpoint>"};
305
char   tsS3AccessKey[TSDB_MAX_EP_NUM][TSDB_FQDN_LEN] = {"<accesskey>"};
306
char   tsS3AccessKeyId[TSDB_MAX_EP_NUM][TSDB_FQDN_LEN] = {"<accesskeyid>"};
307
char   tsS3AccessKeySecret[TSDB_MAX_EP_NUM][TSDB_FQDN_LEN] = {"<accesskeysecrect>"};
308
char   tsS3BucketName[TSDB_FQDN_LEN] = "<bucketname>";
309
char   tsS3AppId[TSDB_MAX_EP_NUM][TSDB_FQDN_LEN] = {"<appid>"};
310
int8_t tsS3Enabled = false;
311
int8_t tsS3EnabledCfg = false;
312
int8_t tsS3Oss[TSDB_MAX_EP_NUM] = {false};
313
int8_t tsS3Ablob = false;
314
int8_t tsS3StreamEnabled = false;
315

316
int8_t tsS3Https[TSDB_MAX_EP_NUM] = {true};
317
char   tsS3Hostname[TSDB_MAX_EP_NUM][TSDB_FQDN_LEN] = {"<hostname>"};
318

319
int32_t tsS3BlockSize = -1;        // number of tsdb pages (4096)
320
int32_t tsS3BlockCacheSize = 16;   // number of blocks
321
int32_t tsS3PageCacheSize = 4096;  // number of pages
322
int32_t tsS3UploadDelaySec = 60;
323

324
bool tsExperimental = true;
325

326
int32_t tsMaxTsmaNum = 3;
327
int32_t tsMaxTsmaCalcDelay = 600;
328
int64_t tsmaDataDeleteMark = 1000 * 60 * 60 * 24;  // in ms, default to 1d
329

330
#define TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, pName) \
331
  if ((pItem = cfgGetItem(pCfg, pName)) == NULL) {  \
332
    TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND);           \
333
  }
334

335
#ifndef _STORAGE
336
int32_t taosSetTfsCfg(SConfig *pCfg) {
337
  SConfigItem *pItem = NULL;
338
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "dataDir");
339
  (void)memset(tsDataDir, 0, PATH_MAX);
340

341
  int32_t size = taosArrayGetSize(pItem->array);
342
  tsDiskCfgNum = 1;
343
  tstrncpy(tsDiskCfg[0].dir, pItem->str, TSDB_FILENAME_LEN);
344
  tsDiskCfg[0].level = 0;
345
  tsDiskCfg[0].primary = 1;
346
  tsDiskCfg[0].disable = 0;
347
  tstrncpy(tsDataDir, pItem->str, PATH_MAX);
348
  if (taosMulMkDir(tsDataDir) != 0) {
349
    int32_t code = TAOS_SYSTEM_ERROR(errno);
350
    uError("failed to create dataDir:%s, since:%s", tsDataDir, tstrerror(code));
351
    TAOS_RETURN(code);
352
  }
353
  TAOS_RETURN(TSDB_CODE_SUCCESS);
354
}
355
#else
356
int32_t taosSetTfsCfg(SConfig *pCfg);
357
#endif
358

359
static int32_t taosSplitS3Cfg(SConfig *pCfg, const char *name, char gVarible[TSDB_MAX_EP_NUM][TSDB_FQDN_LEN],
4,890✔
360
                              int8_t *pNum) {
361
  int32_t code = TSDB_CODE_SUCCESS;
4,890✔
362

363
  SConfigItem *pItem = NULL;
4,890✔
364
  int32_t      num = 0;
4,890✔
365
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, name);
4,890!
366

367
  char *strDup = NULL;
4,890✔
368
  if ((strDup = taosStrdup(pItem->str)) == NULL) {
4,890!
UNCOV
369
    code = terrno;
×
UNCOV
370
    goto _exit;
×
371
  }
372

373
  char **slices = strsplit(strDup, ",", &num);
4,890✔
374
  if (num > TSDB_MAX_EP_NUM) {
4,890!
UNCOV
375
    code = TSDB_CODE_INVALID_CFG;
×
UNCOV
376
    goto _exit;
×
377
  }
378

379
  for (int i = 0; i < num; ++i) {
9,780✔
380
    tstrncpy(gVarible[i], slices[i], TSDB_FQDN_LEN);
4,890✔
381
  }
382
  *pNum = num;
4,890✔
383

384
_exit:
4,890✔
385
  taosMemoryFreeClear(slices);
4,890!
386
  taosMemoryFreeClear(strDup);
4,890!
387
  TAOS_RETURN(code);
4,890✔
388
}
389

390
int32_t taosSetS3Cfg(SConfig *pCfg) {
4,886✔
391
  int8_t num = 0;
4,886✔
392

393
  TAOS_CHECK_RETURN(taosSplitS3Cfg(pCfg, "s3Accesskey", tsS3AccessKey, &num));
4,886!
394
  if (num == 0) TAOS_RETURN(TSDB_CODE_SUCCESS);
4,886!
395

396
  tsS3EpNum = num;
4,886✔
397

398
  if (tsS3AccessKey[0][0] == '<') {
4,886✔
399
    TAOS_RETURN(TSDB_CODE_SUCCESS);
4,882✔
400
  }
401
  for (int i = 0; i < tsS3EpNum; ++i) {
8✔
402
    char *colon = strchr(tsS3AccessKey[i], ':');
4✔
403
    if (!colon) {
4!
UNCOV
404
      uError("invalid access key:%s", tsS3AccessKey[i]);
×
UNCOV
405
      TAOS_RETURN(TSDB_CODE_INVALID_CFG);
×
406
    }
407
    *colon = '\0';
4✔
408
    tstrncpy(tsS3AccessKeyId[i], tsS3AccessKey[i], TSDB_FQDN_LEN);
4✔
409
    tstrncpy(tsS3AccessKeySecret[i], colon + 1, TSDB_FQDN_LEN);
4✔
410
  }
411

412
  TAOS_CHECK_RETURN(taosSplitS3Cfg(pCfg, "s3Endpoint", tsS3Endpoint, &num));
4!
413
  if (num != tsS3EpNum) {
4!
UNCOV
414
    uError("invalid s3 ep num:%d, expected:%d, ", num, tsS3EpNum);
×
UNCOV
415
    TAOS_RETURN(TSDB_CODE_INVALID_CFG);
×
416
  }
417

418
  SConfigItem *pItem = NULL;
4✔
419
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "s3BucketName");
4!
420
  tstrncpy(tsS3BucketName, pItem->str, TSDB_FQDN_LEN);
4✔
421

422
  for (int i = 0; i < tsS3EpNum; ++i) {
8✔
423
    char *proto = strstr(tsS3Endpoint[i], "https://");
4✔
424
    if (!proto) {
4!
425
      tstrncpy(tsS3Hostname[i], tsS3Endpoint[i] + 7, TSDB_FQDN_LEN);
4✔
426
    } else {
UNCOV
427
      tstrncpy(tsS3Hostname[i], tsS3Endpoint[i] + 8, TSDB_FQDN_LEN);
×
428
    }
429

430
    char *cos = strstr(tsS3Endpoint[i], "cos.");
4✔
431
    if (cos) {
4!
432
      char *appid = strrchr(tsS3BucketName, '-');
×
433
      if (!appid) {
×
UNCOV
434
        uError("failed to locate appid in bucket:%s", tsS3BucketName);
×
435
        TAOS_RETURN(TSDB_CODE_INVALID_CFG);
×
436
      } else {
UNCOV
437
        tstrncpy(tsS3AppId[i], appid + 1, TSDB_FQDN_LEN);
×
438
      }
439
    }
440
    tsS3Https[i] = (strstr(tsS3Endpoint[i], "https://") != NULL);
4✔
441
    tsS3Oss[i] = (strstr(tsS3Endpoint[i], "aliyuncs.") != NULL);
4✔
442
    tsS3Ablob = (strstr(tsS3Endpoint[i], ".blob.core.windows.net") != NULL);
4✔
443
  }
444

445
  if (tsS3BucketName[0] != '<') {
4!
446
#if defined(USE_COS) || defined(USE_S3)
447
#ifdef TD_ENTERPRISE
448
    /*if (tsDiskCfgNum > 1) */ tsS3Enabled = true;
4✔
449
    tsS3EnabledCfg = true;
4✔
450
#endif
451
    tsS3StreamEnabled = true;
4✔
452
#endif
453
  }
454

455
  TAOS_RETURN(TSDB_CODE_SUCCESS);
4✔
456
}
457

458
struct SConfig *taosGetCfg() {
1,340✔
459
  return tsCfg;
1,340✔
460
}
461

462
static int32_t taosLoadCfg(SConfig *pCfg, const char **envCmd, const char *inputCfgDir, const char *envFile,
16,838✔
463
                           char *apolloUrl) {
464
  int32_t code = 0;
16,838✔
465
  char    cfgDir[PATH_MAX] = {0};
16,838✔
466
  char    cfgFile[PATH_MAX + 100] = {0};
16,838✔
467

468
  TAOS_CHECK_RETURN(taosExpandDir(inputCfgDir, cfgDir, PATH_MAX));
16,838!
469
  char  lastC = cfgDir[strlen(cfgDir) - 1];
16,838✔
470
  char *tdDirsep = TD_DIRSEP;
16,838✔
471
  if (lastC == '\\' || lastC == '/') {
16,838!
472
    tdDirsep = "";
3,046✔
473
  }
474
  if (taosIsDir(cfgDir)) {
16,838✔
475
#ifdef CUS_PROMPT
476
    (void)snprintf(cfgFile, sizeof(cfgFile),
477
                   "%s"
478
                   "%s"
479
                   "%s.cfg",
480
                   cfgDir, tdDirsep, CUS_PROMPT);
481
#else
482
    (void)snprintf(cfgFile, sizeof(cfgFile),
16,814✔
483
                   "%s"
484
                   "%s"
485
                   "taos.cfg",
486
                   cfgDir, tdDirsep);
487
#endif
488
  } else {
489
    tstrncpy(cfgFile, cfgDir, sizeof(cfgDir));
24✔
490
  }
491

492
  if (apolloUrl != NULL && apolloUrl[0] == '\0') {
16,838✔
493
    (void)(cfgGetApollUrl(envCmd, envFile, apolloUrl));
4,779✔
494
  }
495

496
  if ((code = cfgLoad(pCfg, CFG_STYPE_APOLLO_URL, apolloUrl)) != 0) {
16,838!
UNCOV
497
    (void)printf("failed to load from apollo url:%s since %s\n", apolloUrl, tstrerror(code));
×
UNCOV
498
    TAOS_RETURN(code);
×
499
  }
500

501
  if ((code = cfgLoad(pCfg, CFG_STYPE_CFG_FILE, cfgFile)) != 0) {
16,838!
UNCOV
502
    (void)printf("failed to load from cfg file:%s since %s\n", cfgFile, tstrerror(code));
×
UNCOV
503
    TAOS_RETURN(code);
×
504
  }
505

506
  if ((code = cfgLoad(pCfg, CFG_STYPE_ENV_FILE, envFile)) != 0) {
16,838!
UNCOV
507
    (void)printf("failed to load from env file:%s since %s\n", envFile, tstrerror(code));
×
UNCOV
508
    TAOS_RETURN(code);
×
509
  }
510

511
  if ((code = cfgLoad(pCfg, CFG_STYPE_ENV_VAR, NULL)) != 0) {
16,838!
UNCOV
512
    (void)printf("failed to load from global env variables since %s\n", tstrerror(code));
×
UNCOV
513
    TAOS_RETURN(code);
×
514
  }
515

516
  if ((code = cfgLoad(pCfg, CFG_STYPE_ENV_CMD, envCmd)) != 0) {
16,838!
UNCOV
517
    (void)printf("failed to load from cmd env variables since %s\n", tstrerror(code));
×
UNCOV
518
    TAOS_RETURN(code);
×
519
  }
520

521
  TAOS_RETURN(TSDB_CODE_SUCCESS);
16,838✔
522
}
523

524
int32_t taosAddClientLogCfg(SConfig *pCfg) {
16,837✔
525
  TAOS_CHECK_RETURN(cfgAddDir(pCfg, "configDir", configDir, CFG_SCOPE_BOTH, CFG_DYN_NONE));
16,837!
526
  TAOS_CHECK_RETURN(cfgAddDir(pCfg, "scriptDir", configDir, CFG_SCOPE_CLIENT, CFG_DYN_NONE));
16,837!
527
  TAOS_CHECK_RETURN(cfgAddDir(pCfg, "logDir", tsLogDir, CFG_SCOPE_BOTH, CFG_DYN_NONE));
16,837!
528
  TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "minimalLogDirGB", 1.0f, 0.001f, 10000000, CFG_SCOPE_BOTH, CFG_DYN_CLIENT));
16,837!
529
  TAOS_CHECK_RETURN(
16,837!
530
      cfgAddInt32(pCfg, "numOfLogLines", tsNumOfLogLines, 1000, 2000000000, CFG_SCOPE_BOTH, CFG_DYN_ENT_BOTH));
531
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "asyncLog", tsAsyncLog, CFG_SCOPE_BOTH, CFG_DYN_BOTH));
16,837!
532
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "logKeepDays", 0, -365000, 365000, CFG_SCOPE_BOTH, CFG_DYN_ENT_BOTH));
16,837!
533
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "debugFlag", 0, 0, 255, CFG_SCOPE_BOTH, CFG_DYN_BOTH));
16,837!
534
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "simDebugFlag", simDebugFlag, 0, 255, CFG_SCOPE_CLIENT, CFG_DYN_BOTH));
16,837!
535
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tmrDebugFlag", tmrDebugFlag, 0, 255, CFG_SCOPE_BOTH, CFG_DYN_BOTH));
16,837!
536
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "uDebugFlag", uDebugFlag, 0, 255, CFG_SCOPE_BOTH, CFG_DYN_BOTH));
16,837!
537
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "rpcDebugFlag", rpcDebugFlag, 0, 255, CFG_SCOPE_BOTH, CFG_DYN_BOTH));
16,837!
538
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "jniDebugFlag", jniDebugFlag, 0, 255, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT));
16,837!
539
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "qDebugFlag", qDebugFlag, 0, 255, CFG_SCOPE_BOTH, CFG_DYN_BOTH));
16,837!
540
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "cDebugFlag", cDebugFlag, 0, 255, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT));
16,837!
541
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tqClientDebugFlag", tqClientDebugFlag, 0, 255, CFG_SCOPE_CLIENT, CFG_DYN_SERVER));
16,837!
542
  TAOS_RETURN(TSDB_CODE_SUCCESS);
16,837✔
543
}
544

545
static int32_t taosAddServerLogCfg(SConfig *pCfg) {
9,772✔
546
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "dDebugFlag", dDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
9,772!
547
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "vDebugFlag", vDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
9,772!
548
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "mDebugFlag", mDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
9,772!
549
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "wDebugFlag", wDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
9,772!
550
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "azDebugFlag", azDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
9,772!
551
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "sDebugFlag", sDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
9,772!
552
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tsdbDebugFlag", tsdbDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
9,772!
553
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tqDebugFlag", tqDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
9,772!
554
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "fsDebugFlag", fsDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
9,772!
555
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "udfDebugFlag", udfDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
9,772!
556
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "smaDebugFlag", smaDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
9,772!
557
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "idxDebugFlag", idxDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
9,772!
558
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tdbDebugFlag", tdbDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
9,772!
559
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "metaDebugFlag", metaDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
9,772!
560
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "stDebugFlag", stDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
9,772!
561
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "sndDebugFlag", sndDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
9,772!
562
  TAOS_RETURN(TSDB_CODE_SUCCESS);
9,772✔
563
}
564

565
static int32_t taosAddClientCfg(SConfig *pCfg) {
8,175✔
566
  char    defaultFqdn[TSDB_FQDN_LEN] = {0};
8,175✔
567
  int32_t defaultServerPort = 6030;
8,175✔
568
  if (taosGetFqdn(defaultFqdn) != 0) {
8,175!
UNCOV
569
    (void)strcpy(defaultFqdn, "localhost");
×
570
  }
571

572
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "firstEp", "", CFG_SCOPE_BOTH, CFG_DYN_CLIENT));
8,175!
573
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "secondEp", "", CFG_SCOPE_BOTH, CFG_DYN_CLIENT));
8,175!
574
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "fqdn", defaultFqdn, CFG_SCOPE_SERVER, CFG_DYN_CLIENT));
8,175!
575
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "serverPort", defaultServerPort, 1, 65056, CFG_SCOPE_SERVER, CFG_DYN_CLIENT));
8,175!
576
  TAOS_CHECK_RETURN(cfgAddDir(pCfg, "tempDir", tsTempDir, CFG_SCOPE_BOTH, CFG_DYN_NONE));
8,175!
577
  TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "minimalTmpDirGB", 1.0f, 0.001f, 10000000, CFG_SCOPE_BOTH, CFG_DYN_CLIENT));
8,175!
578
  TAOS_CHECK_RETURN(
8,175!
579
      cfgAddInt32(pCfg, "shellActivityTimer", tsShellActivityTimer, 1, 120, CFG_SCOPE_BOTH, CFG_DYN_CLIENT));
580
  TAOS_CHECK_RETURN(
8,175!
581
      cfgAddInt32(pCfg, "compressMsgSize", tsCompressMsgSize, -1, 100000000, CFG_SCOPE_BOTH, CFG_DYN_CLIENT));
582
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryPolicy", tsQueryPolicy, 1, 4, CFG_SCOPE_CLIENT, CFG_DYN_ENT_CLIENT));
8,175!
583
  TAOS_CHECK_RETURN(
8,175!
584
      cfgAddBool(pCfg, "queryTableNotExistAsEmpty", tsQueryTbNotExistAsEmpty, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT));
585
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "enableQueryHb", tsEnableQueryHb, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT));
8,175!
586
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "enableScience", tsEnableScience, CFG_SCOPE_CLIENT, CFG_DYN_NONE));
8,175!
587
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "querySmaOptimize", tsQuerySmaOptimize, 0, 1, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT));
8,175!
588
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "queryPlannerTrace", tsQueryPlannerTrace, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT));
8,175!
589
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryNodeChunkSize", tsQueryNodeChunkSize, 1024, 128 * 1024, CFG_SCOPE_CLIENT,
8,175!
590
                                CFG_DYN_CLIENT));
591
  TAOS_CHECK_RETURN(
8,175!
592
      cfgAddBool(pCfg, "queryUseNodeAllocator", tsQueryUseNodeAllocator, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT));
593
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "keepColumnName", tsKeepColumnName, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT));
8,175!
594
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "minSlidingTime", tsMinSlidingTime, 1, 1000000, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT));
8,175!
595
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "minIntervalTime", tsMinIntervalTime, 1, 1000000, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT));
8,175!
596
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "smlChildTableName", tsSmlChildTableName, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT));
8,175!
597
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "smlAutoChildTableNameDelimiter", tsSmlAutoChildTableNameDelimiter,
8,175!
598
                                 CFG_SCOPE_CLIENT, CFG_DYN_CLIENT));
599
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "smlTagName", tsSmlTagName, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT));
8,175!
600
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "smlTsDefaultName", tsSmlTsDefaultName, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT));
8,175!
601
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "smlDot2Underline", tsSmlDot2Underline, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT));
8,175!
602
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxInsertBatchRows", tsMaxInsertBatchRows, 1, INT32_MAX, CFG_SCOPE_CLIENT,
8,175!
603
                                CFG_DYN_CLIENT) != 0);
604
  TAOS_CHECK_RETURN(
8,175!
605
      cfgAddInt32(pCfg, "maxRetryWaitTime", tsMaxRetryWaitTime, 0, 86400000, CFG_SCOPE_SERVER, CFG_DYN_CLIENT));
606
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "useAdapter", tsUseAdapter, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT));
8,175!
607
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "crashReporting", tsEnableCrashReport, CFG_SCOPE_BOTH, CFG_DYN_CLIENT));
8,175!
608
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "queryMaxConcurrentTables", tsQueryMaxConcurrentTables, INT64_MIN, INT64_MAX,
8,175!
609
                                CFG_SCOPE_CLIENT, CFG_DYN_NONE));
610
  TAOS_CHECK_RETURN(
8,175!
611
      cfgAddInt32(pCfg, "metaCacheMaxSize", tsMetaCacheMaxSize, -1, INT32_MAX, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT));
612
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "randErrorChance", tsRandErrChance, 0, 10000, CFG_SCOPE_BOTH, CFG_DYN_BOTH));
8,175!
613
  TAOS_CHECK_RETURN(
8,175!
614
      cfgAddInt64(pCfg, "randErrorDivisor", tsRandErrDivisor, 1, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_BOTH));
615
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "randErrorScope", tsRandErrScope, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_BOTH));
8,175!
616
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "safetyCheckLevel", tsSafetyCheckLevel, 0, 5, CFG_SCOPE_BOTH, CFG_DYN_BOTH));
8,175!
617
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "bypassFlag", tsBypassFlag, 0, INT32_MAX, CFG_SCOPE_BOTH, CFG_DYN_BOTH));
8,175!
618

619
  tsNumOfRpcThreads = tsNumOfCores / 2;
8,175✔
620
  tsNumOfRpcThreads = TRANGE(tsNumOfRpcThreads, 1, TSDB_MAX_RPC_THREADS);
8,175✔
621
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfRpcThreads", tsNumOfRpcThreads, 1, 1024, CFG_SCOPE_BOTH, CFG_DYN_NONE));
8,175!
622

623
  tsNumOfRpcSessions = TRANGE(tsNumOfRpcSessions, 100, 100000);
8,175✔
624
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfRpcSessions", tsNumOfRpcSessions, 1, 100000, CFG_SCOPE_BOTH, CFG_DYN_NONE));
8,175!
625

626
  tsShareConnLimit = TRANGE(tsShareConnLimit, 1, 512);
8,175✔
627
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "shareConnLimit", tsShareConnLimit, 1, 512, CFG_SCOPE_BOTH, CFG_DYN_NONE));
8,175!
628

629
  tsReadTimeout = TRANGE(tsReadTimeout, 64, 24 * 3600 * 7);
8,175✔
630
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "readTimeout", tsReadTimeout, 64, 24 * 3600 * 7, CFG_SCOPE_BOTH, CFG_DYN_NONE));
8,175!
631

632
  tsTimeToGetAvailableConn = TRANGE(tsTimeToGetAvailableConn, 20, 10000000);
8,175✔
633
  TAOS_CHECK_RETURN(
8,175!
634
      cfgAddInt32(pCfg, "timeToGetAvailableConn", tsTimeToGetAvailableConn, 20, 1000000, CFG_SCOPE_BOTH, CFG_DYN_NONE));
635

636
  tsNumOfTaskQueueThreads = tsNumOfCores * 2;
8,175✔
637
  tsNumOfTaskQueueThreads = TMAX(tsNumOfTaskQueueThreads, 16);
8,175✔
638

639
  TAOS_CHECK_RETURN(
8,175!
640
      cfgAddInt32(pCfg, "numOfTaskQueueThreads", tsNumOfTaskQueueThreads, 4, 1024, CFG_SCOPE_CLIENT, CFG_DYN_NONE));
641
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "experimental", tsExperimental, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
8,175!
642

643
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "multiResultFunctionStarReturnTags", tsMultiResultFunctionStarReturnTags,
8,175!
644
                               CFG_SCOPE_CLIENT, CFG_DYN_CLIENT));
645
  TAOS_CHECK_RETURN(
8,175!
646
      cfgAddInt32(pCfg, "countAlwaysReturnValue", tsCountAlwaysReturnValue, 0, 1, CFG_SCOPE_BOTH, CFG_DYN_CLIENT));
647
  TAOS_CHECK_RETURN(
8,175!
648
      cfgAddInt32(pCfg, "maxTsmaCalcDelay", tsMaxTsmaCalcDelay, 600, 86400, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT));
649
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tsmaDataDeleteMark", tsmaDataDeleteMark, 60 * 60 * 1000, INT64_MAX,
8,175!
650
                                CFG_SCOPE_CLIENT, CFG_DYN_CLIENT));
651
  TAOS_RETURN(TSDB_CODE_SUCCESS);
8,175✔
652
}
653

654
static int32_t taosAddSystemCfg(SConfig *pCfg) {
8,175✔
655
  SysNameInfo info = taosGetSysNameInfo();
8,175✔
656

657
  TAOS_CHECK_RETURN(cfgAddTimezone(pCfg, "timezone", tsTimezoneStr, CFG_SCOPE_BOTH, CFG_DYN_CLIENT));
8,175!
658
  TAOS_CHECK_RETURN(cfgAddLocale(pCfg, "locale", tsLocale, CFG_SCOPE_BOTH, CFG_DYN_CLIENT));
8,175!
659
  TAOS_CHECK_RETURN(cfgAddCharset(pCfg, "charset", tsCharset, CFG_SCOPE_BOTH, CFG_DYN_NONE));
8,175!
660
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "assert", tsAssert, CFG_SCOPE_BOTH, CFG_DYN_CLIENT));
8,175!
661
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "enableCoreFile", tsEnableCoreFile, CFG_SCOPE_BOTH, CFG_DYN_BOTH));
8,175!
662
  TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "numOfCores", tsNumOfCores, 1, 100000, CFG_SCOPE_BOTH, CFG_DYN_NONE));
8,175!
663

664
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "simdEnable", tsSIMDEnable, CFG_SCOPE_BOTH, CFG_DYN_NONE));
8,175!
665
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "AVX512Enable", tsAVX512Enable, CFG_SCOPE_BOTH, CFG_DYN_NONE));
8,175!
666
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "tagFilterCache", tsTagFilterCache, CFG_SCOPE_BOTH, CFG_DYN_NONE));
8,175!
667

668
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "openMax", tsOpenMax, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_NONE));
8,175!
669
#if !defined(_ALPINE)
670
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "streamMax", tsStreamMax, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_NONE));
8,175!
671
#endif
672
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "pageSizeKB", tsPageSizeKB, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_NONE));
8,175!
673
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "totalMemoryKB", tsTotalMemoryKB, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_NONE));
8,175!
674
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "os sysname", info.sysname, CFG_SCOPE_BOTH, CFG_DYN_NONE));
8,175!
675
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "os nodename", info.nodename, CFG_SCOPE_BOTH, CFG_DYN_NONE));
8,175!
676
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "os release", info.release, CFG_SCOPE_BOTH, CFG_DYN_NONE));
8,175!
677
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "os version", info.version, CFG_SCOPE_BOTH, CFG_DYN_NONE));
8,175!
678
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "os machine", info.machine, CFG_SCOPE_BOTH, CFG_DYN_NONE));
8,175!
679

680
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "version", td_version, CFG_SCOPE_BOTH, CFG_DYN_NONE));
8,175!
681
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "compatible_version", td_compatible_version, CFG_SCOPE_BOTH, CFG_DYN_NONE));
8,175!
682
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "gitinfo", td_gitinfo, CFG_SCOPE_BOTH, CFG_DYN_NONE));
8,175!
683
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "buildinfo", td_buildinfo, CFG_SCOPE_BOTH, CFG_DYN_NONE));
8,175!
684
  TAOS_RETURN(TSDB_CODE_SUCCESS);
8,175✔
685
}
686

687
static int32_t taosAddServerCfg(SConfig *pCfg) {
4,886✔
688
  tsNumOfCommitThreads = tsNumOfCores / 2;
4,886✔
689
  tsNumOfCommitThreads = TRANGE(tsNumOfCommitThreads, 2, 4);
4,886✔
690

691
  tsNumOfSupportVnodes = tsNumOfCores * 2 + 5;
4,886✔
692
  tsNumOfSupportVnodes = TMAX(tsNumOfSupportVnodes, 2);
4,886✔
693

694
  tsNumOfMnodeReadThreads = tsNumOfCores / 8;
4,886✔
695
  tsNumOfMnodeReadThreads = TRANGE(tsNumOfMnodeReadThreads, 1, 4);
4,886✔
696

697
  tsNumOfVnodeQueryThreads = tsNumOfCores * 2;
4,886✔
698
  tsNumOfVnodeQueryThreads = TMAX(tsNumOfVnodeQueryThreads, 16);
4,886✔
699

700
  tsNumOfVnodeFetchThreads = tsNumOfCores / 4;
4,886✔
701
  tsNumOfVnodeFetchThreads = TMAX(tsNumOfVnodeFetchThreads, 4);
4,886✔
702

703
  tsNumOfVnodeRsmaThreads = tsNumOfCores / 4;
4,886✔
704
  tsNumOfVnodeRsmaThreads = TMAX(tsNumOfVnodeRsmaThreads, 4);
4,886✔
705

706
  tsNumOfQnodeQueryThreads = tsNumOfCores * 2;
4,886✔
707
  tsNumOfQnodeQueryThreads = TMAX(tsNumOfQnodeQueryThreads, 16);
4,886✔
708

709
  tsNumOfSnodeStreamThreads = tsNumOfCores / 4;
4,886✔
710
  tsNumOfSnodeStreamThreads = TRANGE(tsNumOfSnodeStreamThreads, 2, 4);
4,886✔
711

712
  tsNumOfSnodeWriteThreads = tsNumOfCores / 4;
4,886✔
713
  tsNumOfSnodeWriteThreads = TRANGE(tsNumOfSnodeWriteThreads, 2, 4);
4,886✔
714

715
  tsQueueMemoryAllowed = tsTotalMemoryKB * 1024 * 0.1;
4,886✔
716
  tsQueueMemoryAllowed = TRANGE(tsQueueMemoryAllowed, TSDB_MAX_MSG_SIZE * 10LL, TSDB_MAX_MSG_SIZE * 10000LL);
4,886✔
717

718
  tsLogBufferMemoryAllowed = tsTotalMemoryKB * 1024 * 0.1;
4,886✔
719
  tsLogBufferMemoryAllowed = TRANGE(tsLogBufferMemoryAllowed, TSDB_MAX_MSG_SIZE * 10LL, TSDB_MAX_MSG_SIZE * 10000LL);
4,886✔
720

721
  // clang-format off
722
  TAOS_CHECK_RETURN(cfgAddDir(pCfg, "dataDir", tsDataDir, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
723
  TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "minimalDataDirGB", 2.0f, 0.001f, 10000000, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
724
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "supportVnodes", tsNumOfSupportVnodes, 0, 4096, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER));
4,886!
725

726
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "encryptAlgorithm", tsEncryptAlgorithm, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
727
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "encryptScope", tsEncryptScope, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
728

729
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "statusInterval", tsStatusInterval, 1, 30, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
730
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxShellConns", tsMaxShellConns, 10, 50000000, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
731

732
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryBufferSize", tsQueryBufferSize, -1, 500000000000, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
733
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryRspPolicy", tsQueryRspPolicy, 0, 1, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER));
4,886!
734
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfCommitThreads", tsNumOfCommitThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
735
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "retentionSpeedLimitMB", tsRetentionSpeedLimitMB, 0, 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
736

737
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfMnodeReadThreads", tsNumOfMnodeReadThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
738
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfVnodeQueryThreads", tsNumOfVnodeQueryThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
739
  TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "ratioOfVnodeStreamThreads", tsRatioOfVnodeStreamThreads, 0.01, 4, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
740
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfVnodeFetchThreads", tsNumOfVnodeFetchThreads, 4, 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
741

742
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfVnodeRsmaThreads", tsNumOfVnodeRsmaThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
743
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfQnodeQueryThreads", tsNumOfQnodeQueryThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
744

745
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfSnodeSharedThreads", tsNumOfSnodeStreamThreads, 2, 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
746
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfSnodeUniqueThreads", tsNumOfSnodeWriteThreads, 2, 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
747

748
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "rpcQueueMemoryAllowed", tsQueueMemoryAllowed, TSDB_MAX_MSG_SIZE * 10L, INT64_MAX, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
749

750
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncElectInterval", tsElectInterval, 10, 1000 * 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
751
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncHeartbeatInterval", tsHeartbeatInterval, 10, 1000 * 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
752
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncHeartbeatTimeout", tsHeartbeatTimeout, 10, 1000 * 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
753
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncSnapReplMaxWaitN", tsSnapReplMaxWaitN, 16, (TSDB_SYNC_SNAP_BUFFER_SIZE >> 2), CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
754
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "syncLogBufferMemoryAllowed", tsLogBufferMemoryAllowed, TSDB_MAX_MSG_SIZE * 10L, INT64_MAX, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER));
4,886!
755

756
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "arbHeartBeatIntervalSec", tsArbHeartBeatIntervalSec, 1, 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
757
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "arbCheckSyncIntervalSec", tsArbCheckSyncIntervalSec, 1, 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
758
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "arbSetAssignedTimeoutSec", tsArbSetAssignedTimeoutSec, 1, 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
759

760
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "mndSdbWriteDelta", tsMndSdbWriteDelta, 20, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER));
4,886!
761
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "mndLogRetention", tsMndLogRetention, 500, 10000, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
762
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "skipGrant", tsMndSkipGrant, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
763

764
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "monitor", tsEnableMonitor, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
4,886!
765
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "monitorInterval", tsMonitorInterval, 1, 86400, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
4,886!
766

767
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "slowLogThreshold", tsSlowLogThreshold, 1, INT32_MAX, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
4,886!
768
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "slowLogMaxLen", tsSlowLogMaxLen, 1, 16384, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
4,886!
769
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "slowLogScope", tsSlowLogScopeString, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
4,886!
770
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "slowLogExceptDb", tsSlowLogExceptDb, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
4,886!
771

772
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "monitorFqdn", tsMonitorFqdn, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
773
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "monitorPort", tsMonitorPort, 1, 65056, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
774
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "monitorMaxLogs", tsMonitorMaxLogs, 1, 1000000, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
775
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "monitorComp", tsMonitorComp, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
776
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "monitorLogProtocol", tsMonitorLogProtocol, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
4,886!
777
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "monitorForceV2", tsMonitorForceV2, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
778

779
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "audit", tsEnableAudit, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER));
4,886!
780
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "enableAuditDelete", tsEnableAuditDelete, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
781
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "auditCreateTable", tsEnableAuditCreateTable, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
782
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "auditInterval", tsAuditInterval, 500, 200000, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
783

784
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "telemetryReporting", tsEnableTelem, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER));
4,886!
785
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "telemetryInterval", tsTelemInterval, 1, 200000, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
786
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "telemetryServer", tsTelemServer, CFG_SCOPE_SERVER, CFG_DYN_BOTH));
4,886!
787
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "telemetryPort", tsTelemPort, 1, 65056, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
788

789
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "rsyncPort", tsRsyncPort, 1, 65535, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
4,886!
790
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "snodeAddress", tsSnodeAddress, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
4,886!
791
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "checkpointBackupDir", tsCheckpointBackupDir, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
4,886!
792

793
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tmqMaxTopicNum", tmqMaxTopicNum, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER));
4,886!
794

795
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tmqRowSize", tmqRowSize, 1, 1000000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER));
4,886!
796

797
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxTsmaNum", tsMaxTsmaNum, 0, 3, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
4,886!
798
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "transPullupInterval", tsTransPullupInterval, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER));
4,886!
799
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "compactPullupInterval", tsCompactPullupInterval, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER));
4,886!
800
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "mqRebalanceInterval", tsMqRebalanceInterval, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER));
4,886!
801

802
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "ttlUnit", tsTtlUnit, 1, 86400 * 365, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
803
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "ttlPushInterval", tsTtlPushIntervalSec, 1, 100000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER));
4,886!
804
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "ttlBatchDropNum", tsTtlBatchDropNum, 0, INT32_MAX, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER));
4,886!
805
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "ttlChangeOnWrite", tsTtlChangeOnWrite, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
806
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "ttlFlushThreshold", tsTtlFlushThreshold, -1, 1000000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER));
4,886!
807
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "trimVDbIntervalSec", tsTrimVDbIntervalSec, 1, 100000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER));
4,886!
808
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "s3MigrateIntervalSec", tsS3MigrateIntervalSec, 600, 100000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER));
4,886!
809
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "s3MigrateEnabled", tsS3MigrateEnabled, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER));
4,886!
810
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "uptimeInterval", tsUptimeInterval, 1, 100000, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
811
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryRsmaTolerance", tsQueryRsmaTolerance, 0, 900000, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
812
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "timeseriesThreshold", tsTimeSeriesThreshold, 0, 2000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER));
4,886!
813

814
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "walFsyncDataSizeLimit", tsWalFsyncDataSizeLimit, 100 * 1024 * 1024, INT64_MAX, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
815

816
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "udf", tsStartUdfd, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
817
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "udfdResFuncs", tsUdfdResFuncs, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
818
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "udfdLdLibPath", tsUdfdLdLibPath, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
819

820
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "disableStream", tsDisableStream, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER));
4,886!
821
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "streamBufferSize", tsStreamBufferSize, 0, INT64_MAX, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
822
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "streamAggCnt", tsStreamAggCnt, 2, INT32_MAX, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
823

824
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "checkpointInterval", tsStreamCheckpointInterval, 60, 1800, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER));
4,886!
825
  TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "streamSinkDataRate", tsSinkDataRate, 0.1, 5, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
826
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "concurrentCheckpoint", tsMaxConcurrentCheckpoint, 1, 10, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER));
4,886!
827

828
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "cacheLazyLoadThreshold", tsCacheLazyLoadThreshold, 0, 100000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER));
4,886!
829

830
  TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "fPrecision", tsFPrecision, 0.0f, 100000.0f, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
831
  TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "dPrecision", tsDPrecision, 0.0f, 1000000.0f, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
832
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxRange", tsMaxRange, 0, 65536, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
833
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "curRange", tsCurRange, 0, 65536, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
834
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "ifAdtFse", tsIfAdtFse, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
835
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "compressor", tsCompressor, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
836

837
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "filterScalarMode", tsFilterScalarMode, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
838
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxStreamBackendCache", tsMaxStreamBackendCache, 16, 1024, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER));
4,886!
839
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "pqSortMemThreshold", tsPQSortMemThreshold, 1, 10240, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
840
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "resolveFQDNRetryTime", tsResolveFQDNRetryTime, 1, 10240, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
841

842
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "s3Accesskey", tsS3AccessKey[0], CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
843
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "s3Endpoint", tsS3Endpoint[0], CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
844
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "s3BucketName", tsS3BucketName, CFG_SCOPE_SERVER, CFG_DYN_NONE));
4,886!
845

846
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "s3PageCacheSize", tsS3PageCacheSize, 4, 1024 * 1024 * 1024, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER));
4,886!
847
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "s3UploadDelaySec", tsS3UploadDelaySec, 1, 60 * 60 * 24 * 30, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER));
4,886!
848

849
  // min free disk space used to check if the disk is full [50MB, 1GB]
850
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "minDiskFreeSize", tsMinDiskFreeSize, TFS_MIN_DISK_FREE_SIZE, 1024 * 1024 * 1024, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER));
4,886!
851
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "enableWhiteList", tsEnableWhiteList, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
4,886!
852

853
  // clang-format on
854

855
  // GRANT_CFG_ADD;
856
  TAOS_RETURN(TSDB_CODE_SUCCESS);
4,886✔
857
}
858

859
static int32_t taosUpdateServerCfg(SConfig *pCfg) {
4,886✔
860
  SConfigItem *pItem;
861
  ECfgSrcType  stype;
862
  int32_t      numOfCores;
863
  int64_t      totalMemoryKB;
864

865
  pItem = cfgGetItem(pCfg, "numOfCores");
4,886✔
866
  if (pItem == NULL) {
4,886!
UNCOV
867
    TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND);
×
868
  } else {
869
    stype = pItem->stype;
4,886✔
870
    numOfCores = pItem->fval;
4,886✔
871
  }
872

873
  pItem = cfgGetItem(pCfg, "supportVnodes");
4,886✔
874
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
4,886!
875
    tsNumOfSupportVnodes = numOfCores * 2 + 5;
5✔
876
    tsNumOfSupportVnodes = TMAX(tsNumOfSupportVnodes, 2);
5✔
877
    pItem->i32 = tsNumOfSupportVnodes;
5✔
878
    pItem->stype = stype;
5✔
879
  }
880

881
  pItem = cfgGetItem(pCfg, "numOfRpcThreads");
4,886✔
882
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
4,886!
883
    tsNumOfRpcThreads = TRANGE(tsNumOfRpcThreads, 1, TSDB_MAX_RPC_THREADS);
4,886✔
884
    pItem->i32 = tsNumOfRpcThreads;
4,886✔
885
    pItem->stype = stype;
4,886✔
886
  }
887

888
  pItem = cfgGetItem(pCfg, "numOfRpcSessions");
4,886✔
889
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
4,886!
890
    tsNumOfRpcSessions = TRANGE(tsNumOfRpcSessions, 100, 10000);
4,886✔
891
    pItem->i32 = tsNumOfRpcSessions;
4,886✔
892
    pItem->stype = stype;
4,886✔
893
  }
894

895
  pItem = cfgGetItem(pCfg, "shareConnLimit");
4,886✔
896
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
4,886!
897
    tsShareConnLimit = TRANGE(tsShareConnLimit, 1, 512);
4,886✔
898
    pItem->i32 = tsShareConnLimit;
4,886✔
899
    pItem->stype = stype;
4,886✔
900
  }
901

902
  pItem = cfgGetItem(pCfg, "readTimeout");
4,886✔
903
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
4,886!
904
    tsReadTimeout = TRANGE(tsReadTimeout, 64, 24 * 3600 * 7);
4,886✔
905
    pItem->i32 = tsReadTimeout;
4,886✔
906
    pItem->stype = stype;
4,886✔
907
  }
908

909
  pItem = cfgGetItem(pCfg, "timeToGetAvailableConn");
4,886✔
910
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
4,886!
911
    tsTimeToGetAvailableConn = TRANGE(tsTimeToGetAvailableConn, 20, 1000000);
4,886✔
912
    pItem->i32 = tsTimeToGetAvailableConn;
4,886✔
913
    pItem->stype = stype;
4,886✔
914
  }
915

916
  pItem = cfgGetItem(pCfg, "numOfCommitThreads");
4,886✔
917
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
4,886!
918
    tsNumOfCommitThreads = numOfCores / 2;
4,886✔
919
    tsNumOfCommitThreads = TRANGE(tsNumOfCommitThreads, 2, 4);
4,886✔
920
    pItem->i32 = tsNumOfCommitThreads;
4,886✔
921
    pItem->stype = stype;
4,886✔
922
  }
923

924
  pItem = cfgGetItem(pCfg, "numOfMnodeReadThreads");
4,886✔
925
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
4,886!
926
    tsNumOfMnodeReadThreads = numOfCores / 8;
4,886✔
927
    tsNumOfMnodeReadThreads = TRANGE(tsNumOfMnodeReadThreads, 1, 4);
4,886✔
928
    pItem->i32 = tsNumOfMnodeReadThreads;
4,886✔
929
    pItem->stype = stype;
4,886✔
930
  }
931

932
  pItem = cfgGetItem(pCfg, "numOfVnodeQueryThreads");
4,886✔
933
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
4,886!
934
    tsNumOfVnodeQueryThreads = numOfCores * 2;
4,878✔
935
    tsNumOfVnodeQueryThreads = TMAX(tsNumOfVnodeQueryThreads, 16);
4,878✔
936
    pItem->i32 = tsNumOfVnodeQueryThreads;
4,878✔
937
    pItem->stype = stype;
4,878✔
938
  }
939

940
  pItem = cfgGetItem(pCfg, "ratioOfVnodeStreamThreads");
4,886✔
941
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
4,886!
942
    pItem->fval = tsRatioOfVnodeStreamThreads;
4,886✔
943
    pItem->stype = stype;
4,886✔
944
  }
945

946
  pItem = cfgGetItem(pCfg, "numOfVnodeFetchThreads");
4,886✔
947
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
4,886!
948
    tsNumOfVnodeFetchThreads = numOfCores / 4;
4,886✔
949
    tsNumOfVnodeFetchThreads = TMAX(tsNumOfVnodeFetchThreads, 4);
4,886✔
950
    pItem->i32 = tsNumOfVnodeFetchThreads;
4,886✔
951
    pItem->stype = stype;
4,886✔
952
  }
953

954
  pItem = cfgGetItem(pCfg, "numOfVnodeRsmaThreads");
4,886✔
955
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
4,886!
956
    tsNumOfVnodeRsmaThreads = numOfCores;
4,886✔
957
    tsNumOfVnodeRsmaThreads = TMAX(tsNumOfVnodeRsmaThreads, 4);
4,886✔
958
    pItem->i32 = tsNumOfVnodeRsmaThreads;
4,886✔
959
    pItem->stype = stype;
4,886✔
960
  }
961

962
  pItem = cfgGetItem(pCfg, "numOfQnodeQueryThreads");
4,886✔
963
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
4,886!
964
    tsNumOfQnodeQueryThreads = numOfCores * 2;
4,886✔
965
    tsNumOfQnodeQueryThreads = TMAX(tsNumOfQnodeQueryThreads, 16);
4,886✔
966
    pItem->i32 = tsNumOfQnodeQueryThreads;
4,886✔
967
    pItem->stype = stype;
4,886✔
968
  }
969

970
  pItem = cfgGetItem(pCfg, "numOfSnodeSharedThreads");
4,886✔
971
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
4,886!
972
    tsNumOfSnodeStreamThreads = numOfCores / 4;
4,886✔
973
    tsNumOfSnodeStreamThreads = TRANGE(tsNumOfSnodeStreamThreads, 2, 4);
4,886✔
974
    pItem->i32 = tsNumOfSnodeStreamThreads;
4,886✔
975
    pItem->stype = stype;
4,886✔
976
  }
977

978
  pItem = cfgGetItem(pCfg, "numOfSnodeUniqueThreads");
4,886✔
979
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
4,886!
980
    tsNumOfSnodeWriteThreads = numOfCores / 4;
4,886✔
981
    tsNumOfSnodeWriteThreads = TRANGE(tsNumOfSnodeWriteThreads, 2, 4);
4,886✔
982
    pItem->i32 = tsNumOfSnodeWriteThreads;
4,886✔
983
    pItem->stype = stype;
4,886✔
984
  }
985

986
  pItem = cfgGetItem(pCfg, "totalMemoryKB");
4,886✔
987
  if (pItem == NULL) {
4,886!
UNCOV
988
    TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND);
×
989
  } else {
990
    stype = pItem->stype;
4,886✔
991
    totalMemoryKB = pItem->i64;
4,886✔
992
  }
993

994
  pItem = cfgGetItem(pCfg, "rpcQueueMemoryAllowed");
4,886✔
995
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
4,886!
996
    tsQueueMemoryAllowed = totalMemoryKB * 1024 * 0.1;
4,886✔
997
    tsQueueMemoryAllowed = TRANGE(tsQueueMemoryAllowed, TSDB_MAX_MSG_SIZE * 10LL, TSDB_MAX_MSG_SIZE * 10000LL);
4,886✔
998
    pItem->i64 = tsQueueMemoryAllowed;
4,886✔
999
    pItem->stype = stype;
4,886✔
1000
  }
1001

1002
  pItem = cfgGetItem(tsCfg, "syncLogBufferMemoryAllowed");
4,886✔
1003
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
4,886!
1004
    tsLogBufferMemoryAllowed = totalMemoryKB * 1024 * 0.1;
4,886✔
1005
    tsLogBufferMemoryAllowed = TRANGE(tsLogBufferMemoryAllowed, TSDB_MAX_MSG_SIZE * 10LL, TSDB_MAX_MSG_SIZE * 10000LL);
4,886✔
1006
    pItem->i64 = tsLogBufferMemoryAllowed;
4,886✔
1007
    pItem->stype = stype;
4,886✔
1008
  }
1009

1010
  TAOS_RETURN(TSDB_CODE_SUCCESS);
4,886✔
1011
}
1012

1013
static int32_t taosSetClientLogCfg(SConfig *pCfg) {
8,662✔
1014
  SConfigItem *pItem = NULL;
8,662✔
1015

1016
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "logDir");
8,662!
1017
  tstrncpy(tsLogDir, pItem->str, PATH_MAX);
8,662✔
1018
  TAOS_CHECK_RETURN(taosExpandDir(tsLogDir, tsLogDir, PATH_MAX));
8,662!
1019

1020
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minimalLogDirGB");
8,662!
1021
  tsLogSpace.reserved = (int64_t)(((double)pItem->fval) * 1024 * 1024 * 1024);
8,662✔
1022

1023
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfLogLines");
8,662!
1024
  tsNumOfLogLines = pItem->i32;
8,662✔
1025

1026
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "asyncLog");
8,662!
1027
  tsAsyncLog = pItem->bval;
8,662✔
1028

1029
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "logKeepDays");
8,662!
1030
  tsLogKeepDays = pItem->i32;
8,662✔
1031

1032
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tmrDebugFlag");
8,662!
1033
  tmrDebugFlag = pItem->i32;
8,662✔
1034

1035
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "uDebugFlag");
8,662!
1036
  uDebugFlag = pItem->i32;
8,662✔
1037

1038
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "jniDebugFlag");
8,662!
1039
  jniDebugFlag = pItem->i32;
8,662✔
1040

1041
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "rpcDebugFlag");
8,662!
1042
  rpcDebugFlag = pItem->i32;
8,662✔
1043

1044
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "qDebugFlag");
8,662!
1045
  qDebugFlag = pItem->i32;
8,662✔
1046

1047
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "cDebugFlag");
8,662!
1048
  cDebugFlag = pItem->i32;
8,662✔
1049

1050
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "simDebugFlag");
8,662!
1051
  simDebugFlag = pItem->i32;
8,662✔
1052

1053
  TAOS_RETURN(TSDB_CODE_SUCCESS);
8,662✔
1054
}
1055

1056
static int32_t taosSetServerLogCfg(SConfig *pCfg) {
4,886✔
1057
  SConfigItem *pItem = NULL;
4,886✔
1058
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "dDebugFlag");
4,886!
1059
  dDebugFlag = pItem->i32;
4,886✔
1060

1061
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "vDebugFlag");
4,886!
1062
  vDebugFlag = pItem->i32;
4,886✔
1063

1064
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "mDebugFlag");
4,886!
1065
  mDebugFlag = pItem->i32;
4,886✔
1066

1067
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "wDebugFlag");
4,886!
1068
  wDebugFlag = pItem->i32;
4,886✔
1069

1070
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "azDebugFlag");
4,886!
1071
  azDebugFlag = pItem->i32;
4,886✔
1072

1073
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "sDebugFlag");
4,886!
1074
  sDebugFlag = pItem->i32;
4,886✔
1075

1076
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tsdbDebugFlag");
4,886!
1077
  tsdbDebugFlag = pItem->i32;
4,886✔
1078

1079
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tqDebugFlag");
4,886!
1080
  tqDebugFlag = pItem->i32;
4,886✔
1081

1082
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "fsDebugFlag");
4,886!
1083
  fsDebugFlag = pItem->i32;
4,886✔
1084

1085
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "udfDebugFlag");
4,886!
1086
  udfDebugFlag = pItem->i32;
4,886✔
1087

1088
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "smaDebugFlag");
4,886!
1089
  smaDebugFlag = pItem->i32;
4,886✔
1090

1091
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "idxDebugFlag");
4,886!
1092
  idxDebugFlag = pItem->i32;
4,886✔
1093

1094
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tdbDebugFlag");
4,886!
1095
  tdbDebugFlag = pItem->i32;
4,886✔
1096

1097
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "metaDebugFlag");
4,886!
1098
  metaDebugFlag = pItem->i32;
4,886✔
1099

1100
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "stDebugFlag");
4,886!
1101
  stDebugFlag = pItem->i32;
4,886✔
1102

1103
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "sndDebugFlag");
4,886!
1104
  sndDebugFlag = pItem->i32;
4,886✔
1105

1106
  TAOS_RETURN(TSDB_CODE_SUCCESS);
4,886✔
1107
}
1108

1109
int32_t taosSetSlowLogScope(char *pScopeStr, int32_t *pScope) {
4,886✔
1110
  if (NULL == pScopeStr || 0 == strlen(pScopeStr)) {
4,886!
UNCOV
1111
    *pScope = SLOW_LOG_TYPE_QUERY;
×
UNCOV
1112
    TAOS_RETURN(TSDB_CODE_SUCCESS);
×
1113
  }
1114

1115
  int32_t slowScope = 0;
4,886✔
1116

1117
  char *scope = NULL;
4,886✔
1118
  char *tmp = NULL;
4,886✔
1119
  while ((scope = strsep(&pScopeStr, "|")) != NULL) {
9,772✔
1120
    taosMemoryFreeClear(tmp);
4,886!
1121
    tmp = taosStrdup(scope);
4,886✔
1122
    if (tmp == NULL) {
4,886!
UNCOV
1123
      TAOS_RETURN(terrno);
×
1124
    }
1125
    (void)strtrim(tmp);
4,886✔
1126
    if (0 == strcasecmp(tmp, "all")) {
4,886✔
1127
      slowScope |= SLOW_LOG_TYPE_ALL;
3✔
1128
      continue;
3✔
1129
    }
1130

1131
    if (0 == strcasecmp(tmp, "query")) {
4,883✔
1132
      slowScope |= SLOW_LOG_TYPE_QUERY;
4,867✔
1133
      continue;
4,867✔
1134
    }
1135

1136
    if (0 == strcasecmp(tmp, "insert")) {
16✔
1137
      slowScope |= SLOW_LOG_TYPE_INSERT;
7✔
1138
      continue;
7✔
1139
    }
1140

1141
    if (0 == strcasecmp(tmp, "others")) {
9✔
1142
      slowScope |= SLOW_LOG_TYPE_OTHERS;
3✔
1143
      continue;
3✔
1144
    }
1145

1146
    if (0 == strcasecmp(tmp, "none")) {
6!
1147
      slowScope |= SLOW_LOG_TYPE_NULL;
6✔
1148
      continue;
6✔
1149
    }
1150

UNCOV
1151
    taosMemoryFreeClear(tmp);
×
UNCOV
1152
    uError("Invalid slowLog scope value:%s", pScopeStr);
×
UNCOV
1153
    TAOS_RETURN(TSDB_CODE_INVALID_CFG_VALUE);
×
1154
  }
1155

1156
  *pScope = slowScope;
4,886✔
1157
  taosMemoryFreeClear(tmp);
4,886!
1158
  TAOS_RETURN(TSDB_CODE_SUCCESS);
4,886✔
1159
}
1160

1161
// for common configs
1162
static int32_t taosSetClientCfg(SConfig *pCfg) {
8,175✔
1163
  SConfigItem *pItem = NULL;
8,175✔
1164

1165
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "fqdn");
8,175!
1166
  tstrncpy(tsLocalFqdn, pItem->str, TSDB_FQDN_LEN);
8,175✔
1167

1168
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "serverPort");
8,175!
1169
  tsServerPort = (uint16_t)pItem->i32;
8,175✔
1170
  (void)snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
8,175✔
1171

1172
  char defaultFirstEp[TSDB_EP_LEN] = {0};
8,175✔
1173
  (void)snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort);
8,175✔
1174

1175
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "firstEp");
8,175!
1176
  SEp firstEp = {0};
8,175✔
1177
  TAOS_CHECK_RETURN(taosGetFqdnPortFromEp(strlen(pItem->str) == 0 ? defaultFirstEp : pItem->str, &firstEp));
8,175!
1178
  (void)snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port);
8,175✔
1179
  TAOS_CHECK_RETURN(cfgSetItem(pCfg, "firstEp", tsFirst, pItem->stype, true));
8,175!
1180

1181
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "secondEp");
8,175!
1182
  SEp secondEp = {0};
8,175✔
1183
  TAOS_CHECK_RETURN(taosGetFqdnPortFromEp(strlen(pItem->str) == 0 ? defaultFirstEp : pItem->str, &secondEp));
8,175!
1184
  (void)snprintf(tsSecond, sizeof(tsSecond), "%s:%u", secondEp.fqdn, secondEp.port);
8,175✔
1185
  TAOS_CHECK_RETURN(cfgSetItem(pCfg, "secondEp", tsSecond, pItem->stype, true));
8,175!
1186

1187
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tempDir");
8,175!
1188
  tstrncpy(tsTempDir, pItem->str, PATH_MAX);
8,175✔
1189
  TAOS_CHECK_RETURN(taosExpandDir(tsTempDir, tsTempDir, PATH_MAX));
8,175!
1190

1191
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minimalTmpDirGB");
8,175!
1192
  tsTempSpace.reserved = (int64_t)(((double)pItem->fval) * 1024 * 1024 * 1024);
8,175✔
1193
  if (taosMulMkDir(tsTempDir) != 0) {
8,175!
UNCOV
1194
    int32_t code = TAOS_SYSTEM_ERROR(errno);
×
UNCOV
1195
    uError("failed to create tempDir:%s since %s", tsTempDir, tstrerror(code));
×
UNCOV
1196
    TAOS_RETURN(code);
×
1197
  }
1198

1199
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "smlAutoChildTableNameDelimiter");
8,175!
1200
  tstrncpy(tsSmlAutoChildTableNameDelimiter, pItem->str, TSDB_TABLE_NAME_LEN);
8,175✔
1201

1202
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "smlChildTableName");
8,175!
1203
  tstrncpy(tsSmlChildTableName, pItem->str, TSDB_TABLE_NAME_LEN);
8,175✔
1204

1205
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "smlTagName");
8,175!
1206
  tstrncpy(tsSmlTagName, pItem->str, TSDB_COL_NAME_LEN);
8,175✔
1207

1208
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "smlTsDefaultName");
8,175!
1209
  tstrncpy(tsSmlTsDefaultName, pItem->str, TSDB_COL_NAME_LEN);
8,175✔
1210

1211
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "smlDot2Underline");
8,175!
1212
  tsSmlDot2Underline = pItem->bval;
8,175✔
1213

1214
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxInsertBatchRows");
8,175!
1215
  tsMaxInsertBatchRows = pItem->i32;
8,175✔
1216

1217
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "shellActivityTimer");
8,175!
1218
  tsShellActivityTimer = pItem->i32;
8,175✔
1219

1220
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "compressMsgSize");
8,175!
1221
  tsCompressMsgSize = pItem->i32;
8,175✔
1222

1223
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfTaskQueueThreads");
8,175!
1224
  tsNumOfTaskQueueThreads = pItem->i32;
8,175✔
1225

1226
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryPolicy");
8,175!
1227
  tsQueryPolicy = pItem->i32;
8,175✔
1228

1229
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryTableNotExistAsEmpty");
8,175!
1230
  tsQueryTbNotExistAsEmpty = pItem->bval;
8,175✔
1231

1232
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableQueryHb");
8,175!
1233
  tsEnableQueryHb = pItem->bval;
8,175✔
1234

1235
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableScience");
8,175!
1236
  tsEnableScience = pItem->bval;
8,175✔
1237

1238
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "querySmaOptimize");
8,175!
1239
  tsQuerySmaOptimize = pItem->i32;
8,175✔
1240

1241
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryPlannerTrace");
8,175!
1242
  tsQueryPlannerTrace = pItem->bval;
8,175✔
1243

1244
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryNodeChunkSize");
8,175!
1245
  tsQueryNodeChunkSize = pItem->i32;
8,175✔
1246

1247
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryUseNodeAllocator");
8,175!
1248
  tsQueryUseNodeAllocator = pItem->bval;
8,175✔
1249

1250
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "keepColumnName");
8,175!
1251
  tsKeepColumnName = pItem->bval;
8,175✔
1252

1253
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "useAdapter");
8,175!
1254
  tsUseAdapter = pItem->bval;
8,175✔
1255

1256
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "crashReporting");
8,175!
1257
  tsEnableCrashReport = pItem->bval;
8,175✔
1258

1259
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryMaxConcurrentTables");
8,175!
1260
  tsQueryMaxConcurrentTables = pItem->i64;
8,175✔
1261

1262
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "metaCacheMaxSize");
8,175!
1263
  tsMetaCacheMaxSize = pItem->i32;
8,175✔
1264

1265
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "randErrorChance");
8,175!
1266
  tsRandErrChance = pItem->i32;
8,175✔
1267

1268
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "randErrorDivisor");
8,175!
1269
  tsRandErrDivisor = pItem->i64;
8,175✔
1270

1271
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "randErrorScope");
8,175!
1272
  tsRandErrScope = pItem->i64;
8,175✔
1273

1274
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "countAlwaysReturnValue");
8,175!
1275
  tsCountAlwaysReturnValue = pItem->i32;
8,175✔
1276

1277
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxRetryWaitTime");
8,175!
1278
  tsMaxRetryWaitTime = pItem->i32;
8,175✔
1279

1280
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfRpcThreads");
8,175!
1281
  tsNumOfRpcThreads = pItem->i32;
8,175✔
1282

1283
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfRpcSessions");
8,175!
1284
  tsNumOfRpcSessions = pItem->i32;
8,175✔
1285

1286
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "shareConnLimit");
8,175!
1287
  tsShareConnLimit = pItem->i32;
8,175✔
1288

1289
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "readTimeout");
8,175!
1290
  tsReadTimeout = pItem->i32;
8,175✔
1291

1292
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "timeToGetAvailableConn");
8,175!
1293
  tsTimeToGetAvailableConn = pItem->i32;
8,175✔
1294

1295
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "experimental");
8,175!
1296
  tsExperimental = pItem->bval;
8,175✔
1297

1298
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "multiResultFunctionStarReturnTags");
8,175!
1299
  tsMultiResultFunctionStarReturnTags = pItem->bval;
8,175✔
1300

1301
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxTsmaCalcDelay");
8,175!
1302
  tsMaxTsmaCalcDelay = pItem->i32;
8,175✔
1303

1304
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tsmaDataDeleteMark");
8,175!
1305
  tsmaDataDeleteMark = pItem->i32;
8,175✔
1306

1307
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "safetyCheckLevel");
8,175!
1308
  tsSafetyCheckLevel = pItem->i32;
8,175✔
1309

1310
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "bypassFlag");
8,175!
1311
  tsBypassFlag = pItem->i32;
8,175✔
1312

1313
  TAOS_RETURN(TSDB_CODE_SUCCESS);
8,175✔
1314
}
1315

1316
static int32_t taosSetSystemCfg(SConfig *pCfg) {
8,175✔
1317
  SConfigItem *pItem = NULL;
8,175✔
1318

1319
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "timezone");
8,175!
1320
  if (0 == strlen(pItem->str)) {
8,175!
UNCOV
1321
    uError("timezone is not set");
×
1322
  } else {
1323
    TAOS_CHECK_RETURN(osSetTimezone(pItem->str));
8,175!
1324
    uDebug("timezone format changed from %s to %s", pItem->str, tsTimezoneStr);
8,175✔
1325
  }
1326
  TAOS_CHECK_RETURN(cfgSetItem(pCfg, "timezone", tsTimezoneStr, pItem->stype, true));
8,175!
1327

1328
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "locale");
8,175!
1329
  const char *locale = pItem->str;
8,175✔
1330

1331
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "charset");
8,175!
1332
  const char *charset = pItem->str;
8,175✔
1333

1334
  int32_t code = taosSetSystemLocale(locale, charset);
8,175✔
1335
  if (TSDB_CODE_SUCCESS != code) {
8,175✔
1336
    uError("failed to set locale:%s, since: %s", locale, tstrerror(code));
6,602!
1337
    char curLocale[TD_LOCALE_LEN] = {0};
6,602✔
1338
    char curCharset[TD_CHARSET_LEN] = {0};
6,602✔
1339
    taosGetSystemLocale(curLocale, curCharset);
6,602✔
1340
    if (0 != strlen(curLocale) && 0 != strlen(curCharset)) {
6,602!
1341
      uInfo("current locale: %s, charset: %s", curLocale, curCharset);
6,602!
1342
    }
1343
  }
1344

1345
  osSetSystemLocale(locale, charset);
8,175✔
1346

1347
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableCoreFile");
8,175!
1348
  tsEnableCoreFile = pItem->bval;
8,175✔
1349
  taosSetCoreDump(tsEnableCoreFile);
8,175✔
1350

1351
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "assert");
8,175!
1352
  tsAssert = pItem->bval;
8,175✔
1353

1354
  // todo
1355
  tsVersion = 30000000;
8,175✔
1356

1357
  TAOS_RETURN(TSDB_CODE_SUCCESS);
8,175✔
1358
}
1359

1360
// for server configs
1361
static int32_t taosSetServerCfg(SConfig *pCfg) {
4,886✔
1362
  SConfigItem *pItem = NULL;
4,886✔
1363

1364
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minimalDataDirGB");
4,886!
1365
  tsDataSpace.reserved = (int64_t)(((double)pItem->fval) * 1024 * 1024 * 1024);
4,886✔
1366

1367
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "supportVnodes");
4,886!
1368
  tsNumOfSupportVnodes = pItem->i32;
4,886✔
1369

1370
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxShellConns");
4,886!
1371
  tsMaxShellConns = pItem->i32;
4,886✔
1372

1373
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "statusInterval");
4,886!
1374
  tsStatusInterval = pItem->i32;
4,886✔
1375

1376
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minSlidingTime");
4,886!
1377
  tsMinSlidingTime = pItem->i32;
4,886✔
1378

1379
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minIntervalTime");
4,886!
1380
  tsMinIntervalTime = pItem->i32;
4,886✔
1381

1382
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryBufferSize");
4,886!
1383
  tsQueryBufferSize = pItem->i32;
4,886✔
1384

1385
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "encryptAlgorithm");
4,886!
1386
  tstrncpy(tsEncryptAlgorithm, pItem->str, 16);
4,886✔
1387

1388
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "encryptScope");
4,886!
1389
  tstrncpy(tsEncryptScope, pItem->str, 100);
4,886✔
1390

1391
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfRpcThreads");
4,886!
1392
  tsNumOfRpcThreads = pItem->i32;
4,886✔
1393

1394
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfRpcSessions");
4,886!
1395
  tsNumOfRpcSessions = pItem->i32;
4,886✔
1396

1397
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "shareConnLimit");
4,886!
1398
  tsShareConnLimit = pItem->i32;
4,886✔
1399

1400
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "readTimeout");
4,886!
1401
  tsReadTimeout = pItem->i32;
4,886✔
1402

1403
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "timeToGetAvailableConn");
4,886!
1404
  tsTimeToGetAvailableConn = pItem->i32;
4,886✔
1405

1406
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfCommitThreads");
4,886!
1407
  tsNumOfCommitThreads = pItem->i32;
4,886✔
1408

1409
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "retentionSpeedLimitMB");
4,886!
1410
  tsRetentionSpeedLimitMB = pItem->i32;
4,886✔
1411

1412
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfMnodeReadThreads");
4,886!
1413
  tsNumOfMnodeReadThreads = pItem->i32;
4,886✔
1414

1415
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfVnodeQueryThreads");
4,886!
1416
  tsNumOfVnodeQueryThreads = pItem->i32;
4,886✔
1417

1418
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ratioOfVnodeStreamThreads");
4,886!
1419
  tsRatioOfVnodeStreamThreads = pItem->fval;
4,886✔
1420

1421
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfVnodeFetchThreads");
4,886!
1422
  tsNumOfVnodeFetchThreads = pItem->i32;
4,886✔
1423

1424
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfVnodeRsmaThreads");
4,886!
1425
  tsNumOfVnodeRsmaThreads = pItem->i32;
4,886✔
1426

1427
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfQnodeQueryThreads");
4,886!
1428
  tsNumOfQnodeQueryThreads = pItem->i32;
4,886✔
1429

1430
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfSnodeSharedThreads");
4,886!
1431
  tsNumOfSnodeStreamThreads = pItem->i32;
4,886✔
1432

1433
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfSnodeUniqueThreads");
4,886!
1434
  tsNumOfSnodeWriteThreads = pItem->i32;
4,886✔
1435

1436
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "rpcQueueMemoryAllowed");
4,886!
1437
  tsQueueMemoryAllowed = pItem->i64;
4,886✔
1438

1439
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "simdEnable");
4,886!
1440
  tsSIMDEnable = (bool)pItem->bval;
4,886✔
1441

1442
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "AVX512Enable");
4,886!
1443
  tsAVX512Enable = (bool)pItem->bval;
4,886✔
1444

1445
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tagFilterCache");
4,886!
1446
  tsTagFilterCache = (bool)pItem->bval;
4,886✔
1447

1448
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "slowLogExceptDb");
4,886!
1449
  tstrncpy(tsSlowLogExceptDb, pItem->str, TSDB_DB_NAME_LEN);
4,886✔
1450

1451
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "slowLogThreshold");
4,886!
1452
  tsSlowLogThreshold = pItem->i32;
4,886✔
1453

1454
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "slowLogMaxLen");
4,886!
1455
  tsSlowLogMaxLen = pItem->i32;
4,886✔
1456

1457
  int32_t scope = 0;
4,886✔
1458
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "slowLogScope");
4,886!
1459
  TAOS_CHECK_RETURN(taosSetSlowLogScope(pItem->str, &scope));
4,886!
1460
  tsSlowLogScope = scope;
4,886✔
1461

1462
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitor");
4,886!
1463
  tsEnableMonitor = pItem->bval;
4,886✔
1464

1465
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorInterval");
4,886!
1466
  tsMonitorInterval = pItem->i32;
4,886✔
1467

1468
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorFqdn");
4,886!
1469
  tstrncpy(tsMonitorFqdn, pItem->str, TSDB_FQDN_LEN);
4,886✔
1470

1471
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorPort");
4,886!
1472
  tsMonitorPort = (uint16_t)pItem->i32;
4,886✔
1473

1474
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorMaxLogs");
4,886!
1475
  tsMonitorMaxLogs = pItem->i32;
4,886✔
1476

1477
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorComp");
4,886!
1478
  tsMonitorComp = pItem->bval;
4,886✔
1479

1480
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryRspPolicy");
4,886!
1481
  tsQueryRspPolicy = pItem->i32;
4,886✔
1482

1483
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorLogProtocol");
4,886!
1484
  tsMonitorLogProtocol = pItem->bval;
4,886✔
1485

1486
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorForceV2");
4,886!
1487
  tsMonitorForceV2 = pItem->i32;
4,886✔
1488

1489
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "audit");
4,886!
1490
  tsEnableAudit = pItem->bval;
4,886✔
1491

1492
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "auditCreateTable");
4,886!
1493
  tsEnableAuditCreateTable = pItem->bval;
4,886✔
1494

1495
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableAuditDelete");
4,886!
1496
  tsEnableAuditDelete = pItem->bval;
4,886✔
1497

1498
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "auditInterval");
4,886!
1499
  tsAuditInterval = pItem->i32;
4,886✔
1500

1501
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "telemetryReporting");
4,886!
1502
  tsEnableTelem = pItem->bval;
4,886✔
1503

1504
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "crashReporting");
4,886!
1505
  tsEnableCrashReport = pItem->bval;
4,886✔
1506

1507
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ttlChangeOnWrite");
4,886!
1508
  tsTtlChangeOnWrite = pItem->bval;
4,886✔
1509

1510
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ttlFlushThreshold");
4,886!
1511
  tsTtlFlushThreshold = pItem->i32;
4,886✔
1512

1513
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "telemetryInterval");
4,886!
1514
  tsTelemInterval = pItem->i32;
4,886✔
1515

1516
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "rsyncPort");
4,886!
1517
  tsRsyncPort = pItem->i32;
4,886✔
1518

1519
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "telemetryServer");
4,886!
1520
  tstrncpy(tsTelemServer, pItem->str, TSDB_FQDN_LEN);
4,886✔
1521

1522
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "snodeAddress");
4,886!
1523
  tstrncpy(tsSnodeAddress, pItem->str, TSDB_FQDN_LEN);
4,886✔
1524

1525
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "checkpointBackupDir");
4,886!
1526
  tstrncpy(tsCheckpointBackupDir, pItem->str, PATH_MAX);
4,886✔
1527

1528
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "telemetryPort");
4,886!
1529
  tsTelemPort = (uint16_t)pItem->i32;
4,886✔
1530

1531
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tmqMaxTopicNum");
4,886!
1532
  tmqMaxTopicNum = pItem->i32;
4,886✔
1533

1534
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tmqRowSize");
4,886!
1535
  tmqRowSize = pItem->i32;
4,886✔
1536

1537
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxTsmaNum");
4,886!
1538
  tsMaxTsmaNum = pItem->i32;
4,886✔
1539

1540
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "transPullupInterval");
4,886!
1541
  tsTransPullupInterval = pItem->i32;
4,886✔
1542

1543
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "compactPullupInterval");
4,886!
1544
  tsCompactPullupInterval = pItem->i32;
4,886✔
1545

1546
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "mqRebalanceInterval");
4,886!
1547
  tsMqRebalanceInterval = pItem->i32;
4,886✔
1548

1549
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ttlUnit");
4,886!
1550
  tsTtlUnit = pItem->i32;
4,886✔
1551

1552
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ttlPushInterval");
4,886!
1553
  tsTtlPushIntervalSec = pItem->i32;
4,886✔
1554

1555
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ttlBatchDropNum");
4,886!
1556
  tsTtlBatchDropNum = pItem->i32;
4,886✔
1557

1558
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "trimVDbIntervalSec");
4,886!
1559
  tsTrimVDbIntervalSec = pItem->i32;
4,886✔
1560

1561
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "uptimeInterval");
4,886!
1562
  tsUptimeInterval = pItem->i32;
4,886✔
1563

1564
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryRsmaTolerance");
4,886!
1565
  tsQueryRsmaTolerance = pItem->i32;
4,886✔
1566

1567
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "timeseriesThreshold");
4,886!
1568
  tsTimeSeriesThreshold = pItem->i32;
4,886✔
1569

1570
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "walFsyncDataSizeLimit");
4,886!
1571
  tsWalFsyncDataSizeLimit = pItem->i64;
4,886✔
1572

1573
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncElectInterval");
4,886!
1574
  tsElectInterval = pItem->i32;
4,886✔
1575

1576
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncHeartbeatInterval");
4,886!
1577
  tsHeartbeatInterval = pItem->i32;
4,886✔
1578

1579
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncHeartbeatTimeout");
4,886!
1580
  tsHeartbeatTimeout = pItem->i32;
4,886✔
1581

1582
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncSnapReplMaxWaitN");
4,886!
1583
  tsSnapReplMaxWaitN = pItem->i32;
4,886✔
1584

1585
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncLogBufferMemoryAllowed");
4,886!
1586
  tsLogBufferMemoryAllowed = pItem->i64;
4,886✔
1587

1588
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "arbHeartBeatIntervalSec");
4,886!
1589
  tsArbHeartBeatIntervalSec = pItem->i32;
4,886✔
1590

1591
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "arbCheckSyncIntervalSec");
4,886!
1592
  tsArbCheckSyncIntervalSec = pItem->i32;
4,886✔
1593

1594
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "arbSetAssignedTimeoutSec");
4,886!
1595
  tsArbSetAssignedTimeoutSec = pItem->i32;
4,886✔
1596

1597
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "mndSdbWriteDelta");
4,886!
1598
  tsMndSdbWriteDelta = pItem->i64;
4,886✔
1599

1600
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "mndLogRetention");
4,886!
1601
  tsMndLogRetention = pItem->i64;
4,886✔
1602

1603
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "skipGrant");
4,886!
1604
  tsMndSkipGrant = pItem->bval;
4,886✔
1605

1606
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableWhiteList");
4,886!
1607
  tsEnableWhiteList = pItem->bval;
4,886✔
1608

1609
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "udf");
4,886!
1610
  tsStartUdfd = pItem->bval;
4,886✔
1611

1612
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "udfdResFuncs");
4,886!
1613
  tstrncpy(tsUdfdResFuncs, pItem->str, sizeof(tsUdfdResFuncs));
4,886✔
1614

1615
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "udfdLdLibPath");
4,886!
1616
  tstrncpy(tsUdfdLdLibPath, pItem->str, sizeof(tsUdfdLdLibPath));
4,886✔
1617
  if (tsQueryBufferSize >= 0) {
4,886✔
1618
    tsQueryBufferSizeBytes = tsQueryBufferSize * 1048576UL;
6✔
1619
  }
1620

1621
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "cacheLazyLoadThreshold");
4,886!
1622
  tsCacheLazyLoadThreshold = pItem->i32;
4,886✔
1623

1624
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "fPrecision");
4,886!
1625
  tsFPrecision = pItem->fval;
4,886✔
1626

1627
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "dPrecision");
4,886!
1628
  tsDPrecision = pItem->fval;
4,886✔
1629

1630
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxRange");
4,886!
1631
  tsMaxRange = pItem->i32;
4,886✔
1632

1633
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "curRange");
4,886!
1634
  tsCurRange = pItem->i32;
4,886✔
1635

1636
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ifAdtFse");
4,886!
1637
  tsIfAdtFse = pItem->bval;
4,886✔
1638

1639
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "compressor");
4,886!
1640
  tstrncpy(tsCompressor, pItem->str, sizeof(tsCompressor));
4,886✔
1641

1642
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "disableStream");
4,886!
1643
  tsDisableStream = pItem->bval;
4,886✔
1644

1645
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamBufferSize");
4,886!
1646
  tsStreamBufferSize = pItem->i64;
4,886✔
1647

1648
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamAggCnt");
4,886!
1649
  tsStreamAggCnt = pItem->i32;
4,886✔
1650

1651
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "checkpointInterval");
4,886!
1652
  tsStreamCheckpointInterval = pItem->i32;
4,886✔
1653

1654
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "concurrentCheckpoint");
4,886!
1655
  tsMaxConcurrentCheckpoint = pItem->i32;
4,886✔
1656

1657
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamSinkDataRate");
4,886!
1658
  tsSinkDataRate = pItem->fval;
4,886✔
1659

1660
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "filterScalarMode");
4,886!
1661
  tsFilterScalarMode = pItem->bval;
4,886✔
1662

1663
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxStreamBackendCache");
4,886!
1664
  tsMaxStreamBackendCache = pItem->i32;
4,886✔
1665

1666
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "pqSortMemThreshold");
4,886!
1667
  tsPQSortMemThreshold = pItem->i32;
4,886✔
1668

1669
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "resolveFQDNRetryTime");
4,886!
1670
  tsResolveFQDNRetryTime = pItem->i32;
4,886✔
1671

1672
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minDiskFreeSize");
4,886!
1673
  tsMinDiskFreeSize = pItem->i64;
4,886✔
1674

1675
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "s3MigrateIntervalSec");
4,886!
1676
  tsS3MigrateIntervalSec = pItem->i32;
4,886✔
1677

1678
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "s3MigrateEnabled");
4,886!
1679
  tsS3MigrateEnabled = (bool)pItem->bval;
4,886✔
1680

1681
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "s3PageCacheSize");
4,886!
1682
  tsS3PageCacheSize = pItem->i32;
4,886✔
1683

1684
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "s3UploadDelaySec");
4,886!
1685
  tsS3UploadDelaySec = pItem->i32;
4,886✔
1686

1687
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "experimental");
4,886!
1688
  tsExperimental = pItem->bval;
4,886✔
1689

1690
  // GRANT_CFG_GET;
1691
  TAOS_RETURN(TSDB_CODE_SUCCESS);
4,886✔
1692
}
1693

1694
#ifndef TD_ENTERPRISE
1695
static int32_t taosSetReleaseCfg(SConfig *pCfg) { return 0; }
1696
#else
1697
int32_t taosSetReleaseCfg(SConfig *pCfg);
1698
#endif
1699

1700
static int32_t taosSetAllDebugFlag(SConfig *pCfg, int32_t flag);
1701

1702
int32_t taosCreateLog(const char *logname, int32_t logFileNum, const char *cfgDir, const char **envCmd,
8,662✔
1703
                      const char *envFile, char *apolloUrl, SArray *pArgs, bool tsc) {
1704
  int32_t  code = TSDB_CODE_SUCCESS;
8,662✔
1705
  int32_t  lino = 0;
8,662✔
1706
  SConfig *pCfg = NULL;
8,662✔
1707

1708
  if (tsCfg == NULL) {
8,662✔
1709
    TAOS_CHECK_GOTO(osDefaultInit(), &lino, _exit);
8,175!
1710
  }
1711

1712
  TAOS_CHECK_GOTO(cfgInit(&pCfg), &lino, _exit);
8,662!
1713

1714
  if (tsc) {
8,662✔
1715
    tsLogEmbedded = 0;
3,776✔
1716
    TAOS_CHECK_GOTO(taosAddClientLogCfg(pCfg), &lino, _exit);
3,776!
1717
  } else {
1718
    tsLogEmbedded = 1;
4,886✔
1719
    TAOS_CHECK_GOTO(taosAddClientLogCfg(pCfg), &lino, _exit);
4,886!
1720
    TAOS_CHECK_GOTO(taosAddServerLogCfg(pCfg), &lino, _exit);
4,886!
1721
  }
1722

1723
  if ((code = taosLoadCfg(pCfg, envCmd, cfgDir, envFile, apolloUrl)) != TSDB_CODE_SUCCESS) {
8,662!
UNCOV
1724
    (void)printf("failed to load cfg since %s\n", tstrerror(code));
×
UNCOV
1725
    goto _exit;
×
1726
  }
1727

1728
  if ((code = cfgLoadFromArray(pCfg, pArgs)) != TSDB_CODE_SUCCESS) {
8,662!
UNCOV
1729
    (void)printf("failed to load cfg from array since %s\n", tstrerror(code));
×
UNCOV
1730
    goto _exit;
×
1731
  }
1732

1733
  if (tsc) {
8,662✔
1734
    TAOS_CHECK_GOTO(taosSetClientLogCfg(pCfg), &lino, _exit);
3,776!
1735
  } else {
1736
    TAOS_CHECK_GOTO(taosSetClientLogCfg(pCfg), &lino, _exit);
4,886!
1737
    TAOS_CHECK_GOTO(taosSetServerLogCfg(pCfg), &lino, _exit);
4,886!
1738
  }
1739

1740
  SConfigItem *pDebugItem = NULL;
8,662✔
1741
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pDebugItem, "debugFlag");
8,662!
1742
  TAOS_CHECK_GOTO(taosSetAllDebugFlag(pCfg, pDebugItem->i32), &lino, _exit);
8,662!
1743

1744
  if ((code = taosMulModeMkDir(tsLogDir, 0777, true)) != TSDB_CODE_SUCCESS) {
8,662!
UNCOV
1745
    (void)printf("failed to create dir:%s since %s\n", tsLogDir, tstrerror(code));
×
UNCOV
1746
    goto _exit;
×
1747
  }
1748

1749
  if ((code = taosInitLog(logname, logFileNum, tsc)) != 0) {
8,662!
UNCOV
1750
    (void)printf("failed to init log file since %s\n", tstrerror(code));
×
UNCOV
1751
    goto _exit;
×
1752
  }
1753

1754
_exit:
8,662✔
1755
  if (TSDB_CODE_SUCCESS != code) {
8,662!
UNCOV
1756
    (void)printf("failed to create log at %d since %s\n", lino, tstrerror(code));
×
1757
  }
1758

1759
  cfgCleanup(pCfg);
8,662✔
1760
  TAOS_RETURN(code);
8,662✔
1761
}
1762

1763
int32_t taosReadDataFolder(const char *cfgDir, const char **envCmd, const char *envFile, char *apolloUrl,
1✔
1764
                           SArray *pArgs) {
1765
  int32_t code = TSDB_CODE_SUCCESS;
1✔
1766

1767
  if (tsCfg == NULL) code = osDefaultInit();
1!
1768
  if (code != 0) {
1!
UNCOV
1769
    (void)printf("failed to init os since %s\n", tstrerror(code));
×
1770
  }
1771

1772
  SConfig *pCfg = NULL;
1✔
1773
  TAOS_CHECK_RETURN(cfgInit(&pCfg));
1!
1774

1775
  TAOS_CHECK_GOTO(cfgAddDir(pCfg, "dataDir", tsDataDir, CFG_SCOPE_SERVER, CFG_DYN_NONE), NULL, _exit);
1!
1776
  TAOS_CHECK_GOTO(cfgAddInt32(pCfg, "debugFlag", dDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER), NULL, _exit);
1!
1777
  TAOS_CHECK_GOTO(cfgAddInt32(pCfg, "dDebugFlag", dDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER), NULL, _exit);
1!
1778

1779
  if ((code = taosLoadCfg(pCfg, envCmd, cfgDir, envFile, apolloUrl)) != 0) {
1!
UNCOV
1780
    (void)printf("failed to load cfg since %s\n", tstrerror(code));
×
UNCOV
1781
    goto _exit;
×
1782
  }
1783

1784
  if ((code = cfgLoadFromArray(pCfg, pArgs)) != 0) {
1!
UNCOV
1785
    (void)printf("failed to load cfg from array since %s\n", tstrerror(code));
×
1786
    goto _exit;
×
1787
  }
1788

1789
  TAOS_CHECK_GOTO(taosSetTfsCfg(pCfg), NULL, _exit);
1!
1790

1791
  SConfigItem *pItem = NULL;
1✔
1792
  if ((pItem = cfgGetItem(pCfg, "dDebugFlag")) == NULL) {
1!
UNCOV
1793
    code = TSDB_CODE_CFG_NOT_FOUND;
×
UNCOV
1794
    goto _exit;
×
1795
  }
1796

1797
  dDebugFlag = pItem->i32;
1✔
1798

1799
_exit:
1✔
1800
  cfgCleanup(pCfg);
1✔
1801
  TAOS_RETURN(code);
1✔
1802
}
1803

1804
static int32_t taosCheckGlobalCfg() {
8,175✔
1805
  uint32_t ipv4 = 0;
8,175✔
1806
  int32_t  code = taosGetIpv4FromFqdn(tsLocalFqdn, &ipv4);
8,175✔
1807
  if (code) {
8,175!
UNCOV
1808
    uError("failed to get ip from fqdn:%s since %s, dnode can not be initialized", tsLocalFqdn, tstrerror(code));
×
UNCOV
1809
    TAOS_RETURN(TSDB_CODE_RPC_FQDN_ERROR);
×
1810
  }
1811

1812
  if (tsServerPort <= 0) {
8,175!
UNCOV
1813
    uError("invalid server port:%u, dnode can not be initialized", tsServerPort);
×
UNCOV
1814
    TAOS_RETURN(TSDB_CODE_RPC_FQDN_ERROR);
×
1815
  }
1816

1817
  TAOS_RETURN(TSDB_CODE_SUCCESS);
8,175✔
1818
}
1819

1820
static int32_t cfgInitWrapper(SConfig **pCfg) {
8,175✔
1821
  if (*pCfg == NULL) {
8,175!
1822
    TAOS_CHECK_RETURN(cfgInit(pCfg));
8,175!
1823
  }
1824
  TAOS_RETURN(TSDB_CODE_SUCCESS);
8,175✔
1825
}
1826

1827
int32_t taosInitCfg(const char *cfgDir, const char **envCmd, const char *envFile, char *apolloUrl, SArray *pArgs,
8,662✔
1828
                    bool tsc) {
1829
  if (tsCfg != NULL) TAOS_RETURN(TSDB_CODE_SUCCESS);
8,662✔
1830

1831
  int32_t code = TSDB_CODE_SUCCESS;
8,175✔
1832
  int32_t lino = -1;
8,175✔
1833

1834
  TAOS_CHECK_GOTO(cfgInitWrapper(&tsCfg), &lino, _exit);
8,175!
1835

1836
  if (tsc) {
8,175✔
1837
    TAOS_CHECK_GOTO(taosAddClientCfg(tsCfg), &lino, _exit);
3,289!
1838
    TAOS_CHECK_GOTO(taosAddClientLogCfg(tsCfg), &lino, _exit);
3,289!
1839
  } else {
1840
    TAOS_CHECK_GOTO(taosAddClientCfg(tsCfg), &lino, _exit);
4,886!
1841
    TAOS_CHECK_GOTO(taosAddServerCfg(tsCfg), &lino, _exit);
4,886!
1842
    TAOS_CHECK_GOTO(taosAddClientLogCfg(tsCfg), &lino, _exit);
4,886!
1843
    TAOS_CHECK_GOTO(taosAddServerLogCfg(tsCfg), &lino, _exit);
4,886!
1844
  }
1845

1846
  TAOS_CHECK_GOTO(taosAddSystemCfg(tsCfg), &lino, _exit);
8,175!
1847

1848
  if ((code = taosLoadCfg(tsCfg, envCmd, cfgDir, envFile, apolloUrl)) != 0) {
8,175!
1849
    (void)printf("failed to load cfg since %s\n", tstrerror(code));
×
1850
    cfgCleanup(tsCfg);
×
1851
    tsCfg = NULL;
×
1852
    TAOS_RETURN(code);
×
1853
  }
1854

1855
  if ((code = cfgLoadFromArray(tsCfg, pArgs)) != 0) {
8,175!
UNCOV
1856
    (void)printf("failed to load cfg from array since %s\n", tstrerror(code));
×
UNCOV
1857
    cfgCleanup(tsCfg);
×
UNCOV
1858
    tsCfg = NULL;
×
UNCOV
1859
    TAOS_RETURN(code);
×
1860
  }
1861

1862
  if (tsc) {
8,175✔
1863
    TAOS_CHECK_GOTO(taosSetClientCfg(tsCfg), &lino, _exit);
3,289!
1864
  } else {
1865
    TAOS_CHECK_GOTO(taosSetClientCfg(tsCfg), &lino, _exit);
4,886!
1866
    TAOS_CHECK_GOTO(taosUpdateServerCfg(tsCfg), &lino, _exit);
4,886!
1867
    TAOS_CHECK_GOTO(taosSetServerCfg(tsCfg), &lino, _exit);
4,886!
1868
    TAOS_CHECK_GOTO(taosSetReleaseCfg(tsCfg), &lino, _exit);
4,886!
1869
    TAOS_CHECK_GOTO(taosSetTfsCfg(tsCfg), &lino, _exit);
4,886!
1870
    TAOS_CHECK_GOTO(taosSetS3Cfg(tsCfg), &lino, _exit);
4,886!
1871
  }
1872

1873
  TAOS_CHECK_GOTO(taosSetSystemCfg(tsCfg), &lino, _exit);
8,175!
1874
  TAOS_CHECK_GOTO(taosSetFileHandlesLimit(), &lino, _exit);
8,175!
1875

1876
  SConfigItem *pItem = cfgGetItem(tsCfg, "debugFlag");
8,175✔
1877
  if (NULL == pItem) {
8,175!
UNCOV
1878
    (void)printf("debugFlag not found in cfg\n");
×
UNCOV
1879
    TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND);
×
1880
  }
1881
  TAOS_CHECK_GOTO(taosSetAllDebugFlag(tsCfg, pItem->i32), &lino, _exit);
8,175!
1882

1883
  cfgDumpCfg(tsCfg, tsc, false);
8,175✔
1884

1885
  TAOS_CHECK_GOTO(taosCheckGlobalCfg(), &lino, _exit);
8,175!
1886

1887
_exit:
8,175✔
1888
  if (TSDB_CODE_SUCCESS != code) {
8,175!
UNCOV
1889
    cfgCleanup(tsCfg);
×
UNCOV
1890
    tsCfg = NULL;
×
UNCOV
1891
    (void)printf("failed to init cfg at %d since %s\n", lino, tstrerror(code));
×
1892
  }
1893

1894
  TAOS_RETURN(code);
8,175✔
1895
}
1896

1897
void taosCleanupCfg() {
8,174✔
1898
  if (tsCfg) {
8,174!
1899
    cfgCleanup(tsCfg);
8,174✔
1900
    tsCfg = NULL;
8,174✔
1901
  }
1902
}
8,174✔
1903

1904
typedef struct {
1905
  const char *optionName;
1906
  void       *optionVar;
1907
} OptionNameAndVar;
1908

1909
static int32_t taosCfgSetOption(OptionNameAndVar *pOptions, int32_t optionSize, SConfigItem *pItem, bool isDebugflag) {
31,866✔
1910
  int32_t code = TSDB_CODE_CFG_NOT_FOUND;
31,866✔
1911
  char   *name = pItem->name;
31,866✔
1912
  for (int32_t d = 0; d < optionSize; ++d) {
415,077✔
1913
    const char *optName = pOptions[d].optionName;
399,162✔
1914
    if (strcasecmp(name, optName) != 0) continue;
399,162✔
1915
    code = TSDB_CODE_SUCCESS;
15,951✔
1916
    switch (pItem->dtype) {
15,951!
1917
      case CFG_DTYPE_BOOL: {
58✔
1918
        int32_t flag = pItem->i32;
58✔
1919
        bool   *pVar = pOptions[d].optionVar;
58✔
1920
        uInfo("%s set from %d to %d", optName, *pVar, flag);
58!
1921
        *pVar = flag;
58✔
1922
      } break;
58✔
1923
      case CFG_DTYPE_INT32: {
15,882✔
1924
        int32_t  flag = pItem->i32;
15,882✔
1925
        int32_t *pVar = pOptions[d].optionVar;
15,882✔
1926
        uInfo("%s set from %d to %d", optName, *pVar, flag);
15,882!
1927
        *pVar = flag;
15,882✔
1928

1929
        if (isDebugflag) {
15,882✔
1930
          TAOS_CHECK_RETURN(taosSetDebugFlag(pOptions[d].optionVar, optName, flag));
36!
1931
        }
1932
      } break;
15,882✔
1933
      case CFG_DTYPE_INT64: {
11✔
1934
        int64_t  flag = pItem->i64;
11✔
1935
        int64_t *pVar = pOptions[d].optionVar;
11✔
1936
        uInfo("%s set from %" PRId64 " to %" PRId64, optName, *pVar, flag);
11!
1937
        *pVar = flag;
11✔
1938
      } break;
11✔
1939
      case CFG_DTYPE_FLOAT:
×
1940
      case CFG_DTYPE_DOUBLE: {
1941
        float  flag = pItem->fval;
×
UNCOV
1942
        float *pVar = pOptions[d].optionVar;
×
UNCOV
1943
        uInfo("%s set from %f to %f", optName, *pVar, flag);
×
UNCOV
1944
        *pVar = flag;
×
UNCOV
1945
      } break;
×
UNCOV
1946
      default:
×
UNCOV
1947
        code = TSDB_CODE_INVALID_CFG;
×
UNCOV
1948
        break;
×
1949
    }
1950

1951
    break;
15,951✔
1952
  }
1953

1954
  TAOS_RETURN(code);
31,866✔
1955
}
1956

1957
static int32_t taosCfgDynamicOptionsForServer(SConfig *pCfg, const char *name) {
106✔
1958
  int32_t code = TSDB_CODE_SUCCESS;
106✔
1959

1960
  if (strcasecmp(name, "resetlog") == 0) {
106✔
1961
    // trigger, no item in cfg
1962
    taosResetLog();
2✔
1963
    cfgDumpCfg(tsCfg, 0, false);
2✔
1964
    TAOS_RETURN(TSDB_CODE_SUCCESS);
2✔
1965
  }
1966

1967
  cfgLock(pCfg);
104✔
1968

1969
  SConfigItem *pItem = cfgGetItem(pCfg, name);
104✔
1970
  if (!pItem || (pItem->dynScope & CFG_DYN_SERVER) == 0) {
104!
UNCOV
1971
    uError("failed to config:%s, not support", name);
×
UNCOV
1972
    code = TSDB_CODE_INVALID_CFG;
×
UNCOV
1973
    goto _exit;
×
1974
  }
1975

1976
  if (strncasecmp(name, "debugFlag", 9) == 0) {
104✔
1977
    code = taosSetAllDebugFlag(pCfg, pItem->i32);
7✔
1978
    goto _exit;
7✔
1979
  }
1980

1981
  if (strncasecmp(name, "enableCoreFile", 9) == 0) {
97!
1982
    tsEnableCoreFile = pItem->bval;
×
1983
    taosSetCoreDump(tsEnableCoreFile);
×
1984
    uInfo("%s set to %d", name, tsEnableCoreFile);
×
1985
    goto _exit;
×
1986
  }
1987

1988
  if (strcasecmp("slowLogScope", name) == 0) {
97!
UNCOV
1989
    int32_t scope = 0;
×
1990
    TAOS_CHECK_GOTO(taosSetSlowLogScope(pItem->str, &scope), NULL, _exit);
×
1991
    tsSlowLogScope = scope;
×
1992
    code = TSDB_CODE_SUCCESS;
×
UNCOV
1993
    goto _exit;
×
1994
  }
1995

1996
  if (strcasecmp("slowLogExceptDb", name) == 0) {
97!
UNCOV
1997
    tstrncpy(tsSlowLogExceptDb, pItem->str, TSDB_DB_NAME_LEN);
×
UNCOV
1998
    code = TSDB_CODE_SUCCESS;
×
UNCOV
1999
    goto _exit;
×
2000
  }
2001

2002
  {  //  'bool/int32_t/int64_t/float/double' variables with general modification function
2003
    static OptionNameAndVar debugOptions[] = {
2004
        {"dDebugFlag", &dDebugFlag},       {"vDebugFlag", &vDebugFlag},     {"mDebugFlag", &mDebugFlag},
2005
        {"wDebugFlag", &wDebugFlag},       {"azDebugFlag", &azDebugFlag},   {"sDebugFlag", &sDebugFlag},
2006
        {"tsdbDebugFlag", &tsdbDebugFlag}, {"tqDebugFlag", &tqDebugFlag},   {"fsDebugFlag", &fsDebugFlag},
2007
        {"udfDebugFlag", &udfDebugFlag},   {"smaDebugFlag", &smaDebugFlag}, {"idxDebugFlag", &idxDebugFlag},
2008
        {"tdbDebugFlag", &tdbDebugFlag},   {"tmrDebugFlag", &tmrDebugFlag}, {"uDebugFlag", &uDebugFlag},
2009
        {"smaDebugFlag", &smaDebugFlag},   {"rpcDebugFlag", &rpcDebugFlag}, {"qDebugFlag", &qDebugFlag},
2010
        {"metaDebugFlag", &metaDebugFlag}, {"stDebugFlag", &stDebugFlag},   {"sndDebugFlag", &sndDebugFlag},
2011
        {"tqClientDebugFlag", &tqClientDebugFlag},
2012
    };
2013

2014
    static OptionNameAndVar options[] = {{"audit", &tsEnableAudit},
2015
                                         {"asynclog", &tsAsyncLog},
2016
                                         {"disableStream", &tsDisableStream},
2017
                                         {"enableWhiteList", &tsEnableWhiteList},
2018
                                         {"telemetryReporting", &tsEnableTelem},
2019
                                         {"monitor", &tsEnableMonitor},
2020
                                         {"monitorInterval", &tsMonitorInterval},
2021
                                         {"slowLogThreshold", &tsSlowLogThreshold},
2022
                                         {"slowLogMaxLen", &tsSlowLogMaxLen},
2023

2024
                                         {"mndSdbWriteDelta", &tsMndSdbWriteDelta},
2025
                                         {"minDiskFreeSize", &tsMinDiskFreeSize},
2026
                                         {"randErrorChance", &tsRandErrChance},
2027
                                         {"randErrorDivisor", &tsRandErrDivisor},
2028
                                         {"randErrorScope", &tsRandErrScope},
2029
                                         {"syncLogBufferMemoryAllowed", &tsLogBufferMemoryAllowed},
2030

2031
                                         {"cacheLazyLoadThreshold", &tsCacheLazyLoadThreshold},
2032
                                         {"checkpointInterval", &tsStreamCheckpointInterval},
2033
                                         {"logKeepDays", &tsLogKeepDays},
2034
                                         {"maxStreamBackendCache", &tsMaxStreamBackendCache},
2035
                                         {"mqRebalanceInterval", &tsMqRebalanceInterval},
2036
                                         {"numOfLogLines", &tsNumOfLogLines},
2037
                                         {"queryRspPolicy", &tsQueryRspPolicy},
2038
                                         {"timeseriesThreshold", &tsTimeSeriesThreshold},
2039
                                         {"tmqMaxTopicNum", &tmqMaxTopicNum},
2040
                                         {"tmqRowSize", &tmqRowSize},
2041
                                         {"transPullupInterval", &tsTransPullupInterval},
2042
                                         {"compactPullupInterval", &tsCompactPullupInterval},
2043
                                         {"trimVDbIntervalSec", &tsTrimVDbIntervalSec},
2044
                                         {"ttlBatchDropNum", &tsTtlBatchDropNum},
2045
                                         {"ttlFlushThreshold", &tsTtlFlushThreshold},
2046
                                         {"ttlPushInterval", &tsTtlPushIntervalSec},
2047
                                         {"s3MigrateIntervalSec", &tsS3MigrateIntervalSec},
2048
                                         {"s3MigrateEnabled", &tsS3MigrateEnabled},
2049
                                         //{"s3BlockSize", &tsS3BlockSize},
2050
                                         {"s3BlockCacheSize", &tsS3BlockCacheSize},
2051
                                         {"s3PageCacheSize", &tsS3PageCacheSize},
2052
                                         {"s3UploadDelaySec", &tsS3UploadDelaySec},
2053
                                         {"supportVnodes", &tsNumOfSupportVnodes},
2054
                                         {"experimental", &tsExperimental},
2055
                                         {"maxTsmaNum", &tsMaxTsmaNum},
2056
                                         {"safetyCheckLevel", &tsSafetyCheckLevel},
2057
                                         {"bypassFlag", &tsBypassFlag}};
2058

2059
    if ((code = taosCfgSetOption(debugOptions, tListLen(debugOptions), pItem, true)) != TSDB_CODE_SUCCESS) {
97✔
2060
      code = taosCfgSetOption(options, tListLen(options), pItem, false);
61✔
2061
    }
2062
  }
2063

2064
_exit:
36✔
2065
  cfgUnLock(pCfg);
104✔
2066
  TAOS_RETURN(code);
104✔
2067
}
2068

2069
static int32_t taosCfgDynamicOptionsForClient(SConfig *pCfg, const char *name) {
15,864✔
2070
  int32_t code = TSDB_CODE_SUCCESS;
15,864✔
2071
  int32_t lino = 0;
15,864✔
2072

2073
  cfgLock(pCfg);
15,864✔
2074

2075
  SConfigItem *pItem = cfgGetItem(pCfg, name);
15,864✔
2076
  if ((pItem == NULL) || (pItem->dynScope & CFG_DYN_CLIENT) == 0) {
15,864!
UNCOV
2077
    uError("failed to config:%s, not support", name);
×
UNCOV
2078
    code = TSDB_CODE_INVALID_CFG;
×
UNCOV
2079
    goto _out;
×
2080
  }
2081

2082
  bool matched = false;
15,864✔
2083

2084
  int32_t len = strlen(name);
15,864✔
2085
  char    lowcaseName[CFG_NAME_MAX_LEN + 1] = {0};
15,864✔
2086
  (void)strntolower(lowcaseName, name, TMIN(CFG_NAME_MAX_LEN, len));
15,864✔
2087

2088
  switch (lowcaseName[0]) {
15,864!
2089
    case 'd': {
5✔
2090
      if (strcasecmp("debugFlag", name) == 0) {
5!
2091
        code = taosSetAllDebugFlag(pCfg, pItem->i32);
5✔
2092
        matched = true;
5✔
2093
      }
2094
      break;
5✔
2095
    }
2096
    case 'e': {
1✔
2097
      if (strcasecmp("enableCoreFile", name) == 0) {
1!
2098
        tsEnableCoreFile = pItem->bval;
1✔
2099
        taosSetCoreDump(tsEnableCoreFile);
1✔
2100
        uInfo("%s set to %d", name, tsEnableCoreFile);
1!
2101
        matched = true;
1✔
2102
      }
2103
      break;
1✔
2104
    }
2105
    case 'f': {
2✔
2106
      if (strcasecmp("fqdn", name) == 0) {
2✔
2107
        SConfigItem *pFqdnItem = cfgGetItem(pCfg, "fqdn");
1✔
2108
        SConfigItem *pServerPortItem = cfgGetItem(pCfg, "serverPort");
1✔
2109
        SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp");
1✔
2110
        if (pFqdnItem == NULL || pServerPortItem == NULL || pFirstEpItem == NULL) {
1!
UNCOV
2111
          uError("failed to get fqdn or serverPort or firstEp from cfg");
×
UNCOV
2112
          code = TSDB_CODE_CFG_NOT_FOUND;
×
UNCOV
2113
          goto _out;
×
2114
        }
2115

2116
        tstrncpy(tsLocalFqdn, pFqdnItem->str, TSDB_FQDN_LEN);
1✔
2117
        tsServerPort = (uint16_t)pServerPortItem->i32;
1✔
2118
        (void)snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
1✔
2119

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

2123
        SEp firstEp = {0};
1✔
2124
        TAOS_CHECK_GOTO(
1!
2125
            taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp), &lino,
2126
            _out);
2127
        (void)snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port);
1✔
2128

2129
        TAOS_CHECK_GOTO(cfgSetItem(pCfg, "firstEp", tsFirst, pFirstEpItem->stype, false), &lino, _out);
1!
2130
        uInfo("localEp set to '%s', tsFirst set to '%s'", tsLocalEp, tsFirst);
1!
2131
        matched = true;
1✔
2132
      } else if (strcasecmp("firstEp", name) == 0) {
1!
2133
        SConfigItem *pFqdnItem = cfgGetItem(pCfg, "fqdn");
1✔
2134
        SConfigItem *pServerPortItem = cfgGetItem(pCfg, "serverPort");
1✔
2135
        SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp");
1✔
2136
        if (pFqdnItem == NULL || pServerPortItem == NULL || pFirstEpItem == NULL) {
1!
UNCOV
2137
          uError("failed to get fqdn or serverPort or firstEp from cfg");
×
UNCOV
2138
          code = TSDB_CODE_CFG_NOT_FOUND;
×
UNCOV
2139
          goto _out;
×
2140
        }
2141

2142
        tstrncpy(tsLocalFqdn, pFqdnItem->str, TSDB_FQDN_LEN);
1✔
2143
        tsServerPort = (uint16_t)pServerPortItem->i32;
1✔
2144
        (void)snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
1✔
2145

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

2149
        SEp firstEp = {0};
1✔
2150
        TAOS_CHECK_GOTO(
1!
2151
            taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp), &lino,
2152
            _out);
2153
        (void)snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port);
1✔
2154

2155
        TAOS_CHECK_GOTO(cfgSetItem(pCfg, "firstEp", tsFirst, pFirstEpItem->stype, false), &lino, _out);
1!
2156
        uInfo("localEp set to '%s', tsFirst set to '%s'", tsLocalEp, tsFirst);
1!
2157
        matched = true;
1✔
2158
      }
2159
      break;
2✔
2160
    }
2161
    case 'l': {
4✔
2162
      if (strcasecmp("locale", name) == 0) {
4✔
2163
        SConfigItem *pLocaleItem = cfgGetItem(pCfg, "locale");
1✔
2164
        SConfigItem *pCharsetItem = cfgGetItem(pCfg, "charset");
1✔
2165
        if (pLocaleItem == NULL || pCharsetItem == NULL) {
1!
2166
          uError("failed to get locale or charset from cfg");
×
2167
          code = TSDB_CODE_CFG_NOT_FOUND;
×
2168
          goto _out;
×
2169
        }
2170

2171
        const char *locale = pLocaleItem->str;
1✔
2172
        const char *charset = pCharsetItem->str;
1✔
2173
        TAOS_CHECK_GOTO(taosSetSystemLocale(locale, charset), &lino, _out);
1!
2174
        osSetSystemLocale(locale, charset);
×
2175
        uInfo("locale set to '%s', charset set to '%s'", locale, charset);
×
2176
        matched = true;
×
2177
      }
2178
      break;
3✔
2179
    }
2180
    case 'm': {
1✔
2181
      if (strcasecmp("metaCacheMaxSize", name) == 0) {
1!
2182
        atomic_store_32(&tsMetaCacheMaxSize, pItem->i32);
×
2183
        uInfo("%s set to %d", name, atomic_load_32(&tsMetaCacheMaxSize));
×
2184
        matched = true;
×
2185
      } else if (strcasecmp("minimalTmpDirGB", name) == 0) {
1!
2186
        tsTempSpace.reserved = (int64_t)(((double)pItem->fval) * 1024 * 1024 * 1024);
1✔
2187
        uInfo("%s set to %" PRId64, name, tsTempSpace.reserved);
1!
2188
        matched = true;
1✔
2189
      } else if (strcasecmp("minimalLogDirGB", name) == 0) {
×
2190
        tsLogSpace.reserved = (int64_t)(((double)pItem->fval) * 1024 * 1024 * 1024);
×
2191
        uInfo("%s set to %" PRId64, name, tsLogSpace.reserved);
×
2192
        matched = true;
×
2193
      }
2194
      break;
1✔
2195
    }
2196
    case 's': {
×
2197
      if (strcasecmp("secondEp", name) == 0) {
×
2198
        SEp secondEp = {0};
×
2199
        TAOS_CHECK_GOTO(taosGetFqdnPortFromEp(strlen(pItem->str) == 0 ? tsFirst : pItem->str, &secondEp), &lino, _out);
×
2200
        (void)snprintf(tsSecond, sizeof(tsSecond), "%s:%u", secondEp.fqdn, secondEp.port);
×
2201
        TAOS_CHECK_GOTO(cfgSetItem(pCfg, "secondEp", tsSecond, pItem->stype, false), &lino, _out);
×
2202
        uInfo("%s set to %s", name, tsSecond);
×
2203
        matched = true;
×
2204
      } else if (strcasecmp("smlChildTableName", name) == 0) {
×
2205
        uInfo("%s set from %s to %s", name, tsSmlChildTableName, pItem->str);
×
2206
        tstrncpy(tsSmlChildTableName, pItem->str, TSDB_TABLE_NAME_LEN);
×
2207
        matched = true;
×
2208
      } else if (strcasecmp("smlAutoChildTableNameDelimiter", name) == 0) {
×
2209
        uInfo("%s set from %s to %s", name, tsSmlAutoChildTableNameDelimiter, pItem->str);
×
2210
        tstrncpy(tsSmlAutoChildTableNameDelimiter, pItem->str, TSDB_TABLE_NAME_LEN);
×
2211
        matched = true;
×
2212
      } else if (strcasecmp("smlTagName", name) == 0) {
×
2213
        uInfo("%s set from %s to %s", name, tsSmlTagName, pItem->str);
×
2214
        tstrncpy(tsSmlTagName, pItem->str, TSDB_COL_NAME_LEN);
×
2215
        matched = true;
×
2216
      } else if (strcasecmp("smlTsDefaultName", name) == 0) {
×
2217
        uInfo("%s set from %s to %s", name, tsSmlTsDefaultName, pItem->str);
×
2218
        tstrncpy(tsSmlTsDefaultName, pItem->str, TSDB_COL_NAME_LEN);
×
2219
        matched = true;
×
UNCOV
2220
      } else if (strcasecmp("serverPort", name) == 0) {
×
UNCOV
2221
        SConfigItem *pFqdnItem = cfgGetItem(pCfg, "fqdn");
×
2222
        SConfigItem *pServerPortItem = cfgGetItem(pCfg, "serverPort");
×
2223
        SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp");
×
2224
        if (pFqdnItem == NULL || pServerPortItem == NULL || pFirstEpItem == NULL) {
×
UNCOV
2225
          uError("failed to get fqdn or serverPort or firstEp from cfg");
×
2226
          code = TSDB_CODE_CFG_NOT_FOUND;
×
2227
          goto _out;
×
2228
        }
2229

2230
        tstrncpy(tsLocalFqdn, pFqdnItem->str, TSDB_FQDN_LEN);
×
UNCOV
2231
        tsServerPort = (uint16_t)pServerPortItem->i32;
×
UNCOV
2232
        (void)snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
×
2233

UNCOV
2234
        char defaultFirstEp[TSDB_EP_LEN] = {0};
×
2235
        (void)snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort);
×
2236

2237
        SEp firstEp = {0};
×
UNCOV
2238
        TAOS_CHECK_GOTO(
×
2239
            taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp), &lino,
2240
            _out);
2241
        (void)snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port);
×
2242

2243
        TAOS_CHECK_GOTO(cfgSetItem(pCfg, "firstEp", tsFirst, pFirstEpItem->stype, false), &lino, _out);
×
2244
        uInfo("localEp set to '%s', tsFirst set to '%s'", tsLocalEp, tsFirst);
×
UNCOV
2245
        matched = true;
×
2246
      }
2247
      break;
×
2248
    }
2249
    case 't': {
×
2250
      if (strcasecmp("timezone", name) == 0) {
×
2251
        TAOS_CHECK_GOTO(osSetTimezone(pItem->str), &lino, _out);
×
2252
        uInfo("%s set from %s to %s", name, tsTimezoneStr, pItem->str);
×
2253

2254
        TAOS_CHECK_GOTO(cfgSetItem(pCfg, "timezone", tsTimezoneStr, pItem->stype, false), &lino, _out);
×
2255
        matched = true;
×
UNCOV
2256
      } else if (strcasecmp("tempDir", name) == 0) {
×
2257
        uInfo("%s set from %s to %s", name, tsTempDir, pItem->str);
×
UNCOV
2258
        tstrncpy(tsTempDir, pItem->str, PATH_MAX);
×
2259
        TAOS_CHECK_GOTO(taosExpandDir(tsTempDir, tsTempDir, PATH_MAX), &lino, _out);
×
UNCOV
2260
        if (taosMulMkDir(tsTempDir) != 0) {
×
UNCOV
2261
          code = TAOS_SYSTEM_ERROR(errno);
×
UNCOV
2262
          uError("failed to create tempDir:%s since %s", tsTempDir, tstrerror(code));
×
UNCOV
2263
          goto _out;
×
2264
        }
UNCOV
2265
        matched = true;
×
2266
      }
UNCOV
2267
      break;
×
2268
    }
2269
    default:
15,851✔
2270
      code = TSDB_CODE_CFG_NOT_FOUND;
15,851✔
2271
      break;
15,851✔
2272
  }
2273

2274
  if (matched) goto _out;
15,863✔
2275

2276
  {  //  'bool/int32_t/int64_t/float/double' variables with general modification function
2277
    static OptionNameAndVar debugOptions[] = {
2278
        {"cDebugFlag", &cDebugFlag},     {"dDebugFlag", &dDebugFlag},     {"fsDebugFlag", &fsDebugFlag},
2279
        {"idxDebugFlag", &idxDebugFlag}, {"jniDebugFlag", &jniDebugFlag}, {"qDebugFlag", &qDebugFlag},
2280
        {"rpcDebugFlag", &rpcDebugFlag}, {"smaDebugFlag", &smaDebugFlag}, {"tmrDebugFlag", &tmrDebugFlag},
2281
        {"uDebugFlag", &uDebugFlag},     {"simDebugFlag", &simDebugFlag},
2282
    };
2283

2284
    static OptionNameAndVar options[] = {{"asyncLog", &tsAsyncLog},
2285
                                         {"assert", &tsAssert},
2286
                                         {"compressMsgSize", &tsCompressMsgSize},
2287
                                         {"countAlwaysReturnValue", &tsCountAlwaysReturnValue},
2288
                                         {"crashReporting", &tsEnableCrashReport},
2289
                                         {"enableQueryHb", &tsEnableQueryHb},
2290
                                         {"keepColumnName", &tsKeepColumnName},
2291
                                         {"logKeepDays", &tsLogKeepDays},
2292
                                         {"maxInsertBatchRows", &tsMaxInsertBatchRows},
2293
                                         {"maxRetryWaitTime", &tsMaxRetryWaitTime},
2294
                                         {"minSlidingTime", &tsMinSlidingTime},
2295
                                         {"minIntervalTime", &tsMinIntervalTime},
2296
                                         {"numOfLogLines", &tsNumOfLogLines},
2297
                                         {"querySmaOptimize", &tsQuerySmaOptimize},
2298
                                         {"queryPolicy", &tsQueryPolicy},
2299
                                         {"queryTableNotExistAsEmpty", &tsQueryTbNotExistAsEmpty},
2300
                                         {"queryPlannerTrace", &tsQueryPlannerTrace},
2301
                                         {"queryNodeChunkSize", &tsQueryNodeChunkSize},
2302
                                         {"queryUseNodeAllocator", &tsQueryUseNodeAllocator},
2303
                                         {"randErrorChance", &tsRandErrChance},
2304
                                         {"randErrorDivisor", &tsRandErrDivisor},
2305
                                         {"randErrorScope", &tsRandErrScope},
2306
                                         {"smlDot2Underline", &tsSmlDot2Underline},
2307
                                         {"shellActivityTimer", &tsShellActivityTimer},
2308
                                         {"useAdapter", &tsUseAdapter},
2309
                                         {"experimental", &tsExperimental},
2310
                                         {"multiResultFunctionStarReturnTags", &tsMultiResultFunctionStarReturnTags},
2311
                                         {"maxTsmaCalcDelay", &tsMaxTsmaCalcDelay},
2312
                                         {"tsmaDataDeleteMark", &tsmaDataDeleteMark},
2313
                                         {"safetyCheckLevel", &tsSafetyCheckLevel},
2314
                                         {"bypassFlag", &tsBypassFlag}};
2315

2316
    if ((code = taosCfgSetOption(debugOptions, tListLen(debugOptions), pItem, true)) != TSDB_CODE_SUCCESS) {
15,854!
2317
      code = taosCfgSetOption(options, tListLen(options), pItem, false);
15,854✔
2318
    }
2319
  }
2320

UNCOV
2321
_out:
×
2322
  if (TSDB_CODE_SUCCESS != code) {
15,864✔
2323
    uError("failed to set option:%s, lino:%d, since:%s", name, lino, tstrerror(code));
1!
2324
  }
2325

2326
  cfgUnLock(pCfg);
15,864✔
2327
  TAOS_RETURN(code);
15,864✔
2328
}
2329

2330
int32_t taosCfgDynamicOptions(SConfig *pCfg, const char *name, bool forServer) {
15,970✔
2331
  if (forServer) {
15,970✔
2332
    return taosCfgDynamicOptionsForServer(pCfg, name);
106✔
2333
  } else {
2334
    return taosCfgDynamicOptionsForClient(pCfg, name);
15,864✔
2335
  }
2336
}
2337

2338
int32_t taosSetDebugFlag(int32_t *pFlagPtr, const char *flagName, int32_t flagVal) {
48,886✔
2339
  SConfigItem *pItem = NULL;
48,886✔
2340
  TAOS_CHECK_GET_CFG_ITEM(tsCfg, pItem, flagName);
48,886✔
2341
  pItem->i32 = flagVal;
12,782✔
2342
  if (pFlagPtr != NULL) {
12,782!
2343
    *pFlagPtr = flagVal;
12,782✔
2344
  }
2345
  TAOS_RETURN(TSDB_CODE_SUCCESS);
12,782✔
2346
}
2347

2348
static int taosLogVarComp(void const *lp, void const *rp) {
8,178✔
2349
  SLogVar *lpVar = (SLogVar *)lp;
8,178✔
2350
  SLogVar *rpVar = (SLogVar *)rp;
8,178✔
2351
  return strcasecmp(lpVar->name, rpVar->name);
8,178✔
2352
}
2353

2354
static void taosCheckAndSetDebugFlag(int32_t *pFlagPtr, char *name, int32_t flag, SArray *noNeedToSetVars) {
49,214✔
2355
  if (noNeedToSetVars != NULL && taosArraySearch(noNeedToSetVars, name, taosLogVarComp, TD_EQ) != NULL) {
49,214✔
2356
    return;
364✔
2357
  }
2358
  int32_t code = 0;
48,850✔
2359
  if ((code = taosSetDebugFlag(pFlagPtr, name, flag)) != 0) {
48,850✔
2360
    if (code != TSDB_CODE_CFG_NOT_FOUND) {
36,104!
UNCOV
2361
      uError("failed to set flag %s to %d, since:%s", name, flag, tstrerror(code));
×
2362
    } else {
2363
      uDebug("failed to set flag %s to %d, since:%s", name, flag, tstrerror(code));
36,104✔
2364
    }
2365
  }
2366
  return;
48,850✔
2367
}
2368

UNCOV
2369
int32_t taosSetGlobalDebugFlag(int32_t flag) { return taosSetAllDebugFlag(tsCfg, flag); }
×
2370

2371
// NOTE: set all command does not change the tmrDebugFlag
2372
static int32_t taosSetAllDebugFlag(SConfig *pCfg, int32_t flag) {
16,849✔
2373
  if (flag < 0) TAOS_RETURN(TSDB_CODE_INVALID_PARA);
16,849!
2374
  if (flag == 0) TAOS_RETURN(TSDB_CODE_SUCCESS);  // just ignore
16,849✔
2375

2376
  SArray      *noNeedToSetVars = NULL;
2,237✔
2377
  SConfigItem *pItem = NULL;
2,237✔
2378
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "debugFlag");
2,237!
2379

2380
  pItem->i32 = flag;
2,237✔
2381
  noNeedToSetVars = pItem->array;
2,237✔
2382

2383
  taosCheckAndSetDebugFlag(&simDebugFlag, "simDebugFlag", flag, noNeedToSetVars);
2,237✔
2384
  taosCheckAndSetDebugFlag(&uDebugFlag, "uDebugFlag", flag, noNeedToSetVars);
2,237✔
2385
  taosCheckAndSetDebugFlag(&rpcDebugFlag, "rpcDebugFlag", flag, noNeedToSetVars);
2,237✔
2386
  taosCheckAndSetDebugFlag(&qDebugFlag, "qDebugFlag", flag, noNeedToSetVars);
2,237✔
2387

2388
  taosCheckAndSetDebugFlag(&jniDebugFlag, "jniDebugFlag", flag, noNeedToSetVars);
2,237✔
2389
  taosCheckAndSetDebugFlag(&cDebugFlag, "cDebugFlag", flag, noNeedToSetVars);
2,237✔
2390

2391
  taosCheckAndSetDebugFlag(&dDebugFlag, "dDebugFlag", flag, noNeedToSetVars);
2,237✔
2392
  taosCheckAndSetDebugFlag(&vDebugFlag, "vDebugFlag", flag, noNeedToSetVars);
2,237✔
2393
  taosCheckAndSetDebugFlag(&mDebugFlag, "mDebugFlag", flag, noNeedToSetVars);
2,237✔
2394
  taosCheckAndSetDebugFlag(&wDebugFlag, "wDebugFlag", flag, noNeedToSetVars);
2,237✔
2395
  taosCheckAndSetDebugFlag(&azDebugFlag, "azDebugFlag", flag, noNeedToSetVars);
2,237✔
2396
  taosCheckAndSetDebugFlag(&sDebugFlag, "sDebugFlag", flag, noNeedToSetVars);
2,237✔
2397
  taosCheckAndSetDebugFlag(&tsdbDebugFlag, "tsdbDebugFlag", flag, noNeedToSetVars);
2,237✔
2398
  taosCheckAndSetDebugFlag(&tqDebugFlag, "tqDebugFlag", flag, noNeedToSetVars);
2,237✔
2399
  taosCheckAndSetDebugFlag(&fsDebugFlag, "fsDebugFlag", flag, noNeedToSetVars);
2,237✔
2400
  taosCheckAndSetDebugFlag(&udfDebugFlag, "udfDebugFlag", flag, noNeedToSetVars);
2,237✔
2401
  taosCheckAndSetDebugFlag(&smaDebugFlag, "smaDebugFlag", flag, noNeedToSetVars);
2,237✔
2402
  taosCheckAndSetDebugFlag(&idxDebugFlag, "idxDebugFlag", flag, noNeedToSetVars);
2,237✔
2403
  taosCheckAndSetDebugFlag(&tdbDebugFlag, "tdbDebugFlag", flag, noNeedToSetVars);
2,237✔
2404
  taosCheckAndSetDebugFlag(&metaDebugFlag, "metaDebugFlag", flag, noNeedToSetVars);
2,237✔
2405
  taosCheckAndSetDebugFlag(&stDebugFlag, "stDebugFlag", flag, noNeedToSetVars);
2,237✔
2406
  taosCheckAndSetDebugFlag(&sndDebugFlag, "sndDebugFlag", flag, noNeedToSetVars);
2,237✔
2407

2408
  taosArrayClear(noNeedToSetVars);  // reset array
2,237✔
2409

2410
  uInfo("all debug flag are set to %d", flag);
2,237!
2411
  TAOS_RETURN(TSDB_CODE_SUCCESS);
2,237✔
2412
}
2413

2414
int8_t taosGranted(int8_t type) {
1,333,843✔
2415
  switch (type) {
1,333,843!
2416
    case TSDB_GRANT_ALL:
1,334,815✔
2417
      return atomic_load_8(&tsGrant) & GRANT_FLAG_ALL;
1,334,815✔
UNCOV
2418
    case TSDB_GRANT_AUDIT:
×
UNCOV
2419
      return atomic_load_8(&tsGrant) & GRANT_FLAG_AUDIT;
×
2420
    case TSDB_GRANT_VIEW:
302✔
2421
      return atomic_load_8(&tsGrant) & GRANT_FLAG_VIEW;
302✔
UNCOV
2422
    default:
×
UNCOV
2423
      uWarn("undefined grant type:%" PRIi8, type);
×
UNCOV
2424
      break;
×
2425
  }
UNCOV
2426
  return 0;
×
2427
}
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

© 2026 Coveralls, Inc