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

taosdata / TDengine / #4720

08 Sep 2025 08:43AM UTC coverage: 58.139% (-0.6%) from 58.762%
#4720

push

travis-ci

web-flow
Merge pull request #32881 from taosdata/enh/add-new-windows-ci

fix(ci): update workflow reference to use new Windows CI YAML

133181 of 292179 branches covered (45.58%)

Branch coverage included in aggregate %.

201691 of 283811 relevant lines covered (71.07%)

5442780.71 hits per line

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

62.47
/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 "cJSON.h"
19
#include "defines.h"
20
#include "os.h"
21
#include "osString.h"
22
#include "tconfig.h"
23
#include "tgrant.h"
24
#include "tjson.h"
25
#include "tlog.h"
26
#include "tmisce.h"
27
#include "tunit.h"
28

29
#include "tutil.h"
30

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

34
// GRANT_CFG_DECLARE;
35

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

65
// common
66
int32_t tsMaxShellConns = 50000;
67
int32_t tsShellActivityTimer = 3;  // second
68

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

82
// queue & threads
83
int32_t tsQueryMinConcurrentTaskNum = 1;
84
int32_t tsQueryMaxConcurrentTaskNum = 0;
85
int32_t tsQueryConcurrentTaskNum = 0;
86
int32_t tsQueryNoFetchTimeoutSec = 3600 * 5;
87

88
int32_t tsNumOfRpcThreads = 1;
89
int32_t tsNumOfRpcSessions = 30000;
90
#ifdef WINDOWS
91
int32_t tsShareConnLimit = 1;
92
#else
93
int32_t tsShareConnLimit = 10;
94
#endif
95

96
int32_t tsReadTimeout = 900;
97
int32_t tsTimeToGetAvailableConn = 500000;
98
int8_t  tsEnableIpv6 = 0;
99

100
int32_t tsNumOfQueryThreads = 0;
101
int32_t tsNumOfCommitThreads = 2;
102
int32_t tsNumOfTaskQueueThreads = 16;
103
int32_t tsNumOfMnodeQueryThreads = 16;
104
int32_t tsNumOfMnodeFetchThreads = 1;
105
int32_t tsNumOfMnodeReadThreads = 1;
106
int32_t tsNumOfVnodeQueryThreads = 16;
107
int32_t tsNumOfVnodeFetchThreads = 4;
108
int32_t tsNumOfVnodeRsmaThreads = 2;
109
int32_t tsNumOfQnodeQueryThreads = 16;
110
int32_t tsNumOfQnodeFetchThreads = 1;
111
int32_t tsNumOfSnodeStreamThreads = 4;
112
int32_t tsNumOfSnodeWriteThreads = 1;
113
int32_t tsPQSortMemThreshold = 16;    // M
114
int32_t tsRetentionSpeedLimitMB = 0;  // unlimited
115
int32_t tsNumOfMnodeStreamMgmtThreads = 2;
116
int32_t tsNumOfStreamMgmtThreads = 2;
117
int32_t tsNumOfVnodeStreamReaderThreads = 4;
118
int32_t tsNumOfStreamTriggerThreads = 4;
119
int32_t tsNumOfStreamRunnerThreads = 4;
120

121
int32_t tsNumOfCompactThreads = 2;
122
int32_t tsNumOfRetentionThreads = 1;
123

124
// sync raft
125
int32_t tsElectInterval = 4000;
126
int32_t tsHeartbeatInterval = 1000;
127
int32_t tsVnodeElectIntervalMs = 4000;
128
int32_t tsVnodeHeartbeatIntervalMs = 1000;
129
int32_t tsMnodeElectIntervalMs = 3000;
130
int32_t tsMnodeHeartbeatIntervalMs = 500;
131
int32_t tsHeartbeatTimeout = 20 * 1000;
132
int32_t tsSnapReplMaxWaitN = 128;
133
int64_t tsLogBufferMemoryAllowed = 0;  // bytes
134
int64_t tsSyncApplyQueueSize = 512;
135
int32_t tsRoutineReportInterval = 300;
136
bool    tsSyncLogHeartbeat = false;
137
int32_t tsSyncTimeout = 0;
138

139
// mnode
140
int64_t tsMndSdbWriteDelta = 200;
141
int64_t tsMndLogRetention = 2000;
142
bool    tsMndSkipGrant = false;
143
bool    tsEnableWhiteList = false;  // ip white list cfg
144
bool    tsForceKillTrans = false;
145

146
// arbitrator
147
int32_t tsArbHeartBeatIntervalSec = 2;
148
int32_t tsArbCheckSyncIntervalSec = 3;
149
int32_t tsArbSetAssignedTimeoutSec = 14;
150
int32_t tsArbHeartBeatIntervalMs = 2000;
151
int32_t tsArbCheckSyncIntervalMs = 3000;
152
int32_t tsArbSetAssignedTimeoutMs = 14000;
153

154
// dnode
155
int64_t tsDndStart = 0;
156
int64_t tsDndStartOsUptime = 0;
157
int64_t tsDndUpTime = 0;
158

159
// dnode misc
160
uint32_t tsEncryptionKeyChksum = 0;
161
int8_t   tsEncryptionKeyStat = ENCRYPT_KEY_STAT_UNSET;
162
uint32_t tsGrant = 1;
163

164
bool tsCompareAsStrInGreatest = true;
165

166
// monitor
167
#ifdef USE_MONITOR
168
bool tsEnableMonitor = true;
169
#else
170
bool    tsEnableMonitor = false;
171
#endif
172
int32_t  tsMonitorInterval = 30;
173
char     tsMonitorFqdn[TSDB_FQDN_LEN] = {0};
174
uint16_t tsMonitorPort = 6043;
175
int32_t  tsMonitorMaxLogs = 100;
176
bool     tsMonitorComp = false;
177
bool     tsMonitorLogProtocol = false;
178
int32_t  tsEnableMetrics = 0;     // 0: disable, 1: enable
179
int32_t  tsMetricsLevel = 0;      // 0: only high level metrics, 1: full metrics
180
int32_t  tsMetricsInterval = 30;  // second
181
#ifdef USE_MONITOR
182
bool tsMonitorForceV2 = true;
183
#else
184
bool    tsMonitorForceV2 = false;
185
#endif
186

187
// audit
188
#ifdef USE_AUDIT
189
bool    tsEnableAudit = true;
190
bool    tsEnableAuditCreateTable = true;
191
bool    tsEnableAuditDelete = true;
192
int32_t tsAuditInterval = 5000;
193
#else
194
bool    tsEnableAudit = false;
195
bool    tsEnableAuditCreateTable = false;
196
bool    tsEnableAuditDelete = false;
197
int32_t tsAuditInterval = 200000;
198
#endif
199

200
// telem
201
#if defined(TD_ENTERPRISE) || !defined(USE_REPORT)
202
bool tsEnableTelem = false;
203
#else
204
bool    tsEnableTelem = true;
205
#endif
206
int32_t  tsTelemInterval = 86400;
207
char     tsTelemServer[TSDB_FQDN_LEN] = "telemetry.tdengine.com";
208
uint16_t tsTelemPort = 80;
209
char    *tsTelemUri = "/report";
210

211
#if defined(TD_ENTERPRISE) || !defined(USE_REPORT)
212
bool tsEnableCrashReport = false;
213
#else
214
bool    tsEnableCrashReport = true;
215
#endif
216
char   *tsClientCrashReportUri = "/ccrashreport";
217
char   *tsSvrCrashReportUri = "/dcrashreport";
218
int32_t tsSafetyCheckLevel = TSDB_SAFETY_CHECK_LEVELL_NORMAL;
219

220
// schemaless
221
bool tsSmlDot2Underline = true;
222
char tsSmlTsDefaultName[TSDB_COL_NAME_LEN] = "_ts";
223
char tsSmlTagName[TSDB_COL_NAME_LEN] = "_tag_null";
224
char tsSmlChildTableName[TSDB_TABLE_NAME_LEN] = "";  // user defined child table name can be specified in tag value.
225
char tsSmlAutoChildTableNameDelimiter[TSDB_TABLE_NAME_LEN] = "";
226
// If set to empty system will generate table name using MD5 hash.
227
// true means that the name and order of cols in each line are the same(only for influx protocol)
228
// bool    tsSmlDataFormat = false;
229
// int32_t tsSmlBatchSize = 10000;
230

231
// checkpoint backup
232
char    tsSnodeAddress[TSDB_FQDN_LEN] = {0};
233
int32_t tsRsyncPort = 873;
234
#ifdef WINDOWS
235
char tsCheckpointBackupDir[PATH_MAX] = "C:\\TDengine\\data\\backup\\checkpoint\\";
236
#else
237
char    tsCheckpointBackupDir[PATH_MAX] = "/var/lib/taos/backup/checkpoint/";
238
#endif
239

240
// tmq
241
int32_t tmqMaxTopicNum = 20;
242
int32_t tmqRowSize = 1000;
243
// query
244
int32_t tsQueryPolicy = 1;
245
bool    tsQueryTbNotExistAsEmpty = false;
246
int32_t tsQueryRspPolicy = 0;
247
int64_t tsQueryMaxConcurrentTables = 200;  // unit is TSDB_TABLE_NUM_UNIT
248
bool    tsEnableQueryHb = true;
249
bool    tsEnableScience = false;  // on taos-cli show float and doulbe with scientific notation if true
250
int32_t tsQuerySmaOptimize = 0;
251
int32_t tsQueryRsmaTolerance = 1000;  // the tolerance time (ms) to judge from which level to query rsma data.
252
bool    tsQueryPlannerTrace = false;
253
int32_t tsQueryNodeChunkSize = 32 * 1024;
254
bool    tsQueryUseNodeAllocator = true;
255
bool    tsKeepColumnName = false;
256
int32_t tsRedirectPeriod = 10;
257
int32_t tsRedirectFactor = 2;
258
int32_t tsRedirectMaxPeriod = 1000;
259
int32_t tsMaxRetryWaitTime = 20000;
260
bool    tsUseAdapter = false;
261
int32_t tsMetaCacheMaxSize = -1;                   // MB
262
int32_t tsSlowLogThreshold = 10;                   // seconds
263
char    tsSlowLogExceptDb[TSDB_DB_NAME_LEN] = "";  // seconds
264
int32_t tsSlowLogScope = SLOW_LOG_TYPE_QUERY;
265
char   *tsSlowLogScopeString = "query";
266
int32_t tsSlowLogMaxLen = 4096;
267
int32_t tsTimeSeriesThreshold = 50;
268
bool    tsMultiResultFunctionStarReturnTags = false;
269

270
/*
271
 * denote if the server needs to compress response message at the application layer to client, including query rsp,
272
 * metricmeta rsp, and multi-meter query rsp message body. The client compress the submit message to server.
273
 *
274
 * 0: all data are compressed
275
 * -1: all data are not compressed
276
 * other values: if the message payload size is greater than the tsCompressMsgSize, the message will be compressed.
277
 */
278
int32_t tsCompressMsgSize = -1;
279

280
// count/hyperloglog function always return values in case of all NULL data or Empty data set.
281
int32_t tsCountAlwaysReturnValue = 1;
282

283
// 1 ms for sliding time, the value will changed in case of time precision changed
284
int32_t tsMinSlidingTime = 1;
285

286
// 1 database precision unit for interval time range, changed accordingly
287
int32_t tsMinIntervalTime = 1;
288

289
// maximum batch rows numbers imported from a single csv load
290
int32_t tsMaxInsertBatchRows = 1000000;
291

292
float   tsSelectivityRatio = 1.0;
293
int32_t tsTagFilterResCacheSize = 1024 * 10;
294
char    tsTagFilterCache = 0;
295

296
int32_t tsBypassFlag = 0;
297

298
// the maximum allowed query buffer size during query processing for each data node.
299
// -1 no limit (default)
300
// 0  no query allowed, queries are disabled
301
// positive value (in MB)
302
int32_t tsQueryBufferSize = -1;
303
int64_t tsQueryBufferSizeBytes = -1;
304
int32_t tsCacheLazyLoadThreshold = 500;
305

306
int32_t  tsDiskCfgNum = 0;
307
SDiskCfg tsDiskCfg[TFS_MAX_DISKS] = {0};
308
int64_t  tsMinDiskFreeSize = TFS_MIN_DISK_FREE_SIZE;
309

310
/*
311
 * minimum scale for whole system, millisecond by default
312
 * for TSDB_TIME_PRECISION_MILLI: 60000L
313
 *     TSDB_TIME_PRECISION_MICRO: 60000000L
314
 *     TSDB_TIME_PRECISION_NANO:  60000000000L
315
 */
316
int64_t tsTickPerMin[] = {60000L, 60000000L, 60000000000L};
317
/*
318
 * millisecond by default
319
 * for TSDB_TIME_PRECISION_MILLI: 3600000L
320
 *     TSDB_TIME_PRECISION_MICRO: 3600000000L
321
 *     TSDB_TIME_PRECISION_NANO:  3600000000000L
322
 */
323
int64_t tsTickPerHour[] = {3600000L, 3600000000L, 3600000000000L};
324

325
// lossy compress 7
326
char tsLossyColumns[32] = "float|double";  // "float|double" means all float and double columns can be lossy compressed.
327
                                           // set empty can close lossy compress.
328
// below option can take effect when tsLossyColumns not empty
329
float    tsFPrecision = 1E-8;                   // float column precision
330
double   tsDPrecision = 1E-16;                  // double column precision
331
uint32_t tsMaxRange = 500;                      // max quantization intervals
332
uint32_t tsCurRange = 100;                      // current quantization intervals
333
bool     tsIfAdtFse = false;                    // ADT-FSE algorithom or original huffman algorithom
334
char     tsCompressor[32] = "ZSTD_COMPRESSOR";  // ZSTD_COMPRESSOR or GZIP_COMPRESSOR
335

336
// udf
337
#if defined(WINDOWS) || !defined(USE_UDF)
338
bool tsStartUdfd = false;
339
#else
340
bool    tsStartUdfd = true;
341
#endif
342

343
// wal
344
int64_t tsWalFsyncDataSizeLimit = (100 * 1024 * 1024L);
345
bool    tsWalForceRepair = 0;
346

347
// ttl
348
bool    tsTtlChangeOnWrite = false;  // if true, ttl delete time changes on last write
349
int32_t tsTtlFlushThreshold = 100;   /* maximum number of dirty items in memory.
350
                                      * if -1, flush will not be triggered by write-ops
351
                                      */
352
int32_t tsTtlBatchDropNum = 10000;   // number of tables dropped per batch
353

354
// internal
355
bool    tsDiskIDCheckEnabled = false;
356
int32_t tsTransPullupInterval = 2;
357
int32_t tsCompactPullupInterval = 10;
358
int32_t tsMqRebalanceInterval = 2;
359
int32_t tsTtlUnit = 86400;
360
int32_t tsTtlPushIntervalSec = 10;
361
int32_t tsTrimVDbIntervalSec = 60 * 60;  // interval of trimming db in all vgroups
362
int32_t tsGrantHBInterval = 60;
363
int32_t tsUptimeInterval = 300;    // seconds
364
char    tsUdfdResFuncs[512] = "";  // udfd resident funcs that teardown when udfd exits
365
char    tsUdfdLdLibPath[512] = "";
366
bool    tsDisableStream = false;
367
int32_t tsStreamBufferSize = 0;       // MB
368
int64_t tsStreamBufferSizeBytes = 0;  // bytes
369
bool    tsFilterScalarMode = false;
370

371
bool tsUpdateCacheBatch = true;
372

373
int32_t tsSsEnabled = 0;  // enable shared storage, 0: disabled, 1: enabled, 2: enabled with auto migration
374
char    tsSsAccessString[1024] = "";
375
int32_t tsSsAutoMigrateIntervalSec = 60 * 60;  // auto migrate interval of shared storage migration
376
int32_t tsSsBlockSize = -1;        // number of tsdb pages (4096). note: some related (but unused) code hasn't check the
377
                                   // negative value, which is a bug.
378
int32_t tsSsBlockCacheSize = 16;   // number of blocks
379
int32_t tsSsPageCacheSize = 4096;  // number of pages
380
int32_t tsSsUploadDelaySec = 60;
381

382
bool tsExperimental = true;
383

384
int32_t tsMaxTsmaNum = 3;
385
int32_t tsMaxTsmaCalcDelay = 600;
386
int64_t tsmaDataDeleteMark = 1000 * 60 * 60 * 24;  // in ms, default to 1d
387
void   *pTimezoneNameMap = NULL;
388

389
int32_t tsStreamNotifyMessageSize = 8 * 1024;  // KB, default 8MB
390
int32_t tsStreamNotifyFrameSize = 256;         // KB, default 256KB
391

392
bool    tsShowFullCreateTableColumn = 0;  // 0: show full create table, 1: show only table name and db name
393
int32_t taosCheckCfgStrValueLen(const char *name, const char *value, int32_t len);
394

395
#define TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, pName) \
396
  if ((pItem = cfgGetItem(pCfg, pName)) == NULL) {  \
397
    TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND);           \
398
  }
399

400
#ifndef _STORAGE
401
int32_t taosSetTfsCfg(SConfig *pCfg) {
402
  SConfigItem *pItem = NULL;
403
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "dataDir");
404
  (void)memset(tsDataDir, 0, PATH_MAX);
405

406
  int32_t size = taosArrayGetSize(pItem->array);
407
  tsDiskCfgNum = 1;
408
  tstrncpy(tsDiskCfg[0].dir, pItem->str, TSDB_FILENAME_LEN);
409
  tsDiskCfg[0].level = 0;
410
  tsDiskCfg[0].primary = 1;
411
  tsDiskCfg[0].disable = 0;
412
  tstrncpy(tsDataDir, pItem->str, PATH_MAX);
413
  if (taosMulMkDir(tsDataDir) != 0) {
414
    int32_t code = TAOS_SYSTEM_ERROR(ERRNO);
415
    uError("failed to create dataDir:%s, since:%s", tsDataDir, tstrerror(code));
416
    TAOS_RETURN(code);
417
  }
418
  TAOS_RETURN(TSDB_CODE_SUCCESS);
419
}
420
#else
421
int32_t taosSetTfsCfg(SConfig *pCfg);
422
#endif
423

424
#ifndef _STORAGE
425
int32_t cfgUpdateTfsItemDisable(SConfig *pCfg, const char *value, void *pTfs) { return TSDB_CODE_INVALID_CFG; }
426
#else
427
int32_t cfgUpdateTfsItemDisable(SConfig *pCfg, const char *value, void *pTfs);
428
#endif
429

430
int32_t taosUpdateTfsItemDisable(SConfig *pCfg, const char *value, void *pTfs) {
5✔
431
  return cfgUpdateTfsItemDisable(pCfg, value, pTfs);
5✔
432
}
433

434
struct SConfig *taosGetCfg() { return tsCfg; }
955✔
435

436
static int32_t taosLoadCfg(SConfig *pCfg, const char **envCmd, const char *inputCfgDir, const char *envFile,
13,640✔
437
                           char *apolloUrl) {
438
  int32_t code = 0;
13,640✔
439
  char    cfgDir[PATH_MAX] = {0};
13,640✔
440
  char    cfgFile[PATH_MAX + 100] = {0};
13,640✔
441

442
  TAOS_CHECK_RETURN(taosExpandDir(inputCfgDir, cfgDir, PATH_MAX));
13,640!
443
  int32_t pos = strlen(cfgDir);
13,640✔
444
  if (pos > 0) {
13,640✔
445
    pos -= 1;
13,638✔
446
  }
447
  char  lastC = cfgDir[pos];
13,640✔
448
  char *tdDirsep = TD_DIRSEP;
13,640✔
449
  if (lastC == '\\' || lastC == '/') {
13,640!
450
    tdDirsep = "";
3,155✔
451
  }
452
  if (taosIsDir(cfgDir)) {
13,640✔
453
#ifdef CUS_PROMPT
454
    (void)snprintf(cfgFile, sizeof(cfgFile),
13,618✔
455
                   "%s"
456
                   "%s"
457
                   "%s.cfg",
458
                   cfgDir, tdDirsep, CUS_PROMPT);
459
#else
460
    (void)snprintf(cfgFile, sizeof(cfgFile),
461
                   "%s"
462
                   "%s"
463
                   "taos.cfg",
464
                   cfgDir, tdDirsep);
465
#endif
466
  } else {
467
    tstrncpy(cfgFile, cfgDir, sizeof(cfgDir));
22✔
468
  }
469

470
  if (apolloUrl != NULL && apolloUrl[0] == '\0') {
13,640!
471
    (void)(cfgGetApollUrl(envCmd, envFile, apolloUrl));
4,759✔
472
  }
473

474
  if ((code = cfgLoad(pCfg, CFG_STYPE_APOLLO_URL, apolloUrl)) != 0) {
13,640!
475
    (void)printf("failed to load from apollo url:%s since %s\n", apolloUrl, tstrerror(code));
×
476
    TAOS_RETURN(code);
×
477
  }
478

479
  if ((code = cfgLoad(pCfg, CFG_STYPE_CFG_FILE, cfgFile)) != 0) {
13,640!
480
    (void)printf("failed to load from cfg file:%s since %s\n", cfgFile, tstrerror(code));
×
481
    TAOS_RETURN(code);
×
482
  }
483

484
  if ((code = cfgLoad(pCfg, CFG_STYPE_ENV_FILE, envFile)) != 0) {
13,640!
485
    (void)printf("failed to load from env file:%s since %s\n", envFile, tstrerror(code));
×
486
    TAOS_RETURN(code);
×
487
  }
488

489
  if ((code = cfgLoad(pCfg, CFG_STYPE_ENV_VAR, NULL)) != 0) {
13,640!
490
    (void)printf("failed to load from global env variables since %s\n", tstrerror(code));
×
491
    TAOS_RETURN(code);
×
492
  }
493

494
  if ((code = cfgLoad(pCfg, CFG_STYPE_ENV_CMD, envCmd)) != 0) {
13,640!
495
    (void)printf("failed to load from cmd env variables since %s\n", tstrerror(code));
×
496
    TAOS_RETURN(code);
×
497
  }
498

499
  TAOS_RETURN(TSDB_CODE_SUCCESS);
13,640✔
500
}
501

502
int32_t taosAddClientLogCfg(SConfig *pCfg) {
13,639✔
503
  TAOS_CHECK_RETURN(cfgAddDir(pCfg, "configDir", configDir, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
13,639!
504
  TAOS_CHECK_RETURN(cfgAddDir(pCfg, "scriptDir", configDir, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
13,639!
505
  TAOS_CHECK_RETURN(cfgAddDir(pCfg, "logDir", tsLogDir, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
13,639!
506
  TAOS_CHECK_RETURN(
13,639!
507
      cfgAddFloat(pCfg, "minimalLogDirGB", 1.0f, 0.001f, 10000000, CFG_SCOPE_BOTH, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
508
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfLogLines", tsNumOfLogLines, 1000, 2000000000, CFG_SCOPE_BOTH,
13,639!
509
                                CFG_DYN_ENT_BOTH, CFG_CATEGORY_LOCAL));
510
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "asyncLog", tsAsyncLog, CFG_SCOPE_BOTH, CFG_DYN_BOTH, CFG_CATEGORY_LOCAL));
13,639!
511
  TAOS_CHECK_RETURN(
13,639!
512
      cfgAddInt32(pCfg, "logKeepDays", 0, -365000, 365000, CFG_SCOPE_BOTH, CFG_DYN_ENT_BOTH, CFG_CATEGORY_LOCAL));
513
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "debugFlag", 0, 0, 255, CFG_SCOPE_BOTH, CFG_DYN_BOTH, CFG_CATEGORY_LOCAL));
13,639!
514
  TAOS_CHECK_RETURN(
13,639!
515
      cfgAddInt32(pCfg, "simDebugFlag", simDebugFlag, 0, 255, CFG_SCOPE_BOTH, CFG_DYN_BOTH, CFG_CATEGORY_LOCAL));
516
  TAOS_CHECK_RETURN(
13,639!
517
      cfgAddInt32(pCfg, "tmrDebugFlag", tmrDebugFlag, 0, 255, CFG_SCOPE_BOTH, CFG_DYN_BOTH, CFG_CATEGORY_LOCAL));
518
  TAOS_CHECK_RETURN(
13,639!
519
      cfgAddInt32(pCfg, "uDebugFlag", uDebugFlag, 0, 255, CFG_SCOPE_BOTH, CFG_DYN_BOTH, CFG_CATEGORY_LOCAL));
520
  TAOS_CHECK_RETURN(
13,639!
521
      cfgAddInt32(pCfg, "rpcDebugFlag", rpcDebugFlag, 0, 255, CFG_SCOPE_BOTH, CFG_DYN_BOTH, CFG_CATEGORY_LOCAL));
522
  TAOS_CHECK_RETURN(
13,639!
523
      cfgAddInt32(pCfg, "jniDebugFlag", jniDebugFlag, 0, 255, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
524
  TAOS_CHECK_RETURN(
13,639!
525
      cfgAddInt32(pCfg, "qDebugFlag", qDebugFlag, 0, 255, CFG_SCOPE_BOTH, CFG_DYN_BOTH, CFG_CATEGORY_LOCAL));
526
  TAOS_CHECK_RETURN(
13,639!
527
      cfgAddInt32(pCfg, "cDebugFlag", cDebugFlag, 0, 255, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
528
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tqClientDebugFlag", tqClientDebugFlag, 0, 255, CFG_SCOPE_CLIENT, CFG_DYN_SERVER,
13,639!
529
                                CFG_CATEGORY_LOCAL));
530
  TAOS_RETURN(TSDB_CODE_SUCCESS);
13,639✔
531
}
532

533
static int32_t taosAddServerLogCfg(SConfig *pCfg) {
9,566✔
534
  TAOS_CHECK_RETURN(
9,566!
535
      cfgAddInt32(pCfg, "dDebugFlag", dDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
536
  TAOS_CHECK_RETURN(
9,566!
537
      cfgAddInt32(pCfg, "vDebugFlag", vDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
538
  TAOS_CHECK_RETURN(
9,566!
539
      cfgAddInt32(pCfg, "mDebugFlag", mDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
540
  TAOS_CHECK_RETURN(
9,566!
541
      cfgAddInt32(pCfg, "wDebugFlag", wDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
542
  TAOS_CHECK_RETURN(
9,566!
543
      cfgAddInt32(pCfg, "azDebugFlag", azDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
544
  TAOS_CHECK_RETURN(
9,566!
545
      cfgAddInt32(pCfg, "tssDebugFlag", tssDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
546
  TAOS_CHECK_RETURN(
9,566!
547
      cfgAddInt32(pCfg, "sDebugFlag", sDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
548
  TAOS_CHECK_RETURN(
9,566!
549
      cfgAddInt32(pCfg, "tsdbDebugFlag", tsdbDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
550
  TAOS_CHECK_RETURN(
9,566!
551
      cfgAddInt32(pCfg, "tqDebugFlag", tqDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
552
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tqClientDebug", tqClientDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER,
9,566!
553
                                CFG_CATEGORY_LOCAL));
554
  TAOS_CHECK_RETURN(
9,566!
555
      cfgAddInt32(pCfg, "fsDebugFlag", fsDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
556
  TAOS_CHECK_RETURN(
9,566!
557
      cfgAddInt32(pCfg, "udfDebugFlag", udfDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
558
  TAOS_CHECK_RETURN(
9,566!
559
      cfgAddInt32(pCfg, "smaDebugFlag", smaDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
560
  TAOS_CHECK_RETURN(
9,566!
561
      cfgAddInt32(pCfg, "idxDebugFlag", idxDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
562
  TAOS_CHECK_RETURN(
9,566!
563
      cfgAddInt32(pCfg, "tdbDebugFlag", tdbDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
564
  TAOS_CHECK_RETURN(
9,566!
565
      cfgAddInt32(pCfg, "metaDebugFlag", metaDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
566
  TAOS_CHECK_RETURN(
9,566!
567
      cfgAddInt32(pCfg, "stDebugFlag", stDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
568
  TAOS_CHECK_RETURN(
9,566!
569
      cfgAddInt32(pCfg, "sndDebugFlag", sndDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
570
  TAOS_CHECK_RETURN(
9,566!
571
      cfgAddInt32(pCfg, "bseDebugFlag", bseDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
572
  TAOS_CHECK_RETURN(
9,566!
573
      cfgAddInt32(pCfg, "bndDebugFlag", bndDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
574
  TAOS_RETURN(TSDB_CODE_SUCCESS);
9,566✔
575
}
576

577
static int32_t taosAddClientCfg(SConfig *pCfg) {
6,820✔
578
  char    defaultFqdn[TSDB_FQDN_LEN] = {0};
6,820✔
579
  int32_t defaultServerPort = 6030;
6,820✔
580
  int32_t defaultMqttPort = 6083;
6,820✔
581
  if (taosGetFqdn(defaultFqdn) != 0) {
6,820!
582
    tstrncpy(defaultFqdn, "localhost", TSDB_FQDN_LEN);
×
583
  }
584

585
  TAOS_CHECK_RETURN(
6,820!
586
      cfgAddBool(pCfg, "forceReadConfig", tsForceReadConfig, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
587
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "firstEp", "", CFG_SCOPE_BOTH, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
6,820!
588
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "secondEp", "", CFG_SCOPE_BOTH, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
6,820!
589
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "fqdn", defaultFqdn, CFG_SCOPE_SERVER, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
6,820!
590
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "serverPort", defaultServerPort, 1, 65056, CFG_SCOPE_SERVER, CFG_DYN_CLIENT,
6,820!
591
                                CFG_CATEGORY_LOCAL));
592
  TAOS_CHECK_RETURN(
6,820!
593
      cfgAddInt32(pCfg, "mqttPort", defaultMqttPort, 1, 65056, CFG_SCOPE_SERVER, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
594
  TAOS_CHECK_RETURN(cfgAddDir(pCfg, "tempDir", tsTempDir, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
6,820!
595
  TAOS_CHECK_RETURN(
6,820!
596
      cfgAddFloat(pCfg, "minimalTmpDirGB", 1.0f, 0.001f, 10000000, CFG_SCOPE_BOTH, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
597
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "shellActivityTimer", tsShellActivityTimer, 1, 120, CFG_SCOPE_BOTH, CFG_DYN_BOTH,
6,820!
598
                                CFG_CATEGORY_GLOBAL));
599
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "compressMsgSize", tsCompressMsgSize, -1, 100000000, CFG_SCOPE_BOTH,
6,820!
600
                                CFG_DYN_BOTH_LAZY, CFG_CATEGORY_GLOBAL));
601
  TAOS_CHECK_RETURN(
6,820!
602
      cfgAddInt32(pCfg, "queryPolicy", tsQueryPolicy, 1, 4, CFG_SCOPE_CLIENT, CFG_DYN_ENT_CLIENT, CFG_CATEGORY_LOCAL));
603
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "queryTableNotExistAsEmpty", tsQueryTbNotExistAsEmpty, CFG_SCOPE_CLIENT,
6,820!
604
                               CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
605
  TAOS_CHECK_RETURN(
6,820!
606
      cfgAddBool(pCfg, "enableQueryHb", tsEnableQueryHb, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
607
  TAOS_CHECK_RETURN(
6,820!
608
      cfgAddBool(pCfg, "enableScience", tsEnableScience, CFG_SCOPE_CLIENT, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
609
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "querySmaOptimize", tsQuerySmaOptimize, 0, 1, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT,
6,820!
610
                                CFG_CATEGORY_LOCAL));
611
  TAOS_CHECK_RETURN(
6,820!
612
      cfgAddBool(pCfg, "queryPlannerTrace", tsQueryPlannerTrace, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
613
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryNodeChunkSize", tsQueryNodeChunkSize, 1024, 128 * 1024, CFG_SCOPE_CLIENT,
6,820!
614
                                CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
615
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "queryUseNodeAllocator", tsQueryUseNodeAllocator, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT,
6,820!
616
                               CFG_CATEGORY_LOCAL));
617
  TAOS_CHECK_RETURN(
6,820!
618
      cfgAddBool(pCfg, "keepColumnName", tsKeepColumnName, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
619
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "smlChildTableName", tsSmlChildTableName, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT,
6,820!
620
                                 CFG_CATEGORY_LOCAL));
621
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "smlAutoChildTableNameDelimiter", tsSmlAutoChildTableNameDelimiter,
6,820!
622
                                 CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
623
  TAOS_CHECK_RETURN(
6,820!
624
      cfgAddString(pCfg, "smlTagName", tsSmlTagName, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
625
  TAOS_CHECK_RETURN(
6,820!
626
      cfgAddString(pCfg, "smlTsDefaultName", tsSmlTsDefaultName, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
627
  TAOS_CHECK_RETURN(
6,820!
628
      cfgAddBool(pCfg, "smlDot2Underline", tsSmlDot2Underline, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
629

630
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "minSlidingTime", tsMinSlidingTime, 1, 1000000, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT,
6,820!
631
                                CFG_CATEGORY_LOCAL));
632
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "minIntervalTime", tsMinIntervalTime, 1, 1000000, CFG_SCOPE_CLIENT,
6,820!
633
                                CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
634
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxInsertBatchRows", tsMaxInsertBatchRows, 1, INT32_MAX, CFG_SCOPE_CLIENT,
6,820!
635
                                CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL) != 0);
636
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxRetryWaitTime", tsMaxRetryWaitTime, 3000, 86400000, CFG_SCOPE_SERVER,
6,820!
637
                                CFG_DYN_BOTH_LAZY, CFG_CATEGORY_GLOBAL));
638
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "useAdapter", tsUseAdapter, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
6,820!
639
  TAOS_CHECK_RETURN(
6,820!
640
      cfgAddBool(pCfg, "crashReporting", tsEnableCrashReport, CFG_SCOPE_BOTH, CFG_DYN_BOTH, CFG_CATEGORY_GLOBAL));
641
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "queryMaxConcurrentTables", tsQueryMaxConcurrentTables, INT64_MIN, INT64_MAX,
6,820!
642
                                CFG_SCOPE_CLIENT, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
643
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "metaCacheMaxSize", tsMetaCacheMaxSize, -1, INT32_MAX, CFG_SCOPE_CLIENT,
6,820!
644
                                CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
645
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "randErrorChance", tsRandErrChance, 0, 10000, CFG_SCOPE_BOTH, CFG_DYN_BOTH,
6,820!
646
                                CFG_CATEGORY_GLOBAL));
647
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "randErrorDivisor", tsRandErrDivisor, 1, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_BOTH,
6,820!
648
                                CFG_CATEGORY_GLOBAL));
649
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "randErrorScope", tsRandErrScope, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_BOTH,
6,820!
650
                                CFG_CATEGORY_GLOBAL));
651
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "safetyCheckLevel", tsSafetyCheckLevel, 0, 5, CFG_SCOPE_BOTH, CFG_DYN_BOTH,
6,820!
652
                                CFG_CATEGORY_GLOBAL));
653
  TAOS_CHECK_RETURN(
6,820!
654
      cfgAddInt32(pCfg, "bypassFlag", tsBypassFlag, 0, INT32_MAX, CFG_SCOPE_BOTH, CFG_DYN_BOTH, CFG_CATEGORY_LOCAL));
655
  tsNumOfRpcThreads = tsNumOfCores / 2;
6,820✔
656
  tsNumOfRpcThreads = TRANGE(tsNumOfRpcThreads, 2, TSDB_MAX_RPC_THREADS);
6,820✔
657
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfRpcThreads", tsNumOfRpcThreads, 1, 1024, CFG_SCOPE_BOTH, CFG_DYN_BOTH_LAZY,
6,820!
658
                                CFG_CATEGORY_LOCAL));
659

660
  tsNumOfRpcSessions = TRANGE(tsNumOfRpcSessions, 100, 100000);
6,820✔
661
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfRpcSessions", tsNumOfRpcSessions, 1, 100000, CFG_SCOPE_BOTH,
6,820!
662
                                CFG_DYN_BOTH_LAZY, CFG_CATEGORY_LOCAL));
663

664
  tsShareConnLimit = TRANGE(tsShareConnLimit, 1, 512);
6,820✔
665
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "shareConnLimit", tsShareConnLimit, 1, 512, CFG_SCOPE_BOTH, CFG_DYN_BOTH_LAZY,
6,820!
666
                                CFG_CATEGORY_GLOBAL));
667

668
  tsReadTimeout = TRANGE(tsReadTimeout, 64, 24 * 3600 * 7);
6,820✔
669
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "readTimeout", tsReadTimeout, 64, 24 * 3600 * 7, CFG_SCOPE_BOTH,
6,820!
670
                                CFG_DYN_BOTH_LAZY, CFG_CATEGORY_GLOBAL));
671

672
  tsTimeToGetAvailableConn = TRANGE(tsTimeToGetAvailableConn, 20, 10000000);
6,820✔
673
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "timeToGetAvailableConn", tsTimeToGetAvailableConn, 20, 1000000, CFG_SCOPE_BOTH,
6,820!
674
                                CFG_DYN_BOTH_LAZY, CFG_CATEGORY_GLOBAL));
675
  tsNumOfTaskQueueThreads = tsNumOfCores * 2;
6,820✔
676
  tsNumOfTaskQueueThreads = TMAX(tsNumOfTaskQueueThreads, 16);
6,820✔
677

678
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfTaskQueueThreads", tsNumOfTaskQueueThreads, 4, 1024, CFG_SCOPE_CLIENT,
6,820!
679
                                CFG_DYN_CLIENT_LAZY, CFG_CATEGORY_LOCAL));
680
  TAOS_CHECK_RETURN(
6,820!
681
      cfgAddBool(pCfg, "experimental", tsExperimental, CFG_SCOPE_BOTH, CFG_DYN_BOTH_LAZY, CFG_CATEGORY_GLOBAL));
682
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "multiResultFunctionStarReturnTags", tsMultiResultFunctionStarReturnTags,
6,820!
683
                               CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
684
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "countAlwaysReturnValue", tsCountAlwaysReturnValue, 0, 1, CFG_SCOPE_BOTH,
6,820!
685
                                CFG_DYN_BOTH, CFG_CATEGORY_LOCAL));
686
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxTsmaCalcDelay", tsMaxTsmaCalcDelay, 600, 86400, CFG_SCOPE_CLIENT,
6,820!
687
                                CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
688
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tsmaDataDeleteMark", tsmaDataDeleteMark, 60 * 60 * 1000, INT64_MAX,
6,820!
689
                                CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
690

691
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "compareAsStrInGreatest", tsCompareAsStrInGreatest, CFG_SCOPE_CLIENT,
6,820!
692
                               CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
693

694
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "showFullCreateTableColumn", tsShowFullCreateTableColumn, CFG_SCOPE_CLIENT,
6,820!
695
                               CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
696
  TAOS_RETURN(TSDB_CODE_SUCCESS);
6,820✔
697
}
698

699
static int32_t taosAddSystemCfg(SConfig *pCfg) {
6,820✔
700
  SysNameInfo info = taosGetSysNameInfo();
6,820✔
701

702
  TAOS_CHECK_RETURN(cfgAddTimezone(pCfg, "timezone", tsTimezoneStr, CFG_SCOPE_BOTH, CFG_DYN_BOTH, CFG_CATEGORY_GLOBAL));
6,820!
703
  TAOS_CHECK_RETURN(cfgAddLocale(pCfg, "locale", tsLocale, CFG_SCOPE_BOTH, CFG_DYN_BOTH, CFG_CATEGORY_GLOBAL));
6,820!
704
  TAOS_CHECK_RETURN(cfgAddCharset(pCfg, "charset", tsCharset, CFG_SCOPE_BOTH, CFG_DYN_BOTH, CFG_CATEGORY_GLOBAL));
6,820!
705
  TAOS_CHECK_RETURN(
6,820!
706
      cfgAddBool(pCfg, "enableCoreFile", tsEnableCoreFile, CFG_SCOPE_BOTH, CFG_DYN_BOTH_LAZY, CFG_CATEGORY_GLOBAL));
707
  TAOS_CHECK_RETURN(
6,820!
708
      cfgAddFloat(pCfg, "numOfCores", tsNumOfCores, 1, 100000, CFG_SCOPE_BOTH, CFG_DYN_BOTH_LAZY, CFG_CATEGORY_LOCAL));
709

710
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "simdEnable", tsSIMDEnable, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
6,820!
711
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "AVX512Enable", tsAVX512Enable, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
6,820!
712
  TAOS_CHECK_RETURN(
6,820!
713
      cfgAddBool(pCfg, "tagFilterCache", tsTagFilterCache, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
714

715
  TAOS_CHECK_RETURN(
6,820!
716
      cfgAddInt64(pCfg, "openMax", tsOpenMax, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
717
#if !defined(_ALPINE)
718
  TAOS_CHECK_RETURN(
6,820!
719
      cfgAddInt64(pCfg, "streamMax", tsStreamMax, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
720
#endif
721
  TAOS_CHECK_RETURN(
6,820!
722
      cfgAddInt32(pCfg, "pageSizeKB", tsPageSizeKB, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
723
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "totalMemoryKB", tsTotalMemoryKB, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_NONE,
6,820!
724
                                CFG_CATEGORY_LOCAL));
725
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "os sysname", info.sysname, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
6,820!
726
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "os nodename", info.nodename, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
6,820!
727
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "os release", info.release, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
6,820!
728
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "os version", info.version, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
6,820!
729
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "os machine", info.machine, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
6,820!
730

731
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "version", td_version, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
6,820!
732
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "compatible_version", td_compatible_version, CFG_SCOPE_BOTH, CFG_DYN_NONE,
6,820!
733
                                 CFG_CATEGORY_LOCAL));
734
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "gitinfo", td_gitinfo, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
6,820!
735
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "buildinfo", td_buildinfo, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
6,820!
736

737
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "enableIpv6", tsEnableIpv6, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
6,820!
738

739
  TAOS_RETURN(TSDB_CODE_SUCCESS);
6,820✔
740
}
741

742
static int32_t taosAddServerCfg(SConfig *pCfg) {
4,783✔
743
  tsNumOfCommitThreads = tsNumOfCores / 2;
4,783✔
744
  tsNumOfCommitThreads = TRANGE(tsNumOfCommitThreads, 2, 4);
4,783✔
745

746
  tsNumOfSupportVnodes = tsNumOfCores * 2 + 5;
4,783✔
747
  tsNumOfSupportVnodes = TMAX(tsNumOfSupportVnodes, 2);
4,783✔
748

749
  tsNumOfMnodeReadThreads = tsNumOfCores / 8;
4,783✔
750
  tsNumOfMnodeReadThreads = TRANGE(tsNumOfMnodeReadThreads, 1, 4);
4,783✔
751

752
  tsNumOfVnodeQueryThreads = tsNumOfCores * 2;
4,783✔
753
  tsNumOfVnodeQueryThreads = TMAX(tsNumOfVnodeQueryThreads, 16);
4,783✔
754

755
  tsNumOfVnodeFetchThreads = tsNumOfCores / 4;
4,783✔
756
  tsNumOfVnodeFetchThreads = TMAX(tsNumOfVnodeFetchThreads, 4);
4,783✔
757

758
  tsNumOfVnodeRsmaThreads = tsNumOfCores / 4;
4,783✔
759
  tsNumOfVnodeRsmaThreads = TMAX(tsNumOfVnodeRsmaThreads, 4);
4,783✔
760

761
  tsNumOfQnodeQueryThreads = tsNumOfCores * 2;
4,783✔
762
  tsNumOfQnodeQueryThreads = TMAX(tsNumOfQnodeQueryThreads, 16);
4,783✔
763

764
  tsNumOfMnodeStreamMgmtThreads = tsNumOfCores / 4;
4,783✔
765
  tsNumOfMnodeStreamMgmtThreads = TRANGE(tsNumOfMnodeStreamMgmtThreads, 2, 5);
4,783✔
766

767
  tsNumOfStreamMgmtThreads = tsNumOfCores / 8;
4,783✔
768
  tsNumOfStreamMgmtThreads = TRANGE(tsNumOfStreamMgmtThreads, 2, 5);
4,783✔
769

770
  tsNumOfVnodeStreamReaderThreads = tsNumOfCores / 2;
4,783✔
771
  tsNumOfVnodeStreamReaderThreads = TMAX(tsNumOfVnodeStreamReaderThreads, 4);
4,783✔
772

773
  tsNumOfStreamTriggerThreads = tsNumOfCores;
4,783✔
774
  tsNumOfStreamTriggerThreads = TMAX(tsNumOfStreamTriggerThreads, 4);
4,783✔
775

776
  tsNumOfStreamRunnerThreads = tsNumOfCores;
4,783✔
777
  tsNumOfStreamRunnerThreads = TMAX(tsNumOfStreamRunnerThreads, 4);
4,783✔
778

779
  tsQueueMemoryAllowed = tsTotalMemoryKB * 1024 * RPC_MEMORY_USAGE_RATIO * QUEUE_MEMORY_USAGE_RATIO;
4,783✔
780
  tsQueueMemoryAllowed = TRANGE(tsQueueMemoryAllowed, TSDB_MAX_MSG_SIZE * QUEUE_MEMORY_USAGE_RATIO * 10LL,
4,783!
781
                                TSDB_MAX_MSG_SIZE * QUEUE_MEMORY_USAGE_RATIO * 10000LL);
782

783
  tsApplyMemoryAllowed = tsTotalMemoryKB * 1024 * RPC_MEMORY_USAGE_RATIO * (1 - QUEUE_MEMORY_USAGE_RATIO);
4,783✔
784
  tsApplyMemoryAllowed = TRANGE(tsApplyMemoryAllowed, TSDB_MAX_MSG_SIZE * (1 - QUEUE_MEMORY_USAGE_RATIO) * 10LL,
4,783!
785
                                TSDB_MAX_MSG_SIZE * (1 - QUEUE_MEMORY_USAGE_RATIO) * 10000LL);
786

787
  tsLogBufferMemoryAllowed = tsTotalMemoryKB * 1024 * 0.1;
4,783✔
788
  tsLogBufferMemoryAllowed = TRANGE(tsLogBufferMemoryAllowed, TSDB_MAX_MSG_SIZE * 10LL, TSDB_MAX_MSG_SIZE * 10000LL);
4,783✔
789

790
  tsStreamBufferSize = tsTotalMemoryKB / 1024 * 0.3;
4,783✔
791
  tsStreamBufferSizeBytes = tsStreamBufferSize * 1048576L;
4,783✔
792

793
  // clang-format off
794
  TAOS_CHECK_RETURN(cfgAddDir(pCfg, "dataDir", tsDataDir, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
4,783!
795
  TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "minimalDataDirGB", 2.0f, 0.001f, 10000000, CFG_SCOPE_SERVER, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
4,783!
796
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "supportVnodes", tsNumOfSupportVnodes, 0, 4096, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER, CFG_CATEGORY_LOCAL));
4,783!
797

798
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "encryptAlgorithm", tsEncryptAlgorithm, CFG_SCOPE_SERVER, CFG_DYN_NONE, CFG_CATEGORY_GLOBAL));
4,783!
799
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "encryptScope", tsEncryptScope, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_GLOBAL));
4,783!
800
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "enableStrongPassword", tsEnableStrongPassword, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
801
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "encryptPassAlgorithm", tsEncryptPassAlgorithm, CFG_SCOPE_SERVER, CFG_DYN_NONE, CFG_CATEGORY_GLOBAL));
4,783!
802

803
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "statusInterval", tsStatusInterval, 1, 30, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
804
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "metricsInterval", tsMetricsInterval, 1, 3600, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_LOCAL));
4,783!
805
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "enableMetrics", tsEnableMetrics, 0, 1, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_LOCAL));
4,783!
806
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "metricsLevel", tsMetricsLevel, 0, 1, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_LOCAL));
4,783!
807
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxShellConns", tsMaxShellConns, 10, 50000000, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY, CFG_CATEGORY_LOCAL));
4,783!
808
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "statusIntervalMs", tsStatusIntervalMs, 50, 30000, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
4,783!
809
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "statusSRTimeoutMs", tsStatusSRTimeoutMs, 50, 30000, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
4,783!
810
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "statusTimeoutMs", tsStatusTimeoutMs, 50, 30000, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
4,783!
811

812
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryBufferSize", tsQueryBufferSize, -1, 500000000000, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY, CFG_CATEGORY_LOCAL));
4,783!
813
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryRspPolicy", tsQueryRspPolicy, 0, 1, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
814
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfCommitThreads", tsNumOfCommitThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
4,783!
815
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfCompactThreads", tsNumOfCompactThreads, 1, 16, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_LOCAL));
4,783!
816
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "retentionSpeedLimitMB", tsRetentionSpeedLimitMB, 0, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
817
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "queryUseMemoryPool", tsQueryUseMemoryPool, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL) != 0);
4,783!
818
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "memPoolFullFunc", tsMemPoolFullFunc, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL) != 0);
4,783!
819
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "singleQueryMaxMemorySize", tsSingleQueryMaxMemorySize, 0, 1000000000, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL) != 0);
4,783!
820
  //TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryBufferPoolSize", tsQueryBufferPoolSize, 0, 1000000000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0);
821
  TAOS_CHECK_RETURN(cfgAddInt32Ex(pCfg, "minReservedMemorySize", 0, 1024, 1000000000, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_LOCAL) != 0);
4,783!
822
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryNoFetchTimeoutSec", tsQueryNoFetchTimeoutSec, 60, 1000000000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_LOCAL) != 0);
4,783!
823

824
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfMnodeReadThreads", tsNumOfMnodeReadThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
4,783!
825
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfVnodeQueryThreads", tsNumOfVnodeQueryThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
4,783!
826
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfVnodeFetchThreads", tsNumOfVnodeFetchThreads, 4, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
4,783!
827

828
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfVnodeRsmaThreads", tsNumOfVnodeRsmaThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
4,783!
829
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfQnodeQueryThreads", tsNumOfQnodeQueryThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
4,783!
830

831
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfMnodeStreamMgmtThreads", tsNumOfMnodeStreamMgmtThreads, 2, 5, CFG_SCOPE_SERVER, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
4,783!
832
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfStreamMgmtThreads", tsNumOfStreamMgmtThreads, 2, 5, CFG_SCOPE_SERVER, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
4,783!
833
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfVnodeStreamReaderThreads", tsNumOfVnodeStreamReaderThreads, 4, INT32_MAX, CFG_SCOPE_SERVER, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
4,783!
834
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfStreamTriggerThreads", tsNumOfStreamTriggerThreads, 4, INT32_MAX, CFG_SCOPE_SERVER, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
4,783!
835
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfStreamRunnerThreads", tsNumOfStreamRunnerThreads, 4, INT32_MAX, CFG_SCOPE_SERVER, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
4,783!
836
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "rpcQueueMemoryAllowed", tsQueueMemoryAllowed, TSDB_MAX_MSG_SIZE * RPC_MEMORY_USAGE_RATIO * 10L, INT64_MAX, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_LOCAL));
4,783!
837
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncElectInterval", tsElectInterval, 10, 1000 * 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
838
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncHeartbeatInterval", tsHeartbeatInterval, 10, 1000 * 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
839
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncVnodeElectIntervalMs", tsVnodeElectIntervalMs, 10, 1000 * 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
840
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncVnodeHeartbeatIntervalMs", tsVnodeHeartbeatIntervalMs, 10, 1000 * 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
841
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncMnodeElectIntervalMs", tsMnodeElectIntervalMs, 10, 1000 * 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
842
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncMnodeHeartbeatIntervalMs", tsMnodeHeartbeatIntervalMs, 10, 1000 * 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
843
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncHeartbeatTimeout", tsHeartbeatTimeout, 10, 1000 * 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
844
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncSnapReplMaxWaitN", tsSnapReplMaxWaitN, 16, (TSDB_SYNC_SNAP_BUFFER_SIZE >> 2), CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
845
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "syncLogBufferMemoryAllowed", tsLogBufferMemoryAllowed, TSDB_MAX_MSG_SIZE * 10L, INT64_MAX, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_LOCAL));
4,783!
846
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "syncApplyQueueSize", tsSyncApplyQueueSize, 32, 2048, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
847
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncRoutineReportInterval", tsRoutineReportInterval, 5, 600, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_LOCAL));
4,783!
848
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "syncLogHeartbeat", tsSyncLogHeartbeat, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_LOCAL));
4,783!
849

850
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncTimeout", tsSyncTimeout, 0, 60 * 24 * 2 * 1000, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_LOCAL));
4,783!
851

852
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "arbHeartBeatIntervalSec", tsArbHeartBeatIntervalSec, 1, 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
853
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "arbCheckSyncIntervalSec", tsArbCheckSyncIntervalSec, 1, 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
854
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "arbSetAssignedTimeoutSec", tsArbSetAssignedTimeoutSec, 1, 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
855
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "arbHeartBeatIntervalMs", tsArbHeartBeatIntervalMs, 100, 60 * 24 * 2 * 1000, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
856
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "arbCheckSyncIntervalMs", tsArbCheckSyncIntervalMs, 100, 60 * 24 * 2 * 1000, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
857
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "arbSetAssignedTimeoutMs", tsArbSetAssignedTimeoutMs, 100, 60 * 24 * 2 * 1000, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
858

859
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "mndSdbWriteDelta", tsMndSdbWriteDelta, 20, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
860
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "mndLogRetention", tsMndLogRetention, 500, 10000, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
861
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "skipGrant", tsMndSkipGrant, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_GLOBAL));
4,783!
862

863
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "monitor", tsEnableMonitor, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
864
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "monitorInterval", tsMonitorInterval, 1, 86400, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
865

866
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "slowLogThreshold", tsSlowLogThreshold, 1, INT32_MAX, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
867
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "slowLogMaxLen", tsSlowLogMaxLen, 1, 16384, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
868
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "slowLogScope", tsSlowLogScopeString, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
869
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "slowLogExceptDb", tsSlowLogExceptDb, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
870

871
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "monitorFqdn", tsMonitorFqdn, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY, CFG_CATEGORY_LOCAL));
4,783!
872
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "monitorPort", tsMonitorPort, 1, 65056, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY, CFG_CATEGORY_LOCAL));
4,783!
873
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "monitorMaxLogs", tsMonitorMaxLogs, 1, 1000000, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
874
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "monitorComp", tsMonitorComp, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
4,783!
875
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "monitorLogProtocol", tsMonitorLogProtocol, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
876
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "monitorForceV2", tsMonitorForceV2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
877

878
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "audit", tsEnableAudit, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
879
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "enableAuditDelete", tsEnableAuditDelete, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_GLOBAL));
4,783!
880
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "auditCreateTable", tsEnableAuditCreateTable, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
881
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "auditInterval", tsAuditInterval, 500, 200000, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
882

883
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "telemetryReporting", tsEnableTelem, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
884
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "telemetryInterval", tsTelemInterval, 1, 200000, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
885
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "telemetryServer", tsTelemServer, CFG_SCOPE_SERVER, CFG_DYN_BOTH,CFG_CATEGORY_GLOBAL));
4,783!
886
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "telemetryPort", tsTelemPort, 1, 65056, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
4,783!
887

888
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "rsyncPort", tsRsyncPort, 1, 65535, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
4,783!
889
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "snodeAddress", tsSnodeAddress, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
4,783!
890
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "checkpointBackupDir", tsCheckpointBackupDir, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
4,783!
891

892
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tmqMaxTopicNum", tmqMaxTopicNum, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
893

894
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tmqRowSize", tmqRowSize, 1, 1000000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
895

896
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxTsmaNum", tsMaxTsmaNum, 0, 3, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
897
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "diskIDCheckEnabled", tsDiskIDCheckEnabled,  CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
4,783!
898
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "transPullupInterval", tsTransPullupInterval, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
899
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "compactPullupInterval", tsCompactPullupInterval, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
900
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "mqRebalanceInterval", tsMqRebalanceInterval, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
901

902
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "ttlUnit", tsTtlUnit, 1, 86400 * 365, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
903
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "ttlPushInterval", tsTtlPushIntervalSec, 1, 100000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
904
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "ttlBatchDropNum", tsTtlBatchDropNum, 0, INT32_MAX, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
905
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "ttlChangeOnWrite", tsTtlChangeOnWrite, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
906
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "ttlFlushThreshold", tsTtlFlushThreshold, -1, 1000000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
907
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "trimVDbIntervalSec", tsTrimVDbIntervalSec, 1, 100000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
908
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "uptimeInterval", tsUptimeInterval, 1, 100000, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
909
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryRsmaTolerance", tsQueryRsmaTolerance, 0, 900000, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
910
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "timeseriesThreshold", tsTimeSeriesThreshold, 0, 2000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
911

912
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "walFsyncDataSizeLimit", tsWalFsyncDataSizeLimit, 100 * 1024 * 1024, INT64_MAX, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
913
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "walForceRepair", tsWalForceRepair, CFG_SCOPE_SERVER, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
4,783!
914

915
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "udf", tsStartUdfd, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
4,783!
916
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "udfdResFuncs", tsUdfdResFuncs, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
4,783!
917
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "udfdLdLibPath", tsUdfdLdLibPath, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
4,783!
918

919
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "disableStream", tsDisableStream, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
4,783!
920
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "streamBufferSize", tsStreamBufferSize, 128, INT32_MAX, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
4,783!
921

922
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "cacheLazyLoadThreshold", tsCacheLazyLoadThreshold, 0, 100000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
923

924
  TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "fPrecision", tsFPrecision, 0.0f, 100000.0f, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
925
  TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "dPrecision", tsDPrecision, 0.0f, 1000000.0f, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
926
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxRange", tsMaxRange, 0, 65536, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
4,783!
927
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "curRange", tsCurRange, 0, 65536, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
4,783!
928
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "ifAdtFse", tsIfAdtFse, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
4,783!
929
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "compressor", tsCompressor, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
4,783!
930

931
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "filterScalarMode", tsFilterScalarMode, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
4,783!
932
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "pqSortMemThreshold", tsPQSortMemThreshold, 1, 10240, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
4,783!
933

934
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "ssEnabled", tsSsEnabled, 0, 2, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
935
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "ssAccessString", tsSsAccessString, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
4,783!
936
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "ssAutoMigrateIntervalSec", tsSsAutoMigrateIntervalSec, 600, 100000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
937
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "ssPageCacheSize", tsSsPageCacheSize, 4, 1024 * 1024 * 1024, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
4,783!
938
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "ssUploadDelaySec", tsSsUploadDelaySec, 1, 60 * 60 * 24 * 30, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
939

940
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "minDiskFreeSize", tsMinDiskFreeSize, TFS_MIN_DISK_FREE_SIZE, TFS_MIN_DISK_FREE_SIZE_MAX, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_LOCAL));
4,783!
941
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "enableWhiteList", tsEnableWhiteList, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
4,783!
942
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "forceKillTrans", tsForceKillTrans, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_GLOBAL));
4,783!
943

944
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "streamNotifyMessageSize", tsStreamNotifyMessageSize, 8, 1024 * 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
4,783!
945
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "streamNotifyFrameSize", tsStreamNotifyFrameSize, 8, 1024 * 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
4,783!
946

947
  // clang-format on
948

949
  // GRANT_CFG_ADD;
950
  TAOS_RETURN(TSDB_CODE_SUCCESS);
4,783✔
951
}
952

953
static int32_t taosUpdateServerCfg(SConfig *pCfg) {
6,674✔
954
  SConfigItem *pItem;
955
  ECfgSrcType  stype;
956
  int32_t      numOfCores;
957
  int64_t      totalMemoryKB;
958

959
  pItem = cfgGetItem(pCfg, "numOfCores");
6,674✔
960
  if (pItem == NULL) {
6,674!
961
    TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND);
×
962
  } else {
963
    stype = pItem->stype;
6,674✔
964
    numOfCores = pItem->fval;
6,674✔
965
  }
966

967
  pItem = cfgGetItem(pCfg, "supportVnodes");
6,674✔
968
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
6,674!
969
    tsNumOfSupportVnodes = numOfCores * 2 + 5;
3✔
970
    tsNumOfSupportVnodes = TMAX(tsNumOfSupportVnodes, 2);
3✔
971
    pItem->i32 = tsNumOfSupportVnodes;
3✔
972
    pItem->stype = stype;
3✔
973
  }
974

975
  pItem = cfgGetItem(pCfg, "numOfRpcThreads");
6,674✔
976
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
6,674!
977
    tsNumOfRpcThreads = TRANGE(tsNumOfRpcThreads, 1, TSDB_MAX_RPC_THREADS);
6,662✔
978
    pItem->i32 = tsNumOfRpcThreads;
6,662✔
979
    pItem->stype = stype;
6,662✔
980
  }
981

982
  pItem = cfgGetItem(pCfg, "numOfRpcSessions");
6,674✔
983
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
6,674!
984
    tsNumOfRpcSessions = TRANGE(tsNumOfRpcSessions, 100, 10000);
6,662✔
985
    pItem->i32 = tsNumOfRpcSessions;
6,662✔
986
    pItem->stype = stype;
6,662✔
987
  }
988

989
  pItem = cfgGetItem(pCfg, "shareConnLimit");
6,674✔
990
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
6,674!
991
    tsShareConnLimit = TRANGE(tsShareConnLimit, 1, 512);
6,668✔
992
    pItem->i32 = tsShareConnLimit;
6,668✔
993
    pItem->stype = stype;
6,668✔
994
  }
995

996
  pItem = cfgGetItem(pCfg, "readTimeout");
6,674✔
997
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
6,674!
998
    tsReadTimeout = TRANGE(tsReadTimeout, 64, 24 * 3600 * 7);
6,668✔
999
    pItem->i32 = tsReadTimeout;
6,668✔
1000
    pItem->stype = stype;
6,668✔
1001
  }
1002

1003
  pItem = cfgGetItem(pCfg, "timeToGetAvailableConn");
6,674✔
1004
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
6,674!
1005
    tsTimeToGetAvailableConn = TRANGE(tsTimeToGetAvailableConn, 20, 1000000);
6,668✔
1006
    pItem->i32 = tsTimeToGetAvailableConn;
6,668✔
1007
    pItem->stype = stype;
6,668✔
1008
  }
1009

1010
  pItem = cfgGetItem(pCfg, "numOfCommitThreads");
6,674✔
1011
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
6,674!
1012
    tsNumOfCommitThreads = numOfCores / 2;
6,668✔
1013
    tsNumOfCommitThreads = TRANGE(tsNumOfCommitThreads, 2, 4);
6,668✔
1014
    pItem->i32 = tsNumOfCommitThreads;
6,668✔
1015
    pItem->stype = stype;
6,668✔
1016
  }
1017

1018
  pItem = cfgGetItem(pCfg, "numOfCompactThreads");
6,674✔
1019
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
6,674!
1020
    pItem->i32 = tsNumOfCompactThreads;
6,668✔
1021
    pItem->stype = stype;
6,668✔
1022
  }
1023

1024
  pItem = cfgGetItem(pCfg, "numOfMnodeReadThreads");
6,674✔
1025
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
6,674!
1026
    tsNumOfMnodeReadThreads = numOfCores / 8;
6,668✔
1027
    tsNumOfMnodeReadThreads = TRANGE(tsNumOfMnodeReadThreads, 1, 4);
6,668✔
1028
    pItem->i32 = tsNumOfMnodeReadThreads;
6,668✔
1029
    pItem->stype = stype;
6,668✔
1030
  }
1031

1032
  pItem = cfgGetItem(pCfg, "numOfVnodeQueryThreads");
6,674✔
1033
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
6,674!
1034
    tsNumOfVnodeQueryThreads = numOfCores * 2;
6,656✔
1035
    tsNumOfVnodeQueryThreads = TMAX(tsNumOfVnodeQueryThreads, 16);
6,656✔
1036
    pItem->i32 = tsNumOfVnodeQueryThreads;
6,656✔
1037
    pItem->stype = stype;
6,656✔
1038
  }
1039

1040
  pItem = cfgGetItem(pCfg, "numOfVnodeFetchThreads");
6,674✔
1041
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
6,674!
1042
    tsNumOfVnodeFetchThreads = numOfCores / 4;
6,668✔
1043
    tsNumOfVnodeFetchThreads = TMAX(tsNumOfVnodeFetchThreads, 4);
6,668✔
1044
    pItem->i32 = tsNumOfVnodeFetchThreads;
6,668✔
1045
    pItem->stype = stype;
6,668✔
1046
  }
1047

1048
  pItem = cfgGetItem(pCfg, "numOfVnodeRsmaThreads");
6,674✔
1049
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
6,674!
1050
    tsNumOfVnodeRsmaThreads = numOfCores;
6,668✔
1051
    tsNumOfVnodeRsmaThreads = TMAX(tsNumOfVnodeRsmaThreads, 4);
6,668✔
1052
    pItem->i32 = tsNumOfVnodeRsmaThreads;
6,668✔
1053
    pItem->stype = stype;
6,668✔
1054
  }
1055

1056
  pItem = cfgGetItem(pCfg, "numOfQnodeQueryThreads");
6,674✔
1057
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
6,674!
1058
    tsNumOfQnodeQueryThreads = numOfCores * 2;
6,668✔
1059
    tsNumOfQnodeQueryThreads = TMAX(tsNumOfQnodeQueryThreads, 16);
6,668✔
1060
    pItem->i32 = tsNumOfQnodeQueryThreads;
6,668✔
1061
    pItem->stype = stype;
6,668✔
1062
  }
1063

1064
  pItem = cfgGetItem(pCfg, "totalMemoryKB");
6,674✔
1065
  if (pItem == NULL) {
6,674!
1066
    TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND);
×
1067
  } else {
1068
    stype = pItem->stype;
6,674✔
1069
    totalMemoryKB = pItem->i64;
6,674✔
1070
  }
1071

1072
  pItem = cfgGetItem(pCfg, "rpcQueueMemoryAllowed");
6,674✔
1073
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
6,674!
1074
    tsQueueMemoryAllowed = totalMemoryKB * 1024 * 0.1;
6,657✔
1075
    tsQueueMemoryAllowed = TRANGE(tsQueueMemoryAllowed, TSDB_MAX_MSG_SIZE * 10LL, TSDB_MAX_MSG_SIZE * 10000LL);
6,657✔
1076
    pItem->i64 = tsQueueMemoryAllowed;
6,657✔
1077
    pItem->stype = stype;
6,657✔
1078
  }
1079

1080
  pItem = cfgGetItem(tsCfg, "syncLogBufferMemoryAllowed");
6,674✔
1081
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
6,674!
1082
    tsLogBufferMemoryAllowed = totalMemoryKB * 1024 * 0.1;
6,662✔
1083
    tsLogBufferMemoryAllowed = TRANGE(tsLogBufferMemoryAllowed, TSDB_MAX_MSG_SIZE * 10LL, TSDB_MAX_MSG_SIZE * 10000LL);
6,662✔
1084
    pItem->i64 = tsLogBufferMemoryAllowed;
6,662✔
1085
    pItem->stype = stype;
6,662✔
1086
  }
1087

1088
  pItem = cfgGetItem(tsCfg, "syncApplyQueueSize");
6,674✔
1089
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
6,674!
1090
    pItem->i64 = tsSyncApplyQueueSize;
6,674✔
1091
    pItem->stype = stype;
6,674✔
1092
  }
1093

1094
  TAOS_RETURN(TSDB_CODE_SUCCESS);
6,674✔
1095
}
1096

1097
static int32_t taosSetLogOutput(SConfig *pCfg) {
13,639✔
1098
  if (tsLogOutput) {
13,639✔
1099
    char *pLog = tsLogOutput;
3✔
1100
    char *pEnd = NULL;
3✔
1101
    if (strcasecmp(pLog, "stdout") && strcasecmp(pLog, "stderr") && strcasecmp(pLog, "/dev/null")) {
3!
1102
      if ((pEnd = strrchr(pLog, '/')) || (pEnd = strrchr(pLog, '\\'))) {
3!
1103
        int32_t pathLen = POINTER_DISTANCE(pEnd, pLog) + 1;
3✔
1104
        if (*pLog == '/' || *pLog == '\\') {
3!
1105
          if (pathLen <= 0 || pathLen > PATH_MAX) TAOS_RETURN(TSDB_CODE_OUT_OF_RANGE);
1!
1106
          tstrncpy(tsLogDir, pLog, pathLen);
1✔
1107
        } else {
1108
          int32_t len = strlen(tsLogDir);
2✔
1109
          if (len < 0 || len >= (PATH_MAX - 1)) TAOS_RETURN(TSDB_CODE_OUT_OF_RANGE);
2!
1110
          if (len == 0 || (tsLogDir[len - 1] != '/' && tsLogDir[len - 1] != '\\')) {
2!
1111
            tsLogDir[len++] = TD_DIRSEP_CHAR;
1✔
1112
          }
1113
          int32_t remain = PATH_MAX - len - 1;
2✔
1114
          if (remain < pathLen) TAOS_RETURN(TSDB_CODE_OUT_OF_RANGE);
2!
1115
          tstrncpy(tsLogDir + len, pLog, pathLen);
2✔
1116
        }
1117
        TAOS_CHECK_RETURN(cfgSetItem(pCfg, "logDir", tsLogDir, CFG_STYPE_DEFAULT, true));
3!
1118
      }
1119
    } else {
1120
      tstrncpy(tsLogDir, pLog, PATH_MAX);
×
1121
      TAOS_CHECK_RETURN(cfgSetItem(pCfg, "logDir", tsLogDir, CFG_STYPE_DEFAULT, true));
×
1122
    }
1123
  }
1124
  return 0;
13,639✔
1125
}
1126

1127
static int32_t taosSetClientLogCfg(SConfig *pCfg) {
13,639✔
1128
  SConfigItem *pItem = NULL;
13,639✔
1129

1130
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "logDir");
13,639!
1131
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, PATH_MAX));
13,639!
1132
  tstrncpy(tsLogDir, pItem->str, PATH_MAX);
13,639✔
1133
  TAOS_CHECK_RETURN(taosExpandDir(tsLogDir, tsLogDir, PATH_MAX));
13,639!
1134
  TAOS_CHECK_RETURN(taosSetLogOutput(pCfg));
13,639!
1135

1136
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minimalLogDirGB");
13,639!
1137
  tsLogSpace.reserved = (int64_t)(((double)pItem->fval) * 1024 * 1024 * 1024);
13,639✔
1138

1139
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfLogLines");
13,639!
1140
  tsNumOfLogLines = pItem->i32;
13,639✔
1141

1142
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "asyncLog");
13,639!
1143
  tsAsyncLog = pItem->bval;
13,639✔
1144

1145
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "logKeepDays");
13,639!
1146
  tsLogKeepDays = pItem->i32;
13,639✔
1147

1148
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tmrDebugFlag");
13,639!
1149
  tmrDebugFlag = pItem->i32;
13,639✔
1150

1151
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "uDebugFlag");
13,639!
1152
  uDebugFlag = pItem->i32;
13,639✔
1153

1154
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "jniDebugFlag");
13,639!
1155
  jniDebugFlag = pItem->i32;
13,639✔
1156

1157
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "rpcDebugFlag");
13,639!
1158
  rpcDebugFlag = pItem->i32;
13,639✔
1159

1160
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "qDebugFlag");
13,639!
1161
  qDebugFlag = pItem->i32;
13,639✔
1162

1163
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "cDebugFlag");
13,639!
1164
  cDebugFlag = pItem->i32;
13,639✔
1165

1166
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "simDebugFlag");
13,639!
1167
  simDebugFlag = pItem->i32;
13,639✔
1168

1169
  TAOS_RETURN(TSDB_CODE_SUCCESS);
13,639✔
1170
}
1171

1172
static int32_t taosSetServerLogCfg(SConfig *pCfg) {
4,783✔
1173
  SConfigItem *pItem = NULL;
4,783✔
1174
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "dDebugFlag");
4,783!
1175
  dDebugFlag = pItem->i32;
4,783✔
1176

1177
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "vDebugFlag");
4,783!
1178
  vDebugFlag = pItem->i32;
4,783✔
1179

1180
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "mDebugFlag");
4,783!
1181
  mDebugFlag = pItem->i32;
4,783✔
1182

1183
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "wDebugFlag");
4,783!
1184
  wDebugFlag = pItem->i32;
4,783✔
1185

1186
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "azDebugFlag");
4,783!
1187
  azDebugFlag = pItem->i32;
4,783✔
1188

1189
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tssDebugFlag");
4,783!
1190
  tssDebugFlag = pItem->i32;
4,783✔
1191

1192
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "sDebugFlag");
4,783!
1193
  sDebugFlag = pItem->i32;
4,783✔
1194

1195
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tsdbDebugFlag");
4,783!
1196
  tsdbDebugFlag = pItem->i32;
4,783✔
1197

1198
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tqDebugFlag");
4,783!
1199
  tqDebugFlag = pItem->i32;
4,783✔
1200

1201
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "fsDebugFlag");
4,783!
1202
  fsDebugFlag = pItem->i32;
4,783✔
1203

1204
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "udfDebugFlag");
4,783!
1205
  udfDebugFlag = pItem->i32;
4,783✔
1206

1207
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "smaDebugFlag");
4,783!
1208
  smaDebugFlag = pItem->i32;
4,783✔
1209

1210
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "idxDebugFlag");
4,783!
1211
  idxDebugFlag = pItem->i32;
4,783✔
1212

1213
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tdbDebugFlag");
4,783!
1214
  tdbDebugFlag = pItem->i32;
4,783✔
1215

1216
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "metaDebugFlag");
4,783!
1217
  metaDebugFlag = pItem->i32;
4,783✔
1218

1219
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "stDebugFlag");
4,783!
1220
  stDebugFlag = pItem->i32;
4,783✔
1221

1222
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "sndDebugFlag");
4,783!
1223
  sndDebugFlag = pItem->i32;
4,783✔
1224

1225
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "bseDebugFlag");
4,783!
1226
  bseDebugFlag = pItem->i32;
4,783✔
1227
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "bndDebugFlag");
4,783!
1228
  bndDebugFlag = pItem->i32;
4,783✔
1229

1230
  TAOS_RETURN(TSDB_CODE_SUCCESS);
4,783✔
1231
}
1232

1233
int32_t taosSetSlowLogScope(char *pScopeStr, int32_t *pScope) {
6,674✔
1234
  if (NULL == pScopeStr || 0 == strlen(pScopeStr)) {
6,674!
1235
    *pScope = SLOW_LOG_TYPE_QUERY;
×
1236
    TAOS_RETURN(TSDB_CODE_SUCCESS);
×
1237
  }
1238

1239
  int32_t slowScope = 0;
6,674✔
1240

1241
  char *scope = NULL;
6,674✔
1242
  char *tmp = NULL;
6,674✔
1243
  while ((scope = strsep(&pScopeStr, "|")) != NULL) {
13,348✔
1244
    taosMemoryFreeClear(tmp);
6,674!
1245
    tmp = taosStrdup(scope);
6,674!
1246
    if (tmp == NULL) {
6,674!
1247
      TAOS_RETURN(terrno);
×
1248
    }
1249
    (void)strtrim(tmp);
6,674✔
1250
    if (0 == strcasecmp(tmp, "all")) {
6,674✔
1251
      slowScope |= SLOW_LOG_TYPE_ALL;
9✔
1252
      continue;
9✔
1253
    }
1254

1255
    if (0 == strcasecmp(tmp, "query")) {
6,665✔
1256
      slowScope |= SLOW_LOG_TYPE_QUERY;
6,583✔
1257
      continue;
6,583✔
1258
    }
1259

1260
    if (0 == strcasecmp(tmp, "insert")) {
82✔
1261
      slowScope |= SLOW_LOG_TYPE_INSERT;
25✔
1262
      continue;
25✔
1263
    }
1264

1265
    if (0 == strcasecmp(tmp, "others")) {
57✔
1266
      slowScope |= SLOW_LOG_TYPE_OTHERS;
12✔
1267
      continue;
12✔
1268
    }
1269

1270
    if (0 == strcasecmp(tmp, "none")) {
45!
1271
      slowScope |= SLOW_LOG_TYPE_NULL;
45✔
1272
      continue;
45✔
1273
    }
1274

1275
    taosMemoryFreeClear(tmp);
×
1276
    uError("Invalid slowLog scope value:%s", pScopeStr);
×
1277
    TAOS_RETURN(TSDB_CODE_INVALID_CFG_VALUE);
×
1278
  }
1279

1280
  *pScope = slowScope;
6,674✔
1281
  taosMemoryFreeClear(tmp);
6,674!
1282
  TAOS_RETURN(TSDB_CODE_SUCCESS);
6,674✔
1283
}
1284

1285
// for common configs
1286
static int32_t taosSetClientCfg(SConfig *pCfg) {
8,735✔
1287
  SConfigItem *pItem = NULL;
8,735✔
1288

1289
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "fqdn");
8,735✔
1290
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_FQDN_LEN));
8,711!
1291
  tstrncpy(tsLocalFqdn, pItem->str, TSDB_FQDN_LEN);
8,711✔
1292

1293
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "forceReadConfig");
8,711!
1294
  tsForceReadConfig = pItem->bval;
8,711✔
1295

1296
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "serverPort");
8,711!
1297
  tsServerPort = (uint16_t)pItem->i32;
8,711✔
1298
  (void)snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
8,711✔
1299

1300
  char defaultFirstEp[TSDB_EP_LEN] = {0};
8,711✔
1301
  (void)snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort);
8,711✔
1302

1303
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "mqttPort");
8,711!
1304
  tsMqttPort = (uint16_t)pItem->i32;
8,711✔
1305
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableIpv6");
8,711!
1306
  tsEnableIpv6 = pItem->bval;
8,711✔
1307

1308
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "firstEp");
8,711!
1309
  SEp firstEp = {0};
8,711✔
1310
  TAOS_CHECK_RETURN(taosGetFqdnPortFromEp(strlen(pItem->str) == 0 ? defaultFirstEp : pItem->str, &firstEp));
8,711!
1311
  (void)snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port);
8,711✔
1312
  TAOS_CHECK_RETURN(cfgSetItem(pCfg, "firstEp", tsFirst, pItem->stype, true));
8,711!
1313

1314
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "secondEp");
8,711!
1315
  SEp secondEp = {0};
8,711✔
1316
  TAOS_CHECK_RETURN(taosGetFqdnPortFromEp(strlen(pItem->str) == 0 ? defaultFirstEp : pItem->str, &secondEp));
8,711!
1317
  (void)snprintf(tsSecond, sizeof(tsSecond), "%s:%u", secondEp.fqdn, secondEp.port);
8,711✔
1318
  TAOS_CHECK_RETURN(cfgSetItem(pCfg, "secondEp", tsSecond, pItem->stype, true));
8,711!
1319

1320
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tempDir");
8,711!
1321
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, PATH_MAX));
8,711!
1322
  tstrncpy(tsTempDir, pItem->str, PATH_MAX);
8,711✔
1323
  TAOS_CHECK_RETURN(taosExpandDir(tsTempDir, tsTempDir, PATH_MAX));
8,711!
1324

1325
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minimalTmpDirGB");
8,711!
1326
  tsTempSpace.reserved = (int64_t)(((double)pItem->fval) * 1024 * 1024 * 1024);
8,711✔
1327
  if (taosMulMkDir(tsTempDir) != 0) {
8,711!
1328
    int32_t code = TAOS_SYSTEM_ERROR(ERRNO);
×
1329
    uError("failed to create tempDir:%s since %s", tsTempDir, tstrerror(code));
×
1330
    TAOS_RETURN(code);
×
1331
  }
1332

1333
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "smlAutoChildTableNameDelimiter");
8,711!
1334
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_TABLE_NAME_LEN));
8,711!
1335
  tstrncpy(tsSmlAutoChildTableNameDelimiter, pItem->str, TSDB_TABLE_NAME_LEN);
8,711✔
1336

1337
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "smlChildTableName");
8,711!
1338
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_TABLE_NAME_LEN));
8,711!
1339
  tstrncpy(tsSmlChildTableName, pItem->str, TSDB_TABLE_NAME_LEN);
8,711✔
1340

1341
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "smlTagName");
8,711!
1342
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_COL_NAME_LEN));
8,711!
1343
  tstrncpy(tsSmlTagName, pItem->str, TSDB_COL_NAME_LEN);
8,711✔
1344

1345
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "smlTsDefaultName");
8,711!
1346
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_COL_NAME_LEN));
8,711!
1347
  tstrncpy(tsSmlTsDefaultName, pItem->str, TSDB_COL_NAME_LEN);
8,711✔
1348

1349
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "smlDot2Underline");
8,711!
1350
  tsSmlDot2Underline = pItem->bval;
8,711✔
1351

1352
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxInsertBatchRows");
8,711!
1353
  tsMaxInsertBatchRows = pItem->i32;
8,711✔
1354

1355
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "shellActivityTimer");
8,711!
1356
  tsShellActivityTimer = pItem->i32;
8,711✔
1357

1358
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "compressMsgSize");
8,711!
1359
  tsCompressMsgSize = pItem->i32;
8,711✔
1360

1361
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfTaskQueueThreads");
8,711!
1362
  tsNumOfTaskQueueThreads = pItem->i32;
8,711✔
1363

1364
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryPolicy");
8,711!
1365
  tsQueryPolicy = pItem->i32;
8,711✔
1366

1367
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryTableNotExistAsEmpty");
8,711!
1368
  tsQueryTbNotExistAsEmpty = pItem->bval;
8,711✔
1369

1370
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableQueryHb");
8,711!
1371
  tsEnableQueryHb = pItem->bval;
8,711✔
1372

1373
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableScience");
8,711!
1374
  tsEnableScience = pItem->bval;
8,711✔
1375

1376
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "querySmaOptimize");
8,711!
1377
  tsQuerySmaOptimize = pItem->i32;
8,711✔
1378

1379
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryPlannerTrace");
8,711!
1380
  tsQueryPlannerTrace = pItem->bval;
8,711✔
1381

1382
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryNodeChunkSize");
8,711!
1383
  tsQueryNodeChunkSize = pItem->i32;
8,711✔
1384

1385
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryUseNodeAllocator");
8,711!
1386
  tsQueryUseNodeAllocator = pItem->bval;
8,711✔
1387

1388
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "keepColumnName");
8,711!
1389
  tsKeepColumnName = pItem->bval;
8,711✔
1390

1391
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "useAdapter");
8,711!
1392
  tsUseAdapter = pItem->bval;
8,711✔
1393

1394
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "crashReporting");
8,711!
1395
  tsEnableCrashReport = pItem->bval;
8,711✔
1396

1397
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryMaxConcurrentTables");
8,711!
1398
  tsQueryMaxConcurrentTables = pItem->i64;
8,711✔
1399

1400
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "metaCacheMaxSize");
8,711!
1401
  tsMetaCacheMaxSize = pItem->i32;
8,711✔
1402

1403
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "randErrorChance");
8,711!
1404
  tsRandErrChance = pItem->i32;
8,711✔
1405

1406
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "randErrorDivisor");
8,711!
1407
  tsRandErrDivisor = pItem->i64;
8,711✔
1408

1409
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "randErrorScope");
8,711!
1410
  tsRandErrScope = pItem->i64;
8,711✔
1411

1412
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "countAlwaysReturnValue");
8,711!
1413
  tsCountAlwaysReturnValue = pItem->i32;
8,711✔
1414

1415
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxRetryWaitTime");
8,711!
1416
  tsMaxRetryWaitTime = pItem->i32;
8,711✔
1417

1418
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfRpcThreads");
8,711!
1419
  tsNumOfRpcThreads = pItem->i32;
8,711✔
1420

1421
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfRpcSessions");
8,711!
1422
  tsNumOfRpcSessions = pItem->i32;
8,711✔
1423

1424
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "shareConnLimit");
8,711!
1425
  tsShareConnLimit = pItem->i32;
8,711✔
1426

1427
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "readTimeout");
8,711!
1428
  tsReadTimeout = pItem->i32;
8,711✔
1429

1430
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "timeToGetAvailableConn");
8,711!
1431
  tsTimeToGetAvailableConn = pItem->i32;
8,711✔
1432

1433
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "experimental");
8,711!
1434
  tsExperimental = pItem->bval;
8,711✔
1435

1436
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "multiResultFunctionStarReturnTags");
8,711!
1437
  tsMultiResultFunctionStarReturnTags = pItem->bval;
8,711✔
1438

1439
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxTsmaCalcDelay");
8,711!
1440
  tsMaxTsmaCalcDelay = pItem->i32;
8,711✔
1441

1442
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tsmaDataDeleteMark");
8,711!
1443
  tsmaDataDeleteMark = pItem->i32;
8,711✔
1444

1445
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "safetyCheckLevel");
8,711!
1446
  tsSafetyCheckLevel = pItem->i32;
8,711✔
1447

1448
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "bypassFlag");
8,711!
1449
  tsBypassFlag = pItem->i32;
8,711✔
1450

1451
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "compareAsStrInGreatest");
8,711!
1452
  tsCompareAsStrInGreatest = pItem->bval;
8,711✔
1453

1454
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "showFullCreateTableColumn");
8,711!
1455
  tsShowFullCreateTableColumn = pItem->bval;
8,711✔
1456

1457
  TAOS_RETURN(TSDB_CODE_SUCCESS);
8,711✔
1458
}
1459

1460
static int32_t taosSetSystemCfg(SConfig *pCfg) {
8,711✔
1461
  SConfigItem *pItem = NULL;
8,711✔
1462

1463
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableCoreFile");
8,711!
1464
  tsEnableCoreFile = pItem->bval;
8,711✔
1465
  taosSetCoreDump(tsEnableCoreFile);
8,711✔
1466

1467
  // todo
1468
  tsVersion = 30000000;
8,711✔
1469

1470
  TAOS_RETURN(TSDB_CODE_SUCCESS);
8,711✔
1471
}
1472

1473
// for server configs
1474
static int32_t taosSetServerCfg(SConfig *pCfg) {
6,674✔
1475
  SConfigItem *pItem = NULL;
6,674✔
1476

1477
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minimalDataDirGB");
6,674!
1478
  tsDataSpace.reserved = (int64_t)(((double)pItem->fval) * 1024 * 1024 * 1024);
6,674✔
1479

1480
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "supportVnodes");
6,674!
1481
  tsNumOfSupportVnodes = pItem->i32;
6,674✔
1482

1483
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxShellConns");
6,674!
1484
  tsMaxShellConns = pItem->i32;
6,674✔
1485

1486
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "statusInterval");
6,674!
1487
  tsStatusInterval = pItem->i32;
6,674✔
1488
  tsStatusIntervalMs = pItem->i32 * 1000;
6,674✔
1489

1490
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "statusIntervalMs");
6,674!
1491
  tsStatusIntervalMs = pItem->i32;
6,674✔
1492

1493
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "statusSRTimeoutMs");
6,674!
1494
  tsStatusSRTimeoutMs = pItem->i32;
6,674✔
1495

1496
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "statusTimeoutMs");
6,674!
1497
  tsStatusTimeoutMs = pItem->i32;
6,674✔
1498

1499
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableMetrics");
6,674!
1500
  tsEnableMetrics = pItem->bval;
6,674✔
1501

1502
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "metricsLevel");
6,674!
1503
  tsMetricsLevel = pItem->i32;
6,674✔
1504

1505
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "metricsInterval");
6,674!
1506
  tsMetricsInterval = pItem->i32;
6,674✔
1507

1508
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minSlidingTime");
6,674!
1509
  tsMinSlidingTime = pItem->i32;
6,674✔
1510

1511
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minIntervalTime");
6,674!
1512
  tsMinIntervalTime = pItem->i32;
6,674✔
1513

1514
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryBufferSize");
6,674!
1515
  tsQueryBufferSize = pItem->i32;
6,674✔
1516

1517
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "encryptAlgorithm");
6,674!
1518
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, 16));
6,674!
1519
  tstrncpy(tsEncryptAlgorithm, pItem->str, 16);
6,674✔
1520

1521
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "encryptScope");
6,674!
1522
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, 100));
6,674!
1523
  tstrncpy(tsEncryptScope, pItem->str, 100);
6,674✔
1524

1525
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableStrongPassword");
6,674!
1526
  tsEnableStrongPassword = pItem->i32;
6,674✔
1527

1528
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "encryptPassAlgorithm");
6,674!
1529
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, 16));
6,674!
1530
  tstrncpy(tsEncryptPassAlgorithm, pItem->str, 16);
6,674✔
1531

1532
  if (strlen(tsEncryptPassAlgorithm) > 0) {
6,674✔
1533
    if (strcmp(tsEncryptPassAlgorithm, "sm4") == 0) {
3!
1534
      tsiEncryptPassAlgorithm = DND_CA_SM4;
3✔
1535
    } else {
1536
      uError("invalid tsEncryptAlgorithm:%s", tsEncryptPassAlgorithm);
×
1537
    }
1538
  }
1539

1540
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfRpcThreads");
6,674!
1541
  tsNumOfRpcThreads = pItem->i32;
6,674✔
1542

1543
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfRpcSessions");
6,674!
1544
  tsNumOfRpcSessions = pItem->i32;
6,674✔
1545

1546
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "shareConnLimit");
6,674!
1547
  tsShareConnLimit = pItem->i32;
6,674✔
1548

1549
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "readTimeout");
6,674!
1550
  tsReadTimeout = pItem->i32;
6,674✔
1551

1552
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "timeToGetAvailableConn");
6,674!
1553
  tsTimeToGetAvailableConn = pItem->i32;
6,674✔
1554

1555
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfCommitThreads");
6,674!
1556
  tsNumOfCommitThreads = pItem->i32;
6,674✔
1557

1558
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfCompactThreads");
6,674!
1559
  tsNumOfCompactThreads = pItem->i32;
6,674✔
1560

1561
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableIpv6");
6,674!
1562
  tsEnableIpv6 = pItem->bval;
6,674✔
1563

1564
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "retentionSpeedLimitMB");
6,674!
1565
  tsRetentionSpeedLimitMB = pItem->i32;
6,674✔
1566

1567
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfMnodeReadThreads");
6,674!
1568
  tsNumOfMnodeReadThreads = pItem->i32;
6,674✔
1569

1570
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfVnodeQueryThreads");
6,674!
1571
  tsNumOfVnodeQueryThreads = pItem->i32;
6,674✔
1572

1573
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfVnodeFetchThreads");
6,674!
1574
  tsNumOfVnodeFetchThreads = pItem->i32;
6,674✔
1575

1576
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfVnodeRsmaThreads");
6,674!
1577
  tsNumOfVnodeRsmaThreads = pItem->i32;
6,674✔
1578

1579
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfQnodeQueryThreads");
6,674!
1580
  tsNumOfQnodeQueryThreads = pItem->i32;
6,674✔
1581

1582
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "rpcQueueMemoryAllowed");
6,674!
1583
  tsQueueMemoryAllowed = cfgGetItem(pCfg, "rpcQueueMemoryAllowed")->i64 * QUEUE_MEMORY_USAGE_RATIO;
6,674✔
1584
  tsApplyMemoryAllowed = cfgGetItem(pCfg, "rpcQueueMemoryAllowed")->i64 * (1 - QUEUE_MEMORY_USAGE_RATIO);
6,674✔
1585

1586
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "simdEnable");
6,674!
1587
  tsSIMDEnable = (bool)pItem->bval;
6,674✔
1588

1589
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "AVX512Enable");
6,674!
1590
  tsAVX512Enable = (bool)pItem->bval;
6,674✔
1591

1592
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tagFilterCache");
6,674!
1593
  tsTagFilterCache = (bool)pItem->bval;
6,674✔
1594

1595
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "slowLogExceptDb");
6,674!
1596
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_DB_NAME_LEN));
6,674!
1597
  tstrncpy(tsSlowLogExceptDb, pItem->str, TSDB_DB_NAME_LEN);
6,674✔
1598

1599
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "slowLogThreshold");
6,674!
1600
  tsSlowLogThreshold = pItem->i32;
6,674✔
1601

1602
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "slowLogMaxLen");
6,674!
1603
  tsSlowLogMaxLen = pItem->i32;
6,674✔
1604

1605
  int32_t scope = 0;
6,674✔
1606
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "slowLogScope");
6,674!
1607
  TAOS_CHECK_RETURN(taosSetSlowLogScope(pItem->str, &scope));
6,674!
1608
  tsSlowLogScope = scope;
6,674✔
1609

1610
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryRspPolicy");
6,674!
1611
  tsQueryRspPolicy = pItem->i32;
6,674✔
1612
#ifdef USE_MONITOR
1613
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitor");
6,674!
1614
  tsEnableMonitor = pItem->bval;
6,674✔
1615

1616
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorInterval");
6,674!
1617
  tsMonitorInterval = pItem->i32;
6,674✔
1618

1619
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorFqdn");
6,674!
1620
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_FQDN_LEN));
6,674!
1621
  tstrncpy(tsMonitorFqdn, pItem->str, TSDB_FQDN_LEN);
6,674✔
1622

1623
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorPort");
6,674!
1624
  tsMonitorPort = (uint16_t)pItem->i32;
6,674✔
1625

1626
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorMaxLogs");
6,674!
1627
  tsMonitorMaxLogs = pItem->i32;
6,674✔
1628

1629
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorComp");
6,674!
1630
  tsMonitorComp = pItem->bval;
6,674✔
1631

1632
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorLogProtocol");
6,674!
1633
  tsMonitorLogProtocol = pItem->bval;
6,674✔
1634

1635
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorForceV2");
6,674!
1636
  tsMonitorForceV2 = pItem->i32;
6,674✔
1637
#endif
1638
#ifdef USE_AUDIT
1639
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "audit");
6,674!
1640
  tsEnableAudit = pItem->bval;
6,674✔
1641

1642
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "auditCreateTable");
6,674!
1643
  tsEnableAuditCreateTable = pItem->bval;
6,674✔
1644

1645
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableAuditDelete");
6,674!
1646
  tsEnableAuditDelete = pItem->bval;
6,674✔
1647

1648
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "auditInterval");
6,674!
1649
  tsAuditInterval = pItem->i32;
6,674✔
1650
#endif
1651
#ifdef USE_REPORT
1652
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "telemetryReporting");
6,674!
1653
  tsEnableTelem = pItem->bval;
6,674✔
1654

1655
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "crashReporting");
6,674!
1656
  tsEnableCrashReport = pItem->bval;
6,674✔
1657

1658
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "telemetryInterval");
6,674!
1659
  tsTelemInterval = pItem->i32;
6,674✔
1660

1661
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "telemetryServer");
6,674!
1662
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_FQDN_LEN));
6,674!
1663
  tstrncpy(tsTelemServer, pItem->str, TSDB_FQDN_LEN);
6,674✔
1664
#endif
1665

1666
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ttlChangeOnWrite");
6,674!
1667
  tsTtlChangeOnWrite = pItem->bval;
6,674✔
1668

1669
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ttlFlushThreshold");
6,674!
1670
  tsTtlFlushThreshold = pItem->i32;
6,674✔
1671

1672
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "rsyncPort");
6,674!
1673
  tsRsyncPort = pItem->i32;
6,674✔
1674

1675
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "snodeAddress");
6,674!
1676
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_FQDN_LEN));
6,674!
1677
  tstrncpy(tsSnodeAddress, pItem->str, TSDB_FQDN_LEN);
6,674✔
1678

1679
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "checkpointBackupDir");
6,674!
1680
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, PATH_MAX));
6,674!
1681
  tstrncpy(tsCheckpointBackupDir, pItem->str, PATH_MAX);
6,674✔
1682

1683
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "telemetryPort");
6,674!
1684
  tsTelemPort = (uint16_t)pItem->i32;
6,674✔
1685

1686
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tmqMaxTopicNum");
6,674!
1687
  tmqMaxTopicNum = pItem->i32;
6,674✔
1688

1689
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tmqRowSize");
6,674!
1690
  tmqRowSize = pItem->i32;
6,674✔
1691

1692
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxTsmaNum");
6,674!
1693
  tsMaxTsmaNum = pItem->i32;
6,674✔
1694

1695
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "diskIDCheckEnabled");
6,674!
1696
  tsDiskIDCheckEnabled = pItem->bval;
6,674✔
1697

1698
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "transPullupInterval");
6,674!
1699
  tsTransPullupInterval = pItem->i32;
6,674✔
1700

1701
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "compactPullupInterval");
6,674!
1702
  tsCompactPullupInterval = pItem->i32;
6,674✔
1703

1704
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "mqRebalanceInterval");
6,674!
1705
  tsMqRebalanceInterval = pItem->i32;
6,674✔
1706

1707
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ttlUnit");
6,674!
1708
  tsTtlUnit = pItem->i32;
6,674✔
1709

1710
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ttlPushInterval");
6,674!
1711
  tsTtlPushIntervalSec = pItem->i32;
6,674✔
1712

1713
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ttlBatchDropNum");
6,674!
1714
  tsTtlBatchDropNum = pItem->i32;
6,674✔
1715

1716
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "trimVDbIntervalSec");
6,674!
1717
  tsTrimVDbIntervalSec = pItem->i32;
6,674✔
1718

1719
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "uptimeInterval");
6,674!
1720
  tsUptimeInterval = pItem->i32;
6,674✔
1721

1722
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryRsmaTolerance");
6,674!
1723
  tsQueryRsmaTolerance = pItem->i32;
6,674✔
1724

1725
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "timeseriesThreshold");
6,674!
1726
  tsTimeSeriesThreshold = pItem->i32;
6,674✔
1727

1728
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "walForceRepair");
6,674!
1729
  tsWalForceRepair = pItem->bval;
6,674✔
1730

1731
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "walFsyncDataSizeLimit");
6,674!
1732
  tsWalFsyncDataSizeLimit = pItem->i64;
6,674✔
1733

1734
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncElectInterval");
6,674!
1735
  tsElectInterval = pItem->i32;
6,674✔
1736

1737
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncHeartbeatInterval");
6,674!
1738
  tsHeartbeatInterval = pItem->i32;
6,674✔
1739

1740
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncVnodeElectIntervalMs");
6,674!
1741
  tsVnodeElectIntervalMs = pItem->i32;
6,674✔
1742

1743
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncVnodeHeartbeatIntervalMs");
6,674!
1744
  tsVnodeHeartbeatIntervalMs = pItem->i32;
6,674✔
1745

1746
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncMnodeElectIntervalMs");
6,674!
1747
  tsMnodeElectIntervalMs = pItem->i32;
6,674✔
1748

1749
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncMnodeHeartbeatIntervalMs");
6,674!
1750
  tsMnodeHeartbeatIntervalMs = pItem->i32;
6,674✔
1751

1752
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncHeartbeatTimeout");
6,674!
1753
  tsHeartbeatTimeout = pItem->i32;
6,674✔
1754

1755
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncSnapReplMaxWaitN");
6,674!
1756
  tsSnapReplMaxWaitN = pItem->i32;
6,674✔
1757

1758
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncLogBufferMemoryAllowed");
6,674!
1759
  tsLogBufferMemoryAllowed = pItem->i64;
6,674✔
1760

1761
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncApplyQueueSize");
6,674!
1762
  tsSyncApplyQueueSize = pItem->i64;
6,674✔
1763

1764
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncRoutineReportInterval");
6,674!
1765
  tsRoutineReportInterval = pItem->i32;
6,674✔
1766

1767
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncLogHeartbeat");
6,674!
1768
  tsSyncLogHeartbeat = pItem->bval;
6,674✔
1769

1770
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "arbHeartBeatIntervalSec");
6,674!
1771
  tsArbHeartBeatIntervalMs = pItem->i32 * 1000;
6,674✔
1772

1773
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "arbCheckSyncIntervalSec");
6,674!
1774
  tsArbCheckSyncIntervalMs = pItem->i32 * 1000;
6,674✔
1775

1776
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "arbSetAssignedTimeoutSec");
6,674!
1777
  tsArbSetAssignedTimeoutMs = pItem->i32 * 1000;
6,674✔
1778

1779
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "arbHeartBeatIntervalMs");
6,674!
1780
  tsArbHeartBeatIntervalMs = pItem->i32;
6,674✔
1781

1782
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "arbCheckSyncIntervalMs");
6,674!
1783
  tsArbCheckSyncIntervalMs = pItem->i32;
6,674✔
1784

1785
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "arbSetAssignedTimeoutMs");
6,674!
1786
  tsArbSetAssignedTimeoutMs = pItem->i32;
6,674✔
1787

1788
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncTimeout");
6,674!
1789
  tsSyncTimeout = pItem->i32;
6,674✔
1790

1791
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "mndSdbWriteDelta");
6,674!
1792
  tsMndSdbWriteDelta = pItem->i64;
6,674✔
1793

1794
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "mndLogRetention");
6,674!
1795
  tsMndLogRetention = pItem->i64;
6,674✔
1796

1797
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "skipGrant");
6,674!
1798
  tsMndSkipGrant = pItem->bval;
6,674✔
1799

1800
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableWhiteList");
6,674!
1801
  tsEnableWhiteList = pItem->bval;
6,674✔
1802

1803
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "forceKillTrans");
6,674!
1804
  tsForceKillTrans = pItem->bval;
6,674✔
1805
#ifdef USE_UDF
1806
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "udf");
6,674!
1807
  tsStartUdfd = pItem->bval;
6,674✔
1808

1809
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "udfdResFuncs");
6,674!
1810
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, sizeof(tsUdfdResFuncs)));
6,674!
1811
  tstrncpy(tsUdfdResFuncs, pItem->str, sizeof(tsUdfdResFuncs));
6,674✔
1812

1813
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "udfdLdLibPath");
6,674!
1814
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, sizeof(tsUdfdLdLibPath)));
6,674!
1815
  tstrncpy(tsUdfdLdLibPath, pItem->str, sizeof(tsUdfdLdLibPath));
6,674✔
1816
  if (tsQueryBufferSize >= 0) {
6,674✔
1817
    tsQueryBufferSizeBytes = tsQueryBufferSize * 1048576UL;
42✔
1818
  }
1819
#endif
1820
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "cacheLazyLoadThreshold");
6,674!
1821
  tsCacheLazyLoadThreshold = pItem->i32;
6,674✔
1822

1823
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "fPrecision");
6,674!
1824
  tsFPrecision = pItem->fval;
6,674✔
1825

1826
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "dPrecision");
6,674!
1827
  tsDPrecision = pItem->fval;
6,674✔
1828

1829
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxRange");
6,674!
1830
  tsMaxRange = pItem->i32;
6,674✔
1831

1832
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "curRange");
6,674!
1833
  tsCurRange = pItem->i32;
6,674✔
1834

1835
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ifAdtFse");
6,674!
1836
  tsIfAdtFse = pItem->bval;
6,674✔
1837

1838
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "compressor");
6,674!
1839
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, sizeof(tsCompressor)));
6,674!
1840
  tstrncpy(tsCompressor, pItem->str, sizeof(tsCompressor));
6,674✔
1841

1842
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "disableStream");
6,674!
1843
  tsDisableStream = pItem->bval;
6,674✔
1844

1845
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamBufferSize");
6,674!
1846
  tsStreamBufferSize = pItem->i32;
6,674✔
1847
  tsStreamBufferSizeBytes = tsStreamBufferSize * 1048576L;
6,674✔
1848

1849
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfMnodeStreamMgmtThreads");
6,674!
1850
  tsNumOfMnodeStreamMgmtThreads = pItem->i32;
6,674✔
1851

1852
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfStreamMgmtThreads");
6,674!
1853
  tsNumOfStreamMgmtThreads = pItem->i32;
6,674✔
1854

1855
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfVnodeStreamReaderThreads");
6,674!
1856
  tsNumOfVnodeStreamReaderThreads = pItem->i32;
6,674✔
1857

1858
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfStreamTriggerThreads");
6,674!
1859
  tsNumOfStreamTriggerThreads = pItem->i32;
6,674✔
1860

1861
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfStreamRunnerThreads");
6,674!
1862
  tsNumOfStreamRunnerThreads = pItem->i32;
6,674✔
1863

1864
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "filterScalarMode");
6,674!
1865
  tsFilterScalarMode = pItem->bval;
6,674✔
1866

1867
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "pqSortMemThreshold");
6,674!
1868
  tsPQSortMemThreshold = pItem->i32;
6,674✔
1869

1870
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minDiskFreeSize");
6,674!
1871
  tsMinDiskFreeSize = pItem->i64;
6,674✔
1872

1873
#ifdef USE_SHARED_STORAGE
1874
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ssEnabled");
6,674!
1875
  tsSsEnabled = pItem->i32;
6,674✔
1876

1877
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ssAccessString");
6,674!
1878
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, sizeof(tsSsAccessString)));
6,674!
1879
  tstrncpy(tsSsAccessString, pItem->str, sizeof(tsSsAccessString));
6,674✔
1880

1881
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ssAutoMigrateIntervalSec");
6,674!
1882
  tsSsAutoMigrateIntervalSec = pItem->i32;
6,674✔
1883

1884
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ssPageCacheSize");
6,674!
1885
  tsSsPageCacheSize = pItem->i32;
6,674✔
1886

1887
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ssUploadDelaySec");
6,674!
1888
  tsSsUploadDelaySec = pItem->i32;
6,674✔
1889
#endif
1890

1891
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "experimental");
6,674!
1892
  tsExperimental = pItem->bval;
6,674✔
1893

1894
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryUseMemoryPool");
6,674!
1895
  tsQueryUseMemoryPool = pItem->bval;
6,674✔
1896

1897
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "memPoolFullFunc");
6,674!
1898
  tsMemPoolFullFunc = pItem->bval;
6,674✔
1899

1900
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "singleQueryMaxMemorySize");
6,674!
1901
  tsSingleQueryMaxMemorySize = pItem->i32;
6,674✔
1902

1903
  // TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryBufferPoolSize");
1904
  // tsQueryBufferPoolSize = pItem->i32;
1905

1906
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minReservedMemorySize");
6,674!
1907
  tsMinReservedMemorySize = pItem->i32;
6,674✔
1908

1909
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamNotifyMessageSize");
6,674!
1910
  tsStreamNotifyMessageSize = pItem->i32;
6,674✔
1911

1912
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamNotifyFrameSize");
6,674!
1913
  tsStreamNotifyFrameSize = pItem->i32;
6,674✔
1914

1915
  // GRANT_CFG_GET;
1916
  TAOS_RETURN(TSDB_CODE_SUCCESS);
6,674✔
1917
}
1918

1919
#ifndef TD_ENTERPRISE
1920
static int32_t taosSetReleaseCfg(SConfig *pCfg) { return 0; }
1921
#else
1922
int32_t taosSetReleaseCfg(SConfig *pCfg);
1923
#endif
1924

1925
static int32_t taosSetAllDebugFlag(SConfig *pCfg, int32_t flag);
1926

1927
static int8_t tsLogCreated = 0;
1928

1929
int32_t taosCreateLog(const char *logname, int32_t logFileNum, const char *cfgDir, const char **envCmd,
6,828✔
1930
                      const char *envFile, char *apolloUrl, SArray *pArgs, bool tsc) {
1931
  int32_t  code = TSDB_CODE_SUCCESS;
6,828✔
1932
  int32_t  lino = 0;
6,828✔
1933
  int32_t  mode = tsc ? LOG_MODE_TAOSC : LOG_MODE_TAOSD;
6,828✔
1934
  SConfig *pCfg = NULL;
6,828✔
1935

1936
  if (atomic_val_compare_exchange_8(&tsLogCreated, 0, 1) != 0) return 0;
6,828✔
1937

1938
  if (tsCfg == NULL) {
6,819!
1939
    TAOS_CHECK_GOTO(osDefaultInit(), &lino, _exit);
6,819!
1940
  }
1941

1942
  TAOS_CHECK_GOTO(cfgInit(&pCfg), &lino, _exit);
6,819!
1943

1944
#ifdef TAOSD_INTEGRATED
1945
  mode |= LOG_MODE_TAOSD;
1946
  tsLogEmbedded = 1;
1947
#else
1948
  tsLogEmbedded = (mode & LOG_MODE_TAOSC) ? 0 : 1;
6,819✔
1949
#endif
1950
  TAOS_CHECK_GOTO(taosAddClientLogCfg(pCfg), &lino, _exit);
6,819!
1951
  if (mode & LOG_MODE_TAOSD) {
6,819✔
1952
    TAOS_CHECK_GOTO(taosAddServerLogCfg(pCfg), &lino, _exit);
4,783!
1953
  }
1954

1955
  if ((code = taosLoadCfg(pCfg, envCmd, cfgDir, envFile, apolloUrl)) != TSDB_CODE_SUCCESS) {
6,819!
1956
    (void)printf("failed to load cfg since %s\n", tstrerror(code));
×
1957
    goto _exit;
×
1958
  }
1959

1960
  if ((code = cfgLoadFromArray(pCfg, pArgs)) != TSDB_CODE_SUCCESS) {
6,819!
1961
    (void)printf("failed to load cfg from array since %s\n", tstrerror(code));
×
1962
    goto _exit;
×
1963
  }
1964

1965
  TAOS_CHECK_GOTO(taosSetClientLogCfg(pCfg), &lino, _exit);
6,819!
1966
  if (mode & LOG_MODE_TAOSD) {
6,819✔
1967
    TAOS_CHECK_GOTO(taosSetServerLogCfg(pCfg), &lino, _exit);
4,783!
1968
  }
1969

1970
  SConfigItem *pDebugItem = NULL;
6,819✔
1971
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pDebugItem, "debugFlag");
6,819!
1972
  TAOS_CHECK_GOTO(taosSetAllDebugFlag(pCfg, pDebugItem->i32), &lino, _exit);
6,819!
1973

1974
  if ((code = taosMulModeMkDir(tsLogDir, 0777, true)) != TSDB_CODE_SUCCESS) {
6,819✔
1975
    (void)printf("failed to create dir:%s since %s\n", tsLogDir, tstrerror(code));
1✔
1976
    goto _exit;
1✔
1977
  }
1978

1979
  if ((code = taosInitLog(logname, logFileNum, mode)) != 0) {
6,818!
1980
    (void)printf("failed to init log file since %s\n", tstrerror(code));
×
1981
    goto _exit;
×
1982
  }
1983

1984
_exit:
6,818✔
1985
  if (TSDB_CODE_SUCCESS != code) {
6,819✔
1986
    (void)printf("failed to create log at %d since %s\n", lino, tstrerror(code));
1✔
1987
  }
1988

1989
  cfgCleanup(pCfg);
6,819✔
1990
  TAOS_RETURN(code);
6,819✔
1991
}
1992

1993
int32_t taosReadDataFolder(const char *cfgDir, const char **envCmd, const char *envFile, char *apolloUrl,
1✔
1994
                           SArray *pArgs) {
1995
  int32_t code = TSDB_CODE_SUCCESS;
1✔
1996
  int32_t lino = -1;
1✔
1997
  if (tsCfg == NULL) code = osDefaultInit();
1!
1998
  if (code != 0) {
1!
1999
    (void)printf("failed to init os since %s\n", tstrerror(code));
×
2000
  }
2001

2002
  SConfig *pCfg = NULL;
1✔
2003
  TAOS_CHECK_RETURN(cfgInit(&pCfg));
1!
2004
  TAOS_CHECK_GOTO(cfgAddDir(pCfg, "dataDir", tsDataDir, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL), &lino,
1!
2005
                  _exit);
2006
  TAOS_CHECK_GOTO(
1!
2007
      cfgAddInt32(pCfg, "debugFlag", dDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL), &lino,
2008
      _exit);
2009
  TAOS_CHECK_GOTO(
1!
2010
      cfgAddInt32(pCfg, "dDebugFlag", dDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL), &lino,
2011
      _exit);
2012

2013
  if ((code = taosLoadCfg(pCfg, envCmd, cfgDir, envFile, apolloUrl)) != 0) {
1!
2014
    (void)printf("failed to load cfg since %s\n", tstrerror(code));
×
2015
    goto _exit;
×
2016
  }
2017

2018
  if ((code = cfgLoadFromArray(pCfg, pArgs)) != 0) {
1!
2019
    (void)printf("failed to load cfg from array since %s\n", tstrerror(code));
×
2020
    goto _exit;
×
2021
  }
2022

2023
  TAOS_CHECK_GOTO(taosSetTfsCfg(pCfg), &lino, _exit);
1!
2024

2025
  SConfigItem *pItem = NULL;
1✔
2026
  if ((pItem = cfgGetItem(pCfg, "dDebugFlag")) == NULL) {
1!
2027
    code = TSDB_CODE_CFG_NOT_FOUND;
×
2028
    goto _exit;
×
2029
  }
2030

2031
  dDebugFlag = pItem->i32;
1✔
2032

2033
_exit:
1✔
2034
  cfgCleanup(pCfg);
1✔
2035
  TAOS_RETURN(code);
1✔
2036
}
2037

2038
static int32_t taosCheckGlobalCfg() {
6,820✔
2039
  SIpAddr addr = {0};
6,820✔
2040
  uInfo("check global fqdn:%s and port:%u", tsLocalFqdn, tsServerPort);
6,820!
2041
  int32_t code = taosGetIpFromFqdn(tsEnableIpv6, tsLocalFqdn, &addr);
6,820✔
2042
  if (code) {
6,820!
2043
    uError("failed to get ip from fqdn:%s since %s, can not be initialized", tsLocalFqdn, tstrerror(code));
×
2044
    TAOS_RETURN(TSDB_CODE_RPC_FQDN_ERROR);
×
2045
  }
2046

2047
  if (tsServerPort <= 0) {
6,820!
2048
    uError("invalid server port:%u, can not be initialized", tsServerPort);
×
2049
    TAOS_RETURN(TSDB_CODE_RPC_FQDN_ERROR);
×
2050
  }
2051

2052
  if (tsMqttPort <= 0 || tsMqttPort == tsServerPort) {
6,820!
2053
    uError("invalid mqtt port:%u, can not be initialized", tsMqttPort);
×
2054
    TAOS_RETURN(TSDB_CODE_RPC_FQDN_ERROR);
×
2055
  }
2056

2057
  TAOS_RETURN(TSDB_CODE_SUCCESS);
6,820✔
2058
}
2059

2060
static int32_t cfgInitWrapper(SConfig **pCfg) {
6,820✔
2061
  if (*pCfg == NULL) {
6,820!
2062
    TAOS_CHECK_RETURN(cfgInit(pCfg));
6,820!
2063
  }
2064
  TAOS_RETURN(TSDB_CODE_SUCCESS);
6,820✔
2065
}
2066

2067
int32_t setAllConfigs(SConfig *pCfg) {
1,915✔
2068
  int32_t code = 0;
1,915✔
2069
  int32_t lino = -1;
1,915✔
2070
  TAOS_CHECK_GOTO(taosSetClientCfg(tsCfg), &lino, _exit);
1,915✔
2071
  TAOS_CHECK_GOTO(taosUpdateServerCfg(tsCfg), &lino, _exit);
1,891!
2072
  TAOS_CHECK_GOTO(taosSetServerCfg(tsCfg), &lino, _exit);
1,891!
2073
  TAOS_CHECK_GOTO(taosSetReleaseCfg(tsCfg), &lino, _exit);
1,891!
2074
  TAOS_CHECK_GOTO(taosSetTfsCfg(tsCfg), &lino, _exit);
1,891!
2075
  TAOS_CHECK_GOTO(taosSetSystemCfg(tsCfg), &lino, _exit);
1,891!
2076
  TAOS_CHECK_GOTO(taosSetFileHandlesLimit(), &lino, _exit);
1,891!
2077
_exit:
1,891✔
2078
  TAOS_RETURN(code);
1,915✔
2079
}
2080

2081
int32_t cfgDeserialize(SArray *array, char *buf, bool isGlobal) {
1,904✔
2082
  int32_t code = TSDB_CODE_SUCCESS;
1,904✔
2083

2084
  cJSON *pRoot = cJSON_Parse(buf);
1,904✔
2085
  if (pRoot == NULL) {
1,904!
2086
    return TSDB_CODE_OUT_OF_MEMORY;
×
2087
  }
2088
  if (isGlobal) {
1,904✔
2089
    cJSON *pItem = cJSON_GetObjectItem(pRoot, "version");
958✔
2090
    if (pItem == NULL) {
958!
2091
      code = TSDB_CODE_OUT_OF_MEMORY;
×
2092
      goto _exit;
×
2093
    }
2094
    tsdmConfigVersion = pItem->valueint;
958✔
2095
  }
2096

2097
  int32_t sz = taosArrayGetSize(array);
1,904✔
2098
  cJSON  *configs = cJSON_GetObjectItem(pRoot, "configs");
1,904✔
2099
  if (configs == NULL) {
1,904!
2100
    code = TSDB_CODE_OUT_OF_MEMORY;
×
2101
    goto _exit;
×
2102
  }
2103
  for (int i = 0; i < sz; i++) {
221,558✔
2104
    SConfigItem *pItem = (SConfigItem *)taosArrayGet(array, i);
219,654✔
2105
    cJSON       *pJson = cJSON_GetObjectItem(configs, pItem->name);
219,654✔
2106
    if (pJson == NULL) {
219,654✔
2107
      continue;
946✔
2108
    }
2109
    if (strcasecmp(pItem->name, "dataDir") == 0) {
218,708✔
2110
      if (!tsDiskIDCheckEnabled) {
946!
2111
        continue;
946✔
2112
      }
2113
      int    sz = cJSON_GetArraySize(pJson);
×
2114
      cJSON *filed = NULL;
×
2115
      // check disk id for each dir
2116
      for (int j = 0; j < sz; j++) {
×
2117
        cJSON *diskCfgJson = cJSON_GetArrayItem(pJson, j);
×
2118
        if (diskCfgJson == NULL) {
×
2119
          code = TSDB_CODE_OUT_OF_MEMORY;
×
2120
          goto _exit;
×
2121
        }
2122

2123
        filed = cJSON_GetObjectItem(diskCfgJson, "dir");
×
2124
        if (filed == NULL) {
×
2125
          code = TSDB_CODE_OUT_OF_MEMORY;
×
2126
          goto _exit;
×
2127
        }
2128

2129
        char *dir = cJSON_GetStringValue(filed);
×
2130
        filed = cJSON_GetObjectItem(diskCfgJson, "disk_id");
×
2131
        if (filed == NULL) {
×
2132
          code = TSDB_CODE_OUT_OF_MEMORY;
×
2133
          goto _exit;
×
2134
        }
2135

2136
        int64_t actDiskID = 0;
×
2137
        int64_t expDiskID = taosStr2Int64(cJSON_GetStringValue(filed), NULL, 10);
×
2138
        if ((code = taosGetFileDiskID(dir, &actDiskID)) != 0) {
×
2139
          uError("failed to get disk id for dir:%s, since %s", dir, tstrerror(code));
×
2140
          goto _exit;
×
2141
        }
2142
        if (actDiskID != expDiskID) {
×
2143
          uError("failed to check disk id for dir:%s, actDiskID%" PRId64 ", expDiskID%" PRId64, dir, actDiskID,
×
2144
                 expDiskID);
2145
          code = TSDB_CODE_INVALID_DISK_ID;
×
2146
          goto _exit;
×
2147
        }
2148
      }
2149
      continue;
×
2150
    }
2151
    switch (pItem->dtype) {
217,762!
2152
      {
2153
        case CFG_DTYPE_NONE:
×
2154
          break;
×
2155
        case CFG_DTYPE_BOOL:
39,002✔
2156
          pItem->bval = cJSON_IsTrue(pJson);
39,002✔
2157
          break;
39,002✔
2158
        case CFG_DTYPE_INT32:
126,478✔
2159
          pItem->i32 = pJson->valueint;
126,478✔
2160
          break;
126,478✔
2161
        case CFG_DTYPE_INT64:
12,370✔
2162
          pItem->i64 = atoll(cJSON_GetStringValue(pJson));
12,370✔
2163
          break;
12,370✔
2164
        case CFG_DTYPE_FLOAT:
5,700✔
2165
        case CFG_DTYPE_DOUBLE:
2166
          pItem->fval = taosStr2Float(cJSON_GetStringValue(pJson), NULL);
5,700✔
2167
          break;
5,700✔
2168
        case CFG_DTYPE_STRING:
34,212✔
2169
        case CFG_DTYPE_DIR:
2170
        case CFG_DTYPE_LOCALE:
2171
        case CFG_DTYPE_CHARSET:
2172
        case CFG_DTYPE_TIMEZONE:
2173
          taosMemoryFree(pItem->str);
34,212!
2174
          pItem->str = taosStrdup(pJson->valuestring);
34,212!
2175
          if (pItem->str == NULL) {
34,212!
2176
            code = terrno;
×
2177
            goto _exit;
×
2178
          }
2179
          break;
34,212✔
2180
      }
2181
    }
2182
  }
2183
_exit:
1,904✔
2184
  if (code != TSDB_CODE_SUCCESS) {
1,904!
2185
    uError("failed to deserialize config since %s", tstrerror(code));
×
2186
  }
2187
  cJSON_Delete(pRoot);
1,904✔
2188
  return code;
1,904✔
2189
}
2190

2191
int32_t stypeConfigDeserialize(SArray *array, char *buf) {
946✔
2192
  int32_t code = TSDB_CODE_SUCCESS;
946✔
2193
  cJSON  *pRoot = cJSON_Parse(buf);
946✔
2194
  if (pRoot == NULL) {
946!
2195
    return TSDB_CODE_OUT_OF_MEMORY;
×
2196
  }
2197
  cJSON *stypes = cJSON_GetObjectItem(pRoot, "config_stypes");
946✔
2198
  if (stypes == NULL) {
946!
2199
    code = TSDB_CODE_OUT_OF_MEMORY;
×
2200
    goto _exit;
×
2201
  }
2202
  int32_t sz = taosArrayGetSize(array);
946✔
2203
  for (int i = 0; i < sz; i++) {
130,548✔
2204
    SConfigItem *pItem = (SConfigItem *)taosArrayGet(array, i);
129,602✔
2205
    cJSON       *pJson = cJSON_GetObjectItem(stypes, pItem->name);
129,602✔
2206
    if (pJson == NULL) {
129,602!
2207
      continue;
×
2208
    }
2209
    pItem->stype = pJson->valueint;
129,602✔
2210
  }
2211
  cJSON_Delete(pRoot);
946✔
2212
_exit:
946✔
2213
  return code;
946✔
2214
}
2215

2216
int32_t readStypeConfigFile(const char *path) {
4,765✔
2217
  int32_t   code = 0;
4,765✔
2218
  char      filename[CONFIG_FILE_LEN] = {0};
4,765✔
2219
  SArray   *array = NULL;
4,765✔
2220
  char     *buf = NULL;
4,765✔
2221
  TdFilePtr pFile = NULL;
4,765✔
2222

2223
  array = taosGetLocalCfg(tsCfg);
4,765✔
2224
  if (array == NULL) {
4,765!
2225
    code = TSDB_CODE_OUT_OF_MEMORY;
×
2226
    goto _exit;
×
2227
  }
2228

2229
  snprintf(filename, sizeof(filename), "%s%sdnode%sconfig%sstype.json", path, TD_DIRSEP, TD_DIRSEP, TD_DIRSEP);
4,765✔
2230
  uInfo("start to read stype config file:%s", filename);
4,765!
2231
  if (!taosCheckExistFile(filename)) {
4,765✔
2232
    uInfo("stype config file:%s does not exist", filename);
3,819!
2233
    goto _exit;
3,819✔
2234
  }
2235
  int64_t fileSize = 0;
946✔
2236
  if (taosStatFile(filename, &fileSize, NULL, NULL) < 0) {
946!
2237
    code = terrno;
×
2238
    goto _exit;
×
2239
  }
2240
  buf = (char *)taosMemoryMalloc(fileSize + 1);
946!
2241
  if (buf == NULL) {
946!
2242
    code = terrno;
×
2243
    goto _exit;
×
2244
  }
2245
  pFile = taosOpenFile(filename, TD_FILE_READ);
946✔
2246
  if (pFile == NULL) {
946!
2247
    code = terrno;
×
2248
    goto _exit;
×
2249
  }
2250
  if (taosReadFile(pFile, buf, fileSize) != fileSize) {
946!
2251
    code = terrno;
×
2252
    goto _exit;
×
2253
  }
2254
  buf[fileSize] = '\0';
946✔
2255

2256
  code = stypeConfigDeserialize(array, buf);
946✔
2257
  if (code != TSDB_CODE_SUCCESS) {
946!
2258
    uError("failed to deserialize stype config file:%s since %s", filename, tstrerror(code));
×
2259
    goto _exit;
×
2260
  }
2261

2262
_exit:
946✔
2263
  if (code != TSDB_CODE_SUCCESS) {
4,765!
2264
    uError("failed to read stype config file:%s since %s", filename, tstrerror(code));
×
2265
  }
2266
  taosMemoryFree(buf);
4,765!
2267
  (void)taosCloseFile(&pFile);
4,765✔
2268
  TAOS_RETURN(code);
4,765✔
2269
}
2270

2271
int32_t readCfgFile(const char *path, bool isGlobal) {
9,548✔
2272
  int32_t code = 0;
9,548✔
2273
  char    filename[CONFIG_FILE_LEN] = {0};
9,548✔
2274
  SArray *array = NULL;
9,548✔
2275
  if (isGlobal) {
9,548✔
2276
    array = taosGetGlobalCfg(tsCfg);
4,783✔
2277
    snprintf(filename, sizeof(filename), "%s%sdnode%sconfig%sglobal.json", path, TD_DIRSEP, TD_DIRSEP, TD_DIRSEP);
4,783✔
2278
  } else {
2279
    array = taosGetLocalCfg(tsCfg);
4,765✔
2280
    snprintf(filename, sizeof(filename), "%s%sdnode%sconfig%slocal.json", path, TD_DIRSEP, TD_DIRSEP, TD_DIRSEP);
4,765✔
2281
  }
2282
  uInfo("start to read config file:%s", filename);
9,548!
2283

2284
  if (!taosCheckExistFile(filename)) {
9,548✔
2285
    uInfo("config file:%s does not exist", filename);
7,644!
2286
    TAOS_RETURN(TSDB_CODE_SUCCESS);
7,644✔
2287
  }
2288
  int64_t fileSize = 0;
1,904✔
2289
  char   *buf = NULL;
1,904✔
2290
  if (taosStatFile(filename, &fileSize, NULL, NULL) < 0) {
1,904!
2291
    code = terrno;
×
2292
    uError("failed to stat file:%s , since %s", filename, tstrerror(code));
×
2293
    TAOS_RETURN(code);
×
2294
  }
2295
  if (fileSize == 0) {
1,904!
2296
    uInfo("config file:%s is empty", filename);
×
2297
    TAOS_RETURN(TSDB_CODE_SUCCESS);
×
2298
  }
2299
  TdFilePtr pFile = taosOpenFile(filename, TD_FILE_READ);
1,904✔
2300
  if (pFile == NULL) {
1,904!
2301
    code = terrno;
×
2302
    uError("failed to open file:%s , since %s", filename, tstrerror(code));
×
2303
    goto _exit;
×
2304
  }
2305
  buf = (char *)taosMemoryMalloc(fileSize + 1);
1,904!
2306
  if (buf == NULL) {
1,904!
2307
    code = terrno;
×
2308
    uError("failed to malloc memory for file:%s , since %s", filename, tstrerror(code));
×
2309
    goto _exit;
×
2310
  }
2311
  if (taosReadFile(pFile, buf, fileSize) != fileSize) {
1,904!
2312
    code = terrno;
×
2313
    uError("failed to read file:%s , config since %s", filename, tstrerror(code));
×
2314
    goto _exit;
×
2315
  }
2316
  buf[fileSize] = '\0';  // 添加字符串结束符
1,904✔
2317
  code = cfgDeserialize(array, buf, isGlobal);
1,904✔
2318
  if (code != TSDB_CODE_SUCCESS) {
1,904!
2319
    uError("failed to deserialize config from %s since %s", filename, tstrerror(code));
×
2320
    goto _exit;
×
2321
  }
2322

2323
_exit:
1,904✔
2324
  if (code != TSDB_CODE_SUCCESS) {
1,904!
2325
    uError("failed to read config from %s since %s", filename, tstrerror(code));
×
2326
  }
2327
  taosMemoryFree(buf);
1,904!
2328
  (void)taosCloseFile(&pFile);
1,904✔
2329
  TAOS_RETURN(code);
1,904✔
2330
}
2331

2332
int32_t tryLoadCfgFromDataDir(SConfig *pCfg) {
4,783✔
2333
  int32_t      code = 0;
4,783✔
2334
  SConfigItem *pItem = NULL;
4,783✔
2335
  TAOS_CHECK_GET_CFG_ITEM(tsCfg, pItem, "forceReadConfig");
4,783!
2336
  tsForceReadConfig = pItem->i32;
4,783✔
2337
  code = readCfgFile(tsDataDir, true);
4,783✔
2338
  if (code != TSDB_CODE_SUCCESS) {
4,783!
2339
    uError("failed to read global config from %s since %s", tsDataDir, tstrerror(code));
×
2340
    TAOS_RETURN(code);
×
2341
  }
2342
  if (!tsForceReadConfig) {
4,783✔
2343
    uInfo("load config from tsDataDir:%s", tsDataDir);
4,765!
2344
    code = readCfgFile(tsDataDir, false);
4,765✔
2345
    if (code != TSDB_CODE_SUCCESS) {
4,765!
2346
      uError("failed to read local config from %s since %s", tsDataDir, tstrerror(code));
×
2347
      TAOS_RETURN(code);
×
2348
    }
2349
    code = readStypeConfigFile(tsDataDir);
4,765✔
2350
    if (code != TSDB_CODE_SUCCESS) {
4,765!
2351
      uError("failed to read stype config from %s since %s", tsDataDir, tstrerror(code));
×
2352
      TAOS_RETURN(code);
×
2353
    }
2354
  }
2355
  TAOS_RETURN(code);
4,783✔
2356
}
2357

2358
int32_t taosInitCfg(const char *cfgDir, const char **envCmd, const char *envFile, char *apolloUrl, SArray *pArgs,
6,829✔
2359
                    bool tsc) {
2360
  if (tsCfg != NULL) TAOS_RETURN(TSDB_CODE_SUCCESS);
6,829✔
2361

2362
  int32_t code = TSDB_CODE_SUCCESS;
6,820✔
2363
  int32_t lino = -1;
6,820✔
2364

2365
  TAOS_CHECK_GOTO(cfgInitWrapper(&tsCfg), &lino, _exit);
6,820!
2366

2367
  if (tsc) {
6,820✔
2368
    TAOS_CHECK_GOTO(taosAddClientCfg(tsCfg), &lino, _exit);
2,037!
2369
    TAOS_CHECK_GOTO(taosAddClientLogCfg(tsCfg), &lino, _exit);
2,037!
2370
  } else {
2371
    TAOS_CHECK_GOTO(taosAddClientCfg(tsCfg), &lino, _exit);
4,783!
2372
    TAOS_CHECK_GOTO(taosAddServerCfg(tsCfg), &lino, _exit);
4,783!
2373
    TAOS_CHECK_GOTO(taosAddClientLogCfg(tsCfg), &lino, _exit);
4,783!
2374
    TAOS_CHECK_GOTO(taosAddServerLogCfg(tsCfg), &lino, _exit);
4,783!
2375
  }
2376

2377
  TAOS_CHECK_GOTO(taosAddSystemCfg(tsCfg), &lino, _exit);
6,820!
2378

2379
  if ((code = taosLoadCfg(tsCfg, envCmd, cfgDir, envFile, apolloUrl)) != 0) {
6,820!
2380
    (void)printf("failed to load cfg since %s\n", tstrerror(code));
×
2381
    cfgCleanup(tsCfg);
×
2382
    tsCfg = NULL;
×
2383
    TAOS_RETURN(code);
×
2384
  }
2385

2386
  if ((code = cfgLoadFromArray(tsCfg, pArgs)) != 0) {
6,820!
2387
    (void)printf("failed to load cfg from array since %s\n", tstrerror(code));
×
2388
    cfgCleanup(tsCfg);
×
2389
    tsCfg = NULL;
×
2390
    TAOS_RETURN(code);
×
2391
  }
2392

2393
  if (!tsc) {
6,820✔
2394
    TAOS_CHECK_GOTO(taosSetTfsCfg(tsCfg), &lino, _exit);
4,783!
2395
    TAOS_CHECK_GOTO(tryLoadCfgFromDataDir(tsCfg), &lino, _exit);
4,783!
2396
  }
2397

2398
  if (tsc) {
6,820✔
2399
    TAOS_CHECK_GOTO(taosSetClientLogCfg(tsCfg), &lino, _exit);
2,037!
2400
    TAOS_CHECK_GOTO(taosSetClientCfg(tsCfg), &lino, _exit);
2,037!
2401
  } else {
2402
    TAOS_CHECK_GOTO(taosSetClientLogCfg(tsCfg), &lino, _exit);
4,783!
2403
    TAOS_CHECK_GOTO(taosSetClientCfg(tsCfg), &lino, _exit);
4,783!
2404
    TAOS_CHECK_GOTO(taosUpdateServerCfg(tsCfg), &lino, _exit);
4,783!
2405
    TAOS_CHECK_GOTO(taosSetServerCfg(tsCfg), &lino, _exit);
4,783!
2406
    TAOS_CHECK_GOTO(taosSetReleaseCfg(tsCfg), &lino, _exit);
4,783!
2407
  }
2408

2409
  TAOS_CHECK_GOTO(taosSetSystemCfg(tsCfg), &lino, _exit);
6,820!
2410
  TAOS_CHECK_GOTO(taosSetFileHandlesLimit(), &lino, _exit);
6,820!
2411

2412
  SConfigItem *pItem = cfgGetItem(tsCfg, "debugFlag");
6,820✔
2413
  if (NULL == pItem) {
6,820!
2414
    (void)printf("debugFlag not found in cfg\n");
×
2415
    TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND);
×
2416
  }
2417
  TAOS_CHECK_GOTO(taosSetAllDebugFlag(tsCfg, pItem->i32), &lino, _exit);
6,820!
2418

2419
  cfgDumpCfg(tsCfg, tsc, false);
6,820✔
2420
  TAOS_CHECK_GOTO(taosCheckGlobalCfg(), &lino, _exit);
6,820!
2421

2422
_exit:
6,820✔
2423
  if (TSDB_CODE_SUCCESS != code) {
6,820!
2424
    cfgCleanup(tsCfg);
×
2425
    tsCfg = NULL;
×
2426
    (void)printf("failed to init cfg at %d since %s\n", lino, tstrerror(code));
×
2427
  }
2428

2429
  TAOS_RETURN(code);
6,820✔
2430
}
2431

2432
void taosCleanupCfg() {
6,843✔
2433
  if (tsCfg) {
6,843✔
2434
    cfgCleanup(tsCfg);
6,842✔
2435
    tsCfg = NULL;
6,842✔
2436
  }
2437
}
6,843✔
2438

2439
typedef struct {
2440
  const char *optionName;
2441
  void       *optionVar;
2442
} OptionNameAndVar;
2443

2444
static int32_t taosCfgSetOption(OptionNameAndVar *pOptions, int32_t optionSize, SConfigItem *pItem, bool isDebugflag) {
288✔
2445
  int32_t code = TSDB_CODE_CFG_NOT_FOUND;
288✔
2446
  char   *name = pItem->name;
288✔
2447
  for (int32_t d = 0; d < optionSize; ++d) {
10,621✔
2448
    const char *optName = pOptions[d].optionName;
10,498✔
2449
    if (taosStrcasecmp(name, optName) != 0) continue;
10,498✔
2450
    code = TSDB_CODE_SUCCESS;
165✔
2451
    switch (pItem->dtype) {
165!
2452
      case CFG_DTYPE_BOOL: {
19✔
2453
        int32_t flag = pItem->i32;
19✔
2454
        bool   *pVar = pOptions[d].optionVar;
19✔
2455
        uInfo("%s set from %d to %d", optName, *pVar, flag);
19!
2456
        *pVar = flag;
19✔
2457
      } break;
19✔
2458
      case CFG_DTYPE_INT32: {
134✔
2459
        int32_t  flag = pItem->i32;
134✔
2460
        int32_t *pVar = pOptions[d].optionVar;
134✔
2461
        uInfo("%s set from %d to %d", optName, *pVar, flag);
134!
2462
        *pVar = flag;
134✔
2463

2464
        if (isDebugflag) {
134✔
2465
          TAOS_CHECK_RETURN(taosSetDebugFlag(pOptions[d].optionVar, optName, flag));
42!
2466
        }
2467
      } break;
134✔
2468
      case CFG_DTYPE_INT64: {
12✔
2469
        int64_t  flag = pItem->i64;
12✔
2470
        int64_t *pVar = pOptions[d].optionVar;
12✔
2471
        uInfo("%s set from %" PRId64 " to %" PRId64, optName, *pVar, flag);
12!
2472
        *pVar = flag;
12✔
2473
      } break;
12✔
2474
      case CFG_DTYPE_FLOAT:
×
2475
      case CFG_DTYPE_DOUBLE: {
2476
        float  flag = pItem->fval;
×
2477
        float *pVar = pOptions[d].optionVar;
×
2478
        uInfo("%s set from %f to %f", optName, *pVar, flag);
×
2479
        *pVar = flag;
×
2480
      } break;
×
2481
      case CFG_DTYPE_STRING:
×
2482
      case CFG_DTYPE_DIR:
2483
      case CFG_DTYPE_LOCALE:
2484
      case CFG_DTYPE_CHARSET:
2485
      case CFG_DTYPE_TIMEZONE: {
2486
        if (strcasecmp(pItem->name, "slowLogExceptDb") == 0) {
×
2487
          TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_DB_NAME_LEN));
×
2488
          tstrncpy(tsSlowLogExceptDb, pItem->str, TSDB_DB_NAME_LEN);
×
2489
        } else {
2490
          uError("not support string type for %s", optName);
×
2491
          code = TSDB_CODE_INVALID_CFG;
×
2492
          break;
×
2493
        }
2494
        uInfo("%s set to %s", optName, pItem->str);
×
2495
      } break;
×
2496
      default:
×
2497
        code = TSDB_CODE_INVALID_CFG;
×
2498
        break;
×
2499
    }
2500

2501
    break;
165✔
2502
  }
2503

2504
  TAOS_RETURN(code);
288✔
2505
}
2506

2507
extern void tsdbAlterNumCompactThreads();
2508

2509
static int32_t taosCfgDynamicOptionsForServer(SConfig *pCfg, const char *name) {
176✔
2510
  int32_t code = TSDB_CODE_SUCCESS;
176✔
2511
  int32_t lino = -1;
176✔
2512

2513
  if (strcasecmp("timezone", name) == 0) {
176✔
2514
    TAOS_RETURN(TSDB_CODE_SUCCESS);
3✔
2515
  }
2516

2517
  if (strcasecmp(name, "resetlog") == 0) {
173✔
2518
    // trigger, no item in cfg
2519
    taosResetLog();
2✔
2520
    cfgDumpCfg(tsCfg, 0, false);
2✔
2521
    TAOS_RETURN(TSDB_CODE_SUCCESS);
2✔
2522
  }
2523

2524
  cfgLock(pCfg);
171✔
2525

2526
  SConfigItem *pItem = cfgGetItem(pCfg, name);
171✔
2527
  if (!pItem || (pItem->dynScope == CFG_DYN_CLIENT)) {
171!
2528
    uError("failed to config:%s, not support", name);
×
2529
    code = TSDB_CODE_INVALID_CFG;
×
2530
    goto _exit;
×
2531
  }
2532

2533
  if (strncasecmp(name, "debugFlag", 9) == 0) {
171✔
2534
    code = taosSetAllDebugFlag(pCfg, pItem->i32);
9✔
2535
    goto _exit;
9✔
2536
  }
2537

2538
  if (strncasecmp(name, "enableCoreFile", 9) == 0) {
162!
2539
    tsEnableCoreFile = pItem->bval;
×
2540
    taosSetCoreDump(tsEnableCoreFile);
×
2541
    uInfo("%s set to %d", name, tsEnableCoreFile);
×
2542
    goto _exit;
×
2543
  }
2544

2545
  if (strcasecmp("slowLogScope", name) == 0) {
162!
2546
    int32_t scope = 0;
×
2547
    TAOS_CHECK_GOTO(taosSetSlowLogScope(pItem->str, &scope), &lino, _exit);
×
2548
    tsSlowLogScope = scope;
×
2549
    code = TSDB_CODE_SUCCESS;
×
2550
    goto _exit;
×
2551
  }
2552

2553
  if (strcasecmp("slowLogExceptDb", name) == 0) {
162!
2554
    tstrncpy(tsSlowLogExceptDb, pItem->str, TSDB_DB_NAME_LEN);
×
2555
    code = TSDB_CODE_SUCCESS;
×
2556
    goto _exit;
×
2557
  }
2558
  if (strcasecmp(name, "dataDir") == 0) {
162!
2559
    code = TSDB_CODE_SUCCESS;
×
2560
    goto _exit;
×
2561
  }
2562
  if (strcasecmp("rpcQueueMemoryAllowed", name) == 0) {
162✔
2563
    tsQueueMemoryAllowed = cfgGetItem(pCfg, "rpcQueueMemoryAllowed")->i64 * QUEUE_MEMORY_USAGE_RATIO;
1✔
2564
    tsApplyMemoryAllowed = cfgGetItem(pCfg, "rpcQueueMemoryAllowed")->i64 * (1 - QUEUE_MEMORY_USAGE_RATIO);
1✔
2565
    code = TSDB_CODE_SUCCESS;
1✔
2566
    goto _exit;
1✔
2567
  }
2568

2569
  if (strcasecmp(name, "numOfCompactThreads") == 0) {
161!
2570
#ifdef TD_ENTERPRISE
2571
    tsNumOfCompactThreads = pItem->i32;
×
2572
    code = TSDB_CODE_SUCCESS;
×
2573
    // tsdbAlterNumCompactThreads();
2574
#else
2575
    code = TSDB_CODE_INVALID_CFG;
2576
#endif
2577
    goto _exit;
×
2578
  }
2579

2580
  if (strcasecmp(name, "minReservedMemorySize") == 0) {
161✔
2581
    tsMinReservedMemorySize = pItem->i32;
3✔
2582
    code = taosMemoryPoolCfgUpdateReservedSize(tsMinReservedMemorySize);
3✔
2583
    goto _exit;
3✔
2584
  }
2585

2586
  if (strcasecmp(name, "streamBufferSize") == 0) {
158✔
2587
    tsStreamBufferSize = pItem->i32;
1✔
2588
    atomic_store_64(&tsStreamBufferSizeBytes, tsStreamBufferSize * 1048576);
1✔
2589
    goto _exit;
1✔
2590
  }
2591

2592
  {  //  'bool/int32_t/int64_t/float/double' variables with general modification function
2593
    static OptionNameAndVar debugOptions[] = {
2594
        {"dDebugFlag", &dDebugFlag},       {"vDebugFlag", &vDebugFlag},     {"mDebugFlag", &mDebugFlag},
2595
        {"wDebugFlag", &wDebugFlag},       {"azDebugFlag", &azDebugFlag},   {"sDebugFlag", &sDebugFlag},
2596
        {"tsdbDebugFlag", &tsdbDebugFlag}, {"tqDebugFlag", &tqDebugFlag},   {"fsDebugFlag", &fsDebugFlag},
2597
        {"udfDebugFlag", &udfDebugFlag},   {"smaDebugFlag", &smaDebugFlag}, {"idxDebugFlag", &idxDebugFlag},
2598
        {"tdbDebugFlag", &tdbDebugFlag},   {"tmrDebugFlag", &tmrDebugFlag}, {"uDebugFlag", &uDebugFlag},
2599
        {"smaDebugFlag", &smaDebugFlag},   {"rpcDebugFlag", &rpcDebugFlag}, {"qDebugFlag", &qDebugFlag},
2600
        {"metaDebugFlag", &metaDebugFlag}, {"stDebugFlag", &stDebugFlag},   {"bseDebugFlag", &bseDebugFlag},
2601
        {"sndDebugFlag", &sndDebugFlag},   {"bndDebugFlag", &bndDebugFlag}, {"tqClientDebugFlag", &tqClientDebugFlag},
2602
        {"tssDebugFlag", &tssDebugFlag},
2603
    };
2604

2605
    static OptionNameAndVar options[] = {{"audit", &tsEnableAudit},
2606
                                         {"asynclog", &tsAsyncLog},
2607
                                         {"enableWhiteList", &tsEnableWhiteList},
2608
                                         {"statusInterval", &tsStatusInterval},
2609
                                         {"statusIntervalMs", &tsStatusIntervalMs},
2610
                                         {"statusSRTimeoutMs", &tsStatusSRTimeoutMs},
2611
                                         {"statusTimeoutMs", &tsStatusTimeoutMs},
2612
                                         {"telemetryReporting", &tsEnableTelem},
2613
                                         {"monitor", &tsEnableMonitor},
2614
                                         {"monitorInterval", &tsMonitorInterval},
2615
                                         {"monitorComp", &tsMonitorComp},
2616
                                         {"monitorForceV2", &tsMonitorForceV2},
2617
                                         {"monitorLogProtocol", &tsMonitorLogProtocol},
2618
                                         {"monitorMaxLogs", &tsMonitorMaxLogs},
2619
                                         {"auditCreateTable", &tsEnableAuditCreateTable},
2620
                                         {"auditInterval", &tsAuditInterval},
2621
                                         {"slowLogThreshold", &tsSlowLogThreshold},
2622
                                         {"compressMsgSize", &tsCompressMsgSize},
2623
                                         {"compressor", &tsCompressor},
2624
                                         {"dPrecision", &tsDPrecision},
2625
                                         {"fPrecision", &tsFPrecision},
2626
                                         {"maxRange", &tsMaxRange},
2627
                                         {"maxTsmaNum", &tsMaxTsmaNum},
2628
                                         {"queryRsmaTolerance", &tsQueryRsmaTolerance},
2629
                                         {"uptimeInterval", &tsUptimeInterval},
2630

2631
                                         {"slowLogMaxLen", &tsSlowLogMaxLen},
2632
                                         {"slowLogScope", &tsSlowLogScope},
2633
                                         {"slowLogExceptDb", &tsSlowLogExceptDb},
2634

2635
                                         {"mndSdbWriteDelta", &tsMndSdbWriteDelta},
2636
                                         {"minDiskFreeSize", &tsMinDiskFreeSize},
2637
                                         {"randErrorChance", &tsRandErrChance},
2638
                                         {"randErrorDivisor", &tsRandErrDivisor},
2639
                                         {"randErrorScope", &tsRandErrScope},
2640
                                         {"syncLogBufferMemoryAllowed", &tsLogBufferMemoryAllowed},
2641
                                         {"syncApplyQueueSize", &tsSyncApplyQueueSize},
2642
                                         {"syncHeartbeatInterval", &tsHeartbeatInterval},
2643
                                         {"syncElectInterval", &tsElectInterval},
2644
                                         {"syncVnodeHeartbeatIntervalMs", &tsVnodeHeartbeatIntervalMs},
2645
                                         {"syncVnodeElectIntervalMs", &tsVnodeElectIntervalMs},
2646
                                         {"syncMnodeHeartbeatIntervalMs", &tsMnodeHeartbeatIntervalMs},
2647
                                         {"syncMnodeElectIntervalMs", &tsMnodeElectIntervalMs},
2648
                                         {"syncHeartbeatTimeout", &tsHeartbeatTimeout},
2649
                                         {"syncSnapReplMaxWaitN", &tsSnapReplMaxWaitN},
2650
                                         {"syncRoutineReportInterval", &tsRoutineReportInterval},
2651
                                         {"syncLogHeartbeat", &tsSyncLogHeartbeat},
2652
                                         {"syncTimeout", &tsSyncTimeout},
2653
                                         {"walFsyncDataSizeLimit", &tsWalFsyncDataSizeLimit},
2654

2655
                                         {"numOfCores", &tsNumOfCores},
2656

2657
                                         {"enableCoreFile", &tsEnableCoreFile},
2658

2659
                                         {"telemetryInterval", &tsTelemInterval},
2660

2661
                                         {"cacheLazyLoadThreshold", &tsCacheLazyLoadThreshold},
2662

2663
                                         {"retentionSpeedLimitMB", &tsRetentionSpeedLimitMB},
2664
                                         {"ttlChangeOnWrite", &tsTtlChangeOnWrite},
2665

2666
                                         {"logKeepDays", &tsLogKeepDays},
2667
                                         {"mqRebalanceInterval", &tsMqRebalanceInterval},
2668
                                         {"numOfLogLines", &tsNumOfLogLines},
2669
                                         {"queryRspPolicy", &tsQueryRspPolicy},
2670
                                         {"timeseriesThreshold", &tsTimeSeriesThreshold},
2671
                                         {"tmqMaxTopicNum", &tmqMaxTopicNum},
2672
                                         {"tmqRowSize", &tmqRowSize},
2673
                                         {"transPullupInterval", &tsTransPullupInterval},
2674
                                         {"compactPullupInterval", &tsCompactPullupInterval},
2675
                                         {"trimVDbIntervalSec", &tsTrimVDbIntervalSec},
2676
                                         {"ttlBatchDropNum", &tsTtlBatchDropNum},
2677
                                         {"ttlFlushThreshold", &tsTtlFlushThreshold},
2678
                                         {"ttlPushInterval", &tsTtlPushIntervalSec},
2679
                                         {"ttlUnit", &tsTtlUnit},
2680
                                         {"ssAutoMigrateIntervalSec", &tsSsAutoMigrateIntervalSec},
2681
                                         {"ssBlockCacheSize", &tsSsBlockCacheSize},
2682
                                         {"ssPageCacheSize", &tsSsPageCacheSize},
2683
                                         {"ssUploadDelaySec", &tsSsUploadDelaySec},
2684
                                         {"mndLogRetention", &tsMndLogRetention},
2685
                                         {"supportVnodes", &tsNumOfSupportVnodes},
2686
                                         {"experimental", &tsExperimental},
2687

2688
                                         {"numOfRpcSessions", &tsNumOfRpcSessions},
2689
                                         {"shellActivityTimer", &tsShellActivityTimer},
2690
                                         {"readTimeout", &tsReadTimeout},
2691
                                         {"safetyCheckLevel", &tsSafetyCheckLevel},
2692
                                         {"bypassFlag", &tsBypassFlag},
2693
                                         {"arbHeartBeatIntervalSec", &tsArbHeartBeatIntervalSec},
2694
                                         {"arbCheckSyncIntervalSec", &tsArbCheckSyncIntervalSec},
2695
                                         {"arbSetAssignedTimeoutSec", &tsArbSetAssignedTimeoutSec},
2696
                                         {"arbHeartBeatIntervalMs", &tsArbHeartBeatIntervalMs},
2697
                                         {"arbCheckSyncIntervalMs", &tsArbCheckSyncIntervalMs},
2698
                                         {"arbSetAssignedTimeoutMs", &tsArbSetAssignedTimeoutMs},
2699
                                         {"queryNoFetchTimeoutSec", &tsQueryNoFetchTimeoutSec},
2700
                                         {"enableStrongPassword", &tsEnableStrongPassword},
2701
                                         {"enableMetrics", &tsEnableMetrics},
2702
                                         {"metricsInterval", &tsMetricsInterval},
2703
                                         {"metricsLevel", &tsMetricsLevel},
2704
                                         {"forceKillTrans", &tsForceKillTrans}};
2705

2706
    if ((code = taosCfgSetOption(debugOptions, tListLen(debugOptions), pItem, true)) != TSDB_CODE_SUCCESS) {
157✔
2707
      code = taosCfgSetOption(options, tListLen(options), pItem, false);
115✔
2708
    }
2709
  }
2710

2711
_exit:
42✔
2712
  cfgUnLock(pCfg);
171✔
2713
  TAOS_RETURN(code);
171✔
2714
}
2715

2716
static int32_t taosCfgDynamicOptionsForClient(SConfig *pCfg, const char *name) {
12✔
2717
  int32_t code = TSDB_CODE_SUCCESS;
12✔
2718
  int32_t lino = 0;
12✔
2719

2720
  if (strcasecmp("charset", name) == 0 || strcasecmp("timezone", name) == 0) {
12!
2721
    TAOS_RETURN(TSDB_CODE_SUCCESS);
4✔
2722
  }
2723

2724
  cfgLock(pCfg);
8✔
2725

2726
  SConfigItem *pItem = cfgGetItem(pCfg, name);
8✔
2727
  if ((pItem == NULL) || pItem->dynScope == CFG_DYN_SERVER) {
8!
2728
    uError("failed to config:%s, not support", name);
×
2729
    code = TSDB_CODE_INVALID_CFG;
×
2730
    goto _out;
×
2731
  }
2732

2733
  bool matched = false;
8✔
2734

2735
  int32_t len = strlen(name);
8✔
2736
  char    lowcaseName[CFG_NAME_MAX_LEN + 1] = {0};
8✔
2737
  (void)strntolower(lowcaseName, name, TMIN(CFG_NAME_MAX_LEN, len));
8✔
2738

2739
  switch (lowcaseName[0]) {
8!
2740
    case 'd': {
×
2741
      if (strcasecmp("debugFlag", name) == 0) {
×
2742
        code = taosSetAllDebugFlag(pCfg, pItem->i32);
×
2743
        matched = true;
×
2744
      }
2745
      break;
×
2746
    }
2747
    case 'e': {
×
2748
      if (strcasecmp("enableCoreFile", name) == 0) {
×
2749
        tsEnableCoreFile = pItem->bval;
×
2750
        taosSetCoreDump(tsEnableCoreFile);
×
2751
        uInfo("%s set to %d", name, tsEnableCoreFile);
×
2752
        matched = true;
×
2753
      }
2754
      break;
×
2755
    }
2756
    case 'f': {
×
2757
      if (strcasecmp("fqdn", name) == 0) {
×
2758
        SConfigItem *pFqdnItem = cfgGetItem(pCfg, "fqdn");
×
2759
        SConfigItem *pServerPortItem = cfgGetItem(pCfg, "serverPort");
×
2760
        SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp");
×
2761
        if (pFqdnItem == NULL || pServerPortItem == NULL || pFirstEpItem == NULL) {
×
2762
          uError("failed to get fqdn or serverPort or firstEp from cfg");
×
2763
          code = TSDB_CODE_CFG_NOT_FOUND;
×
2764
          goto _out;
×
2765
        }
2766

2767
        tstrncpy(tsLocalFqdn, pFqdnItem->str, TSDB_FQDN_LEN);
×
2768
        tsServerPort = (uint16_t)pServerPortItem->i32;
×
2769
        (void)snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
×
2770

2771
        char defaultFirstEp[TSDB_EP_LEN] = {0};
×
2772
        (void)snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort);
×
2773

2774
        SEp firstEp = {0};
×
2775
        TAOS_CHECK_GOTO(
×
2776
            taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp), &lino,
2777
            _out);
2778
        (void)snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port);
×
2779

2780
        TAOS_CHECK_GOTO(cfgSetItem(pCfg, "firstEp", tsFirst, pFirstEpItem->stype, false), &lino, _out);
×
2781
        uInfo("localEp set to '%s', tsFirst set to '%s'", tsLocalEp, tsFirst);
×
2782
        matched = true;
×
2783
      } else if (strcasecmp("firstEp", name) == 0) {
×
2784
        SConfigItem *pFqdnItem = cfgGetItem(pCfg, "fqdn");
×
2785
        SConfigItem *pServerPortItem = cfgGetItem(pCfg, "serverPort");
×
2786
        SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp");
×
2787
        if (pFqdnItem == NULL || pServerPortItem == NULL || pFirstEpItem == NULL) {
×
2788
          uError("failed to get fqdn or serverPort or firstEp from cfg");
×
2789
          code = TSDB_CODE_CFG_NOT_FOUND;
×
2790
          goto _out;
×
2791
        }
2792

2793
        tstrncpy(tsLocalFqdn, pFqdnItem->str, TSDB_FQDN_LEN);
×
2794
        tsServerPort = (uint16_t)pServerPortItem->i32;
×
2795
        (void)snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
×
2796

2797
        char defaultFirstEp[TSDB_EP_LEN] = {0};
×
2798
        (void)snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort);
×
2799

2800
        SEp firstEp = {0};
×
2801
        TAOS_CHECK_GOTO(
×
2802
            taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp), &lino,
2803
            _out);
2804
        (void)snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port);
×
2805

2806
        TAOS_CHECK_GOTO(cfgSetItem(pCfg, "firstEp", tsFirst, pFirstEpItem->stype, false), &lino, _out);
×
2807
        uInfo("localEp set to '%s', tsFirst set to '%s'", tsLocalEp, tsFirst);
×
2808
        matched = true;
×
2809
      }
2810
      break;
×
2811
    }
2812
    case 'l': {
×
2813
      if (strcasecmp("locale", name) == 0) {
×
2814
        SConfigItem *pLocaleItem = cfgGetItem(pCfg, "locale");
×
2815
        if (pLocaleItem == NULL) {
×
2816
          uError("failed to get locale from cfg");
×
2817
          code = TSDB_CODE_CFG_NOT_FOUND;
×
2818
          goto _out;
×
2819
        }
2820

2821
        const char *locale = pLocaleItem->str;
×
2822
        TAOS_CHECK_GOTO(taosSetSystemLocale(locale), &lino, _out);
×
2823
        uInfo("locale set to '%s'", locale);
×
2824
        matched = true;
×
2825
      }
2826
      break;
×
2827
    }
2828
    case 'm': {
×
2829
      if (strcasecmp("metaCacheMaxSize", name) == 0) {
×
2830
        atomic_store_32(&tsMetaCacheMaxSize, pItem->i32);
×
2831
        uInfo("%s set to %d", name, atomic_load_32(&tsMetaCacheMaxSize));
×
2832
        matched = true;
×
2833
      } else if (strcasecmp("minimalTmpDirGB", name) == 0) {
×
2834
        tsTempSpace.reserved = (int64_t)(((double)pItem->fval) * 1024 * 1024 * 1024);
×
2835
        uInfo("%s set to %" PRId64, name, tsTempSpace.reserved);
×
2836
        matched = true;
×
2837
      } else if (strcasecmp("minimalLogDirGB", name) == 0) {
×
2838
        tsLogSpace.reserved = (int64_t)(((double)pItem->fval) * 1024 * 1024 * 1024);
×
2839
        uInfo("%s set to %" PRId64, name, tsLogSpace.reserved);
×
2840
        matched = true;
×
2841
      }
2842
      break;
×
2843
    }
2844
    case 's': {
×
2845
      if (strcasecmp("secondEp", name) == 0) {
×
2846
        SEp secondEp = {0};
×
2847
        TAOS_CHECK_GOTO(taosGetFqdnPortFromEp(strlen(pItem->str) == 0 ? tsFirst : pItem->str, &secondEp), &lino, _out);
×
2848
        (void)snprintf(tsSecond, sizeof(tsSecond), "%s:%u", secondEp.fqdn, secondEp.port);
×
2849
        TAOS_CHECK_GOTO(cfgSetItem(pCfg, "secondEp", tsSecond, pItem->stype, false), &lino, _out);
×
2850
        uInfo("%s set to %s", name, tsSecond);
×
2851
        matched = true;
×
2852
      } else if (strcasecmp("smlChildTableName", name) == 0) {
×
2853
        TAOS_CHECK_GOTO(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_TABLE_NAME_LEN), &lino, _out);
×
2854
        uInfo("%s set from %s to %s", name, tsSmlChildTableName, pItem->str);
×
2855
        tstrncpy(tsSmlChildTableName, pItem->str, TSDB_TABLE_NAME_LEN);
×
2856
        matched = true;
×
2857
      } else if (strcasecmp("smlAutoChildTableNameDelimiter", name) == 0) {
×
2858
        TAOS_CHECK_GOTO(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_TABLE_NAME_LEN), &lino, _out);
×
2859
        uInfo("%s set from %s to %s", name, tsSmlAutoChildTableNameDelimiter, pItem->str);
×
2860
        tstrncpy(tsSmlAutoChildTableNameDelimiter, pItem->str, TSDB_TABLE_NAME_LEN);
×
2861
        matched = true;
×
2862
      } else if (strcasecmp("smlTagName", name) == 0) {
×
2863
        TAOS_CHECK_GOTO(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_COL_NAME_LEN), &lino, _out);
×
2864
        uInfo("%s set from %s to %s", name, tsSmlTagName, pItem->str);
×
2865
        tstrncpy(tsSmlTagName, pItem->str, TSDB_COL_NAME_LEN);
×
2866
        matched = true;
×
2867
      } else if (strcasecmp("smlTsDefaultName", name) == 0) {
×
2868
        TAOS_CHECK_GOTO(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_COL_NAME_LEN), &lino, _out);
×
2869
        uInfo("%s set from %s to %s", name, tsSmlTsDefaultName, pItem->str);
×
2870
        tstrncpy(tsSmlTsDefaultName, pItem->str, TSDB_COL_NAME_LEN);
×
2871
        matched = true;
×
2872
      } else if (strcasecmp("serverPort", name) == 0) {
×
2873
        SConfigItem *pFqdnItem = cfgGetItem(pCfg, "fqdn");
×
2874
        SConfigItem *pServerPortItem = cfgGetItem(pCfg, "serverPort");
×
2875
        SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp");
×
2876
        if (pFqdnItem == NULL || pServerPortItem == NULL || pFirstEpItem == NULL) {
×
2877
          uError("failed to get fqdn or serverPort or firstEp from cfg");
×
2878
          code = TSDB_CODE_CFG_NOT_FOUND;
×
2879
          goto _out;
×
2880
        }
2881

2882
        TAOS_CHECK_GOTO(taosCheckCfgStrValueLen(pFqdnItem->name, pFqdnItem->str, TSDB_FQDN_LEN), &lino, _out);
×
2883
        tstrncpy(tsLocalFqdn, pFqdnItem->str, TSDB_FQDN_LEN);
×
2884
        tsServerPort = (uint16_t)pServerPortItem->i32;
×
2885
        (void)snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
×
2886

2887
        char defaultFirstEp[TSDB_EP_LEN] = {0};
×
2888
        (void)snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort);
×
2889

2890
        SEp firstEp = {0};
×
2891
        TAOS_CHECK_GOTO(
×
2892
            taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp), &lino,
2893
            _out);
2894
        (void)snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port);
×
2895

2896
        TAOS_CHECK_GOTO(cfgSetItem(pCfg, "firstEp", tsFirst, pFirstEpItem->stype, false), &lino, _out);
×
2897
        uInfo("localEp set to '%s', tsFirst set to '%s'", tsLocalEp, tsFirst);
×
2898
        matched = true;
×
2899
      }
2900
      break;
×
2901
    }
2902
    case 't': {
×
2903
      if (strcasecmp("tempDir", name) == 0) {
×
2904
        TAOS_CHECK_GOTO(taosCheckCfgStrValueLen(pItem->name, pItem->str, PATH_MAX), &lino, _out);
×
2905
        uInfo("%s set from %s to %s", name, tsTempDir, pItem->str);
×
2906
        tstrncpy(tsTempDir, pItem->str, PATH_MAX);
×
2907
        TAOS_CHECK_GOTO(taosExpandDir(tsTempDir, tsTempDir, PATH_MAX), &lino, _out);
×
2908
        if (taosMulMkDir(tsTempDir) != 0) {
×
2909
          code = TAOS_SYSTEM_ERROR(ERRNO);
×
2910
          uError("failed to create tempDir:%s since %s", tsTempDir, tstrerror(code));
×
2911
          goto _out;
×
2912
        }
2913
        matched = true;
×
2914
      }
2915
      break;
×
2916
    }
2917
    default:
8✔
2918
      code = TSDB_CODE_CFG_NOT_FOUND;
8✔
2919
      break;
8✔
2920
  }
2921

2922
  if (matched) goto _out;
8!
2923

2924
  {  //  'bool/int32_t/int64_t/float/double' variables with general modification function
2925
    static OptionNameAndVar debugOptions[] = {
2926
        {"cDebugFlag", &cDebugFlag},     {"dDebugFlag", &dDebugFlag},     {"fsDebugFlag", &fsDebugFlag},
2927
        {"idxDebugFlag", &idxDebugFlag}, {"jniDebugFlag", &jniDebugFlag}, {"qDebugFlag", &qDebugFlag},
2928
        {"rpcDebugFlag", &rpcDebugFlag}, {"smaDebugFlag", &smaDebugFlag}, {"tmrDebugFlag", &tmrDebugFlag},
2929
        {"uDebugFlag", &uDebugFlag},     {"simDebugFlag", &simDebugFlag},
2930
    };
2931

2932
    static OptionNameAndVar options[] = {{"asyncLog", &tsAsyncLog},
2933
                                         {"compressMsgSize", &tsCompressMsgSize},
2934
                                         {"countAlwaysReturnValue", &tsCountAlwaysReturnValue},
2935
                                         {"crashReporting", &tsEnableCrashReport},
2936
                                         {"enableQueryHb", &tsEnableQueryHb},
2937
                                         {"keepColumnName", &tsKeepColumnName},
2938
                                         {"logKeepDays", &tsLogKeepDays},
2939
                                         {"maxInsertBatchRows", &tsMaxInsertBatchRows},
2940
                                         {"minSlidingTime", &tsMinSlidingTime},
2941
                                         {"minIntervalTime", &tsMinIntervalTime},
2942
                                         {"numOfLogLines", &tsNumOfLogLines},
2943
                                         {"querySmaOptimize", &tsQuerySmaOptimize},
2944
                                         {"queryPolicy", &tsQueryPolicy},
2945
                                         {"queryTableNotExistAsEmpty", &tsQueryTbNotExistAsEmpty},
2946
                                         {"queryPlannerTrace", &tsQueryPlannerTrace},
2947
                                         {"queryNodeChunkSize", &tsQueryNodeChunkSize},
2948
                                         {"queryUseNodeAllocator", &tsQueryUseNodeAllocator},
2949
                                         {"smlDot2Underline", &tsSmlDot2Underline},
2950
                                         {"useAdapter", &tsUseAdapter},
2951
                                         {"multiResultFunctionStarReturnTags", &tsMultiResultFunctionStarReturnTags},
2952
                                         {"maxTsmaCalcDelay", &tsMaxTsmaCalcDelay},
2953
                                         {"tsmaDataDeleteMark", &tsmaDataDeleteMark},
2954
                                         {"numOfRpcSessions", &tsNumOfRpcSessions},
2955
                                         {"bypassFlag", &tsBypassFlag},
2956
                                         {"safetyCheckLevel", &tsSafetyCheckLevel},
2957
                                         {"compareAsStrInGreatest", &tsCompareAsStrInGreatest},
2958
                                         {"showFullCreateTableColumn", &tsShowFullCreateTableColumn}};
2959

2960
    if ((code = taosCfgSetOption(debugOptions, tListLen(debugOptions), pItem, true)) != TSDB_CODE_SUCCESS) {
8!
2961
      code = taosCfgSetOption(options, tListLen(options), pItem, false);
8✔
2962
    }
2963
  }
2964

2965
_out:
×
2966
  if (TSDB_CODE_SUCCESS != code) {
8!
2967
    uError("failed to set option:%s, lino:%d, since:%s", name, lino, tstrerror(code));
×
2968
  }
2969

2970
  cfgUnLock(pCfg);
8✔
2971
  TAOS_RETURN(code);
8✔
2972
}
2973

2974
int32_t taosCfgDynamicOptions(SConfig *pCfg, const char *name, bool forServer) {
188✔
2975
  if (forServer) {
188✔
2976
    return taosCfgDynamicOptionsForServer(pCfg, name);
176✔
2977
  } else {
2978
    return taosCfgDynamicOptionsForClient(pCfg, name);
12✔
2979
  }
2980
}
2981

2982
int32_t taosSetDebugFlag(int32_t *pFlagPtr, const char *flagName, int32_t flagVal) {
4,949✔
2983
  SConfigItem *pItem = NULL;
4,949✔
2984
  TAOS_CHECK_GET_CFG_ITEM(tsCfg, pItem, flagName);
4,949✔
2985
  pItem->i32 = flagVal;
2,589✔
2986
  if (pFlagPtr != NULL) {
2,589!
2987
    *pFlagPtr = flagVal;
2,589✔
2988
  }
2989
  TAOS_RETURN(TSDB_CODE_SUCCESS);
2,589✔
2990
}
2991

2992
static int taosLogVarComp(void const *lp, void const *rp) {
28,384✔
2993
  SLogVar *lpVar = (SLogVar *)lp;
28,384✔
2994
  SLogVar *rpVar = (SLogVar *)rp;
28,384✔
2995
  return taosStrcasecmp(lpVar->name, rpVar->name);
28,384✔
2996
}
2997

2998
static void taosCheckAndSetDebugFlag(int32_t *pFlagPtr, char *name, int32_t flag, SArray *noNeedToSetVars) {
8,875✔
2999
  if (noNeedToSetVars != NULL && taosArraySearch(noNeedToSetVars, name, taosLogVarComp, TD_EQ) != NULL) {
8,875✔
3000
    return;
3,968✔
3001
  }
3002
  int32_t code = 0;
4,907✔
3003
  if ((code = taosSetDebugFlag(pFlagPtr, name, flag)) != 0) {
4,907✔
3004
    if (code != TSDB_CODE_CFG_NOT_FOUND) {
2,360!
3005
      uError("failed to set flag %s to %d, since:%s", name, flag, tstrerror(code));
×
3006
    } else {
3007
      uTrace("failed to set flag %s to %d, since:%s", name, flag, tstrerror(code));
2,360✔
3008
    }
3009
  }
3010
  return;
4,907✔
3011
}
3012

3013
int32_t taosSetGlobalDebugFlag(int32_t flag) { return taosSetAllDebugFlag(tsCfg, flag); }
×
3014

3015
// NOTE: set all command does not change the tmrDebugFlag
3016
static int32_t taosSetAllDebugFlag(SConfig *pCfg, int32_t flag) {
13,648✔
3017
  if (flag < 0) TAOS_RETURN(TSDB_CODE_INVALID_PARA);
13,648!
3018
  if (flag == 0) TAOS_RETURN(TSDB_CODE_SUCCESS);  // just ignore
13,648✔
3019

3020
  SArray      *noNeedToSetVars = NULL;
355✔
3021
  SConfigItem *pItem = NULL;
355✔
3022
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "debugFlag");
355!
3023

3024
  pItem->i32 = flag;
355✔
3025
  noNeedToSetVars = pItem->array;
355✔
3026

3027
  taosCheckAndSetDebugFlag(&simDebugFlag, "simDebugFlag", flag, noNeedToSetVars);
355✔
3028
  taosCheckAndSetDebugFlag(&uDebugFlag, "uDebugFlag", flag, noNeedToSetVars);
355✔
3029
  taosCheckAndSetDebugFlag(&rpcDebugFlag, "rpcDebugFlag", flag, noNeedToSetVars);
355✔
3030
  taosCheckAndSetDebugFlag(&qDebugFlag, "qDebugFlag", flag, noNeedToSetVars);
355✔
3031

3032
  taosCheckAndSetDebugFlag(&jniDebugFlag, "jniDebugFlag", flag, noNeedToSetVars);
355✔
3033
  taosCheckAndSetDebugFlag(&cDebugFlag, "cDebugFlag", flag, noNeedToSetVars);
355✔
3034

3035
  taosCheckAndSetDebugFlag(&dDebugFlag, "dDebugFlag", flag, noNeedToSetVars);
355✔
3036
  taosCheckAndSetDebugFlag(&vDebugFlag, "vDebugFlag", flag, noNeedToSetVars);
355✔
3037
  taosCheckAndSetDebugFlag(&mDebugFlag, "mDebugFlag", flag, noNeedToSetVars);
355✔
3038
  taosCheckAndSetDebugFlag(&wDebugFlag, "wDebugFlag", flag, noNeedToSetVars);
355✔
3039
  taosCheckAndSetDebugFlag(&azDebugFlag, "azDebugFlag", flag, noNeedToSetVars);
355✔
3040
  taosCheckAndSetDebugFlag(&tssDebugFlag, "tssDebugFlag", flag, noNeedToSetVars);
355✔
3041
  taosCheckAndSetDebugFlag(&sDebugFlag, "sDebugFlag", flag, noNeedToSetVars);
355✔
3042
  taosCheckAndSetDebugFlag(&tsdbDebugFlag, "tsdbDebugFlag", flag, noNeedToSetVars);
355✔
3043
  taosCheckAndSetDebugFlag(&tqDebugFlag, "tqDebugFlag", flag, noNeedToSetVars);
355✔
3044
  taosCheckAndSetDebugFlag(&fsDebugFlag, "fsDebugFlag", flag, noNeedToSetVars);
355✔
3045
  taosCheckAndSetDebugFlag(&udfDebugFlag, "udfDebugFlag", flag, noNeedToSetVars);
355✔
3046
  taosCheckAndSetDebugFlag(&smaDebugFlag, "smaDebugFlag", flag, noNeedToSetVars);
355✔
3047
  taosCheckAndSetDebugFlag(&idxDebugFlag, "idxDebugFlag", flag, noNeedToSetVars);
355✔
3048
  taosCheckAndSetDebugFlag(&tdbDebugFlag, "tdbDebugFlag", flag, noNeedToSetVars);
355✔
3049
  taosCheckAndSetDebugFlag(&metaDebugFlag, "metaDebugFlag", flag, noNeedToSetVars);
355✔
3050
  taosCheckAndSetDebugFlag(&stDebugFlag, "stDebugFlag", flag, noNeedToSetVars);
355✔
3051
  taosCheckAndSetDebugFlag(&sndDebugFlag, "sndDebugFlag", flag, noNeedToSetVars);
355✔
3052
  taosCheckAndSetDebugFlag(&bseDebugFlag, "bseDebugFlag", flag, noNeedToSetVars);
355✔
3053
  taosCheckAndSetDebugFlag(&bndDebugFlag, "bndDebugFlag", flag, noNeedToSetVars);
355✔
3054

3055
  taosArrayClear(noNeedToSetVars);  // reset array
355✔
3056

3057
  uInfo("all debug flag are set to %d", flag);
355!
3058
  TAOS_RETURN(TSDB_CODE_SUCCESS);
355✔
3059
}
3060

3061
int32_t taosGranted(int8_t type) {
1,178,257✔
3062
  switch (type) {
1,178,257!
3063
    case TSDB_GRANT_ALL: {
1,177,960✔
3064
      if (atomic_load_32(&tsGrant) & GRANT_FLAG_ALL) {
1,177,960!
3065
        return 0;
1,178,017✔
3066
      }
3067
      int32_t grantVal = atomic_load_32(&tsGrant);
×
3068
      if (grantVal & GRANT_FLAG_EX_MULTI_TIER) {
×
3069
        return TSDB_CODE_GRANT_MULTI_STORAGE_EXPIRED;
×
3070
      } else if (grantVal & GRANT_FLAG_EX_STORAGE) {
×
3071
        return TSDB_CODE_GRANT_STORAGE_LIMITED;
×
3072
      }
3073
      return TSDB_CODE_GRANT_EXPIRED;
×
3074
    }
3075
    case TSDB_GRANT_AUDIT: {
×
3076
      return (atomic_load_32(&tsGrant) & GRANT_FLAG_AUDIT) ? 0 : TSDB_CODE_GRANT_AUDIT_EXPIRED;
×
3077
    }
3078
    case TSDB_GRANT_VIEW:
451✔
3079
      return (atomic_load_32(&tsGrant) & GRANT_FLAG_VIEW) ? 0 : TSDB_CODE_GRANT_VIEW_EXPIRED;
451✔
3080
    default:
×
3081
      uWarn("undefined grant type:%" PRIi8, type);
×
3082
      break;
×
3083
  }
3084
  return 0;
×
3085
}
3086

3087
int32_t globalConfigSerialize(int32_t version, SArray *array, char **serialized) {
1,968✔
3088
  char   buf[30];
3089
  cJSON *json = cJSON_CreateObject();
1,968✔
3090
  if (json == NULL) goto _exit;
1,968!
3091
  if (cJSON_AddNumberToObject(json, "file_version", GLOBAL_CONFIG_FILE_VERSION) == NULL) goto _exit;
1,968!
3092
  if (cJSON_AddNumberToObject(json, "version", version) == NULL) goto _exit;
1,968!
3093
  int sz = taosArrayGetSize(array);
1,968✔
3094

3095
  cJSON *cField = cJSON_CreateObject();
1,968✔
3096
  if (cField == NULL) goto _exit;
1,968!
3097

3098
  if (!cJSON_AddItemToObject(json, "configs", cField)) goto _exit;
1,968!
3099

3100
  // cjson only support int32_t or double
3101
  // string are used to prohibit the loss of precision
3102
  for (int i = 0; i < sz; i++) {
183,858✔
3103
    SConfigItem *item = (SConfigItem *)taosArrayGet(array, i);
181,890✔
3104
    switch (item->dtype) {
181,890!
3105
      {
3106
        case CFG_DTYPE_NONE:
×
3107
          break;
×
3108
        case CFG_DTYPE_BOOL:
34,830✔
3109
          if (cJSON_AddBoolToObject(cField, item->name, item->bval) == NULL) goto _exit;
34,830!
3110
          break;
34,830✔
3111
        case CFG_DTYPE_INT32:
106,425✔
3112
          if (cJSON_AddNumberToObject(cField, item->name, item->i32) == NULL) goto _exit;
106,425!
3113
          break;
106,425✔
3114
        case CFG_DTYPE_INT64:
11,610✔
3115
          (void)sprintf(buf, "%" PRId64, item->i64);
11,610✔
3116
          if (cJSON_AddStringToObject(cField, item->name, buf) == NULL) goto _exit;
11,610!
3117
          break;
11,610✔
3118
        case CFG_DTYPE_FLOAT:
3,870✔
3119
        case CFG_DTYPE_DOUBLE:
3120
          (void)sprintf(buf, "%f", item->fval);
3,870✔
3121
          if (cJSON_AddStringToObject(cField, item->name, buf) == NULL) goto _exit;
3,870!
3122
          break;
3,870✔
3123
        case CFG_DTYPE_STRING:
25,155✔
3124
        case CFG_DTYPE_DIR:
3125
        case CFG_DTYPE_LOCALE:
3126
        case CFG_DTYPE_CHARSET:
3127
        case CFG_DTYPE_TIMEZONE:
3128
          if (cJSON_AddStringToObject(cField, item->name, item->str) == NULL) goto _exit;
25,155!
3129
          break;
25,155✔
3130
      }
3131
    }
3132
  }
3133
  char *pSerialized = tjsonToString(json);
1,968✔
3134
_exit:
1,968✔
3135
  if (terrno != TSDB_CODE_SUCCESS) {
1,968✔
3136
    uError("failed to serialize global config since %s", tstrerror(terrno));
9!
3137
  }
3138
  cJSON_Delete(json);
1,968✔
3139
  *serialized = pSerialized;
1,968✔
3140
  return terrno;
1,968✔
3141
}
3142

3143
int32_t localConfigSerialize(SArray *array, char **serialized) {
2,471✔
3144
  char   buf[30];
3145
  cJSON *json = cJSON_CreateObject();
2,471✔
3146
  if (json == NULL) goto _exit;
2,471!
3147

3148
  int sz = taosArrayGetSize(array);
2,471✔
3149

3150
  cJSON *cField = cJSON_CreateObject();
2,471✔
3151
  if (cField == NULL) goto _exit;
2,471!
3152
  if (cJSON_AddNumberToObject(json, "file_version", LOCAL_CONFIG_FILE_VERSION) == NULL) goto _exit;
2,471!
3153
  if (!cJSON_AddItemToObject(json, "configs", cField)) goto _exit;
2,471!
3154

3155
  // cjson only support int32_t or double
3156
  // string are used to prohibit the loss of precision
3157
  for (int i = 0; i < sz; i++) {
340,998✔
3158
    SConfigItem *item = (SConfigItem *)taosArrayGet(array, i);
338,527✔
3159
    if (strcasecmp(item->name, "dataDir") == 0) {
338,527✔
3160
      int32_t sz = taosArrayGetSize(item->array);
2,471✔
3161
      cJSON  *dataDirs = cJSON_CreateArray();
2,471✔
3162
      if (!cJSON_AddItemToObject(cField, item->name, dataDirs)) {
2,471!
3163
        uError("failed to serialize global config since %s", tstrerror(terrno));
×
3164
        goto _exit;
×
3165
      }
3166
      for (int j = 0; j < sz; j++) {
5,075✔
3167
        SDiskCfg *disk = (SDiskCfg *)taosArrayGet(item->array, j);
2,604✔
3168
        cJSON    *dataDir = cJSON_CreateObject();
2,604✔
3169
        if (dataDir == NULL) goto _exit;
2,604!
3170
        if (!cJSON_AddItemToArray(dataDirs, dataDir)) {
2,604!
3171
          uError("failed to serialize global config since %s", tstrerror(terrno));
×
3172
          goto _exit;
×
3173
        }
3174
        if (cJSON_AddStringToObject(dataDir, "dir", disk->dir) == NULL) goto _exit;
2,604!
3175
        if (cJSON_AddNumberToObject(dataDir, "level", disk->level) == NULL) goto _exit;
2,604!
3176
        if (disk->diskId == 0) {
2,604✔
3177
          if (taosGetFileDiskID(disk->dir, &disk->diskId) != 0) {
2,473!
3178
            uError("failed to get disk id for %s", disk->dir);
×
3179
            goto _exit;
×
3180
          }
3181
        }
3182
        (void)sprintf(buf, "%" PRId64, disk->diskId);
2,604✔
3183
        if (cJSON_AddStringToObject(dataDir, "disk_id", buf) == NULL) goto _exit;
2,604!
3184
        if (cJSON_AddNumberToObject(dataDir, "primary", disk->primary) == NULL) goto _exit;
2,604!
3185
        if (cJSON_AddNumberToObject(dataDir, "disable", disk->disable) == NULL) goto _exit;
2,604!
3186
      }
3187
      continue;
2,471✔
3188
    }
3189
    if (strcasecmp(item->name, "forceReadConfig") == 0) {
336,056✔
3190
      continue;
2,471✔
3191
    }
3192
    switch (item->dtype) {
333,585!
3193
      {
3194
        case CFG_DTYPE_NONE:
×
3195
          break;
×
3196
        case CFG_DTYPE_BOOL:
56,833✔
3197
          if (cJSON_AddBoolToObject(cField, item->name, item->bval) == NULL) goto _exit;
56,833!
3198
          break;
56,833✔
3199
        case CFG_DTYPE_INT32:
192,738✔
3200
          if (cJSON_AddNumberToObject(cField, item->name, item->i32) == NULL) goto _exit;
192,738!
3201
          break;
192,738✔
3202
        case CFG_DTYPE_INT64:
17,297✔
3203
          (void)sprintf(buf, "%" PRId64, item->i64);
17,297✔
3204
          if (cJSON_AddStringToObject(cField, item->name, buf) == NULL) goto _exit;
17,297!
3205
          break;
17,297✔
3206
        case CFG_DTYPE_FLOAT:
9,884✔
3207
        case CFG_DTYPE_DOUBLE:
3208
          (void)sprintf(buf, "%f", item->fval);
9,884✔
3209
          if (cJSON_AddStringToObject(cField, item->name, buf) == NULL) goto _exit;
9,884!
3210
          break;
9,884✔
3211
        case CFG_DTYPE_STRING:
56,833✔
3212
        case CFG_DTYPE_DIR:
3213
        case CFG_DTYPE_LOCALE:
3214
        case CFG_DTYPE_CHARSET:
3215
        case CFG_DTYPE_TIMEZONE:
3216
          if (cJSON_AddStringToObject(cField, item->name, item->str) == NULL) goto _exit;
56,833!
3217
          break;
56,833✔
3218
      }
3219
    }
3220
  }
3221
  char *pSerialized = tjsonToString(json);
2,471✔
3222
_exit:
2,471✔
3223
  if (terrno != TSDB_CODE_SUCCESS) {
2,471!
3224
    uError("failed to serialize local config since %s", tstrerror(terrno));
×
3225
  }
3226
  cJSON_Delete(json);
2,471✔
3227
  *serialized = pSerialized;
2,471✔
3228
  return terrno;
2,471✔
3229
}
3230

3231
int32_t stypeConfigSerialize(SArray *array, char **serialized) {
2,471✔
3232
  char   buf[30];
3233
  cJSON *json = cJSON_CreateObject();
2,471✔
3234
  if (json == NULL) goto _exit;
2,471!
3235

3236
  int sz = taosArrayGetSize(array);
2,471✔
3237

3238
  cJSON *cField = cJSON_CreateObject();
2,471✔
3239
  if (cField == NULL) goto _exit;
2,471!
3240
  if (cJSON_AddNumberToObject(json, "file_version", LOCAL_CONFIG_FILE_VERSION) == NULL) goto _exit;
2,471!
3241
  if (!cJSON_AddItemToObject(json, "config_stypes", cField)) goto _exit;
2,471!
3242

3243
  // cjson only support int32_t or double
3244
  // string are used to prohibit the loss of precision
3245
  for (int i = 0; i < sz; i++) {
340,998✔
3246
    SConfigItem *item = (SConfigItem *)taosArrayGet(array, i);
338,527✔
3247
    if (cJSON_AddNumberToObject(cField, item->name, item->stype) == NULL) goto _exit;
338,527!
3248
  }
3249
  char *pSerialized = tjsonToString(json);
2,471✔
3250
_exit:
2,471✔
3251
  if (terrno != TSDB_CODE_SUCCESS) {
2,471!
3252
    uError("failed to serialize local config since %s", tstrerror(terrno));
×
3253
  }
3254
  cJSON_Delete(json);
2,471✔
3255
  *serialized = pSerialized;
2,471✔
3256
  return terrno;
2,471✔
3257
}
3258

3259
int32_t taosPersistGlobalConfig(SArray *array, const char *path, int32_t version) {
1,968✔
3260
  int32_t   code = 0;
1,968✔
3261
  int32_t   lino = 0;
1,968✔
3262
  char     *buffer = NULL;
1,968✔
3263
  TdFilePtr pFile = NULL;
1,968✔
3264
  char     *serialized = NULL;
1,968✔
3265
  char      filepath[CONFIG_FILE_LEN] = {0};
1,968✔
3266
  char      filename[CONFIG_FILE_LEN] = {0};
1,968✔
3267
  snprintf(filepath, sizeof(filepath), "%s%sconfig", path, TD_DIRSEP);
1,968✔
3268
  snprintf(filename, sizeof(filename), "%s%sconfig%sglobal.json", path, TD_DIRSEP, TD_DIRSEP);
1,968✔
3269

3270
  TAOS_CHECK_GOTO(taosMkDir(filepath), &lino, _exit);
1,968!
3271

3272
  pFile = taosOpenFile(filename, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_TRUNC | TD_FILE_WRITE_THROUGH);
1,968✔
3273

3274
  if (pFile == NULL) {
1,968!
3275
    code = TAOS_SYSTEM_ERROR(ERRNO);
×
3276
    uError("failed to open file:%s since %s", filename, tstrerror(code));
×
3277
    TAOS_RETURN(code);
×
3278
  }
3279
  TAOS_CHECK_GOTO(globalConfigSerialize(version, array, &serialized), &lino, _exit);
1,968✔
3280

3281
  if (taosWriteFile(pFile, serialized, strlen(serialized)) < 0) {
1,959!
3282
    lino = __LINE__;
×
3283
    code = TAOS_SYSTEM_ERROR(ERRNO);
×
3284
    uError("failed to write file:%s since %s", filename, tstrerror(code));
×
3285
    goto _exit;
×
3286
  }
3287

3288
_exit:
1,959✔
3289
  if (code != TSDB_CODE_SUCCESS) {
1,968✔
3290
    uError("failed to persist global config at line:%d, since %s", lino, tstrerror(code));
9!
3291
  }
3292
  (void)taosCloseFile(&pFile);
1,968✔
3293
  taosMemoryFree(serialized);
1,968!
3294
  return code;
1,968✔
3295
}
3296

3297
int32_t taosPersistLocalConfig(const char *path) {
2,471✔
3298
  int32_t   code = 0;
2,471✔
3299
  int32_t   lino = 0;
2,471✔
3300
  char     *buffer = NULL;
2,471✔
3301
  TdFilePtr pFile = NULL;
2,471✔
3302
  char     *serializedCfg = NULL;
2,471✔
3303
  char     *serializedStype = NULL;
2,471✔
3304
  char      filepath[CONFIG_FILE_LEN] = {0};
2,471✔
3305
  char      filename[CONFIG_FILE_LEN] = {0};
2,471✔
3306
  char      stypeFilename[CONFIG_FILE_LEN] = {0};
2,471✔
3307
  snprintf(filepath, sizeof(filepath), "%s%sconfig", path, TD_DIRSEP);
2,471✔
3308
  snprintf(filename, sizeof(filename), "%s%sconfig%slocal.json", path, TD_DIRSEP, TD_DIRSEP);
2,471✔
3309
  snprintf(stypeFilename, sizeof(stypeFilename), "%s%sconfig%sstype.json", path, TD_DIRSEP, TD_DIRSEP);
2,471✔
3310

3311
  // TODO(beryl) need to check if the file is existed
3312
  TAOS_CHECK_GOTO(taosMkDir(filepath), &lino, _exit);
2,471!
3313

3314
  TdFilePtr pConfigFile =
2,471✔
3315
      taosOpenFile(filename, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_TRUNC | TD_FILE_WRITE_THROUGH);
2,471✔
3316

3317
  if (pConfigFile == NULL) {
2,471!
3318
    code = TAOS_SYSTEM_ERROR(terrno);
×
3319
    uError("failed to open file:%s since %s", filename, tstrerror(code));
×
3320
    TAOS_RETURN(code);
×
3321
  }
3322

3323
  TdFilePtr pStypeFile =
2,471✔
3324
      taosOpenFile(stypeFilename, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_TRUNC | TD_FILE_WRITE_THROUGH);
2,471✔
3325
  if (pStypeFile == NULL) {
2,471!
3326
    code = TAOS_SYSTEM_ERROR(terrno);
×
3327
    uError("failed to open file:%s since %s", stypeFilename, tstrerror(code));
×
3328
    TAOS_RETURN(code);
×
3329
  }
3330

3331
  TAOS_CHECK_GOTO(localConfigSerialize(taosGetLocalCfg(tsCfg), &serializedCfg), &lino, _exit);
2,471!
3332
  if (taosWriteFile(pConfigFile, serializedCfg, strlen(serializedCfg)) < 0) {
2,471!
3333
    lino = __LINE__;
×
3334
    code = TAOS_SYSTEM_ERROR(terrno);
×
3335
    uError("failed to write file:%s since %s", filename, tstrerror(code));
×
3336
    goto _exit;
×
3337
  }
3338

3339
  TAOS_CHECK_GOTO(stypeConfigSerialize(taosGetLocalCfg(tsCfg), &serializedStype), &lino, _exit);
2,471!
3340
  if (taosWriteFile(pStypeFile, serializedStype, strlen(serializedStype)) < 0) {
2,471!
3341
    lino = __LINE__;
×
3342
    code = TAOS_SYSTEM_ERROR(terrno);
×
3343
    uError("failed to write file:%s since %s", stypeFilename, tstrerror(code));
×
3344
    goto _exit;
×
3345
  }
3346

3347
_exit:
2,471✔
3348
  if (code != TSDB_CODE_SUCCESS) {
2,471!
3349
    uError("failed to persist local config at line:%d, since %s", lino, tstrerror(code));
×
3350
  }
3351
  (void)taosCloseFile(&pConfigFile);
2,471✔
3352
  (void)taosCloseFile(&pStypeFile);
2,471✔
3353
  taosMemoryFree(serializedCfg);
2,471!
3354
  taosMemoryFree(serializedStype);
2,471!
3355
  return code;
2,471✔
3356
}
3357

3358
int32_t tSerializeSConfigArray(SEncoder *pEncoder, SArray *array) {
4,776✔
3359
  int32_t code = 0;
4,776✔
3360
  int32_t lino = 0;
4,776✔
3361
  int32_t sz = taosArrayGetSize(array);
4,776✔
3362
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, sz));
4,776!
3363
  for (int i = 0; i < sz; i++) {
362,352✔
3364
    SConfigItem *item = (SConfigItem *)taosArrayGet(array, i);
357,576✔
3365
    TAOS_CHECK_EXIT(tEncodeCStr(pEncoder, item->name));
715,152!
3366
    TAOS_CHECK_EXIT(tEncodeI32(pEncoder, item->dtype));
715,152!
3367
    switch (item->dtype) {
357,576!
3368
      {
3369
        case CFG_DTYPE_NONE:
×
3370
          break;
×
3371
        case CFG_DTYPE_BOOL:
68,472✔
3372
          TAOS_CHECK_EXIT(tEncodeBool(pEncoder, item->bval));
68,472!
3373
          break;
68,472✔
3374
        case CFG_DTYPE_INT32:
209,220✔
3375
          TAOS_CHECK_EXIT(tEncodeI32(pEncoder, item->i32));
418,440!
3376
          break;
209,220✔
3377
        case CFG_DTYPE_INT64:
22,824✔
3378
          TAOS_CHECK_EXIT(tEncodeI64(pEncoder, item->i64));
45,648!
3379
          break;
22,824✔
3380
        case CFG_DTYPE_FLOAT:
7,608✔
3381
        case CFG_DTYPE_DOUBLE:
3382
          TAOS_CHECK_EXIT(tEncodeFloat(pEncoder, item->fval));
15,216!
3383
          break;
7,608✔
3384
        case CFG_DTYPE_STRING:
49,452✔
3385
        case CFG_DTYPE_DIR:
3386
        case CFG_DTYPE_LOCALE:
3387
        case CFG_DTYPE_CHARSET:
3388
        case CFG_DTYPE_TIMEZONE:
3389
          TAOS_CHECK_EXIT(tEncodeCStr(pEncoder, item->str));
98,904!
3390
          break;
49,452✔
3391
      }
3392
    }
3393
  }
3394
_exit:
4,776✔
3395
  return code;
4,776✔
3396
}
3397

3398
int32_t tDeserializeSConfigArray(SDecoder *pDecoder, SArray *array) {
2,382✔
3399
  int32_t code = 0;
2,382✔
3400
  int32_t lino = 0;
2,382✔
3401
  int32_t sz = 0;
2,382✔
3402
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &sz));
2,382!
3403
  for (int i = 0; i < sz; i++) {
180,982✔
3404
    SConfigItem item = {0};
178,600✔
3405
    TAOS_CHECK_EXIT(tDecodeCStr(pDecoder, &item.name));
178,600!
3406
    TAOS_CHECK_EXIT(tDecodeI32(pDecoder, (int32_t *)&item.dtype));
178,600!
3407
    switch (item.dtype) {
178,600!
3408
      {
3409
        case CFG_DTYPE_NONE:
×
3410
          break;
×
3411
        case CFG_DTYPE_BOOL:
34,200✔
3412
          TAOS_CHECK_EXIT(tDecodeBool(pDecoder, &item.bval));
34,200!
3413
          break;
34,200✔
3414
        case CFG_DTYPE_INT32:
104,500✔
3415
          TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &item.i32));
104,500!
3416
          break;
104,500✔
3417
        case CFG_DTYPE_INT64:
11,400✔
3418
          TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &item.i64));
11,400!
3419
          break;
11,400✔
3420
        case CFG_DTYPE_FLOAT:
3,800✔
3421
        case CFG_DTYPE_DOUBLE:
3422
          TAOS_CHECK_EXIT(tDecodeFloat(pDecoder, &item.fval));
3,800!
3423
          break;
3,800✔
3424
        case CFG_DTYPE_STRING:
24,700✔
3425
        case CFG_DTYPE_DIR:
3426
        case CFG_DTYPE_LOCALE:
3427
        case CFG_DTYPE_CHARSET:
3428
        case CFG_DTYPE_TIMEZONE:
3429
          TAOS_CHECK_EXIT(tDecodeCStr(pDecoder, &item.str));
24,700!
3430
          break;
24,700✔
3431
      }
3432
    }
3433
    if (taosArrayPush(array, &item) == NULL) {
178,600!
3434
      code = terrno;
×
3435
      goto _exit;
×
3436
    }
3437
  }
3438
_exit:
2,382✔
3439
  if (code != TSDB_CODE_SUCCESS) {
2,382!
3440
    uError("failed to deserialize SConfigItem at line:%d, since %s", lino, tstrerror(code));
×
3441
  }
3442
  return code;
2,382✔
3443
}
3444

3445
bool isConifgItemLazyMode(SConfigItem *item) {
175✔
3446
  if (item->dynScope == CFG_DYN_CLIENT_LAZY || item->dynScope == CFG_DYN_SERVER_LAZY ||
175!
3447
      item->dynScope == CFG_DYN_BOTH_LAZY) {
175✔
3448
    return true;
1✔
3449
  }
3450
  return false;
174✔
3451
}
3452

3453
int32_t taosCheckCfgStrValueLen(const char *name, const char *value, int32_t len) {
145,993✔
3454
  if (strlen(value) > len) {
145,993!
3455
    uError("invalid config:%s, value:%s, length should be less than %d", name, value, len);
×
3456
    TAOS_RETURN(TSDB_CODE_INVALID_CFG_VALUE);
×
3457
  }
3458
  TAOS_RETURN(TSDB_CODE_SUCCESS);
145,993✔
3459
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc