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

taosdata / TDengine / #4308

14 Jun 2025 02:06PM UTC coverage: 62.454% (-0.3%) from 62.777%
#4308

push

travis-ci

web-flow
fix: taosdump windows pthread_mutex_unlock crash(3.0) (#31357)

* fix: windows pthread_mutex_unlock crash

* enh: sync from main fix taosdump crash windows

* fix: restore .github action branch to main

153985 of 315105 branches covered (48.87%)

Branch coverage included in aggregate %.

238120 of 312727 relevant lines covered (76.14%)

6462519.65 hits per line

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

67.39
/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       tsNumOfSupportVnodes = 256;
50
char          tsEncryptAlgorithm[16] = {0};
51
char          tsEncryptScope[100] = {0};
52
EEncryptAlgor tsiEncryptAlgorithm = 0;
53
EEncryptScope tsiEncryptScope = 0;
54
// char     tsAuthCode[500] = {0};
55
// char     tsEncryptKey[17] = {0};
56
char   tsEncryptKey[17] = {0};
57
int8_t tsEnableStrongPassword = 1;
58

59
// common
60
int32_t tsMaxShellConns = 50000;
61
int32_t tsShellActivityTimer = 3;  // second
62

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

76
// queue & threads
77
int32_t tsQueryMinConcurrentTaskNum = 1;
78
int32_t tsQueryMaxConcurrentTaskNum = 0;
79
int32_t tsQueryConcurrentTaskNum = 0;
80
int32_t tsQueryNoFetchTimeoutSec = 3600 * 5;
81

82
int32_t tsNumOfRpcThreads = 1;
83
int32_t tsNumOfRpcSessions = 30000;
84
#ifdef WINDOWS
85
int32_t tsShareConnLimit = 1;
86
#else
87
int32_t tsShareConnLimit = 10;
88
#endif
89

90
int32_t tsReadTimeout = 900;
91
int32_t tsTimeToGetAvailableConn = 500000;
92
int8_t  tsEnableIpv6 = 0;
93

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

112
int32_t tsNumOfCompactThreads = 2;
113
int32_t tsNumOfRetentionThreads = 1;
114

115
// sync raft
116
int32_t tsElectInterval = 25 * 1000;
117
int32_t tsHeartbeatInterval = 1000;
118
int32_t tsHeartbeatTimeout = 20 * 1000;
119
int32_t tsSnapReplMaxWaitN = 128;
120
int64_t tsLogBufferMemoryAllowed = 0;  // bytes
121
int32_t tsRoutineReportInterval = 300;
122

123
// mnode
124
int64_t tsMndSdbWriteDelta = 200;
125
int64_t tsMndLogRetention = 2000;
126
bool    tsMndSkipGrant = false;
127
bool    tsEnableWhiteList = false;  // ip white list cfg
128
bool    tsForceKillTrans = false;
129

130
// arbitrator
131
int32_t tsArbHeartBeatIntervalSec = 2;
132
int32_t tsArbCheckSyncIntervalSec = 3;
133
int32_t tsArbSetAssignedTimeoutSec = 14;
134

135
// dnode
136
int64_t tsDndStart = 0;
137
int64_t tsDndStartOsUptime = 0;
138
int64_t tsDndUpTime = 0;
139

140
// dnode misc
141
uint32_t tsEncryptionKeyChksum = 0;
142
int8_t   tsEncryptionKeyStat = ENCRYPT_KEY_STAT_UNSET;
143
uint32_t tsGrant = 1;
144

145
bool tsCompareAsStrInGreatest = true;
146

147
// monitor
148
#ifdef USE_MONITOR
149
bool tsEnableMonitor = true;
150
#else
151
bool    tsEnableMonitor = false;
152
#endif
153
int32_t  tsMonitorInterval = 30;
154
char     tsMonitorFqdn[TSDB_FQDN_LEN] = {0};
155
uint16_t tsMonitorPort = 6043;
156
int32_t  tsMonitorMaxLogs = 100;
157
bool     tsMonitorComp = false;
158
bool     tsMonitorLogProtocol = false;
159
#ifdef USE_MONITOR
160
bool tsMonitorForceV2 = true;
161
#else
162
bool    tsMonitorForceV2 = false;
163
#endif
164

165
// audit
166
#ifdef USE_AUDIT
167
bool    tsEnableAudit = true;
168
bool    tsEnableAuditCreateTable = true;
169
bool    tsEnableAuditDelete = true;
170
int32_t tsAuditInterval = 5000;
171
#else
172
bool    tsEnableAudit = false;
173
bool    tsEnableAuditCreateTable = false;
174
bool    tsEnableAuditDelete = false;
175
int32_t tsAuditInterval = 200000;
176
#endif
177

178
// telem
179
#if defined(TD_ENTERPRISE) || !defined(USE_REPORT)
180
bool tsEnableTelem = false;
181
#else
182
bool    tsEnableTelem = true;
183
#endif
184
int32_t  tsTelemInterval = 86400;
185
char     tsTelemServer[TSDB_FQDN_LEN] = "telemetry.tdengine.com";
186
uint16_t tsTelemPort = 80;
187
char    *tsTelemUri = "/report";
188

189
#if defined(TD_ENTERPRISE) || !defined(USE_REPORT)
190
bool tsEnableCrashReport = false;
191
#else
192
bool    tsEnableCrashReport = true;
193
#endif
194
char   *tsClientCrashReportUri = "/ccrashreport";
195
char   *tsSvrCrashReportUri = "/dcrashreport";
196
int32_t tsSafetyCheckLevel = TSDB_SAFETY_CHECK_LEVELL_NORMAL;
197

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

209
// checkpoint backup
210
char    tsSnodeAddress[TSDB_FQDN_LEN] = {0};
211
int32_t tsRsyncPort = 873;
212
#ifdef WINDOWS
213
char tsCheckpointBackupDir[PATH_MAX] = "C:\\TDengine\\data\\backup\\checkpoint\\";
214
#else
215
char    tsCheckpointBackupDir[PATH_MAX] = "/var/lib/taos/backup/checkpoint/";
216
#endif
217

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

248
/*
249
 * denote if the server needs to compress response message at the application layer to client, including query rsp,
250
 * metricmeta rsp, and multi-meter query rsp message body. The client compress the submit message to server.
251
 *
252
 * 0: all data are compressed
253
 * -1: all data are not compressed
254
 * other values: if the message payload size is greater than the tsCompressMsgSize, the message will be compressed.
255
 */
256
int32_t tsCompressMsgSize = -1;
257

258
// count/hyperloglog function always return values in case of all NULL data or Empty data set.
259
int32_t tsCountAlwaysReturnValue = 1;
260

261
// 1 ms for sliding time, the value will changed in case of time precision changed
262
int32_t tsMinSlidingTime = 1;
263

264
// 1 database precision unit for interval time range, changed accordingly
265
int32_t tsMinIntervalTime = 1;
266

267
// maximum batch rows numbers imported from a single csv load
268
int32_t tsMaxInsertBatchRows = 1000000;
269

270
float   tsSelectivityRatio = 1.0;
271
int32_t tsTagFilterResCacheSize = 1024 * 10;
272
char    tsTagFilterCache = 0;
273

274
int32_t tsBypassFlag = 0;
275

276
// the maximum allowed query buffer size during query processing for each data node.
277
// -1 no limit (default)
278
// 0  no query allowed, queries are disabled
279
// positive value (in MB)
280
int32_t tsQueryBufferSize = -1;
281
int64_t tsQueryBufferSizeBytes = -1;
282
int32_t tsCacheLazyLoadThreshold = 500;
283

284
int32_t  tsDiskCfgNum = 0;
285
SDiskCfg tsDiskCfg[TFS_MAX_DISKS] = {0};
286
int64_t  tsMinDiskFreeSize = TFS_MIN_DISK_FREE_SIZE;
287

288
// stream scheduler
289
bool tsDeployOnSnode = true;
290

291
/*
292
 * minimum scale for whole system, millisecond by default
293
 * for TSDB_TIME_PRECISION_MILLI: 60000L
294
 *     TSDB_TIME_PRECISION_MICRO: 60000000L
295
 *     TSDB_TIME_PRECISION_NANO:  60000000000L
296
 */
297
int64_t tsTickPerMin[] = {60000L, 60000000L, 60000000000L};
298
/*
299
 * millisecond by default
300
 * for TSDB_TIME_PRECISION_MILLI: 3600000L
301
 *     TSDB_TIME_PRECISION_MICRO: 3600000000L
302
 *     TSDB_TIME_PRECISION_NANO:  3600000000000L
303
 */
304
int64_t tsTickPerHour[] = {3600000L, 3600000000L, 3600000000000L};
305

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

317
// udf
318
#if defined(WINDOWS) || !defined(USE_UDF)
319
bool tsStartUdfd = false;
320
#else
321
bool    tsStartUdfd = true;
322
#endif
323

324
// wal
325
int64_t tsWalFsyncDataSizeLimit = (100 * 1024 * 1024L);
326

327
// ttl
328
bool    tsTtlChangeOnWrite = false;  // if true, ttl delete time changes on last write
329
int32_t tsTtlFlushThreshold = 100;   /* maximum number of dirty items in memory.
330
                                      * if -1, flush will not be triggered by write-ops
331
                                      */
332
int32_t tsTtlBatchDropNum = 10000;   // number of tables dropped per batch
333

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

365
char     tsAdapterFqdn[TSDB_FQDN_LEN] = "localhost";
366
uint16_t tsAdapterPort = 6041;
367
char     tsAdapterToken[512] = "cm9vdDp0YW9zZGF0YQ==";
368

369
bool tsUpdateCacheBatch = true;
370

371
int8_t tsS3EpNum = 0;
372
char   tsS3Endpoint[TSDB_MAX_EP_NUM][TSDB_FQDN_LEN] = {"<endpoint>"};
373
char   tsS3AccessKey[TSDB_MAX_EP_NUM][TSDB_FQDN_LEN] = {"<accesskey>"};
374
char   tsS3AccessKeyId[TSDB_MAX_EP_NUM][TSDB_FQDN_LEN] = {"<accesskeyid>"};
375
char   tsS3AccessKeySecret[TSDB_MAX_EP_NUM][TSDB_FQDN_LEN] = {"<accesskeysecrect>"};
376
char   tsS3BucketName[TSDB_FQDN_LEN] = "<bucketname>";
377
char   tsS3AppId[TSDB_MAX_EP_NUM][TSDB_FQDN_LEN] = {"<appid>"};
378
int8_t tsS3Enabled = false;
379
int8_t tsS3EnabledCfg = false;
380
int8_t tsS3Oss[TSDB_MAX_EP_NUM] = {false};
381
int8_t tsS3Ablob = false;
382
int8_t tsS3StreamEnabled = false;
383

384
int8_t tsS3Https[TSDB_MAX_EP_NUM] = {true};
385
char   tsS3Hostname[TSDB_MAX_EP_NUM][TSDB_FQDN_LEN] = {"<hostname>"};
386

387
int32_t tsS3BlockSize = -1;        // number of tsdb pages (4096)
388
int32_t tsS3BlockCacheSize = 16;   // number of blocks
389
int32_t tsS3PageCacheSize = 4096;  // number of pages
390
int32_t tsS3UploadDelaySec = 60;
391

392
bool tsExperimental = true;
393

394
int32_t tsMaxTsmaNum = 3;
395
int32_t tsMaxTsmaCalcDelay = 600;
396
int64_t tsmaDataDeleteMark = 1000 * 60 * 60 * 24;  // in ms, default to 1d
397
void   *pTimezoneNameMap = NULL;
398

399
int32_t tsStreamNotifyMessageSize = 8 * 1024;  // KB, default 8MB
400
int32_t tsStreamNotifyFrameSize = 256;         // KB, default 256KB
401

402
int32_t tsStreamVirtualMergeMaxDelayMs = 10 * 1000;  // 10s
403
int32_t tsStreamVirtualMergeMaxMemKb = 16 * 1024;    // 16MB
404
int32_t tsStreamVirtualMergeWaitMode = 0;            // 0 wait forever, 1 wait for max delay, 2 wait for max mem
405

406
int32_t taosCheckCfgStrValueLen(const char *name, const char *value, int32_t len);
407

408
#define TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, pName) \
409
  if ((pItem = cfgGetItem(pCfg, pName)) == NULL) {  \
410
    TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND);           \
411
  }
412

413
#ifndef _STORAGE
414
int32_t taosSetTfsCfg(SConfig *pCfg) {
415
  SConfigItem *pItem = NULL;
416
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "dataDir");
417
  (void)memset(tsDataDir, 0, PATH_MAX);
418

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

437
#ifndef _STORAGE
438
int32_t cfgUpdateTfsItemDisable(SConfig *pCfg, const char *value, void *pTfs) { return TSDB_CODE_INVALID_CFG; }
439
#else
440
int32_t cfgUpdateTfsItemDisable(SConfig *pCfg, const char *value, void *pTfs);
441
#endif
442

443
int32_t taosUpdateTfsItemDisable(SConfig *pCfg, const char *value, void *pTfs) {
5✔
444
  return cfgUpdateTfsItemDisable(pCfg, value, pTfs);
5✔
445
}
446

447
static int32_t taosSplitS3Cfg(SConfig *pCfg, const char *name, char gVarible[TSDB_MAX_EP_NUM][TSDB_FQDN_LEN],
7,906✔
448
                              int8_t *pNum) {
449
  int32_t code = TSDB_CODE_SUCCESS;
7,906✔
450

451
  SConfigItem *pItem = NULL;
7,906✔
452
  int32_t      num = 0;
7,906✔
453
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, name);
7,906!
454

455
  char *strDup = NULL;
7,906✔
456
  if ((strDup = taosStrdup(pItem->str)) == NULL) {
7,906!
457
    code = terrno;
×
458
    goto _exit;
×
459
  }
460

461
  char **slices = strsplit(strDup, ",", &num);
7,906✔
462
  if (num > TSDB_MAX_EP_NUM) {
7,906!
463
    code = TSDB_CODE_INVALID_CFG;
×
464
    goto _exit;
×
465
  }
466

467
  for (int i = 0; i < num; ++i) {
15,812✔
468
    tstrncpy(gVarible[i], slices[i], TSDB_FQDN_LEN);
7,906✔
469
  }
470
  *pNum = num;
7,906✔
471

472
_exit:
7,906✔
473
  taosMemoryFreeClear(slices);
7,906!
474
  taosMemoryFreeClear(strDup);
7,906!
475
  TAOS_RETURN(code);
7,906✔
476
}
477

478
int32_t taosSetS3Cfg(SConfig *pCfg) {
7,905✔
479
  int8_t num = 0;
7,905✔
480

481
  TAOS_CHECK_RETURN(taosSplitS3Cfg(pCfg, "s3Accesskey", tsS3AccessKey, &num));
7,905!
482
  if (num == 0) TAOS_RETURN(TSDB_CODE_SUCCESS);
7,905!
483

484
  tsS3EpNum = num;
7,905✔
485

486
  if (tsS3AccessKey[0][0] == '<') {
7,905✔
487
    TAOS_RETURN(TSDB_CODE_SUCCESS);
7,904✔
488
  }
489
  for (int i = 0; i < tsS3EpNum; ++i) {
2✔
490
    char *colon = strchr(tsS3AccessKey[i], ':');
1✔
491
    if (!colon) {
1!
492
      uError("invalid access key:%s", tsS3AccessKey[i]);
×
493
      TAOS_RETURN(TSDB_CODE_INVALID_CFG);
×
494
    }
495
    *colon = '\0';
1✔
496
    tstrncpy(tsS3AccessKeyId[i], tsS3AccessKey[i], TSDB_FQDN_LEN);
1✔
497
    tstrncpy(tsS3AccessKeySecret[i], colon + 1, TSDB_FQDN_LEN);
1✔
498
  }
499

500
  TAOS_CHECK_RETURN(taosSplitS3Cfg(pCfg, "s3Endpoint", tsS3Endpoint, &num));
1!
501
  if (num != tsS3EpNum) {
1!
502
    uError("invalid s3 ep num:%d, expected:%d, ", num, tsS3EpNum);
×
503
    TAOS_RETURN(TSDB_CODE_INVALID_CFG);
×
504
  }
505

506
  SConfigItem *pItem = NULL;
1✔
507
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "s3BucketName");
1!
508
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen("s3BucketName", pItem->str, TSDB_FQDN_LEN));
1!
509
  tstrncpy(tsS3BucketName, pItem->str, TSDB_FQDN_LEN);
1✔
510

511
  for (int i = 0; i < tsS3EpNum; ++i) {
2✔
512
    char *proto = strstr(tsS3Endpoint[i], "https://");
1✔
513
    if (!proto) {
1!
514
      tstrncpy(tsS3Hostname[i], tsS3Endpoint[i] + 7, TSDB_FQDN_LEN);
1✔
515
    } else {
516
      tstrncpy(tsS3Hostname[i], tsS3Endpoint[i] + 8, TSDB_FQDN_LEN);
×
517
    }
518

519
    char *cos = strstr(tsS3Endpoint[i], "cos.");
1✔
520
    if (cos) {
1!
521
      char *appid = strrchr(tsS3BucketName, '-');
×
522
      if (!appid) {
×
523
        uError("failed to locate appid in bucket:%s", tsS3BucketName);
×
524
        TAOS_RETURN(TSDB_CODE_INVALID_CFG);
×
525
      } else {
526
        tstrncpy(tsS3AppId[i], appid + 1, TSDB_FQDN_LEN);
×
527
      }
528
    }
529
    tsS3Https[i] = (strstr(tsS3Endpoint[i], "https://") != NULL);
1✔
530
    tsS3Oss[i] = (strstr(tsS3Endpoint[i], "aliyuncs.") != NULL);
1✔
531
    tsS3Ablob = (strstr(tsS3Endpoint[i], ".blob.core.windows.net") != NULL);
1✔
532
  }
533

534
  if (tsS3BucketName[0] != '<') {
1!
535
#if defined(USE_COS) || defined(USE_S3)
536
#ifdef TD_ENTERPRISE
537
    /*if (tsDiskCfgNum > 1) */ tsS3Enabled = true;
1✔
538
    tsS3EnabledCfg = true;
1✔
539
#endif
540
    tsS3StreamEnabled = true;
1✔
541
#endif
542
  }
543

544
  TAOS_RETURN(TSDB_CODE_SUCCESS);
1✔
545
}
546

547
struct SConfig *taosGetCfg() {
3,148✔
548
  return tsCfg;
3,148✔
549
}
550

551
static int32_t taosLoadCfg(SConfig *pCfg, const char **envCmd, const char *inputCfgDir, const char *envFile,
45,402✔
552
                           char *apolloUrl) {
553
  int32_t code = 0;
45,402✔
554
  char    cfgDir[PATH_MAX] = {0};
45,402✔
555
  char    cfgFile[PATH_MAX + 100] = {0};
45,402✔
556

557
  TAOS_CHECK_RETURN(taosExpandDir(inputCfgDir, cfgDir, PATH_MAX));
45,402!
558
  int32_t pos = strlen(cfgDir);
45,402✔
559
  if (pos > 0) {
45,402✔
560
    pos -= 1;
45,399✔
561
  }
562
  char  lastC = cfgDir[pos];
45,402✔
563
  char *tdDirsep = TD_DIRSEP;
45,402✔
564
  if (lastC == '\\' || lastC == '/') {
45,402!
565
    tdDirsep = "";
29,648✔
566
  }
567
  if (taosIsDir(cfgDir)) {
45,402✔
568
#ifdef CUS_PROMPT
569
    (void)snprintf(cfgFile, sizeof(cfgFile),
45,366✔
570
                   "%s"
571
                   "%s"
572
                   "%s.cfg",
573
                   cfgDir, tdDirsep, CUS_PROMPT);
574
#else
575
    (void)snprintf(cfgFile, sizeof(cfgFile),
576
                   "%s"
577
                   "%s"
578
                   "taos.cfg",
579
                   cfgDir, tdDirsep);
580
#endif
581
  } else {
582
    tstrncpy(cfgFile, cfgDir, sizeof(cfgDir));
36✔
583
  }
584

585
  if (apolloUrl != NULL && apolloUrl[0] == '\0') {
45,402✔
586
    (void)(cfgGetApollUrl(envCmd, envFile, apolloUrl));
5,600✔
587
  }
588

589
  if ((code = cfgLoad(pCfg, CFG_STYPE_APOLLO_URL, apolloUrl)) != 0) {
45,402✔
590
    (void)printf("failed to load from apollo url:%s since %s\n", apolloUrl, tstrerror(code));
1✔
591
    TAOS_RETURN(code);
1✔
592
  }
593

594
  if ((code = cfgLoad(pCfg, CFG_STYPE_CFG_FILE, cfgFile)) != 0) {
45,401✔
595
    (void)printf("failed to load from cfg file:%s since %s\n", cfgFile, tstrerror(code));
3✔
596
    TAOS_RETURN(code);
3✔
597
  }
598

599
  if ((code = cfgLoad(pCfg, CFG_STYPE_ENV_FILE, envFile)) != 0) {
45,398✔
600
    (void)printf("failed to load from env file:%s since %s\n", envFile, tstrerror(code));
1✔
601
    TAOS_RETURN(code);
1✔
602
  }
603

604
  if ((code = cfgLoad(pCfg, CFG_STYPE_ENV_VAR, NULL)) != 0) {
45,397!
605
    (void)printf("failed to load from global env variables since %s\n", tstrerror(code));
×
606
    TAOS_RETURN(code);
×
607
  }
608

609
  if ((code = cfgLoad(pCfg, CFG_STYPE_ENV_CMD, envCmd)) != 0) {
45,397!
610
    (void)printf("failed to load from cmd env variables since %s\n", tstrerror(code));
×
611
    TAOS_RETURN(code);
×
612
  }
613

614
  TAOS_RETURN(TSDB_CODE_SUCCESS);
45,397✔
615
}
616

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

648
static int32_t taosAddServerLogCfg(SConfig *pCfg) {
11,340✔
649
  TAOS_CHECK_RETURN(
11,340!
650
      cfgAddInt32(pCfg, "dDebugFlag", dDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
651
  TAOS_CHECK_RETURN(
11,340!
652
      cfgAddInt32(pCfg, "vDebugFlag", vDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
653
  TAOS_CHECK_RETURN(
11,340!
654
      cfgAddInt32(pCfg, "mDebugFlag", mDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
655
  TAOS_CHECK_RETURN(
11,340!
656
      cfgAddInt32(pCfg, "wDebugFlag", wDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
657
  TAOS_CHECK_RETURN(
11,340!
658
      cfgAddInt32(pCfg, "azDebugFlag", azDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
659
  TAOS_CHECK_RETURN(
11,340!
660
      cfgAddInt32(pCfg, "sDebugFlag", sDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
661
  TAOS_CHECK_RETURN(
11,340!
662
      cfgAddInt32(pCfg, "tsdbDebugFlag", tsdbDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
663
  TAOS_CHECK_RETURN(
11,340!
664
      cfgAddInt32(pCfg, "tqDebugFlag", tqDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
665
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tqClientDebug", tqClientDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER,
11,340!
666
                                CFG_CATEGORY_LOCAL));
667
  TAOS_CHECK_RETURN(
11,340!
668
      cfgAddInt32(pCfg, "fsDebugFlag", fsDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
669
  TAOS_CHECK_RETURN(
11,340!
670
      cfgAddInt32(pCfg, "udfDebugFlag", udfDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
671
  TAOS_CHECK_RETURN(
11,340!
672
      cfgAddInt32(pCfg, "smaDebugFlag", smaDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
673
  TAOS_CHECK_RETURN(
11,340!
674
      cfgAddInt32(pCfg, "idxDebugFlag", idxDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
675
  TAOS_CHECK_RETURN(
11,340!
676
      cfgAddInt32(pCfg, "tdbDebugFlag", tdbDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
677
  TAOS_CHECK_RETURN(
11,340!
678
      cfgAddInt32(pCfg, "metaDebugFlag", metaDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
679
  TAOS_CHECK_RETURN(
11,340!
680
      cfgAddInt32(pCfg, "stDebugFlag", stDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
681
  TAOS_CHECK_RETURN(
11,340!
682
      cfgAddInt32(pCfg, "sndDebugFlag", sndDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
683
  TAOS_RETURN(TSDB_CODE_SUCCESS);
11,340✔
684
}
685

686
static int32_t taosAddClientCfg(SConfig *pCfg) {
22,700✔
687
  char    defaultFqdn[TSDB_FQDN_LEN] = {0};
22,700✔
688
  int32_t defaultServerPort = 6030;
22,700✔
689
  if (taosGetFqdn(defaultFqdn) != 0) {
22,700!
690
    tstrncpy(defaultFqdn, "localhost", TSDB_FQDN_LEN);
×
691
  }
692

693
  TAOS_CHECK_RETURN(
22,700!
694
      cfgAddBool(pCfg, "forceReadConfig", tsForceReadConfig, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
695
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "firstEp", "", CFG_SCOPE_BOTH, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
22,700!
696
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "secondEp", "", CFG_SCOPE_BOTH, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
22,700!
697
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "fqdn", defaultFqdn, CFG_SCOPE_SERVER, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
22,700!
698
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "serverPort", defaultServerPort, 1, 65056, CFG_SCOPE_SERVER, CFG_DYN_CLIENT,
22,700!
699
                                CFG_CATEGORY_LOCAL));
700
  TAOS_CHECK_RETURN(cfgAddDir(pCfg, "tempDir", tsTempDir, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
22,700!
701
  TAOS_CHECK_RETURN(
22,700!
702
      cfgAddFloat(pCfg, "minimalTmpDirGB", 1.0f, 0.001f, 10000000, CFG_SCOPE_BOTH, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
703
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "shellActivityTimer", tsShellActivityTimer, 1, 120, CFG_SCOPE_BOTH, CFG_DYN_BOTH,
22,700!
704
                                CFG_CATEGORY_GLOBAL));
705
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "compressMsgSize", tsCompressMsgSize, -1, 100000000, CFG_SCOPE_BOTH,
22,700!
706
                                CFG_DYN_BOTH_LAZY, CFG_CATEGORY_GLOBAL));
707
  TAOS_CHECK_RETURN(
22,700!
708
      cfgAddInt32(pCfg, "queryPolicy", tsQueryPolicy, 1, 4, CFG_SCOPE_CLIENT, CFG_DYN_ENT_CLIENT, CFG_CATEGORY_LOCAL));
709
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "queryTableNotExistAsEmpty", tsQueryTbNotExistAsEmpty, CFG_SCOPE_CLIENT,
22,700!
710
                               CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
711
  TAOS_CHECK_RETURN(
22,700!
712
      cfgAddBool(pCfg, "enableQueryHb", tsEnableQueryHb, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
713
  TAOS_CHECK_RETURN(
22,700!
714
      cfgAddBool(pCfg, "enableScience", tsEnableScience, CFG_SCOPE_CLIENT, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
715
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "querySmaOptimize", tsQuerySmaOptimize, 0, 1, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT,
22,700!
716
                                CFG_CATEGORY_LOCAL));
717
  TAOS_CHECK_RETURN(
22,700!
718
      cfgAddBool(pCfg, "queryPlannerTrace", tsQueryPlannerTrace, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
719
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryNodeChunkSize", tsQueryNodeChunkSize, 1024, 128 * 1024, CFG_SCOPE_CLIENT,
22,700!
720
                                CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
721
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "queryUseNodeAllocator", tsQueryUseNodeAllocator, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT,
22,700!
722
                               CFG_CATEGORY_LOCAL));
723
  TAOS_CHECK_RETURN(
22,700!
724
      cfgAddBool(pCfg, "keepColumnName", tsKeepColumnName, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
725
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "smlChildTableName", tsSmlChildTableName, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT,
22,700!
726
                                 CFG_CATEGORY_LOCAL));
727
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "smlAutoChildTableNameDelimiter", tsSmlAutoChildTableNameDelimiter,
22,700!
728
                                 CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
729
  TAOS_CHECK_RETURN(
22,700!
730
      cfgAddString(pCfg, "smlTagName", tsSmlTagName, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
731
  TAOS_CHECK_RETURN(
22,700!
732
      cfgAddString(pCfg, "smlTsDefaultName", tsSmlTsDefaultName, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
733
  TAOS_CHECK_RETURN(
22,700!
734
      cfgAddBool(pCfg, "smlDot2Underline", tsSmlDot2Underline, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
735

736
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "minSlidingTime", tsMinSlidingTime, 1, 1000000, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT,
22,700!
737
                                CFG_CATEGORY_LOCAL));
738
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "minIntervalTime", tsMinIntervalTime, 1, 1000000, CFG_SCOPE_CLIENT,
22,700!
739
                                CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
740
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxInsertBatchRows", tsMaxInsertBatchRows, 1, INT32_MAX, CFG_SCOPE_CLIENT,
22,700!
741
                                CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL) != 0);
742
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxRetryWaitTime", tsMaxRetryWaitTime, 3000, 86400000, CFG_SCOPE_SERVER,
22,700!
743
                                CFG_DYN_BOTH_LAZY, CFG_CATEGORY_GLOBAL));
744
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "useAdapter", tsUseAdapter, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
22,700!
745
  TAOS_CHECK_RETURN(
22,700!
746
      cfgAddBool(pCfg, "crashReporting", tsEnableCrashReport, CFG_SCOPE_BOTH, CFG_DYN_BOTH, CFG_CATEGORY_GLOBAL));
747
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "queryMaxConcurrentTables", tsQueryMaxConcurrentTables, INT64_MIN, INT64_MAX,
22,700!
748
                                CFG_SCOPE_CLIENT, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
749
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "metaCacheMaxSize", tsMetaCacheMaxSize, -1, INT32_MAX, CFG_SCOPE_CLIENT,
22,700!
750
                                CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
751
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "randErrorChance", tsRandErrChance, 0, 10000, CFG_SCOPE_BOTH, CFG_DYN_BOTH,
22,700!
752
                                CFG_CATEGORY_GLOBAL));
753
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "randErrorDivisor", tsRandErrDivisor, 1, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_BOTH,
22,700!
754
                                CFG_CATEGORY_GLOBAL));
755
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "randErrorScope", tsRandErrScope, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_BOTH,
22,700!
756
                                CFG_CATEGORY_GLOBAL));
757
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "safetyCheckLevel", tsSafetyCheckLevel, 0, 5, CFG_SCOPE_BOTH, CFG_DYN_BOTH,
22,700!
758
                                CFG_CATEGORY_GLOBAL));
759
  TAOS_CHECK_RETURN(
22,700!
760
      cfgAddInt32(pCfg, "bypassFlag", tsBypassFlag, 0, INT32_MAX, CFG_SCOPE_BOTH, CFG_DYN_BOTH, CFG_CATEGORY_LOCAL));
761
  tsNumOfRpcThreads = tsNumOfCores / 2;
22,700✔
762
  tsNumOfRpcThreads = TRANGE(tsNumOfRpcThreads, 2, TSDB_MAX_RPC_THREADS);
22,700✔
763
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfRpcThreads", tsNumOfRpcThreads, 1, 1024, CFG_SCOPE_BOTH, CFG_DYN_BOTH_LAZY,
22,700!
764
                                CFG_CATEGORY_LOCAL));
765

766
  tsNumOfRpcSessions = TRANGE(tsNumOfRpcSessions, 100, 100000);
22,700✔
767
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfRpcSessions", tsNumOfRpcSessions, 1, 100000, CFG_SCOPE_BOTH,
22,700!
768
                                CFG_DYN_BOTH_LAZY, CFG_CATEGORY_LOCAL));
769

770
  tsShareConnLimit = TRANGE(tsShareConnLimit, 1, 512);
22,700✔
771
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "shareConnLimit", tsShareConnLimit, 1, 512, CFG_SCOPE_BOTH, CFG_DYN_BOTH_LAZY,
22,700!
772
                                CFG_CATEGORY_GLOBAL));
773

774
  tsReadTimeout = TRANGE(tsReadTimeout, 64, 24 * 3600 * 7);
22,700✔
775
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "readTimeout", tsReadTimeout, 64, 24 * 3600 * 7, CFG_SCOPE_BOTH,
22,700!
776
                                CFG_DYN_BOTH_LAZY, CFG_CATEGORY_GLOBAL));
777

778
  tsTimeToGetAvailableConn = TRANGE(tsTimeToGetAvailableConn, 20, 10000000);
22,700✔
779
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "timeToGetAvailableConn", tsTimeToGetAvailableConn, 20, 1000000, CFG_SCOPE_BOTH,
22,700!
780
                                CFG_DYN_BOTH_LAZY, CFG_CATEGORY_GLOBAL));
781
  tsNumOfTaskQueueThreads = tsNumOfCores * 2;
22,700✔
782
  tsNumOfTaskQueueThreads = TMAX(tsNumOfTaskQueueThreads, 16);
22,700✔
783

784
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfTaskQueueThreads", tsNumOfTaskQueueThreads, 4, 1024, CFG_SCOPE_CLIENT,
22,700!
785
                                CFG_DYN_CLIENT_LAZY, CFG_CATEGORY_LOCAL));
786
  TAOS_CHECK_RETURN(
22,700!
787
      cfgAddBool(pCfg, "experimental", tsExperimental, CFG_SCOPE_BOTH, CFG_DYN_BOTH_LAZY, CFG_CATEGORY_GLOBAL));
788
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "multiResultFunctionStarReturnTags", tsMultiResultFunctionStarReturnTags,
22,700!
789
                               CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
790
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "countAlwaysReturnValue", tsCountAlwaysReturnValue, 0, 1, CFG_SCOPE_BOTH,
22,700!
791
                                CFG_DYN_BOTH, CFG_CATEGORY_LOCAL));
792
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxTsmaCalcDelay", tsMaxTsmaCalcDelay, 600, 86400, CFG_SCOPE_CLIENT,
22,700!
793
                                CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
794
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tsmaDataDeleteMark", tsmaDataDeleteMark, 60 * 60 * 1000, INT64_MAX,
22,700!
795
                                CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
796

797
  TAOS_CHECK_RETURN(
22,700!
798
      cfgAddBool(pCfg, "streamCoverage", tsStreamCoverage, CFG_DYN_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
799

800
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "compareAsStrInGreatest", tsCompareAsStrInGreatest, CFG_SCOPE_CLIENT,
22,700!
801
                               CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
802

803
  TAOS_RETURN(TSDB_CODE_SUCCESS);
22,700✔
804
}
805

806
static int32_t taosAddSystemCfg(SConfig *pCfg) {
22,700✔
807
  SysNameInfo info = taosGetSysNameInfo();
22,700✔
808

809
  TAOS_CHECK_RETURN(cfgAddTimezone(pCfg, "timezone", tsTimezoneStr, CFG_SCOPE_BOTH, CFG_DYN_BOTH, CFG_CATEGORY_GLOBAL));
22,700!
810
  TAOS_CHECK_RETURN(cfgAddLocale(pCfg, "locale", tsLocale, CFG_SCOPE_BOTH, CFG_DYN_BOTH, CFG_CATEGORY_GLOBAL));
22,700!
811
  TAOS_CHECK_RETURN(cfgAddCharset(pCfg, "charset", tsCharset, CFG_SCOPE_BOTH, CFG_DYN_BOTH, CFG_CATEGORY_GLOBAL));
22,700!
812
  TAOS_CHECK_RETURN(
22,700!
813
      cfgAddBool(pCfg, "enableCoreFile", tsEnableCoreFile, CFG_SCOPE_BOTH, CFG_DYN_BOTH_LAZY, CFG_CATEGORY_GLOBAL));
814
  TAOS_CHECK_RETURN(
22,700!
815
      cfgAddFloat(pCfg, "numOfCores", tsNumOfCores, 1, 100000, CFG_SCOPE_BOTH, CFG_DYN_BOTH_LAZY, CFG_CATEGORY_LOCAL));
816

817
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "simdEnable", tsSIMDEnable, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
22,700!
818
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "AVX512Enable", tsAVX512Enable, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
22,700!
819
  TAOS_CHECK_RETURN(
22,700!
820
      cfgAddBool(pCfg, "tagFilterCache", tsTagFilterCache, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
821

822
  TAOS_CHECK_RETURN(
22,700!
823
      cfgAddInt64(pCfg, "openMax", tsOpenMax, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
824
#if !defined(_ALPINE)
825
  TAOS_CHECK_RETURN(
22,700!
826
      cfgAddInt64(pCfg, "streamMax", tsStreamMax, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
827
#endif
828
  TAOS_CHECK_RETURN(
22,700!
829
      cfgAddInt32(pCfg, "pageSizeKB", tsPageSizeKB, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
830
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "totalMemoryKB", tsTotalMemoryKB, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_NONE,
22,700!
831
                                CFG_CATEGORY_LOCAL));
832
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "os sysname", info.sysname, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
22,700!
833
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "os nodename", info.nodename, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
22,700!
834
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "os release", info.release, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
22,700!
835
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "os version", info.version, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
22,700!
836
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "os machine", info.machine, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
22,700!
837

838
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "version", td_version, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
22,700!
839
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "compatible_version", td_compatible_version, CFG_SCOPE_BOTH, CFG_DYN_NONE,
22,700!
840
                                 CFG_CATEGORY_LOCAL));
841
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "gitinfo", td_gitinfo, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
22,700!
842
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "buildinfo", td_buildinfo, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
22,700!
843

844
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "enableIpv6", tsEnableIpv6, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_GLOBAL));
22,700!
845
  TAOS_RETURN(TSDB_CODE_SUCCESS);
22,700✔
846
}
847

848
static int32_t taosAddServerCfg(SConfig *pCfg) {
5,669✔
849
  tsNumOfCommitThreads = tsNumOfCores / 2;
5,669✔
850
  tsNumOfCommitThreads = TRANGE(tsNumOfCommitThreads, 2, 4);
5,669✔
851

852
  tsNumOfSupportVnodes = tsNumOfCores * 2 + 5;
5,669✔
853
  tsNumOfSupportVnodes = TMAX(tsNumOfSupportVnodes, 2);
5,669✔
854

855
  tsNumOfMnodeReadThreads = tsNumOfCores / 8;
5,669✔
856
  tsNumOfMnodeReadThreads = TRANGE(tsNumOfMnodeReadThreads, 1, 4);
5,669✔
857

858
  tsNumOfVnodeQueryThreads = tsNumOfCores * 2;
5,669✔
859
  tsNumOfVnodeQueryThreads = TMAX(tsNumOfVnodeQueryThreads, 16);
5,669✔
860

861
  tsNumOfVnodeFetchThreads = tsNumOfCores / 4;
5,669✔
862
  tsNumOfVnodeFetchThreads = TMAX(tsNumOfVnodeFetchThreads, 4);
5,669✔
863

864
  tsNumOfVnodeRsmaThreads = tsNumOfCores / 4;
5,669✔
865
  tsNumOfVnodeRsmaThreads = TMAX(tsNumOfVnodeRsmaThreads, 4);
5,669✔
866

867
  tsNumOfQnodeQueryThreads = tsNumOfCores * 2;
5,669✔
868
  tsNumOfQnodeQueryThreads = TMAX(tsNumOfQnodeQueryThreads, 16);
5,669✔
869

870
  tsNumOfSnodeStreamThreads = tsNumOfCores / 4;
5,669✔
871
  tsNumOfSnodeStreamThreads = TRANGE(tsNumOfSnodeStreamThreads, 2, 4);
5,669✔
872

873
  tsNumOfSnodeWriteThreads = tsNumOfCores / 4;
5,669✔
874
  tsNumOfSnodeWriteThreads = TRANGE(tsNumOfSnodeWriteThreads, 2, 4);
5,669✔
875

876
  tsQueueMemoryAllowed = tsTotalMemoryKB * 1024 * RPC_MEMORY_USAGE_RATIO * QUEUE_MEMORY_USAGE_RATIO;
5,669✔
877
  tsQueueMemoryAllowed = TRANGE(tsQueueMemoryAllowed, TSDB_MAX_MSG_SIZE * QUEUE_MEMORY_USAGE_RATIO * 10LL,
5,669!
878
                                TSDB_MAX_MSG_SIZE * QUEUE_MEMORY_USAGE_RATIO * 10000LL);
879

880
  tsApplyMemoryAllowed = tsTotalMemoryKB * 1024 * RPC_MEMORY_USAGE_RATIO * (1 - QUEUE_MEMORY_USAGE_RATIO);
5,669✔
881
  tsApplyMemoryAllowed = TRANGE(tsApplyMemoryAllowed, TSDB_MAX_MSG_SIZE * (1 - QUEUE_MEMORY_USAGE_RATIO) * 10LL,
5,669!
882
                                TSDB_MAX_MSG_SIZE * (1 - QUEUE_MEMORY_USAGE_RATIO) * 10000LL);
883

884
  tsLogBufferMemoryAllowed = tsTotalMemoryKB * 1024 * 0.1;
5,669✔
885
  tsLogBufferMemoryAllowed = TRANGE(tsLogBufferMemoryAllowed, TSDB_MAX_MSG_SIZE * 10LL, TSDB_MAX_MSG_SIZE * 10000LL);
5,669✔
886

887
  // clang-format off
888
  TAOS_CHECK_RETURN(cfgAddDir(pCfg, "dataDir", tsDataDir, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
5,669!
889
  TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "minimalDataDirGB", 2.0f, 0.001f, 10000000, CFG_SCOPE_SERVER, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
5,669!
890
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "supportVnodes", tsNumOfSupportVnodes, 0, 4096, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER, CFG_CATEGORY_LOCAL));
5,669!
891

892
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "encryptAlgorithm", tsEncryptAlgorithm, CFG_SCOPE_SERVER, CFG_DYN_NONE, CFG_CATEGORY_GLOBAL));
5,669!
893
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "encryptScope", tsEncryptScope, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_GLOBAL));
5,669!
894
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "enableStrongPassword", tsEnableStrongPassword, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
895

896
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "statusInterval", tsStatusInterval, 1, 30, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
5,669!
897
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxShellConns", tsMaxShellConns, 10, 50000000, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY, CFG_CATEGORY_LOCAL));
5,669!
898

899
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryBufferSize", tsQueryBufferSize, -1, 500000000000, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY, CFG_CATEGORY_LOCAL));
5,669!
900
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryRspPolicy", tsQueryRspPolicy, 0, 1, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
901
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfCommitThreads", tsNumOfCommitThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
5,669!
902
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfCompactThreads", tsNumOfCompactThreads, 1, 16, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_LOCAL));
5,669!
903
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "retentionSpeedLimitMB", tsRetentionSpeedLimitMB, 0, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
904
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "queryUseMemoryPool", tsQueryUseMemoryPool, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL) != 0);
5,669!
905
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "memPoolFullFunc", tsMemPoolFullFunc, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL) != 0);
5,669!
906
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "singleQueryMaxMemorySize", tsSingleQueryMaxMemorySize, 0, 1000000000, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL) != 0);
5,669!
907
  //TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryBufferPoolSize", tsQueryBufferPoolSize, 0, 1000000000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0);
908
  TAOS_CHECK_RETURN(cfgAddInt32Ex(pCfg, "minReservedMemorySize", 0, 1024, 1000000000, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_LOCAL) != 0);
5,669!
909
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryNoFetchTimeoutSec", tsQueryNoFetchTimeoutSec, 60, 1000000000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_LOCAL) != 0);
5,669!
910

911
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfMnodeReadThreads", tsNumOfMnodeReadThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
5,669!
912
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfVnodeQueryThreads", tsNumOfVnodeQueryThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
5,669!
913
  TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "ratioOfVnodeStreamThreads", tsRatioOfVnodeStreamThreads, 0.01, 4, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
5,669!
914
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfVnodeFetchThreads", tsNumOfVnodeFetchThreads, 4, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
5,669!
915

916
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfVnodeRsmaThreads", tsNumOfVnodeRsmaThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
5,669!
917
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfQnodeQueryThreads", tsNumOfQnodeQueryThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
5,669!
918

919
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfSnodeSharedThreads", tsNumOfSnodeStreamThreads, 2, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
5,669!
920
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfSnodeUniqueThreads", tsNumOfSnodeWriteThreads, 2, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
5,669!
921
  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));
5,669!
922
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncElectInterval", tsElectInterval, 10, 1000 * 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
923
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncHeartbeatInterval", tsHeartbeatInterval, 10, 1000 * 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
924
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncHeartbeatTimeout", tsHeartbeatTimeout, 10, 1000 * 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
925
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncSnapReplMaxWaitN", tsSnapReplMaxWaitN, 16, (TSDB_SYNC_SNAP_BUFFER_SIZE >> 2), CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
926
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "syncLogBufferMemoryAllowed", tsLogBufferMemoryAllowed, TSDB_MAX_MSG_SIZE * 10L, INT64_MAX, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_LOCAL));
5,669!
927
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncRoutineReportInterval", tsRoutineReportInterval, 5, 600, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_LOCAL));
5,669!
928

929
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "arbHeartBeatIntervalSec", tsArbHeartBeatIntervalSec, 1, 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
930
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "arbCheckSyncIntervalSec", tsArbCheckSyncIntervalSec, 1, 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
931
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "arbSetAssignedTimeoutSec", tsArbSetAssignedTimeoutSec, 1, 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
932

933
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "mndSdbWriteDelta", tsMndSdbWriteDelta, 20, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
934
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "mndLogRetention", tsMndLogRetention, 500, 10000, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
935
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "skipGrant", tsMndSkipGrant, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_GLOBAL));
5,669!
936

937
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "monitor", tsEnableMonitor, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
938
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "monitorInterval", tsMonitorInterval, 1, 86400, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
939

940
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "slowLogThreshold", tsSlowLogThreshold, 1, INT32_MAX, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
941
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "slowLogMaxLen", tsSlowLogMaxLen, 1, 16384, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
942
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "slowLogScope", tsSlowLogScopeString, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
943
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "slowLogExceptDb", tsSlowLogExceptDb, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
944

945
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "monitorFqdn", tsMonitorFqdn, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY, CFG_CATEGORY_LOCAL));
5,669!
946
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "monitorPort", tsMonitorPort, 1, 65056, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY, CFG_CATEGORY_LOCAL));
5,669!
947
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "monitorMaxLogs", tsMonitorMaxLogs, 1, 1000000, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
948
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "monitorComp", tsMonitorComp, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
5,669!
949
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "monitorLogProtocol", tsMonitorLogProtocol, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
950
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "monitorForceV2", tsMonitorForceV2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
951

952
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "audit", tsEnableAudit, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
953
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "enableAuditDelete", tsEnableAuditDelete, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_GLOBAL));
5,669!
954
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "auditCreateTable", tsEnableAuditCreateTable, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
955
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "auditInterval", tsAuditInterval, 500, 200000, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
956

957
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "telemetryReporting", tsEnableTelem, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
958
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "telemetryInterval", tsTelemInterval, 1, 200000, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
959
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "telemetryServer", tsTelemServer, CFG_SCOPE_SERVER, CFG_DYN_BOTH,CFG_CATEGORY_GLOBAL));
5,669!
960
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "telemetryPort", tsTelemPort, 1, 65056, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
5,669!
961

962
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "rsyncPort", tsRsyncPort, 1, 65535, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
5,669!
963
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "snodeAddress", tsSnodeAddress, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
5,669!
964
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "checkpointBackupDir", tsCheckpointBackupDir, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
5,669!
965

966
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tmqMaxTopicNum", tmqMaxTopicNum, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
967

968
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tmqRowSize", tmqRowSize, 1, 1000000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
969

970
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxTsmaNum", tsMaxTsmaNum, 0, 3, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
971
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "diskIDCheckEnabled", tsDiskIDCheckEnabled,  CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
5,669!
972
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "transPullupInterval", tsTransPullupInterval, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
973
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "compactPullupInterval", tsCompactPullupInterval, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
974
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "mqRebalanceInterval", tsMqRebalanceInterval, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
975

976
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "ttlUnit", tsTtlUnit, 1, 86400 * 365, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
977
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "ttlPushInterval", tsTtlPushIntervalSec, 1, 100000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
978
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "ttlBatchDropNum", tsTtlBatchDropNum, 0, INT32_MAX, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
979
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "ttlChangeOnWrite", tsTtlChangeOnWrite, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
980
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "ttlFlushThreshold", tsTtlFlushThreshold, -1, 1000000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
981
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "trimVDbIntervalSec", tsTrimVDbIntervalSec, 1, 100000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
982
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "s3MigrateIntervalSec", tsS3MigrateIntervalSec, 600, 100000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
983
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "s3MigrateEnabled", tsS3MigrateEnabled, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
984
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "uptimeInterval", tsUptimeInterval, 1, 100000, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
985
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryRsmaTolerance", tsQueryRsmaTolerance, 0, 900000, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
986
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "timeseriesThreshold", tsTimeSeriesThreshold, 0, 2000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
987

988
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "walFsyncDataSizeLimit", tsWalFsyncDataSizeLimit, 100 * 1024 * 1024, INT64_MAX, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
989

990
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "udf", tsStartUdfd, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
5,669!
991
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "udfdResFuncs", tsUdfdResFuncs, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
5,669!
992
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "udfdLdLibPath", tsUdfdLdLibPath, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
5,669!
993

994
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "disableStream", tsDisableStream, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
5,669!
995
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "streamBufferSize", tsStreamBufferSize, 0, INT64_MAX, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
5,669!
996
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "streamFailedTimeout", tsStreamFailedTimeout, 0, INT64_MAX, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
5,669!
997
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "streamAggCnt", tsStreamAggCnt, 2, INT32_MAX, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_GLOBAL));
5,669!
998

999
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "checkpointInterval", tsStreamCheckpointInterval, 60, 1800, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
1000
  TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "streamSinkDataRate", tsSinkDataRate, 0.1, 5, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY, CFG_CATEGORY_GLOBAL));
5,669!
1001
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "concurrentCheckpoint", tsMaxConcurrentCheckpoint, 1, 10, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
1002
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "itemsInWriteQ", tsThresholdItemsInWriteQueue, 100, 100000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
1003
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "itemsInStreamQ", tsThresholdItemsInStreamQueue, 10, 5000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
1004

1005
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "cacheLazyLoadThreshold", tsCacheLazyLoadThreshold, 0, 100000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
1006

1007
  TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "fPrecision", tsFPrecision, 0.0f, 100000.0f, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
1008
  TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "dPrecision", tsDPrecision, 0.0f, 1000000.0f, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
1009
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxRange", tsMaxRange, 0, 65536, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
5,669!
1010
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "curRange", tsCurRange, 0, 65536, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
5,669!
1011
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "ifAdtFse", tsIfAdtFse, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
5,669!
1012
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "compressor", tsCompressor, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
5,669!
1013

1014
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "filterScalarMode", tsFilterScalarMode, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
5,669!
1015
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxStreamBackendCache", tsMaxStreamBackendCache, 16, 1024, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER_LAZY,CFG_CATEGORY_LOCAL));
5,669!
1016
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "pqSortMemThreshold", tsPQSortMemThreshold, 1, 10240, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
5,669!
1017

1018
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "s3Accesskey", tsS3AccessKey[0], CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
5,669!
1019
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "s3Endpoint", tsS3Endpoint[0], CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
5,669!
1020
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "s3BucketName", tsS3BucketName, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER_LAZY,CFG_CATEGORY_LOCAL));
5,669!
1021

1022
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "s3PageCacheSize", tsS3PageCacheSize, 4, 1024 * 1024 * 1024, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
5,669!
1023
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "s3UploadDelaySec", tsS3UploadDelaySec, 1, 60 * 60 * 24 * 30, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
1024

1025
  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));
5,669!
1026
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "enableWhiteList", tsEnableWhiteList, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
5,669!
1027
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "forceKillTrans", tsForceKillTrans, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_GLOBAL));
5,669!
1028

1029
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "streamNotifyMessageSize", tsStreamNotifyMessageSize, 8, 1024 * 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
5,669!
1030
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "streamNotifyFrameSize", tsStreamNotifyFrameSize, 8, 1024 * 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
5,669!
1031

1032
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "adapterFqdn", tsAdapterFqdn, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY, CFG_CATEGORY_LOCAL));
5,669!
1033
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "adapterPort", tsAdapterPort, 1, 65056, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY, CFG_CATEGORY_LOCAL));
5,669!
1034
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "adapterToken", tsAdapterToken, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY, CFG_CATEGORY_LOCAL));
5,669!
1035

1036
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "streamVirtualMergeMaxDelay", tsStreamVirtualMergeMaxDelayMs, 500, 10 * 60 * 1000, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
5,669!
1037
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "streamVirtualMergeMaxMem", tsStreamVirtualMergeMaxMemKb, 8 * 1024, 1 * 1024 * 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
5,669!
1038
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "streamVirtualMergeWaitMode", tsStreamVirtualMergeWaitMode, 0, 2, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
5,669!
1039

1040
  // clang-format on
1041

1042
  // GRANT_CFG_ADD;
1043
  TAOS_RETURN(TSDB_CODE_SUCCESS);
5,669✔
1044
}
1045

1046
static int32_t taosUpdateServerCfg(SConfig *pCfg) {
7,905✔
1047
  SConfigItem *pItem;
1048
  ECfgSrcType  stype;
1049
  int32_t      numOfCores;
1050
  int64_t      totalMemoryKB;
1051

1052
  pItem = cfgGetItem(pCfg, "numOfCores");
7,905✔
1053
  if (pItem == NULL) {
7,905!
1054
    TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND);
×
1055
  } else {
1056
    stype = pItem->stype;
7,905✔
1057
    numOfCores = pItem->fval;
7,905✔
1058
  }
1059

1060
  pItem = cfgGetItem(pCfg, "supportVnodes");
7,905✔
1061
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
7,905!
1062
    tsNumOfSupportVnodes = numOfCores * 2 + 5;
26✔
1063
    tsNumOfSupportVnodes = TMAX(tsNumOfSupportVnodes, 2);
26✔
1064
    pItem->i32 = tsNumOfSupportVnodes;
26✔
1065
    pItem->stype = stype;
26✔
1066
  }
1067

1068
  pItem = cfgGetItem(pCfg, "numOfRpcThreads");
7,905✔
1069
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
7,905!
1070
    tsNumOfRpcThreads = TRANGE(tsNumOfRpcThreads, 1, TSDB_MAX_RPC_THREADS);
7,905✔
1071
    pItem->i32 = tsNumOfRpcThreads;
7,905✔
1072
    pItem->stype = stype;
7,905✔
1073
  }
1074

1075
  pItem = cfgGetItem(pCfg, "numOfRpcSessions");
7,905✔
1076
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
7,905!
1077
    tsNumOfRpcSessions = TRANGE(tsNumOfRpcSessions, 100, 10000);
7,905✔
1078
    pItem->i32 = tsNumOfRpcSessions;
7,905✔
1079
    pItem->stype = stype;
7,905✔
1080
  }
1081

1082
  pItem = cfgGetItem(pCfg, "shareConnLimit");
7,905✔
1083
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
7,905!
1084
    tsShareConnLimit = TRANGE(tsShareConnLimit, 1, 512);
7,905✔
1085
    pItem->i32 = tsShareConnLimit;
7,905✔
1086
    pItem->stype = stype;
7,905✔
1087
  }
1088

1089
  pItem = cfgGetItem(pCfg, "readTimeout");
7,905✔
1090
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
7,905!
1091
    tsReadTimeout = TRANGE(tsReadTimeout, 64, 24 * 3600 * 7);
7,905✔
1092
    pItem->i32 = tsReadTimeout;
7,905✔
1093
    pItem->stype = stype;
7,905✔
1094
  }
1095

1096
  pItem = cfgGetItem(pCfg, "timeToGetAvailableConn");
7,905✔
1097
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
7,905!
1098
    tsTimeToGetAvailableConn = TRANGE(tsTimeToGetAvailableConn, 20, 1000000);
7,905✔
1099
    pItem->i32 = tsTimeToGetAvailableConn;
7,905✔
1100
    pItem->stype = stype;
7,905✔
1101
  }
1102

1103
  pItem = cfgGetItem(pCfg, "numOfCommitThreads");
7,905✔
1104
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
7,905!
1105
    tsNumOfCommitThreads = numOfCores / 2;
7,905✔
1106
    tsNumOfCommitThreads = TRANGE(tsNumOfCommitThreads, 2, 4);
7,905✔
1107
    pItem->i32 = tsNumOfCommitThreads;
7,905✔
1108
    pItem->stype = stype;
7,905✔
1109
  }
1110

1111
  pItem = cfgGetItem(pCfg, "numOfCompactThreads");
7,905✔
1112
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
7,905!
1113
    pItem->i32 = tsNumOfCompactThreads;
7,905✔
1114
    pItem->stype = stype;
7,905✔
1115
  }
1116

1117
  pItem = cfgGetItem(pCfg, "numOfMnodeReadThreads");
7,905✔
1118
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
7,905!
1119
    tsNumOfMnodeReadThreads = numOfCores / 8;
7,905✔
1120
    tsNumOfMnodeReadThreads = TRANGE(tsNumOfMnodeReadThreads, 1, 4);
7,905✔
1121
    pItem->i32 = tsNumOfMnodeReadThreads;
7,905✔
1122
    pItem->stype = stype;
7,905✔
1123
  }
1124

1125
  pItem = cfgGetItem(pCfg, "numOfVnodeQueryThreads");
7,905✔
1126
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
7,905!
1127
    tsNumOfVnodeQueryThreads = numOfCores * 2;
7,893✔
1128
    tsNumOfVnodeQueryThreads = TMAX(tsNumOfVnodeQueryThreads, 16);
7,893✔
1129
    pItem->i32 = tsNumOfVnodeQueryThreads;
7,893✔
1130
    pItem->stype = stype;
7,893✔
1131
  }
1132

1133
  pItem = cfgGetItem(pCfg, "ratioOfVnodeStreamThreads");
7,905✔
1134
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
7,905!
1135
    pItem->fval = tsRatioOfVnodeStreamThreads;
7,900✔
1136
    pItem->stype = stype;
7,900✔
1137
  }
1138

1139
  pItem = cfgGetItem(pCfg, "itemsInWriteQ");
7,905✔
1140
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
7,905!
1141
    pItem->i32 = tsThresholdItemsInWriteQueue;
7,905✔
1142
    pItem->stype = stype;
7,905✔
1143
  }
1144

1145
  pItem = cfgGetItem(pCfg, "itemsInStreamQ");
7,905✔
1146
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
7,905!
1147
    pItem->i32 = tsThresholdItemsInStreamQueue;
7,905✔
1148
    pItem->stype = stype;
7,905✔
1149
  }
1150

1151
  pItem = cfgGetItem(pCfg, "numOfVnodeFetchThreads");
7,905✔
1152
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
7,905!
1153
    tsNumOfVnodeFetchThreads = numOfCores / 4;
7,905✔
1154
    tsNumOfVnodeFetchThreads = TMAX(tsNumOfVnodeFetchThreads, 4);
7,905✔
1155
    pItem->i32 = tsNumOfVnodeFetchThreads;
7,905✔
1156
    pItem->stype = stype;
7,905✔
1157
  }
1158

1159
  pItem = cfgGetItem(pCfg, "numOfVnodeRsmaThreads");
7,905✔
1160
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
7,905!
1161
    tsNumOfVnodeRsmaThreads = numOfCores;
7,905✔
1162
    tsNumOfVnodeRsmaThreads = TMAX(tsNumOfVnodeRsmaThreads, 4);
7,905✔
1163
    pItem->i32 = tsNumOfVnodeRsmaThreads;
7,905✔
1164
    pItem->stype = stype;
7,905✔
1165
  }
1166

1167
  pItem = cfgGetItem(pCfg, "numOfQnodeQueryThreads");
7,905✔
1168
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
7,905!
1169
    tsNumOfQnodeQueryThreads = numOfCores * 2;
7,905✔
1170
    tsNumOfQnodeQueryThreads = TMAX(tsNumOfQnodeQueryThreads, 16);
7,905✔
1171
    pItem->i32 = tsNumOfQnodeQueryThreads;
7,905✔
1172
    pItem->stype = stype;
7,905✔
1173
  }
1174

1175
  pItem = cfgGetItem(pCfg, "numOfSnodeSharedThreads");
7,905✔
1176
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
7,905!
1177
    tsNumOfSnodeStreamThreads = numOfCores / 4;
7,905✔
1178
    tsNumOfSnodeStreamThreads = TRANGE(tsNumOfSnodeStreamThreads, 2, 4);
7,905✔
1179
    pItem->i32 = tsNumOfSnodeStreamThreads;
7,905✔
1180
    pItem->stype = stype;
7,905✔
1181
  }
1182

1183
  pItem = cfgGetItem(pCfg, "numOfSnodeUniqueThreads");
7,905✔
1184
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
7,905!
1185
    tsNumOfSnodeWriteThreads = numOfCores / 4;
7,905✔
1186
    tsNumOfSnodeWriteThreads = TRANGE(tsNumOfSnodeWriteThreads, 2, 4);
7,905✔
1187
    pItem->i32 = tsNumOfSnodeWriteThreads;
7,905✔
1188
    pItem->stype = stype;
7,905✔
1189
  }
1190

1191
  pItem = cfgGetItem(pCfg, "totalMemoryKB");
7,905✔
1192
  if (pItem == NULL) {
7,905!
1193
    TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND);
×
1194
  } else {
1195
    stype = pItem->stype;
7,905✔
1196
    totalMemoryKB = pItem->i64;
7,905✔
1197
  }
1198

1199
  pItem = cfgGetItem(pCfg, "rpcQueueMemoryAllowed");
7,905✔
1200
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
7,905!
1201
    tsQueueMemoryAllowed = totalMemoryKB * 1024 * 0.1;
7,896✔
1202
    tsQueueMemoryAllowed = TRANGE(tsQueueMemoryAllowed, TSDB_MAX_MSG_SIZE * 10LL, TSDB_MAX_MSG_SIZE * 10000LL);
7,896✔
1203
    pItem->i64 = tsQueueMemoryAllowed;
7,896✔
1204
    pItem->stype = stype;
7,896✔
1205
  }
1206

1207
  pItem = cfgGetItem(tsCfg, "syncLogBufferMemoryAllowed");
7,905✔
1208
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
7,905!
1209
    tsLogBufferMemoryAllowed = totalMemoryKB * 1024 * 0.1;
7,901✔
1210
    tsLogBufferMemoryAllowed = TRANGE(tsLogBufferMemoryAllowed, TSDB_MAX_MSG_SIZE * 10LL, TSDB_MAX_MSG_SIZE * 10000LL);
7,901✔
1211
    pItem->i64 = tsLogBufferMemoryAllowed;
7,901✔
1212
    pItem->stype = stype;
7,901✔
1213
  }
1214

1215
  TAOS_RETURN(TSDB_CODE_SUCCESS);
7,905✔
1216
}
1217

1218
static int32_t taosSetLogOutput(SConfig *pCfg) {
45,396✔
1219
  if (tsLogOutput) {
45,396✔
1220
    char *pLog = tsLogOutput;
35✔
1221
    char *pEnd = NULL;
35✔
1222
    if (strcasecmp(pLog, "stdout") && strcasecmp(pLog, "stderr") && strcasecmp(pLog, "/dev/null")) {
35!
1223
      if ((pEnd = strrchr(pLog, '/')) || (pEnd = strrchr(pLog, '\\'))) {
27!
1224
        int32_t pathLen = POINTER_DISTANCE(pEnd, pLog) + 1;
19✔
1225
        if (*pLog == '/' || *pLog == '\\') {
19!
1226
          if (pathLen <= 0 || pathLen > PATH_MAX) TAOS_RETURN(TSDB_CODE_OUT_OF_RANGE);
9!
1227
          tstrncpy(tsLogDir, pLog, pathLen);
9✔
1228
        } else {
1229
          int32_t len = strlen(tsLogDir);
10✔
1230
          if (len < 0 || len >= (PATH_MAX - 1)) TAOS_RETURN(TSDB_CODE_OUT_OF_RANGE);
10!
1231
          if (len == 0 || (tsLogDir[len - 1] != '/' && tsLogDir[len - 1] != '\\')) {
10!
1232
            tsLogDir[len++] = TD_DIRSEP_CHAR;
10✔
1233
          }
1234
          int32_t remain = PATH_MAX - len - 1;
10✔
1235
          if (remain < pathLen) TAOS_RETURN(TSDB_CODE_OUT_OF_RANGE);
10!
1236
          tstrncpy(tsLogDir + len, pLog, pathLen);
10✔
1237
        }
1238
        TAOS_CHECK_RETURN(cfgSetItem(pCfg, "logDir", tsLogDir, CFG_STYPE_DEFAULT, true));
19!
1239
      }
1240
    } else {
1241
      tstrncpy(tsLogDir, pLog, PATH_MAX);
8✔
1242
      TAOS_CHECK_RETURN(cfgSetItem(pCfg, "logDir", tsLogDir, CFG_STYPE_DEFAULT, true));
8!
1243
    }
1244
  }
1245
  return 0;
45,396✔
1246
}
1247

1248
static int32_t taosSetClientLogCfg(SConfig *pCfg) {
45,396✔
1249
  SConfigItem *pItem = NULL;
45,396✔
1250

1251
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "logDir");
45,396!
1252
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, PATH_MAX));
45,396!
1253
  tstrncpy(tsLogDir, pItem->str, PATH_MAX);
45,396✔
1254
  TAOS_CHECK_RETURN(taosExpandDir(tsLogDir, tsLogDir, PATH_MAX));
45,396!
1255
  TAOS_CHECK_RETURN(taosSetLogOutput(pCfg));
45,396!
1256

1257
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minimalLogDirGB");
45,396!
1258
  tsLogSpace.reserved = (int64_t)(((double)pItem->fval) * 1024 * 1024 * 1024);
45,396✔
1259

1260
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfLogLines");
45,396!
1261
  tsNumOfLogLines = pItem->i32;
45,396✔
1262

1263
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "asyncLog");
45,396!
1264
  tsAsyncLog = pItem->bval;
45,396✔
1265

1266
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "logKeepDays");
45,396!
1267
  tsLogKeepDays = pItem->i32;
45,396✔
1268

1269
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tmrDebugFlag");
45,396!
1270
  tmrDebugFlag = pItem->i32;
45,396✔
1271

1272
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "uDebugFlag");
45,396!
1273
  uDebugFlag = pItem->i32;
45,396✔
1274

1275
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "jniDebugFlag");
45,396!
1276
  jniDebugFlag = pItem->i32;
45,396✔
1277

1278
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "rpcDebugFlag");
45,396!
1279
  rpcDebugFlag = pItem->i32;
45,396✔
1280

1281
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "qDebugFlag");
45,396!
1282
  qDebugFlag = pItem->i32;
45,396✔
1283

1284
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "cDebugFlag");
45,396!
1285
  cDebugFlag = pItem->i32;
45,396✔
1286

1287
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "simDebugFlag");
45,396!
1288
  simDebugFlag = pItem->i32;
45,396✔
1289

1290
  TAOS_RETURN(TSDB_CODE_SUCCESS);
45,396✔
1291
}
1292

1293
static int32_t taosSetServerLogCfg(SConfig *pCfg) {
5,669✔
1294
  SConfigItem *pItem = NULL;
5,669✔
1295
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "dDebugFlag");
5,669!
1296
  dDebugFlag = pItem->i32;
5,669✔
1297

1298
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "vDebugFlag");
5,669!
1299
  vDebugFlag = pItem->i32;
5,669✔
1300

1301
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "mDebugFlag");
5,669!
1302
  mDebugFlag = pItem->i32;
5,669✔
1303

1304
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "wDebugFlag");
5,669!
1305
  wDebugFlag = pItem->i32;
5,669✔
1306

1307
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "azDebugFlag");
5,669!
1308
  azDebugFlag = pItem->i32;
5,669✔
1309

1310
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "sDebugFlag");
5,669!
1311
  sDebugFlag = pItem->i32;
5,669✔
1312

1313
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tsdbDebugFlag");
5,669!
1314
  tsdbDebugFlag = pItem->i32;
5,669✔
1315

1316
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tqDebugFlag");
5,669!
1317
  tqDebugFlag = pItem->i32;
5,669✔
1318

1319
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "fsDebugFlag");
5,669!
1320
  fsDebugFlag = pItem->i32;
5,669✔
1321

1322
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "udfDebugFlag");
5,669!
1323
  udfDebugFlag = pItem->i32;
5,669✔
1324

1325
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "smaDebugFlag");
5,669!
1326
  smaDebugFlag = pItem->i32;
5,669✔
1327

1328
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "idxDebugFlag");
5,669!
1329
  idxDebugFlag = pItem->i32;
5,669✔
1330

1331
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tdbDebugFlag");
5,669!
1332
  tdbDebugFlag = pItem->i32;
5,669✔
1333

1334
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "metaDebugFlag");
5,669!
1335
  metaDebugFlag = pItem->i32;
5,669✔
1336

1337
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "stDebugFlag");
5,669!
1338
  stDebugFlag = pItem->i32;
5,669✔
1339

1340
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "sndDebugFlag");
5,669!
1341
  sndDebugFlag = pItem->i32;
5,669✔
1342

1343
  TAOS_RETURN(TSDB_CODE_SUCCESS);
5,669✔
1344
}
1345

1346
int32_t taosSetSlowLogScope(char *pScopeStr, int32_t *pScope) {
7,913✔
1347
  if (NULL == pScopeStr || 0 == strlen(pScopeStr)) {
7,913!
1348
    *pScope = SLOW_LOG_TYPE_QUERY;
×
1349
    TAOS_RETURN(TSDB_CODE_SUCCESS);
×
1350
  }
1351

1352
  int32_t slowScope = 0;
7,913✔
1353

1354
  char *scope = NULL;
7,913✔
1355
  char *tmp = NULL;
7,913✔
1356
  while ((scope = strsep(&pScopeStr, "|")) != NULL) {
15,826✔
1357
    taosMemoryFreeClear(tmp);
7,913!
1358
    tmp = taosStrdup(scope);
7,913!
1359
    if (tmp == NULL) {
7,913!
1360
      TAOS_RETURN(terrno);
×
1361
    }
1362
    (void)strtrim(tmp);
7,913✔
1363
    if (0 == strcasecmp(tmp, "all")) {
7,913!
1364
      slowScope |= SLOW_LOG_TYPE_ALL;
×
1365
      continue;
×
1366
    }
1367

1368
    if (0 == strcasecmp(tmp, "query")) {
7,913✔
1369
      slowScope |= SLOW_LOG_TYPE_QUERY;
7,899✔
1370
      continue;
7,899✔
1371
    }
1372

1373
    if (0 == strcasecmp(tmp, "insert")) {
14!
1374
      slowScope |= SLOW_LOG_TYPE_INSERT;
14✔
1375
      continue;
14✔
1376
    }
1377

1378
    if (0 == strcasecmp(tmp, "others")) {
×
1379
      slowScope |= SLOW_LOG_TYPE_OTHERS;
×
1380
      continue;
×
1381
    }
1382

1383
    if (0 == strcasecmp(tmp, "none")) {
×
1384
      slowScope |= SLOW_LOG_TYPE_NULL;
×
1385
      continue;
×
1386
    }
1387

1388
    taosMemoryFreeClear(tmp);
×
1389
    uError("Invalid slowLog scope value:%s", pScopeStr);
×
1390
    TAOS_RETURN(TSDB_CODE_INVALID_CFG_VALUE);
×
1391
  }
1392

1393
  *pScope = slowScope;
7,913✔
1394
  taosMemoryFreeClear(tmp);
7,913!
1395
  TAOS_RETURN(TSDB_CODE_SUCCESS);
7,913✔
1396
}
1397

1398
// for common configs
1399
static int32_t taosSetClientCfg(SConfig *pCfg) {
24,944✔
1400
  SConfigItem *pItem = NULL;
24,944✔
1401

1402
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "fqdn");
24,944✔
1403
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_FQDN_LEN));
24,936!
1404
  tstrncpy(tsLocalFqdn, pItem->str, TSDB_FQDN_LEN);
24,936✔
1405

1406
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "forceReadConfig");
24,936!
1407
  tsForceReadConfig = pItem->bval;
24,936✔
1408

1409
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "serverPort");
24,936!
1410
  tsServerPort = (uint16_t)pItem->i32;
24,936✔
1411
  (void)snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
24,936✔
1412

1413
  char defaultFirstEp[TSDB_EP_LEN] = {0};
24,936✔
1414
  (void)snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort);
24,936✔
1415

1416
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableIpv6");
24,936!
1417
  tsEnableIpv6 = pItem->bval;
24,936✔
1418

1419
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "firstEp");
24,936!
1420
  SEp firstEp = {0};
24,936✔
1421
  TAOS_CHECK_RETURN(taosGetFqdnPortFromEp(strlen(pItem->str) == 0 ? defaultFirstEp : pItem->str, &firstEp));
24,936!
1422
  (void)snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port);
24,936✔
1423
  TAOS_CHECK_RETURN(cfgSetItem(pCfg, "firstEp", tsFirst, pItem->stype, true));
24,936!
1424

1425
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "secondEp");
24,936!
1426
  SEp secondEp = {0};
24,936✔
1427
  TAOS_CHECK_RETURN(taosGetFqdnPortFromEp(strlen(pItem->str) == 0 ? defaultFirstEp : pItem->str, &secondEp));
24,936!
1428
  (void)snprintf(tsSecond, sizeof(tsSecond), "%s:%u", secondEp.fqdn, secondEp.port);
24,936✔
1429
  TAOS_CHECK_RETURN(cfgSetItem(pCfg, "secondEp", tsSecond, pItem->stype, true));
24,936!
1430

1431
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tempDir");
24,936!
1432
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, PATH_MAX));
24,936!
1433
  tstrncpy(tsTempDir, pItem->str, PATH_MAX);
24,936✔
1434
  TAOS_CHECK_RETURN(taosExpandDir(tsTempDir, tsTempDir, PATH_MAX));
24,936!
1435

1436
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minimalTmpDirGB");
24,936!
1437
  tsTempSpace.reserved = (int64_t)(((double)pItem->fval) * 1024 * 1024 * 1024);
24,936✔
1438
  if (taosMulMkDir(tsTempDir) != 0) {
24,936!
1439
    int32_t code = TAOS_SYSTEM_ERROR(ERRNO);
×
1440
    uError("failed to create tempDir:%s since %s", tsTempDir, tstrerror(code));
×
1441
    TAOS_RETURN(code);
×
1442
  }
1443

1444
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "smlAutoChildTableNameDelimiter");
24,936!
1445
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_TABLE_NAME_LEN));
24,936!
1446
  tstrncpy(tsSmlAutoChildTableNameDelimiter, pItem->str, TSDB_TABLE_NAME_LEN);
24,936✔
1447

1448
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "smlChildTableName");
24,936!
1449
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_TABLE_NAME_LEN));
24,936!
1450
  tstrncpy(tsSmlChildTableName, pItem->str, TSDB_TABLE_NAME_LEN);
24,936✔
1451

1452
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "smlTagName");
24,936!
1453
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_COL_NAME_LEN));
24,936!
1454
  tstrncpy(tsSmlTagName, pItem->str, TSDB_COL_NAME_LEN);
24,936✔
1455

1456
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "smlTsDefaultName");
24,936!
1457
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_COL_NAME_LEN));
24,936!
1458
  tstrncpy(tsSmlTsDefaultName, pItem->str, TSDB_COL_NAME_LEN);
24,936✔
1459

1460
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "smlDot2Underline");
24,936!
1461
  tsSmlDot2Underline = pItem->bval;
24,936✔
1462

1463
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxInsertBatchRows");
24,936!
1464
  tsMaxInsertBatchRows = pItem->i32;
24,936✔
1465

1466
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "shellActivityTimer");
24,936!
1467
  tsShellActivityTimer = pItem->i32;
24,936✔
1468

1469
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "compressMsgSize");
24,936!
1470
  tsCompressMsgSize = pItem->i32;
24,936✔
1471

1472
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfTaskQueueThreads");
24,936!
1473
  tsNumOfTaskQueueThreads = pItem->i32;
24,936✔
1474

1475
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryPolicy");
24,936!
1476
  tsQueryPolicy = pItem->i32;
24,936✔
1477

1478
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryTableNotExistAsEmpty");
24,936!
1479
  tsQueryTbNotExistAsEmpty = pItem->bval;
24,936✔
1480

1481
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableQueryHb");
24,936!
1482
  tsEnableQueryHb = pItem->bval;
24,936✔
1483

1484
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableScience");
24,936!
1485
  tsEnableScience = pItem->bval;
24,936✔
1486

1487
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "querySmaOptimize");
24,936!
1488
  tsQuerySmaOptimize = pItem->i32;
24,936✔
1489

1490
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryPlannerTrace");
24,936!
1491
  tsQueryPlannerTrace = pItem->bval;
24,936✔
1492

1493
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryNodeChunkSize");
24,936!
1494
  tsQueryNodeChunkSize = pItem->i32;
24,936✔
1495

1496
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryUseNodeAllocator");
24,936!
1497
  tsQueryUseNodeAllocator = pItem->bval;
24,936✔
1498

1499
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "keepColumnName");
24,936!
1500
  tsKeepColumnName = pItem->bval;
24,936✔
1501

1502
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "useAdapter");
24,936!
1503
  tsUseAdapter = pItem->bval;
24,936✔
1504

1505
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "crashReporting");
24,936!
1506
  tsEnableCrashReport = pItem->bval;
24,936✔
1507

1508
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryMaxConcurrentTables");
24,936!
1509
  tsQueryMaxConcurrentTables = pItem->i64;
24,936✔
1510

1511
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "metaCacheMaxSize");
24,936!
1512
  tsMetaCacheMaxSize = pItem->i32;
24,936✔
1513

1514
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "randErrorChance");
24,936!
1515
  tsRandErrChance = pItem->i32;
24,936✔
1516

1517
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "randErrorDivisor");
24,936!
1518
  tsRandErrDivisor = pItem->i64;
24,936✔
1519

1520
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "randErrorScope");
24,936!
1521
  tsRandErrScope = pItem->i64;
24,936✔
1522

1523
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "countAlwaysReturnValue");
24,936!
1524
  tsCountAlwaysReturnValue = pItem->i32;
24,936✔
1525

1526
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxRetryWaitTime");
24,936!
1527
  tsMaxRetryWaitTime = pItem->i32;
24,936✔
1528

1529
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfRpcThreads");
24,936!
1530
  tsNumOfRpcThreads = pItem->i32;
24,936✔
1531

1532
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfRpcSessions");
24,936!
1533
  tsNumOfRpcSessions = pItem->i32;
24,936✔
1534

1535
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "shareConnLimit");
24,936!
1536
  tsShareConnLimit = pItem->i32;
24,936✔
1537

1538
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "readTimeout");
24,936!
1539
  tsReadTimeout = pItem->i32;
24,936✔
1540

1541
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "timeToGetAvailableConn");
24,936!
1542
  tsTimeToGetAvailableConn = pItem->i32;
24,936✔
1543

1544
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "experimental");
24,936!
1545
  tsExperimental = pItem->bval;
24,936✔
1546

1547
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "multiResultFunctionStarReturnTags");
24,936!
1548
  tsMultiResultFunctionStarReturnTags = pItem->bval;
24,936✔
1549

1550
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxTsmaCalcDelay");
24,936!
1551
  tsMaxTsmaCalcDelay = pItem->i32;
24,936✔
1552

1553
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tsmaDataDeleteMark");
24,936!
1554
  tsmaDataDeleteMark = pItem->i32;
24,936✔
1555

1556
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "safetyCheckLevel");
24,936!
1557
  tsSafetyCheckLevel = pItem->i32;
24,936✔
1558

1559
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "bypassFlag");
24,936!
1560
  tsBypassFlag = pItem->i32;
24,936✔
1561

1562
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamCoverage");
24,936!
1563
  tsStreamCoverage = pItem->bval;
24,936✔
1564

1565
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "compareAsStrInGreatest");
24,936!
1566
  tsCompareAsStrInGreatest = pItem->bval;
24,936✔
1567

1568
  TAOS_RETURN(TSDB_CODE_SUCCESS);
24,936✔
1569
}
1570

1571
static int32_t taosSetSystemCfg(SConfig *pCfg) {
24,936✔
1572
  SConfigItem *pItem = NULL;
24,936✔
1573

1574
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableCoreFile");
24,936!
1575
  tsEnableCoreFile = pItem->bval;
24,936✔
1576
  taosSetCoreDump(tsEnableCoreFile);
24,936✔
1577

1578
  // todo
1579
  tsVersion = 30000000;
24,936✔
1580

1581
  TAOS_RETURN(TSDB_CODE_SUCCESS);
24,936✔
1582
}
1583

1584
// for server configs
1585
static int32_t taosSetServerCfg(SConfig *pCfg) {
7,905✔
1586
  SConfigItem *pItem = NULL;
7,905✔
1587

1588
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minimalDataDirGB");
7,905!
1589
  tsDataSpace.reserved = (int64_t)(((double)pItem->fval) * 1024 * 1024 * 1024);
7,905✔
1590

1591
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "supportVnodes");
7,905!
1592
  tsNumOfSupportVnodes = pItem->i32;
7,905✔
1593

1594
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxShellConns");
7,905!
1595
  tsMaxShellConns = pItem->i32;
7,905✔
1596

1597
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "statusInterval");
7,905!
1598
  tsStatusInterval = pItem->i32;
7,905✔
1599

1600
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minSlidingTime");
7,905!
1601
  tsMinSlidingTime = pItem->i32;
7,905✔
1602

1603
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minIntervalTime");
7,905!
1604
  tsMinIntervalTime = pItem->i32;
7,905✔
1605

1606
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryBufferSize");
7,905!
1607
  tsQueryBufferSize = pItem->i32;
7,905✔
1608

1609
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "encryptAlgorithm");
7,905!
1610
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, 16));
7,905!
1611
  tstrncpy(tsEncryptAlgorithm, pItem->str, 16);
7,905✔
1612

1613
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "encryptScope");
7,905!
1614
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, 100));
7,905!
1615
  tstrncpy(tsEncryptScope, pItem->str, 100);
7,905✔
1616

1617
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableStrongPassword");
7,905!
1618
  tsEnableStrongPassword = pItem->i32;
7,905✔
1619

1620
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfRpcThreads");
7,905!
1621
  tsNumOfRpcThreads = pItem->i32;
7,905✔
1622

1623
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfRpcSessions");
7,905!
1624
  tsNumOfRpcSessions = pItem->i32;
7,905✔
1625

1626
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "shareConnLimit");
7,905!
1627
  tsShareConnLimit = pItem->i32;
7,905✔
1628

1629
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "readTimeout");
7,905!
1630
  tsReadTimeout = pItem->i32;
7,905✔
1631

1632
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "timeToGetAvailableConn");
7,905!
1633
  tsTimeToGetAvailableConn = pItem->i32;
7,905✔
1634

1635
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfCommitThreads");
7,905!
1636
  tsNumOfCommitThreads = pItem->i32;
7,905✔
1637

1638
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfCompactThreads");
7,905!
1639
  tsNumOfCompactThreads = pItem->i32;
7,905✔
1640

1641
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableIpv6");
7,905!
1642
  tsEnableIpv6 = pItem->bval;
7,905✔
1643

1644
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "retentionSpeedLimitMB");
7,905!
1645
  tsRetentionSpeedLimitMB = pItem->i32;
7,905✔
1646

1647
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfMnodeReadThreads");
7,905!
1648
  tsNumOfMnodeReadThreads = pItem->i32;
7,905✔
1649

1650
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfVnodeQueryThreads");
7,905!
1651
  tsNumOfVnodeQueryThreads = pItem->i32;
7,905✔
1652

1653
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ratioOfVnodeStreamThreads");
7,905!
1654
  tsRatioOfVnodeStreamThreads = pItem->fval;
7,905✔
1655

1656
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "itemsInWriteQ");
7,905!
1657
  tsThresholdItemsInWriteQueue = pItem->i32;
7,905✔
1658

1659
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "itemsInStreamQ");
7,905!
1660
  tsThresholdItemsInStreamQueue = pItem->i32;
7,905✔
1661

1662
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfVnodeFetchThreads");
7,905!
1663
  tsNumOfVnodeFetchThreads = pItem->i32;
7,905✔
1664

1665
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfVnodeRsmaThreads");
7,905!
1666
  tsNumOfVnodeRsmaThreads = pItem->i32;
7,905✔
1667

1668
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfQnodeQueryThreads");
7,905!
1669
  tsNumOfQnodeQueryThreads = pItem->i32;
7,905✔
1670

1671
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfSnodeSharedThreads");
7,905!
1672
  tsNumOfSnodeStreamThreads = pItem->i32;
7,905✔
1673

1674
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfSnodeUniqueThreads");
7,905!
1675
  tsNumOfSnodeWriteThreads = pItem->i32;
7,905✔
1676

1677
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "rpcQueueMemoryAllowed");
7,905!
1678
  tsQueueMemoryAllowed = cfgGetItem(pCfg, "rpcQueueMemoryAllowed")->i64 * QUEUE_MEMORY_USAGE_RATIO;
7,905✔
1679
  tsApplyMemoryAllowed = cfgGetItem(pCfg, "rpcQueueMemoryAllowed")->i64 * (1 - QUEUE_MEMORY_USAGE_RATIO);
7,905✔
1680

1681
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "simdEnable");
7,905!
1682
  tsSIMDEnable = (bool)pItem->bval;
7,905✔
1683

1684
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "AVX512Enable");
7,905!
1685
  tsAVX512Enable = (bool)pItem->bval;
7,905✔
1686

1687
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tagFilterCache");
7,905!
1688
  tsTagFilterCache = (bool)pItem->bval;
7,905✔
1689

1690
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "slowLogExceptDb");
7,905!
1691
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_DB_NAME_LEN));
7,905!
1692
  tstrncpy(tsSlowLogExceptDb, pItem->str, TSDB_DB_NAME_LEN);
7,905✔
1693

1694
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "slowLogThreshold");
7,905!
1695
  tsSlowLogThreshold = pItem->i32;
7,905✔
1696

1697
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "slowLogMaxLen");
7,905!
1698
  tsSlowLogMaxLen = pItem->i32;
7,905✔
1699

1700
  int32_t scope = 0;
7,905✔
1701
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "slowLogScope");
7,905!
1702
  TAOS_CHECK_RETURN(taosSetSlowLogScope(pItem->str, &scope));
7,905!
1703
  tsSlowLogScope = scope;
7,905✔
1704

1705
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryRspPolicy");
7,905!
1706
  tsQueryRspPolicy = pItem->i32;
7,905✔
1707
#ifdef USE_MONITOR
1708
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitor");
7,905!
1709
  tsEnableMonitor = pItem->bval;
7,905✔
1710

1711
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorInterval");
7,905!
1712
  tsMonitorInterval = pItem->i32;
7,905✔
1713

1714
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorFqdn");
7,905!
1715
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_FQDN_LEN));
7,905!
1716
  tstrncpy(tsMonitorFqdn, pItem->str, TSDB_FQDN_LEN);
7,905✔
1717

1718
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorPort");
7,905!
1719
  tsMonitorPort = (uint16_t)pItem->i32;
7,905✔
1720

1721
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorMaxLogs");
7,905!
1722
  tsMonitorMaxLogs = pItem->i32;
7,905✔
1723

1724
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorComp");
7,905!
1725
  tsMonitorComp = pItem->bval;
7,905✔
1726

1727
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorLogProtocol");
7,905!
1728
  tsMonitorLogProtocol = pItem->bval;
7,905✔
1729

1730
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorForceV2");
7,905!
1731
  tsMonitorForceV2 = pItem->i32;
7,905✔
1732
#endif
1733
#ifdef USE_AUDIT
1734
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "audit");
7,905!
1735
  tsEnableAudit = pItem->bval;
7,905✔
1736

1737
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "auditCreateTable");
7,905!
1738
  tsEnableAuditCreateTable = pItem->bval;
7,905✔
1739

1740
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableAuditDelete");
7,905!
1741
  tsEnableAuditDelete = pItem->bval;
7,905✔
1742

1743
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "auditInterval");
7,905!
1744
  tsAuditInterval = pItem->i32;
7,905✔
1745
#endif
1746
#ifdef USE_REPORT
1747
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "telemetryReporting");
7,905!
1748
  tsEnableTelem = pItem->bval;
7,905✔
1749

1750
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "crashReporting");
7,905!
1751
  tsEnableCrashReport = pItem->bval;
7,905✔
1752

1753
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "telemetryInterval");
7,905!
1754
  tsTelemInterval = pItem->i32;
7,905✔
1755

1756
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "telemetryServer");
7,905!
1757
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_FQDN_LEN));
7,905!
1758
  tstrncpy(tsTelemServer, pItem->str, TSDB_FQDN_LEN);
7,905✔
1759
#endif
1760

1761
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ttlChangeOnWrite");
7,905!
1762
  tsTtlChangeOnWrite = pItem->bval;
7,905✔
1763

1764
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ttlFlushThreshold");
7,905!
1765
  tsTtlFlushThreshold = pItem->i32;
7,905✔
1766

1767
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "rsyncPort");
7,905!
1768
  tsRsyncPort = pItem->i32;
7,905✔
1769

1770
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "snodeAddress");
7,905!
1771
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_FQDN_LEN));
7,905!
1772
  tstrncpy(tsSnodeAddress, pItem->str, TSDB_FQDN_LEN);
7,905✔
1773

1774
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "checkpointBackupDir");
7,905!
1775
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, PATH_MAX));
7,905!
1776
  tstrncpy(tsCheckpointBackupDir, pItem->str, PATH_MAX);
7,905✔
1777

1778
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "telemetryPort");
7,905!
1779
  tsTelemPort = (uint16_t)pItem->i32;
7,905✔
1780

1781
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tmqMaxTopicNum");
7,905!
1782
  tmqMaxTopicNum = pItem->i32;
7,905✔
1783

1784
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tmqRowSize");
7,905!
1785
  tmqRowSize = pItem->i32;
7,905✔
1786

1787
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxTsmaNum");
7,905!
1788
  tsMaxTsmaNum = pItem->i32;
7,905✔
1789

1790
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "diskIDCheckEnabled");
7,905!
1791
  tsDiskIDCheckEnabled = pItem->bval;
7,905✔
1792

1793
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "transPullupInterval");
7,905!
1794
  tsTransPullupInterval = pItem->i32;
7,905✔
1795

1796
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "compactPullupInterval");
7,905!
1797
  tsCompactPullupInterval = pItem->i32;
7,905✔
1798

1799
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "mqRebalanceInterval");
7,905!
1800
  tsMqRebalanceInterval = pItem->i32;
7,905✔
1801

1802
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ttlUnit");
7,905!
1803
  tsTtlUnit = pItem->i32;
7,905✔
1804

1805
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ttlPushInterval");
7,905!
1806
  tsTtlPushIntervalSec = pItem->i32;
7,905✔
1807

1808
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ttlBatchDropNum");
7,905!
1809
  tsTtlBatchDropNum = pItem->i32;
7,905✔
1810

1811
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "trimVDbIntervalSec");
7,905!
1812
  tsTrimVDbIntervalSec = pItem->i32;
7,905✔
1813

1814
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "uptimeInterval");
7,905!
1815
  tsUptimeInterval = pItem->i32;
7,905✔
1816

1817
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryRsmaTolerance");
7,905!
1818
  tsQueryRsmaTolerance = pItem->i32;
7,905✔
1819

1820
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "timeseriesThreshold");
7,905!
1821
  tsTimeSeriesThreshold = pItem->i32;
7,905✔
1822

1823
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "walFsyncDataSizeLimit");
7,905!
1824
  tsWalFsyncDataSizeLimit = pItem->i64;
7,905✔
1825

1826
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncElectInterval");
7,905!
1827
  tsElectInterval = pItem->i32;
7,905✔
1828

1829
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncHeartbeatInterval");
7,905!
1830
  tsHeartbeatInterval = pItem->i32;
7,905✔
1831

1832
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncHeartbeatTimeout");
7,905!
1833
  tsHeartbeatTimeout = pItem->i32;
7,905✔
1834

1835
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncSnapReplMaxWaitN");
7,905!
1836
  tsSnapReplMaxWaitN = pItem->i32;
7,905✔
1837

1838
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncLogBufferMemoryAllowed");
7,905!
1839
  tsLogBufferMemoryAllowed = pItem->i64;
7,905✔
1840

1841
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncRoutineReportInterval");
7,905!
1842
  tsRoutineReportInterval = pItem->i32;
7,905✔
1843

1844
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "arbHeartBeatIntervalSec");
7,905!
1845
  tsArbHeartBeatIntervalSec = pItem->i32;
7,905✔
1846

1847
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "arbCheckSyncIntervalSec");
7,905!
1848
  tsArbCheckSyncIntervalSec = pItem->i32;
7,905✔
1849

1850
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "arbSetAssignedTimeoutSec");
7,905!
1851
  tsArbSetAssignedTimeoutSec = pItem->i32;
7,905✔
1852

1853
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "mndSdbWriteDelta");
7,905!
1854
  tsMndSdbWriteDelta = pItem->i64;
7,905✔
1855

1856
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "mndLogRetention");
7,905!
1857
  tsMndLogRetention = pItem->i64;
7,905✔
1858

1859
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "skipGrant");
7,905!
1860
  tsMndSkipGrant = pItem->bval;
7,905✔
1861

1862
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableWhiteList");
7,905!
1863
  tsEnableWhiteList = pItem->bval;
7,905✔
1864

1865
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "forceKillTrans");
7,905!
1866
  tsForceKillTrans = pItem->bval;
7,905✔
1867
#ifdef USE_UDF
1868
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "udf");
7,905!
1869
  tsStartUdfd = pItem->bval;
7,905✔
1870

1871
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "udfdResFuncs");
7,905!
1872
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, sizeof(tsUdfdResFuncs)));
7,905!
1873
  tstrncpy(tsUdfdResFuncs, pItem->str, sizeof(tsUdfdResFuncs));
7,905✔
1874

1875
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "udfdLdLibPath");
7,905!
1876
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, sizeof(tsUdfdLdLibPath)));
7,905!
1877
  tstrncpy(tsUdfdLdLibPath, pItem->str, sizeof(tsUdfdLdLibPath));
7,905✔
1878
  if (tsQueryBufferSize >= 0) {
7,905!
1879
    tsQueryBufferSizeBytes = tsQueryBufferSize * 1048576UL;
×
1880
  }
1881
#endif
1882
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "cacheLazyLoadThreshold");
7,905!
1883
  tsCacheLazyLoadThreshold = pItem->i32;
7,905✔
1884

1885
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "fPrecision");
7,905!
1886
  tsFPrecision = pItem->fval;
7,905✔
1887

1888
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "dPrecision");
7,905!
1889
  tsDPrecision = pItem->fval;
7,905✔
1890

1891
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxRange");
7,905!
1892
  tsMaxRange = pItem->i32;
7,905✔
1893

1894
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "curRange");
7,905!
1895
  tsCurRange = pItem->i32;
7,905✔
1896

1897
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ifAdtFse");
7,905!
1898
  tsIfAdtFse = pItem->bval;
7,905✔
1899

1900
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "compressor");
7,905!
1901
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, sizeof(tsCompressor)));
7,905!
1902
  tstrncpy(tsCompressor, pItem->str, sizeof(tsCompressor));
7,905✔
1903

1904
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "disableStream");
7,905!
1905
  tsDisableStream = pItem->bval;
7,905✔
1906

1907
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamBufferSize");
7,905!
1908
  tsStreamBufferSize = pItem->i64;
7,905✔
1909

1910
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamFailedTimeout");
7,905!
1911
  tsStreamFailedTimeout = pItem->i64;
7,905✔
1912

1913
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamAggCnt");
7,905!
1914
  tsStreamAggCnt = pItem->i32;
7,905✔
1915

1916
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "checkpointInterval");
7,905!
1917
  tsStreamCheckpointInterval = pItem->i32;
7,905✔
1918

1919
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "concurrentCheckpoint");
7,905!
1920
  tsMaxConcurrentCheckpoint = pItem->i32;
7,905✔
1921

1922
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamSinkDataRate");
7,905!
1923
  tsSinkDataRate = pItem->fval;
7,905✔
1924

1925
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "filterScalarMode");
7,905!
1926
  tsFilterScalarMode = pItem->bval;
7,905✔
1927

1928
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxStreamBackendCache");
7,905!
1929
  tsMaxStreamBackendCache = pItem->i32;
7,905✔
1930

1931
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "pqSortMemThreshold");
7,905!
1932
  tsPQSortMemThreshold = pItem->i32;
7,905✔
1933

1934
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minDiskFreeSize");
7,905!
1935
  tsMinDiskFreeSize = pItem->i64;
7,905✔
1936
#ifdef USE_S3
1937
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "s3MigrateIntervalSec");
7,905!
1938
  tsS3MigrateIntervalSec = pItem->i32;
7,905✔
1939

1940
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "s3MigrateEnabled");
7,905!
1941
  tsS3MigrateEnabled = (bool)pItem->bval;
7,905✔
1942

1943
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "s3PageCacheSize");
7,905!
1944
  tsS3PageCacheSize = pItem->i32;
7,905✔
1945

1946
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "s3UploadDelaySec");
7,905!
1947
  tsS3UploadDelaySec = pItem->i32;
7,905✔
1948
#endif
1949
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "experimental");
7,905!
1950
  tsExperimental = pItem->bval;
7,905✔
1951

1952
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryUseMemoryPool");
7,905!
1953
  tsQueryUseMemoryPool = pItem->bval;
7,905✔
1954

1955
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "memPoolFullFunc");
7,905!
1956
  tsMemPoolFullFunc = pItem->bval;
7,905✔
1957

1958
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "singleQueryMaxMemorySize");
7,905!
1959
  tsSingleQueryMaxMemorySize = pItem->i32;
7,905✔
1960

1961
  // TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryBufferPoolSize");
1962
  // tsQueryBufferPoolSize = pItem->i32;
1963

1964
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minReservedMemorySize");
7,905!
1965
  tsMinReservedMemorySize = pItem->i32;
7,905✔
1966

1967
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamNotifyMessageSize");
7,905!
1968
  tsStreamNotifyMessageSize = pItem->i32;
7,905✔
1969

1970
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamNotifyFrameSize");
7,905!
1971
  tsStreamNotifyFrameSize = pItem->i32;
7,905✔
1972

1973
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "adapterFqdn");
7,905!
1974
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_FQDN_LEN));
7,905!
1975
  tstrncpy(tsAdapterFqdn, pItem->str, TSDB_FQDN_LEN);
7,905✔
1976

1977
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "adapterPort");
7,905!
1978
  tsAdapterPort = (uint16_t)pItem->i32;
7,905✔
1979

1980
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "adapterToken");
7,905!
1981
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, tListLen(tsAdapterToken)));
7,905!
1982
  tstrncpy(tsAdapterToken, pItem->str, tListLen(tsAdapterToken));
7,905✔
1983

1984
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamVirtualMergeMaxDelay");
7,905!
1985
  tsStreamVirtualMergeMaxDelayMs = pItem->i32;
7,905✔
1986

1987
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamVirtualMergeMaxMem");
7,905!
1988
  tsStreamVirtualMergeMaxMemKb = pItem->i32;
7,905✔
1989

1990
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamVirtualMergeWaitMode");
7,905!
1991
  tsStreamVirtualMergeWaitMode = pItem->i32;
7,905✔
1992

1993
  // GRANT_CFG_GET;
1994
  TAOS_RETURN(TSDB_CODE_SUCCESS);
7,905✔
1995
}
1996

1997
#ifndef TD_ENTERPRISE
1998
static int32_t taosSetReleaseCfg(SConfig *pCfg) { return 0; }
1999
#else
2000
int32_t taosSetReleaseCfg(SConfig *pCfg);
2001
#endif
2002

2003
static int32_t taosSetAllDebugFlag(SConfig *pCfg, int32_t flag);
2004

2005
static int8_t tsLogCreated = 0;
2006

2007
int32_t taosCreateLog(const char *logname, int32_t logFileNum, const char *cfgDir, const char **envCmd,
23,223✔
2008
                      const char *envFile, char *apolloUrl, SArray *pArgs, bool tsc) {
2009
  int32_t  code = TSDB_CODE_SUCCESS;
23,223✔
2010
  int32_t  lino = 0;
23,223✔
2011
  int32_t  mode = tsc ? LOG_MODE_TAOSC : LOG_MODE_TAOSD;
23,223✔
2012
  SConfig *pCfg = NULL;
23,223✔
2013

2014
  if (atomic_val_compare_exchange_8(&tsLogCreated, 0, 1) != 0) return 0;
23,223✔
2015

2016
  if (tsCfg == NULL) {
22,701!
2017
    TAOS_CHECK_GOTO(osDefaultInit(), &lino, _exit);
22,701!
2018
  }
2019

2020
  TAOS_CHECK_GOTO(cfgInit(&pCfg), &lino, _exit);
22,701!
2021

2022
#ifdef TAOSD_INTEGRATED
2023
  mode |= LOG_MODE_TAOSD;
2024
  tsLogEmbedded = 1;
2025
#else
2026
  tsLogEmbedded = (mode & LOG_MODE_TAOSC) ? 0 : 1;
22,701✔
2027
#endif
2028
  TAOS_CHECK_GOTO(taosAddClientLogCfg(pCfg), &lino, _exit);
22,701!
2029
  if (mode & LOG_MODE_TAOSD) {
22,701✔
2030
    TAOS_CHECK_GOTO(taosAddServerLogCfg(pCfg), &lino, _exit);
5,671!
2031
  }
2032

2033
  if ((code = taosLoadCfg(pCfg, envCmd, cfgDir, envFile, apolloUrl)) != TSDB_CODE_SUCCESS) {
22,701✔
2034
    (void)printf("failed to load cfg since %s\n", tstrerror(code));
2✔
2035
    goto _exit;
2✔
2036
  }
2037

2038
  if ((code = cfgLoadFromArray(pCfg, pArgs)) != TSDB_CODE_SUCCESS) {
22,699!
2039
    (void)printf("failed to load cfg from array since %s\n", tstrerror(code));
×
2040
    goto _exit;
×
2041
  }
2042

2043
  TAOS_CHECK_GOTO(taosSetClientLogCfg(pCfg), &lino, _exit);
22,699!
2044
  if (mode & LOG_MODE_TAOSD) {
22,699✔
2045
    TAOS_CHECK_GOTO(taosSetServerLogCfg(pCfg), &lino, _exit);
5,669!
2046
  }
2047

2048
  SConfigItem *pDebugItem = NULL;
22,699✔
2049
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pDebugItem, "debugFlag");
22,699!
2050
  TAOS_CHECK_GOTO(taosSetAllDebugFlag(pCfg, pDebugItem->i32), &lino, _exit);
22,699!
2051

2052
  if ((code = taosMulModeMkDir(tsLogDir, 0777, true)) != TSDB_CODE_SUCCESS) {
22,699✔
2053
    (void)printf("failed to create dir:%s since %s\n", tsLogDir, tstrerror(code));
1✔
2054
    goto _exit;
1✔
2055
  }
2056

2057
  if ((code = taosInitLog(logname, logFileNum, mode)) != 0) {
22,698!
2058
    (void)printf("failed to init log file since %s\n", tstrerror(code));
×
2059
    goto _exit;
×
2060
  }
2061

2062
_exit:
22,698✔
2063
  if (TSDB_CODE_SUCCESS != code) {
22,701✔
2064
    (void)printf("failed to create log at %d since %s\n", lino, tstrerror(code));
3✔
2065
  }
2066

2067
  cfgCleanup(pCfg);
22,701✔
2068
  TAOS_RETURN(code);
22,701✔
2069
}
2070

2071
int32_t taosReadDataFolder(const char *cfgDir, const char **envCmd, const char *envFile, char *apolloUrl,
1✔
2072
                           SArray *pArgs) {
2073
  int32_t code = TSDB_CODE_SUCCESS;
1✔
2074
  int32_t lino = -1;
1✔
2075
  if (tsCfg == NULL) code = osDefaultInit();
1!
2076
  if (code != 0) {
1!
2077
    (void)printf("failed to init os since %s\n", tstrerror(code));
×
2078
  }
2079

2080
  SConfig *pCfg = NULL;
1✔
2081
  TAOS_CHECK_RETURN(cfgInit(&pCfg));
1!
2082
  TAOS_CHECK_GOTO(cfgAddDir(pCfg, "dataDir", tsDataDir, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL), &lino,
1!
2083
                  _exit);
2084
  TAOS_CHECK_GOTO(
1!
2085
      cfgAddInt32(pCfg, "debugFlag", dDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL), &lino,
2086
      _exit);
2087
  TAOS_CHECK_GOTO(
1!
2088
      cfgAddInt32(pCfg, "dDebugFlag", dDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL), &lino,
2089
      _exit);
2090

2091
  if ((code = taosLoadCfg(pCfg, envCmd, cfgDir, envFile, apolloUrl)) != 0) {
1!
2092
    (void)printf("failed to load cfg since %s\n", tstrerror(code));
×
2093
    goto _exit;
×
2094
  }
2095

2096
  if ((code = cfgLoadFromArray(pCfg, pArgs)) != 0) {
1!
2097
    (void)printf("failed to load cfg from array since %s\n", tstrerror(code));
×
2098
    goto _exit;
×
2099
  }
2100

2101
  TAOS_CHECK_GOTO(taosSetTfsCfg(pCfg), &lino, _exit);
1!
2102

2103
  SConfigItem *pItem = NULL;
1✔
2104
  if ((pItem = cfgGetItem(pCfg, "dDebugFlag")) == NULL) {
1!
2105
    code = TSDB_CODE_CFG_NOT_FOUND;
×
2106
    goto _exit;
×
2107
  }
2108

2109
  dDebugFlag = pItem->i32;
1✔
2110

2111
_exit:
1✔
2112
  cfgCleanup(pCfg);
1✔
2113
  TAOS_RETURN(code);
1✔
2114
}
2115

2116
static int32_t taosCheckGlobalCfg() {
22,697✔
2117
  SIpAddr addr = {0};
22,697✔
2118
  uInfo("check global fqdn:%s and port:%u", tsLocalFqdn, tsServerPort);
22,697!
2119
  int32_t code = taosGetIpFromFqdn(tsEnableIpv6, tsLocalFqdn, &addr);
22,697✔
2120
  if (code) {
22,697!
2121
    uError("failed to get ip from fqdn:%s since %s, can not be initialized", tsLocalFqdn, tstrerror(code));
×
2122
    TAOS_RETURN(TSDB_CODE_RPC_FQDN_ERROR);
×
2123
  }
2124

2125
  if (tsServerPort <= 0) {
22,697!
2126
    uError("invalid server port:%u, can not be initialized", tsServerPort);
×
2127
    TAOS_RETURN(TSDB_CODE_RPC_FQDN_ERROR);
×
2128
  }
2129

2130
  TAOS_RETURN(TSDB_CODE_SUCCESS);
22,697✔
2131
}
2132

2133
static int32_t cfgInitWrapper(SConfig **pCfg) {
22,700✔
2134
  if (*pCfg == NULL) {
22,700!
2135
    TAOS_CHECK_RETURN(cfgInit(pCfg));
22,700!
2136
  }
2137
  TAOS_RETURN(TSDB_CODE_SUCCESS);
22,700✔
2138
}
2139

2140
int32_t setAllConfigs(SConfig *pCfg) {
2,247✔
2141
  int32_t code = 0;
2,247✔
2142
  int32_t lino = -1;
2,247✔
2143
  TAOS_CHECK_GOTO(taosSetClientCfg(tsCfg), &lino, _exit);
2,247✔
2144
  TAOS_CHECK_GOTO(taosUpdateServerCfg(tsCfg), &lino, _exit);
2,239!
2145
  TAOS_CHECK_GOTO(taosSetServerCfg(tsCfg), &lino, _exit);
2,239!
2146
  TAOS_CHECK_GOTO(taosSetReleaseCfg(tsCfg), &lino, _exit);
2,239!
2147
  TAOS_CHECK_GOTO(taosSetTfsCfg(tsCfg), &lino, _exit);
2,239!
2148
  TAOS_CHECK_GOTO(taosSetS3Cfg(tsCfg), &lino, _exit);
2,239!
2149
  TAOS_CHECK_GOTO(taosSetSystemCfg(tsCfg), &lino, _exit);
2,239!
2150
  TAOS_CHECK_GOTO(taosSetFileHandlesLimit(), &lino, _exit);
2,239!
2151
_exit:
2,239✔
2152
  TAOS_RETURN(code);
2,247✔
2153
}
2154

2155
int32_t cfgDeserialize(SArray *array, char *buf, bool isGlobal) {
2,166✔
2156
  int32_t code = TSDB_CODE_SUCCESS;
2,166✔
2157

2158
  cJSON *pRoot = cJSON_Parse(buf);
2,166✔
2159
  if (pRoot == NULL) {
2,166!
2160
    return TSDB_CODE_OUT_OF_MEMORY;
×
2161
  }
2162
  if (isGlobal) {
2,166✔
2163
    cJSON *pItem = cJSON_GetObjectItem(pRoot, "version");
1,084✔
2164
    if (pItem == NULL) {
1,084!
2165
      code = TSDB_CODE_OUT_OF_MEMORY;
×
2166
      goto _exit;
×
2167
    }
2168
    tsdmConfigVersion = pItem->valueint;
1,084✔
2169
  }
2170

2171
  int32_t sz = taosArrayGetSize(array);
2,166✔
2172
  cJSON  *configs = cJSON_GetObjectItem(pRoot, "configs");
2,166✔
2173
  if (configs == NULL) {
2,166!
2174
    code = TSDB_CODE_OUT_OF_MEMORY;
×
2175
    goto _exit;
×
2176
  }
2177
  for (int i = 0; i < sz; i++) {
243,638✔
2178
    SConfigItem *pItem = (SConfigItem *)taosArrayGet(array, i);
241,472✔
2179
    cJSON       *pJson = cJSON_GetObjectItem(configs, pItem->name);
241,472✔
2180
    if (pJson == NULL) {
241,472✔
2181
      continue;
1,082✔
2182
    }
2183
    if (strcasecmp(pItem->name, "dataDir") == 0) {
240,390✔
2184
      if (!tsDiskIDCheckEnabled) {
1,082!
2185
        continue;
1,082✔
2186
      }
2187
      int    sz = cJSON_GetArraySize(pJson);
×
2188
      cJSON *filed = NULL;
×
2189
      // check disk id for each dir
2190
      for (int j = 0; j < sz; j++) {
×
2191
        cJSON *diskCfgJson = cJSON_GetArrayItem(pJson, j);
×
2192
        if (diskCfgJson == NULL) {
×
2193
          code = TSDB_CODE_OUT_OF_MEMORY;
×
2194
          goto _exit;
×
2195
        }
2196

2197
        filed = cJSON_GetObjectItem(diskCfgJson, "dir");
×
2198
        if (filed == NULL) {
×
2199
          code = TSDB_CODE_OUT_OF_MEMORY;
×
2200
          goto _exit;
×
2201
        }
2202

2203
        char *dir = cJSON_GetStringValue(filed);
×
2204
        filed = cJSON_GetObjectItem(diskCfgJson, "disk_id");
×
2205
        if (filed == NULL) {
×
2206
          code = TSDB_CODE_OUT_OF_MEMORY;
×
2207
          goto _exit;
×
2208
        }
2209

2210
        int64_t actDiskID = 0;
×
2211
        int64_t expDiskID = taosStr2Int64(cJSON_GetStringValue(filed), NULL, 10);
×
2212
        if ((code = taosGetFileDiskID(dir, &actDiskID)) != 0) {
×
2213
          uError("failed to get disk id for dir:%s, since %s", dir, tstrerror(code));
×
2214
          goto _exit;
×
2215
        }
2216
        if (actDiskID != expDiskID) {
×
2217
          uError("failed to check disk id for dir:%s, actDiskID%" PRId64 ", expDiskID%" PRId64, dir, actDiskID,
×
2218
                 expDiskID);
2219
          code = TSDB_CODE_INVALID_DISK_ID;
×
2220
          goto _exit;
×
2221
        }
2222
      }
2223
      continue;
×
2224
    }
2225
    switch (pItem->dtype) {
239,308!
2226
      {
2227
        case CFG_DTYPE_NONE:
×
2228
          break;
×
2229
        case CFG_DTYPE_BOOL:
43,322✔
2230
          pItem->bval = cJSON_IsTrue(pJson);
43,322✔
2231
          break;
43,322✔
2232
        case CFG_DTYPE_INT32:
128,854✔
2233
          pItem->i32 = pJson->valueint;
128,854✔
2234
          break;
128,854✔
2235
        case CFG_DTYPE_INT64:
16,246✔
2236
          pItem->i64 = atoll(cJSON_GetStringValue(pJson));
16,246✔
2237
          break;
16,246✔
2238
        case CFG_DTYPE_FLOAT:
8,662✔
2239
        case CFG_DTYPE_DOUBLE:
2240
          pItem->fval = taosStr2Float(cJSON_GetStringValue(pJson), NULL);
8,662✔
2241
          break;
8,662✔
2242
        case CFG_DTYPE_STRING:
42,224✔
2243
        case CFG_DTYPE_DIR:
2244
        case CFG_DTYPE_LOCALE:
2245
        case CFG_DTYPE_CHARSET:
2246
        case CFG_DTYPE_TIMEZONE:
2247
          taosMemoryFree(pItem->str);
42,224!
2248
          pItem->str = taosStrdup(pJson->valuestring);
42,224!
2249
          if (pItem->str == NULL) {
42,224!
2250
            code = terrno;
×
2251
            goto _exit;
×
2252
          }
2253
          break;
42,224✔
2254
      }
2255
    }
2256
  }
2257
_exit:
2,166✔
2258
  if (code != TSDB_CODE_SUCCESS) {
2,166!
2259
    uError("failed to deserialize config since %s", tstrerror(code));
×
2260
  }
2261
  cJSON_Delete(pRoot);
2,166✔
2262
  return code;
2,166✔
2263
}
2264

2265
int32_t stypeConfigDeserialize(SArray *array, char *buf) {
1,082✔
2266
  int32_t code = TSDB_CODE_SUCCESS;
1,082✔
2267
  cJSON  *pRoot = cJSON_Parse(buf);
1,082✔
2268
  if (pRoot == NULL) {
1,082!
2269
    return TSDB_CODE_OUT_OF_MEMORY;
×
2270
  }
2271
  cJSON *stypes = cJSON_GetObjectItem(pRoot, "config_stypes");
1,082✔
2272
  if (stypes == NULL) {
1,082!
2273
    code = TSDB_CODE_OUT_OF_MEMORY;
×
2274
    goto _exit;
×
2275
  }
2276
  int32_t sz = taosArrayGetSize(array);
1,082✔
2277
  for (int i = 0; i < sz; i++) {
141,742✔
2278
    SConfigItem *pItem = (SConfigItem *)taosArrayGet(array, i);
140,660✔
2279
    cJSON       *pJson = cJSON_GetObjectItem(stypes, pItem->name);
140,660✔
2280
    if (pJson == NULL) {
140,660!
2281
      continue;
×
2282
    }
2283
    pItem->stype = pJson->valueint;
140,660✔
2284
  }
2285
  cJSON_Delete(pRoot);
1,082✔
2286
_exit:
1,082✔
2287
  return code;
1,082✔
2288
}
2289

2290
int32_t readStypeConfigFile(const char *path) {
5,646✔
2291
  int32_t   code = 0;
5,646✔
2292
  char      filename[CONFIG_FILE_LEN] = {0};
5,646✔
2293
  SArray   *array = NULL;
5,646✔
2294
  char     *buf = NULL;
5,646✔
2295
  TdFilePtr pFile = NULL;
5,646✔
2296

2297
  array = taosGetLocalCfg(tsCfg);
5,646✔
2298
  if (array == NULL) {
5,646!
2299
    code = TSDB_CODE_OUT_OF_MEMORY;
×
2300
    goto _exit;
×
2301
  }
2302

2303
  snprintf(filename, sizeof(filename), "%s%sdnode%sconfig%sstype.json", path, TD_DIRSEP, TD_DIRSEP, TD_DIRSEP);
5,646✔
2304
  uInfo("start to read stype config file:%s", filename);
5,646!
2305
  if (!taosCheckExistFile(filename)) {
5,646✔
2306
    uInfo("stype config file:%s does not exist", filename);
4,564!
2307
    goto _exit;
4,564✔
2308
  }
2309
  int64_t fileSize = 0;
1,082✔
2310
  if (taosStatFile(filename, &fileSize, NULL, NULL) < 0) {
1,082!
2311
    code = terrno;
×
2312
    goto _exit;
×
2313
  }
2314
  buf = (char *)taosMemoryMalloc(fileSize + 1);
1,082!
2315
  if (buf == NULL) {
1,082!
2316
    code = terrno;
×
2317
    goto _exit;
×
2318
  }
2319
  pFile = taosOpenFile(filename, TD_FILE_READ);
1,082✔
2320
  if (pFile == NULL) {
1,082!
2321
    code = terrno;
×
2322
    goto _exit;
×
2323
  }
2324
  if (taosReadFile(pFile, buf, fileSize) != fileSize) {
1,082!
2325
    code = terrno;
×
2326
    goto _exit;
×
2327
  }
2328
  buf[fileSize] = '\0';
1,082✔
2329

2330
  code = stypeConfigDeserialize(array, buf);
1,082✔
2331
  if (code != TSDB_CODE_SUCCESS) {
1,082!
2332
    uError("failed to deserialize stype config file:%s since %s", filename, tstrerror(code));
×
2333
    goto _exit;
×
2334
  }
2335

2336
_exit:
1,082✔
2337
  if (code != TSDB_CODE_SUCCESS) {
5,646!
2338
    uError("failed to read stype config file:%s since %s", filename, tstrerror(code));
×
2339
  }
2340
  taosMemoryFree(buf);
5,646!
2341
  (void)taosCloseFile(&pFile);
5,646✔
2342
  TAOS_RETURN(code);
5,646✔
2343
}
2344

2345
int32_t readCfgFile(const char *path, bool isGlobal) {
11,312✔
2346
  int32_t code = 0;
11,312✔
2347
  char    filename[CONFIG_FILE_LEN] = {0};
11,312✔
2348
  SArray *array = NULL;
11,312✔
2349
  if (isGlobal) {
11,312✔
2350
    array = taosGetGlobalCfg(tsCfg);
5,666✔
2351
    snprintf(filename, sizeof(filename), "%s%sdnode%sconfig%sglobal.json", path, TD_DIRSEP, TD_DIRSEP, TD_DIRSEP);
5,666✔
2352
  } else {
2353
    array = taosGetLocalCfg(tsCfg);
5,646✔
2354
    snprintf(filename, sizeof(filename), "%s%sdnode%sconfig%slocal.json", path, TD_DIRSEP, TD_DIRSEP, TD_DIRSEP);
5,646✔
2355
  }
2356
  uInfo("start to read config file:%s", filename);
11,312!
2357

2358
  if (!taosCheckExistFile(filename)) {
11,312✔
2359
    uInfo("config file:%s does not exist", filename);
9,146!
2360
    TAOS_RETURN(TSDB_CODE_SUCCESS);
9,146✔
2361
  }
2362
  int64_t fileSize = 0;
2,166✔
2363
  char   *buf = NULL;
2,166✔
2364
  if (taosStatFile(filename, &fileSize, NULL, NULL) < 0) {
2,166!
2365
    code = terrno;
×
2366
    uError("failed to stat file:%s , since %s", filename, tstrerror(code));
×
2367
    TAOS_RETURN(code);
×
2368
  }
2369
  if (fileSize == 0) {
2,166!
2370
    uInfo("config file:%s is empty", filename);
×
2371
    TAOS_RETURN(TSDB_CODE_SUCCESS);
×
2372
  }
2373
  TdFilePtr pFile = taosOpenFile(filename, TD_FILE_READ);
2,166✔
2374
  if (pFile == NULL) {
2,166!
2375
    code = terrno;
×
2376
    uError("failed to open file:%s , since %s", filename, tstrerror(code));
×
2377
    goto _exit;
×
2378
  }
2379
  buf = (char *)taosMemoryMalloc(fileSize + 1);
2,166!
2380
  if (buf == NULL) {
2,166!
2381
    code = terrno;
×
2382
    uError("failed to malloc memory for file:%s , since %s", filename, tstrerror(code));
×
2383
    goto _exit;
×
2384
  }
2385
  if (taosReadFile(pFile, buf, fileSize) != fileSize) {
2,166!
2386
    code = terrno;
×
2387
    uError("failed to read file:%s , config since %s", filename, tstrerror(code));
×
2388
    goto _exit;
×
2389
  }
2390
  buf[fileSize] = '\0';  // 添加字符串结束符
2,166✔
2391
  code = cfgDeserialize(array, buf, isGlobal);
2,166✔
2392
  if (code != TSDB_CODE_SUCCESS) {
2,166!
2393
    uError("failed to deserialize config from %s since %s", filename, tstrerror(code));
×
2394
    goto _exit;
×
2395
  }
2396

2397
_exit:
2,166✔
2398
  if (code != TSDB_CODE_SUCCESS) {
2,166!
2399
    uError("failed to read config from %s since %s", filename, tstrerror(code));
×
2400
  }
2401
  taosMemoryFree(buf);
2,166!
2402
  (void)taosCloseFile(&pFile);
2,166✔
2403
  TAOS_RETURN(code);
2,166✔
2404
}
2405

2406
int32_t tryLoadCfgFromDataDir(SConfig *pCfg) {
5,666✔
2407
  int32_t      code = 0;
5,666✔
2408
  SConfigItem *pItem = NULL;
5,666✔
2409
  TAOS_CHECK_GET_CFG_ITEM(tsCfg, pItem, "forceReadConfig");
5,666!
2410
  tsForceReadConfig = pItem->i32;
5,666✔
2411
  code = readCfgFile(tsDataDir, true);
5,666✔
2412
  if (code != TSDB_CODE_SUCCESS) {
5,666!
2413
    uError("failed to read global config from %s since %s", tsDataDir, tstrerror(code));
×
2414
    TAOS_RETURN(code);
×
2415
  }
2416
  if (!tsForceReadConfig) {
5,666✔
2417
    uInfo("load config from tsDataDir:%s", tsDataDir);
5,646!
2418
    code = readCfgFile(tsDataDir, false);
5,646✔
2419
    if (code != TSDB_CODE_SUCCESS) {
5,646!
2420
      uError("failed to read local config from %s since %s", tsDataDir, tstrerror(code));
×
2421
      TAOS_RETURN(code);
×
2422
    }
2423
    code = readStypeConfigFile(tsDataDir);
5,646✔
2424
    if (code != TSDB_CODE_SUCCESS) {
5,646!
2425
      uError("failed to read stype config from %s since %s", tsDataDir, tstrerror(code));
×
2426
      TAOS_RETURN(code);
×
2427
    }
2428
  }
2429
  TAOS_RETURN(code);
5,666✔
2430
}
2431

2432
int32_t taosInitCfg(const char *cfgDir, const char **envCmd, const char *envFile, char *apolloUrl, SArray *pArgs,
23,222✔
2433
                    bool tsc) {
2434
  if (tsCfg != NULL) TAOS_RETURN(TSDB_CODE_SUCCESS);
23,222✔
2435

2436
  int32_t code = TSDB_CODE_SUCCESS;
22,700✔
2437
  int32_t lino = -1;
22,700✔
2438

2439
  TAOS_CHECK_GOTO(cfgInitWrapper(&tsCfg), &lino, _exit);
22,700!
2440

2441
  if (tsc) {
22,700✔
2442
    TAOS_CHECK_GOTO(taosAddClientCfg(tsCfg), &lino, _exit);
17,031!
2443
    TAOS_CHECK_GOTO(taosAddClientLogCfg(tsCfg), &lino, _exit);
17,031!
2444
  } else {
2445
    TAOS_CHECK_GOTO(taosAddClientCfg(tsCfg), &lino, _exit);
5,669!
2446
    TAOS_CHECK_GOTO(taosAddServerCfg(tsCfg), &lino, _exit);
5,669!
2447
    TAOS_CHECK_GOTO(taosAddClientLogCfg(tsCfg), &lino, _exit);
5,669!
2448
    TAOS_CHECK_GOTO(taosAddServerLogCfg(tsCfg), &lino, _exit);
5,669!
2449
  }
2450

2451
  TAOS_CHECK_GOTO(taosAddSystemCfg(tsCfg), &lino, _exit);
22,700!
2452

2453
  if ((code = taosLoadCfg(tsCfg, envCmd, cfgDir, envFile, apolloUrl)) != 0) {
22,700✔
2454
    (void)printf("failed to load cfg since %s\n", tstrerror(code));
3✔
2455
    cfgCleanup(tsCfg);
3✔
2456
    tsCfg = NULL;
3✔
2457
    TAOS_RETURN(code);
3✔
2458
  }
2459

2460
  if ((code = cfgLoadFromArray(tsCfg, pArgs)) != 0) {
22,697!
2461
    (void)printf("failed to load cfg from array since %s\n", tstrerror(code));
×
2462
    cfgCleanup(tsCfg);
×
2463
    tsCfg = NULL;
×
2464
    TAOS_RETURN(code);
×
2465
  }
2466

2467
  if (!tsc) {
22,697✔
2468
    TAOS_CHECK_GOTO(taosSetTfsCfg(tsCfg), &lino, _exit);
5,666!
2469
    TAOS_CHECK_GOTO(tryLoadCfgFromDataDir(tsCfg), &lino, _exit);
5,666!
2470
  }
2471

2472
  if (tsc) {
22,697✔
2473
    TAOS_CHECK_GOTO(taosSetClientLogCfg(tsCfg), &lino, _exit);
17,031!
2474
    TAOS_CHECK_GOTO(taosSetClientCfg(tsCfg), &lino, _exit);
17,031!
2475
  } else {
2476
    TAOS_CHECK_GOTO(taosSetClientLogCfg(tsCfg), &lino, _exit);
5,666!
2477
    TAOS_CHECK_GOTO(taosSetClientCfg(tsCfg), &lino, _exit);
5,666!
2478
    TAOS_CHECK_GOTO(taosUpdateServerCfg(tsCfg), &lino, _exit);
5,666!
2479
    TAOS_CHECK_GOTO(taosSetServerCfg(tsCfg), &lino, _exit);
5,666!
2480
    TAOS_CHECK_GOTO(taosSetReleaseCfg(tsCfg), &lino, _exit);
5,666!
2481
    TAOS_CHECK_GOTO(taosSetS3Cfg(tsCfg), &lino, _exit);
5,666!
2482
  }
2483

2484
  TAOS_CHECK_GOTO(taosSetSystemCfg(tsCfg), &lino, _exit);
22,697!
2485
  TAOS_CHECK_GOTO(taosSetFileHandlesLimit(), &lino, _exit);
22,697!
2486

2487
  SConfigItem *pItem = cfgGetItem(tsCfg, "debugFlag");
22,697✔
2488
  if (NULL == pItem) {
22,697!
2489
    (void)printf("debugFlag not found in cfg\n");
×
2490
    TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND);
×
2491
  }
2492
  TAOS_CHECK_GOTO(taosSetAllDebugFlag(tsCfg, pItem->i32), &lino, _exit);
22,697!
2493

2494
  cfgDumpCfg(tsCfg, tsc, false);
22,697✔
2495
  TAOS_CHECK_GOTO(taosCheckGlobalCfg(), &lino, _exit);
22,697!
2496

2497
_exit:
22,697✔
2498
  if (TSDB_CODE_SUCCESS != code) {
22,697!
2499
    cfgCleanup(tsCfg);
×
2500
    tsCfg = NULL;
×
2501
    (void)printf("failed to init cfg at %d since %s\n", lino, tstrerror(code));
×
2502
  }
2503

2504
  TAOS_RETURN(code);
22,697✔
2505
}
2506

2507
void taosCleanupCfg() {
22,700✔
2508
  if (tsCfg) {
22,700✔
2509
    cfgCleanup(tsCfg);
22,699✔
2510
    tsCfg = NULL;
22,699✔
2511
  }
2512
}
22,700✔
2513

2514
typedef struct {
2515
  const char *optionName;
2516
  void       *optionVar;
2517
} OptionNameAndVar;
2518

2519
static int32_t taosCfgSetOption(OptionNameAndVar *pOptions, int32_t optionSize, SConfigItem *pItem, bool isDebugflag) {
5,638✔
2520
  int32_t code = TSDB_CODE_CFG_NOT_FOUND;
5,638✔
2521
  char   *name = pItem->name;
5,638✔
2522
  for (int32_t d = 0; d < optionSize; ++d) {
83,512✔
2523
    const char *optName = pOptions[d].optionName;
80,711✔
2524
    if (taosStrcasecmp(name, optName) != 0) continue;
80,711✔
2525
    code = TSDB_CODE_SUCCESS;
2,837✔
2526
    switch (pItem->dtype) {
2,837!
2527
      case CFG_DTYPE_BOOL: {
152✔
2528
        int32_t flag = pItem->i32;
152✔
2529
        bool   *pVar = pOptions[d].optionVar;
152✔
2530
        uInfo("%s set from %d to %d", optName, *pVar, flag);
152!
2531
        *pVar = flag;
152✔
2532
      } break;
152✔
2533
      case CFG_DTYPE_INT32: {
2,620✔
2534
        int32_t  flag = pItem->i32;
2,620✔
2535
        int32_t *pVar = pOptions[d].optionVar;
2,620✔
2536
        uInfo("%s set from %d to %d", optName, *pVar, flag);
2,620!
2537
        *pVar = flag;
2,620✔
2538

2539
        if (isDebugflag) {
2,620✔
2540
          TAOS_CHECK_RETURN(taosSetDebugFlag(pOptions[d].optionVar, optName, flag));
36!
2541
        }
2542
      } break;
2,620✔
2543
      case CFG_DTYPE_INT64: {
53✔
2544
        int64_t  flag = pItem->i64;
53✔
2545
        int64_t *pVar = pOptions[d].optionVar;
53✔
2546
        uInfo("%s set from %" PRId64 " to %" PRId64, optName, *pVar, flag);
53!
2547
        *pVar = flag;
53✔
2548
      } break;
53✔
2549
      case CFG_DTYPE_FLOAT:
12✔
2550
      case CFG_DTYPE_DOUBLE: {
2551
        float  flag = pItem->fval;
12✔
2552
        float *pVar = pOptions[d].optionVar;
12✔
2553
        uInfo("%s set from %f to %f", optName, *pVar, flag);
12!
2554
        *pVar = flag;
12✔
2555
      } break;
12✔
2556
      case CFG_DTYPE_STRING:
×
2557
      case CFG_DTYPE_DIR:
2558
      case CFG_DTYPE_LOCALE:
2559
      case CFG_DTYPE_CHARSET:
2560
      case CFG_DTYPE_TIMEZONE: {
2561
        if (strcasecmp(pItem->name, "slowLogExceptDb") == 0) {
×
2562
          TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_DB_NAME_LEN));
×
2563
          tstrncpy(tsSlowLogExceptDb, pItem->str, TSDB_DB_NAME_LEN);
×
2564
        } else {
2565
          uError("not support string type for %s", optName);
×
2566
          code = TSDB_CODE_INVALID_CFG;
×
2567
          break;
×
2568
        }
2569
        uInfo("%s set to %s", optName, pItem->str);
×
2570
      } break;
×
2571
      default:
×
2572
        code = TSDB_CODE_INVALID_CFG;
×
2573
        break;
×
2574
    }
2575

2576
    break;
2,837✔
2577
  }
2578

2579
  TAOS_RETURN(code);
5,638✔
2580
}
2581

2582
extern void tsdbAlterNumCompactThreads();
2583

2584
static int32_t taosCfgDynamicOptionsForServer(SConfig *pCfg, const char *name) {
471✔
2585
  int32_t code = TSDB_CODE_SUCCESS;
471✔
2586
  int32_t lino = -1;
471✔
2587

2588
  if (strcasecmp("timezone", name) == 0) {
471!
2589
    TAOS_RETURN(TSDB_CODE_SUCCESS);
×
2590
  }
2591

2592
  if (strcasecmp(name, "resetlog") == 0) {
471✔
2593
    // trigger, no item in cfg
2594
    taosResetLog();
2✔
2595
    cfgDumpCfg(tsCfg, 0, false);
2✔
2596
    TAOS_RETURN(TSDB_CODE_SUCCESS);
2✔
2597
  }
2598

2599
  cfgLock(pCfg);
469✔
2600

2601
  SConfigItem *pItem = cfgGetItem(pCfg, name);
469✔
2602
  if (!pItem || (pItem->dynScope == CFG_DYN_CLIENT)) {
469!
2603
    uError("failed to config:%s, not support", name);
×
2604
    code = TSDB_CODE_INVALID_CFG;
×
2605
    goto _exit;
×
2606
  }
2607

2608
  if (strncasecmp(name, "debugFlag", 9) == 0) {
469✔
2609
    code = taosSetAllDebugFlag(pCfg, pItem->i32);
8✔
2610
    goto _exit;
8✔
2611
  }
2612

2613
  if (strncasecmp(name, "enableCoreFile", 9) == 0) {
461!
2614
    tsEnableCoreFile = pItem->bval;
×
2615
    taosSetCoreDump(tsEnableCoreFile);
×
2616
    uInfo("%s set to %d", name, tsEnableCoreFile);
×
2617
    goto _exit;
×
2618
  }
2619

2620
  if (strcasecmp("slowLogScope", name) == 0) {
461✔
2621
    int32_t scope = 0;
6✔
2622
    TAOS_CHECK_GOTO(taosSetSlowLogScope(pItem->str, &scope), &lino, _exit);
6!
2623
    tsSlowLogScope = scope;
6✔
2624
    code = TSDB_CODE_SUCCESS;
6✔
2625
    goto _exit;
6✔
2626
  }
2627

2628
  if (strcasecmp("slowLogExceptDb", name) == 0) {
455✔
2629
    tstrncpy(tsSlowLogExceptDb, pItem->str, TSDB_DB_NAME_LEN);
6✔
2630
    code = TSDB_CODE_SUCCESS;
6✔
2631
    goto _exit;
6✔
2632
  }
2633
  if (strcasecmp(name, "dataDir") == 0) {
449!
2634
    code = TSDB_CODE_SUCCESS;
×
2635
    goto _exit;
×
2636
  }
2637
  if (strcasecmp("rpcQueueMemoryAllowed", name) == 0) {
449✔
2638
    tsQueueMemoryAllowed = cfgGetItem(pCfg, "rpcQueueMemoryAllowed")->i64 * QUEUE_MEMORY_USAGE_RATIO;
6✔
2639
    tsApplyMemoryAllowed = cfgGetItem(pCfg, "rpcQueueMemoryAllowed")->i64 * (1 - QUEUE_MEMORY_USAGE_RATIO);
6✔
2640
    code = TSDB_CODE_SUCCESS;
6✔
2641
    goto _exit;
6✔
2642
  }
2643

2644
  if (strcasecmp(name, "numOfCompactThreads") == 0) {
443!
2645
#ifdef TD_ENTERPRISE
2646
    tsNumOfCompactThreads = pItem->i32;
×
2647
    code = TSDB_CODE_SUCCESS;
×
2648
    // tsdbAlterNumCompactThreads();
2649
#else
2650
    code = TSDB_CODE_INVALID_CFG;
2651
#endif
2652
    goto _exit;
×
2653
  }
2654

2655
  if (strcasecmp(name, "minReservedMemorySize") == 0) {
443!
2656
    tsMinReservedMemorySize = pItem->i32;
×
2657
    code = taosMemoryPoolCfgUpdateReservedSize(tsMinReservedMemorySize);
×
2658
    goto _exit;
×
2659
  }
2660

2661
  {  //  'bool/int32_t/int64_t/float/double' variables with general modification function
2662
    static OptionNameAndVar debugOptions[] = {
2663
        {"dDebugFlag", &dDebugFlag},       {"vDebugFlag", &vDebugFlag},
2664
        {"mDebugFlag", &mDebugFlag},       {"wDebugFlag", &wDebugFlag},
2665
        {"azDebugFlag", &azDebugFlag},     {"sDebugFlag", &sDebugFlag},
2666
        {"tsdbDebugFlag", &tsdbDebugFlag}, {"tqDebugFlag", &tqDebugFlag},
2667
        {"fsDebugFlag", &fsDebugFlag},     {"udfDebugFlag", &udfDebugFlag},
2668
        {"smaDebugFlag", &smaDebugFlag},   {"idxDebugFlag", &idxDebugFlag},
2669
        {"tdbDebugFlag", &tdbDebugFlag},   {"tmrDebugFlag", &tmrDebugFlag},
2670
        {"uDebugFlag", &uDebugFlag},       {"smaDebugFlag", &smaDebugFlag},
2671
        {"rpcDebugFlag", &rpcDebugFlag},   {"qDebugFlag", &qDebugFlag},
2672
        {"metaDebugFlag", &metaDebugFlag}, {"stDebugFlag", &stDebugFlag},
2673
        {"sndDebugFlag", &sndDebugFlag},   {"tqClientDebugFlag", &tqClientDebugFlag},
2674
    };
2675

2676
    static OptionNameAndVar options[] = {{"audit", &tsEnableAudit},
2677
                                         {"asynclog", &tsAsyncLog},
2678
                                         {"disableStream", &tsDisableStream},
2679
                                         {"enableWhiteList", &tsEnableWhiteList},
2680
                                         {"statusInterval", &tsStatusInterval},
2681
                                         {"telemetryReporting", &tsEnableTelem},
2682
                                         {"monitor", &tsEnableMonitor},
2683
                                         {"monitorInterval", &tsMonitorInterval},
2684
                                         {"monitorComp", &tsMonitorComp},
2685
                                         {"monitorForceV2", &tsMonitorForceV2},
2686
                                         {"monitorLogProtocol", &tsMonitorLogProtocol},
2687
                                         {"monitorMaxLogs", &tsMonitorMaxLogs},
2688
                                         {"auditCreateTable", &tsEnableAuditCreateTable},
2689
                                         {"auditInterval", &tsAuditInterval},
2690
                                         {"slowLogThreshold", &tsSlowLogThreshold},
2691
                                         {"compressMsgSize", &tsCompressMsgSize},
2692
                                         {"compressor", &tsCompressor},
2693
                                         {"dPrecision", &tsDPrecision},
2694
                                         {"fPrecision", &tsFPrecision},
2695
                                         {"maxRange", &tsMaxRange},
2696
                                         {"maxTsmaNum", &tsMaxTsmaNum},
2697
                                         {"queryRsmaTolerance", &tsQueryRsmaTolerance},
2698
                                         {"uptimeInterval", &tsUptimeInterval},
2699

2700
                                         {"slowLogMaxLen", &tsSlowLogMaxLen},
2701
                                         {"slowLogScope", &tsSlowLogScope},
2702
                                         {"slowLogExceptDb", &tsSlowLogExceptDb},
2703

2704
                                         {"mndSdbWriteDelta", &tsMndSdbWriteDelta},
2705
                                         {"minDiskFreeSize", &tsMinDiskFreeSize},
2706
                                         {"randErrorChance", &tsRandErrChance},
2707
                                         {"randErrorDivisor", &tsRandErrDivisor},
2708
                                         {"randErrorScope", &tsRandErrScope},
2709
                                         {"syncLogBufferMemoryAllowed", &tsLogBufferMemoryAllowed},
2710
                                         {"syncHeartbeatInterval", &tsHeartbeatInterval},
2711
                                         {"syncHeartbeatTimeout", &tsHeartbeatTimeout},
2712
                                         {"syncSnapReplMaxWaitN", &tsSnapReplMaxWaitN},
2713
                                         {"syncRoutineReportInterval", &tsRoutineReportInterval},
2714
                                         {"walFsyncDataSizeLimit", &tsWalFsyncDataSizeLimit},
2715

2716
                                         {"numOfCores", &tsNumOfCores},
2717

2718
                                         {"enableCoreFile", &tsEnableCoreFile},
2719

2720
                                         {"telemetryInterval", &tsTelemInterval},
2721

2722
                                         {"cacheLazyLoadThreshold", &tsCacheLazyLoadThreshold},
2723
                                         {"checkpointInterval", &tsStreamCheckpointInterval},
2724
                                         {"concurrentCheckpoint", &tsMaxConcurrentCheckpoint},
2725

2726
                                         {"retentionSpeedLimitMB", &tsRetentionSpeedLimitMB},
2727
                                         {"ttlChangeOnWrite", &tsTtlChangeOnWrite},
2728

2729
                                         {"logKeepDays", &tsLogKeepDays},
2730
                                         {"maxStreamBackendCache", &tsMaxStreamBackendCache},
2731
                                         {"mqRebalanceInterval", &tsMqRebalanceInterval},
2732
                                         {"numOfLogLines", &tsNumOfLogLines},
2733
                                         {"queryRspPolicy", &tsQueryRspPolicy},
2734
                                         {"timeseriesThreshold", &tsTimeSeriesThreshold},
2735
                                         {"tmqMaxTopicNum", &tmqMaxTopicNum},
2736
                                         {"tmqRowSize", &tmqRowSize},
2737
                                         {"transPullupInterval", &tsTransPullupInterval},
2738
                                         {"compactPullupInterval", &tsCompactPullupInterval},
2739
                                         {"trimVDbIntervalSec", &tsTrimVDbIntervalSec},
2740
                                         {"ttlBatchDropNum", &tsTtlBatchDropNum},
2741
                                         {"ttlFlushThreshold", &tsTtlFlushThreshold},
2742
                                         {"ttlPushInterval", &tsTtlPushIntervalSec},
2743
                                         {"ttlUnit", &tsTtlUnit},
2744
                                         {"s3MigrateIntervalSec", &tsS3MigrateIntervalSec},
2745
                                         {"s3MigrateEnabled", &tsS3MigrateEnabled},
2746
                                         //{"s3BlockSize", &tsS3BlockSize},
2747
                                         {"s3BlockCacheSize", &tsS3BlockCacheSize},
2748
                                         {"s3PageCacheSize", &tsS3PageCacheSize},
2749
                                         {"s3UploadDelaySec", &tsS3UploadDelaySec},
2750
                                         {"mndLogRetention", &tsMndLogRetention},
2751
                                         {"supportVnodes", &tsNumOfSupportVnodes},
2752
                                         {"experimental", &tsExperimental},
2753

2754
                                         {"numOfRpcSessions", &tsNumOfRpcSessions},
2755
                                         {"shellActivityTimer", &tsShellActivityTimer},
2756
                                         {"readTimeout", &tsReadTimeout},
2757
                                         {"safetyCheckLevel", &tsSafetyCheckLevel},
2758
                                         {"bypassFlag", &tsBypassFlag},
2759
                                         {"arbHeartBeatIntervalSec", &tsArbHeartBeatIntervalSec},
2760
                                         {"arbCheckSyncIntervalSec", &tsArbCheckSyncIntervalSec},
2761
                                         {"arbSetAssignedTimeoutSec", &tsArbSetAssignedTimeoutSec},
2762
                                         {"queryNoFetchTimeoutSec", &tsQueryNoFetchTimeoutSec},
2763
                                         {"enableStrongPassword", &tsEnableStrongPassword},
2764
                                        {"forceKillTrans", &tsForceKillTrans}};
2765

2766
    if ((code = taosCfgSetOption(debugOptions, tListLen(debugOptions), pItem, true)) != TSDB_CODE_SUCCESS) {
443✔
2767
      code = taosCfgSetOption(options, tListLen(options), pItem, false);
407✔
2768
    }
2769
  }
2770

2771
_exit:
36✔
2772
  cfgUnLock(pCfg);
469✔
2773
  TAOS_RETURN(code);
469✔
2774
}
2775

2776
static int32_t taosCfgDynamicOptionsForClient(SConfig *pCfg, const char *name) {
2,414✔
2777
  int32_t code = TSDB_CODE_SUCCESS;
2,414✔
2778
  int32_t lino = 0;
2,414✔
2779

2780
  if (strcasecmp("charset", name) == 0 || strcasecmp("timezone", name) == 0) {
2,414!
2781
    TAOS_RETURN(TSDB_CODE_SUCCESS);
3✔
2782
  }
2783

2784
  cfgLock(pCfg);
2,411✔
2785

2786
  SConfigItem *pItem = cfgGetItem(pCfg, name);
2,411✔
2787
  if ((pItem == NULL) || pItem->dynScope == CFG_DYN_SERVER) {
2,411!
2788
    uError("failed to config:%s, not support", name);
×
2789
    code = TSDB_CODE_INVALID_CFG;
×
2790
    goto _out;
×
2791
  }
2792

2793
  bool matched = false;
2,411✔
2794

2795
  int32_t len = strlen(name);
2,411✔
2796
  char    lowcaseName[CFG_NAME_MAX_LEN + 1] = {0};
2,411✔
2797
  (void)strntolower(lowcaseName, name, TMIN(CFG_NAME_MAX_LEN, len));
2,411✔
2798

2799
  switch (lowcaseName[0]) {
2,411✔
2800
    case 'd': {
5✔
2801
      if (strcasecmp("debugFlag", name) == 0) {
5!
2802
        code = taosSetAllDebugFlag(pCfg, pItem->i32);
5✔
2803
        matched = true;
5✔
2804
      }
2805
      break;
5✔
2806
    }
2807
    case 'e': {
2✔
2808
      if (strcasecmp("enableCoreFile", name) == 0) {
2!
2809
        tsEnableCoreFile = pItem->bval;
×
2810
        taosSetCoreDump(tsEnableCoreFile);
×
2811
        uInfo("%s set to %d", name, tsEnableCoreFile);
×
2812
        matched = true;
×
2813
      }
2814
      break;
2✔
2815
    }
2816
    case 'f': {
2✔
2817
      if (strcasecmp("fqdn", name) == 0) {
2✔
2818
        SConfigItem *pFqdnItem = cfgGetItem(pCfg, "fqdn");
1✔
2819
        SConfigItem *pServerPortItem = cfgGetItem(pCfg, "serverPort");
1✔
2820
        SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp");
1✔
2821
        if (pFqdnItem == NULL || pServerPortItem == NULL || pFirstEpItem == NULL) {
1!
2822
          uError("failed to get fqdn or serverPort or firstEp from cfg");
×
2823
          code = TSDB_CODE_CFG_NOT_FOUND;
×
2824
          goto _out;
×
2825
        }
2826

2827
        tstrncpy(tsLocalFqdn, pFqdnItem->str, TSDB_FQDN_LEN);
1✔
2828
        tsServerPort = (uint16_t)pServerPortItem->i32;
1✔
2829
        (void)snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
1✔
2830

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

2834
        SEp firstEp = {0};
1✔
2835
        TAOS_CHECK_GOTO(
1!
2836
            taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp), &lino,
2837
            _out);
2838
        (void)snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port);
1✔
2839

2840
        TAOS_CHECK_GOTO(cfgSetItem(pCfg, "firstEp", tsFirst, pFirstEpItem->stype, false), &lino, _out);
1!
2841
        uInfo("localEp set to '%s', tsFirst set to '%s'", tsLocalEp, tsFirst);
1!
2842
        matched = true;
1✔
2843
      } else if (strcasecmp("firstEp", name) == 0) {
1!
2844
        SConfigItem *pFqdnItem = cfgGetItem(pCfg, "fqdn");
1✔
2845
        SConfigItem *pServerPortItem = cfgGetItem(pCfg, "serverPort");
1✔
2846
        SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp");
1✔
2847
        if (pFqdnItem == NULL || pServerPortItem == NULL || pFirstEpItem == NULL) {
1!
2848
          uError("failed to get fqdn or serverPort or firstEp from cfg");
×
2849
          code = TSDB_CODE_CFG_NOT_FOUND;
×
2850
          goto _out;
×
2851
        }
2852

2853
        tstrncpy(tsLocalFqdn, pFqdnItem->str, TSDB_FQDN_LEN);
1✔
2854
        tsServerPort = (uint16_t)pServerPortItem->i32;
1✔
2855
        (void)snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
1✔
2856

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

2860
        SEp firstEp = {0};
1✔
2861
        TAOS_CHECK_GOTO(
1!
2862
            taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp), &lino,
2863
            _out);
2864
        (void)snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port);
1✔
2865

2866
        TAOS_CHECK_GOTO(cfgSetItem(pCfg, "firstEp", tsFirst, pFirstEpItem->stype, false), &lino, _out);
1!
2867
        uInfo("localEp set to '%s', tsFirst set to '%s'", tsLocalEp, tsFirst);
1!
2868
        matched = true;
1✔
2869
      }
2870
      break;
2✔
2871
    }
2872
    case 'l': {
5✔
2873
      if (strcasecmp("locale", name) == 0) {
5!
2874
        SConfigItem *pLocaleItem = cfgGetItem(pCfg, "locale");
×
2875
        if (pLocaleItem == NULL) {
×
2876
          uError("failed to get locale from cfg");
×
2877
          code = TSDB_CODE_CFG_NOT_FOUND;
×
2878
          goto _out;
×
2879
        }
2880

2881
        const char *locale = pLocaleItem->str;
×
2882
        TAOS_CHECK_GOTO(taosSetSystemLocale(locale), &lino, _out);
×
2883
        uInfo("locale set to '%s'", locale);
×
2884
        matched = true;
×
2885
      }
2886
      break;
5✔
2887
    }
2888
    case 'm': {
12✔
2889
      if (strcasecmp("metaCacheMaxSize", name) == 0) {
12✔
2890
        atomic_store_32(&tsMetaCacheMaxSize, pItem->i32);
1✔
2891
        uInfo("%s set to %d", name, atomic_load_32(&tsMetaCacheMaxSize));
1!
2892
        matched = true;
1✔
2893
      } else if (strcasecmp("minimalTmpDirGB", name) == 0) {
11✔
2894
        tsTempSpace.reserved = (int64_t)(((double)pItem->fval) * 1024 * 1024 * 1024);
2✔
2895
        uInfo("%s set to %" PRId64, name, tsTempSpace.reserved);
2!
2896
        matched = true;
2✔
2897
      } else if (strcasecmp("minimalLogDirGB", name) == 0) {
9✔
2898
        tsLogSpace.reserved = (int64_t)(((double)pItem->fval) * 1024 * 1024 * 1024);
1✔
2899
        uInfo("%s set to %" PRId64, name, tsLogSpace.reserved);
1!
2900
        matched = true;
1✔
2901
      }
2902
      break;
12✔
2903
    }
2904
    case 's': {
28✔
2905
      if (strcasecmp("secondEp", name) == 0) {
28✔
2906
        SEp secondEp = {0};
1✔
2907
        TAOS_CHECK_GOTO(taosGetFqdnPortFromEp(strlen(pItem->str) == 0 ? tsFirst : pItem->str, &secondEp), &lino, _out);
1!
2908
        (void)snprintf(tsSecond, sizeof(tsSecond), "%s:%u", secondEp.fqdn, secondEp.port);
1✔
2909
        TAOS_CHECK_GOTO(cfgSetItem(pCfg, "secondEp", tsSecond, pItem->stype, false), &lino, _out);
1!
2910
        uInfo("%s set to %s", name, tsSecond);
1!
2911
        matched = true;
1✔
2912
      } else if (strcasecmp("smlChildTableName", name) == 0) {
27✔
2913
        TAOS_CHECK_GOTO(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_TABLE_NAME_LEN), &lino, _out);
1!
2914
        uInfo("%s set from %s to %s", name, tsSmlChildTableName, pItem->str);
1!
2915
        tstrncpy(tsSmlChildTableName, pItem->str, TSDB_TABLE_NAME_LEN);
1✔
2916
        matched = true;
1✔
2917
      } else if (strcasecmp("smlAutoChildTableNameDelimiter", name) == 0) {
26✔
2918
        TAOS_CHECK_GOTO(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_TABLE_NAME_LEN), &lino, _out);
1!
2919
        uInfo("%s set from %s to %s", name, tsSmlAutoChildTableNameDelimiter, pItem->str);
1!
2920
        tstrncpy(tsSmlAutoChildTableNameDelimiter, pItem->str, TSDB_TABLE_NAME_LEN);
1✔
2921
        matched = true;
1✔
2922
      } else if (strcasecmp("smlTagName", name) == 0) {
25✔
2923
        TAOS_CHECK_GOTO(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_COL_NAME_LEN), &lino, _out);
1!
2924
        uInfo("%s set from %s to %s", name, tsSmlTagName, pItem->str);
1!
2925
        tstrncpy(tsSmlTagName, pItem->str, TSDB_COL_NAME_LEN);
1✔
2926
        matched = true;
1✔
2927
      } else if (strcasecmp("smlTsDefaultName", name) == 0) {
24✔
2928
        TAOS_CHECK_GOTO(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_COL_NAME_LEN), &lino, _out);
1!
2929
        uInfo("%s set from %s to %s", name, tsSmlTsDefaultName, pItem->str);
1!
2930
        tstrncpy(tsSmlTsDefaultName, pItem->str, TSDB_COL_NAME_LEN);
1✔
2931
        matched = true;
1✔
2932
      } else if (strcasecmp("serverPort", name) == 0) {
23✔
2933
        SConfigItem *pFqdnItem = cfgGetItem(pCfg, "fqdn");
1✔
2934
        SConfigItem *pServerPortItem = cfgGetItem(pCfg, "serverPort");
1✔
2935
        SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp");
1✔
2936
        if (pFqdnItem == NULL || pServerPortItem == NULL || pFirstEpItem == NULL) {
1!
2937
          uError("failed to get fqdn or serverPort or firstEp from cfg");
×
2938
          code = TSDB_CODE_CFG_NOT_FOUND;
×
2939
          goto _out;
×
2940
        }
2941

2942
        TAOS_CHECK_GOTO(taosCheckCfgStrValueLen(pFqdnItem->name, pFqdnItem->str, TSDB_FQDN_LEN), &lino, _out);
1!
2943
        tstrncpy(tsLocalFqdn, pFqdnItem->str, TSDB_FQDN_LEN);
1✔
2944
        tsServerPort = (uint16_t)pServerPortItem->i32;
1✔
2945
        (void)snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
1✔
2946

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

2950
        SEp firstEp = {0};
1✔
2951
        TAOS_CHECK_GOTO(
1!
2952
            taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp), &lino,
2953
            _out);
2954
        (void)snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port);
1✔
2955

2956
        TAOS_CHECK_GOTO(cfgSetItem(pCfg, "firstEp", tsFirst, pFirstEpItem->stype, false), &lino, _out);
1!
2957
        uInfo("localEp set to '%s', tsFirst set to '%s'", tsLocalEp, tsFirst);
1!
2958
        matched = true;
1✔
2959
      }
2960
      break;
28✔
2961
    }
2962
    case 't': {
2✔
2963
      if (strcasecmp("tempDir", name) == 0) {
2!
2964
        TAOS_CHECK_GOTO(taosCheckCfgStrValueLen(pItem->name, pItem->str, PATH_MAX), &lino, _out);
×
2965
        uInfo("%s set from %s to %s", name, tsTempDir, pItem->str);
×
2966
        tstrncpy(tsTempDir, pItem->str, PATH_MAX);
×
2967
        TAOS_CHECK_GOTO(taosExpandDir(tsTempDir, tsTempDir, PATH_MAX), &lino, _out);
×
2968
        if (taosMulMkDir(tsTempDir) != 0) {
×
2969
          code = TAOS_SYSTEM_ERROR(ERRNO);
×
2970
          uError("failed to create tempDir:%s since %s", tsTempDir, tstrerror(code));
×
2971
          goto _out;
×
2972
        }
2973
        matched = true;
×
2974
      }
2975
      break;
2✔
2976
    }
2977
    default:
2,355✔
2978
      code = TSDB_CODE_CFG_NOT_FOUND;
2,355✔
2979
      break;
2,355✔
2980
  }
2981

2982
  if (matched) goto _out;
2,411✔
2983

2984
  {  //  'bool/int32_t/int64_t/float/double' variables with general modification function
2985
    static OptionNameAndVar debugOptions[] = {
2986
        {"cDebugFlag", &cDebugFlag},     {"dDebugFlag", &dDebugFlag},     {"fsDebugFlag", &fsDebugFlag},
2987
        {"idxDebugFlag", &idxDebugFlag}, {"jniDebugFlag", &jniDebugFlag}, {"qDebugFlag", &qDebugFlag},
2988
        {"rpcDebugFlag", &rpcDebugFlag}, {"smaDebugFlag", &smaDebugFlag}, {"tmrDebugFlag", &tmrDebugFlag},
2989
        {"uDebugFlag", &uDebugFlag},     {"simDebugFlag", &simDebugFlag},
2990
    };
2991

2992
    static OptionNameAndVar options[] = {{"asyncLog", &tsAsyncLog},
2993
                                         {"compressMsgSize", &tsCompressMsgSize},
2994
                                         {"countAlwaysReturnValue", &tsCountAlwaysReturnValue},
2995
                                         {"crashReporting", &tsEnableCrashReport},
2996
                                         {"enableQueryHb", &tsEnableQueryHb},
2997
                                         {"keepColumnName", &tsKeepColumnName},
2998
                                         {"logKeepDays", &tsLogKeepDays},
2999
                                         {"maxInsertBatchRows", &tsMaxInsertBatchRows},
3000
                                         {"minSlidingTime", &tsMinSlidingTime},
3001
                                         {"minIntervalTime", &tsMinIntervalTime},
3002
                                         {"numOfLogLines", &tsNumOfLogLines},
3003
                                         {"querySmaOptimize", &tsQuerySmaOptimize},
3004
                                         {"queryPolicy", &tsQueryPolicy},
3005
                                         {"queryTableNotExistAsEmpty", &tsQueryTbNotExistAsEmpty},
3006
                                         {"queryPlannerTrace", &tsQueryPlannerTrace},
3007
                                         {"queryNodeChunkSize", &tsQueryNodeChunkSize},
3008
                                         {"queryUseNodeAllocator", &tsQueryUseNodeAllocator},
3009
                                         {"smlDot2Underline", &tsSmlDot2Underline},
3010
                                         {"useAdapter", &tsUseAdapter},
3011
                                         {"multiResultFunctionStarReturnTags", &tsMultiResultFunctionStarReturnTags},
3012
                                         {"maxTsmaCalcDelay", &tsMaxTsmaCalcDelay},
3013
                                         {"tsmaDataDeleteMark", &tsmaDataDeleteMark},
3014
                                         {"numOfRpcSessions", &tsNumOfRpcSessions},
3015
                                         {"bypassFlag", &tsBypassFlag},
3016
                                         {"safetyCheckLevel", &tsSafetyCheckLevel},
3017
                                         {"streamCoverage", &tsStreamCoverage},
3018
                                         {"compareAsStrInGreatest", &tsCompareAsStrInGreatest}};
3019

3020
    if ((code = taosCfgSetOption(debugOptions, tListLen(debugOptions), pItem, true)) != TSDB_CODE_SUCCESS) {
2,394!
3021
      code = taosCfgSetOption(options, tListLen(options), pItem, false);
2,394✔
3022
    }
3023
  }
3024

3025
_out:
×
3026
  if (TSDB_CODE_SUCCESS != code) {
2,411!
3027
    uError("failed to set option:%s, lino:%d, since:%s", name, lino, tstrerror(code));
×
3028
  }
3029

3030
  cfgUnLock(pCfg);
2,411✔
3031
  TAOS_RETURN(code);
2,411✔
3032
}
3033

3034
int32_t taosCfgDynamicOptions(SConfig *pCfg, const char *name, bool forServer) {
2,885✔
3035
  if (forServer) {
2,885✔
3036
    return taosCfgDynamicOptionsForServer(pCfg, name);
471✔
3037
  } else {
3038
    return taosCfgDynamicOptionsForClient(pCfg, name);
2,414✔
3039
  }
3040
}
3041

3042
int32_t taosSetDebugFlag(int32_t *pFlagPtr, const char *flagName, int32_t flagVal) {
673,070✔
3043
  SConfigItem *pItem = NULL;
673,070✔
3044
  TAOS_CHECK_GET_CFG_ITEM(tsCfg, pItem, flagName);
673,070✔
3045
  pItem->i32 = flagVal;
97,934✔
3046
  if (pFlagPtr != NULL) {
97,934!
3047
    *pFlagPtr = flagVal;
97,934✔
3048
  }
3049
  TAOS_RETURN(TSDB_CODE_SUCCESS);
97,934✔
3050
}
3051

3052
static int taosLogVarComp(void const *lp, void const *rp) {
8,178✔
3053
  SLogVar *lpVar = (SLogVar *)lp;
8,178✔
3054
  SLogVar *rpVar = (SLogVar *)rp;
8,178✔
3055
  return taosStrcasecmp(lpVar->name, rpVar->name);
8,178✔
3056
}
3057

3058
static void taosCheckAndSetDebugFlag(int32_t *pFlagPtr, char *name, int32_t flag, SArray *noNeedToSetVars) {
673,398✔
3059
  if (noNeedToSetVars != NULL && taosArraySearch(noNeedToSetVars, name, taosLogVarComp, TD_EQ) != NULL) {
673,398✔
3060
    return;
364✔
3061
  }
3062
  int32_t code = 0;
673,034✔
3063
  if ((code = taosSetDebugFlag(pFlagPtr, name, flag)) != 0) {
673,034✔
3064
    if (code != TSDB_CODE_CFG_NOT_FOUND) {
575,136!
3065
      uError("failed to set flag %s to %d, since:%s", name, flag, tstrerror(code));
×
3066
    } else {
3067
      uTrace("failed to set flag %s to %d, since:%s", name, flag, tstrerror(code));
575,136✔
3068
    }
3069
  }
3070
  return;
673,034✔
3071
}
3072

3073
int32_t taosSetGlobalDebugFlag(int32_t flag) { return taosSetAllDebugFlag(tsCfg, flag); }
×
3074

3075
// NOTE: set all command does not change the tmrDebugFlag
3076
static int32_t taosSetAllDebugFlag(SConfig *pCfg, int32_t flag) {
45,409✔
3077
  if (flag < 0) TAOS_RETURN(TSDB_CODE_INVALID_PARA);
45,409!
3078
  if (flag == 0) TAOS_RETURN(TSDB_CODE_SUCCESS);  // just ignore
45,409✔
3079

3080
  SArray      *noNeedToSetVars = NULL;
30,609✔
3081
  SConfigItem *pItem = NULL;
30,609✔
3082
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "debugFlag");
30,609!
3083

3084
  pItem->i32 = flag;
30,609✔
3085
  noNeedToSetVars = pItem->array;
30,609✔
3086

3087
  taosCheckAndSetDebugFlag(&simDebugFlag, "simDebugFlag", flag, noNeedToSetVars);
30,609✔
3088
  taosCheckAndSetDebugFlag(&uDebugFlag, "uDebugFlag", flag, noNeedToSetVars);
30,609✔
3089
  taosCheckAndSetDebugFlag(&rpcDebugFlag, "rpcDebugFlag", flag, noNeedToSetVars);
30,609✔
3090
  taosCheckAndSetDebugFlag(&qDebugFlag, "qDebugFlag", flag, noNeedToSetVars);
30,609✔
3091

3092
  taosCheckAndSetDebugFlag(&jniDebugFlag, "jniDebugFlag", flag, noNeedToSetVars);
30,609✔
3093
  taosCheckAndSetDebugFlag(&cDebugFlag, "cDebugFlag", flag, noNeedToSetVars);
30,609✔
3094

3095
  taosCheckAndSetDebugFlag(&dDebugFlag, "dDebugFlag", flag, noNeedToSetVars);
30,609✔
3096
  taosCheckAndSetDebugFlag(&vDebugFlag, "vDebugFlag", flag, noNeedToSetVars);
30,609✔
3097
  taosCheckAndSetDebugFlag(&mDebugFlag, "mDebugFlag", flag, noNeedToSetVars);
30,609✔
3098
  taosCheckAndSetDebugFlag(&wDebugFlag, "wDebugFlag", flag, noNeedToSetVars);
30,609✔
3099
  taosCheckAndSetDebugFlag(&azDebugFlag, "azDebugFlag", flag, noNeedToSetVars);
30,609✔
3100
  taosCheckAndSetDebugFlag(&sDebugFlag, "sDebugFlag", flag, noNeedToSetVars);
30,609✔
3101
  taosCheckAndSetDebugFlag(&tsdbDebugFlag, "tsdbDebugFlag", flag, noNeedToSetVars);
30,609✔
3102
  taosCheckAndSetDebugFlag(&tqDebugFlag, "tqDebugFlag", flag, noNeedToSetVars);
30,609✔
3103
  taosCheckAndSetDebugFlag(&fsDebugFlag, "fsDebugFlag", flag, noNeedToSetVars);
30,609✔
3104
  taosCheckAndSetDebugFlag(&udfDebugFlag, "udfDebugFlag", flag, noNeedToSetVars);
30,609✔
3105
  taosCheckAndSetDebugFlag(&smaDebugFlag, "smaDebugFlag", flag, noNeedToSetVars);
30,609✔
3106
  taosCheckAndSetDebugFlag(&idxDebugFlag, "idxDebugFlag", flag, noNeedToSetVars);
30,609✔
3107
  taosCheckAndSetDebugFlag(&tdbDebugFlag, "tdbDebugFlag", flag, noNeedToSetVars);
30,609✔
3108
  taosCheckAndSetDebugFlag(&metaDebugFlag, "metaDebugFlag", flag, noNeedToSetVars);
30,609✔
3109
  taosCheckAndSetDebugFlag(&stDebugFlag, "stDebugFlag", flag, noNeedToSetVars);
30,609✔
3110
  taosCheckAndSetDebugFlag(&sndDebugFlag, "sndDebugFlag", flag, noNeedToSetVars);
30,609✔
3111

3112
  taosArrayClear(noNeedToSetVars);  // reset array
30,609✔
3113

3114
  uInfo("all debug flag are set to %d", flag);
30,609!
3115
  TAOS_RETURN(TSDB_CODE_SUCCESS);
30,609✔
3116
}
3117

3118
int32_t taosGranted(int8_t type) {
1,415,138✔
3119
  switch (type) {
1,415,138!
3120
    case TSDB_GRANT_ALL: {
1,415,662✔
3121
      if (atomic_load_32(&tsGrant) & GRANT_FLAG_ALL) {
1,415,662!
3122
        return 0;
1,415,880✔
3123
      }
3124
      int32_t grantVal = atomic_load_32(&tsGrant);
×
3125
      if (grantVal & GRANT_FLAG_EX_MULTI_TIER) {
×
3126
        return TSDB_CODE_GRANT_MULTI_STORAGE_EXPIRED;
×
3127
      } else if (grantVal & GRANT_FLAG_EX_VNODE) {
×
3128
        return TSDB_CODE_GRANT_VNODE_LIMITED;
×
3129
      } else if (grantVal & GRANT_FLAG_EX_STORAGE) {
×
3130
        return TSDB_CODE_GRANT_STORAGE_LIMITED;
×
3131
      }
3132
      return TSDB_CODE_GRANT_EXPIRED;
×
3133
    }
3134
    case TSDB_GRANT_AUDIT: {
6✔
3135
      return (atomic_load_32(&tsGrant) & GRANT_FLAG_AUDIT) ? 0 : TSDB_CODE_GRANT_AUDIT_EXPIRED;
6!
3136
    }
3137
    case TSDB_GRANT_VIEW:
547✔
3138
      return (atomic_load_32(&tsGrant) & GRANT_FLAG_VIEW) ? 0 : TSDB_CODE_GRANT_VIEW_EXPIRED;
547✔
3139
    default:
×
3140
      uWarn("undefined grant type:%" PRIi8, type);
×
3141
      break;
×
3142
  }
3143
  return 0;
×
3144
}
3145

3146
int32_t globalConfigSerialize(int32_t version, SArray *array, char **serialized) {
2,700✔
3147
  char   buf[30];
3148
  cJSON *json = cJSON_CreateObject();
2,700✔
3149
  if (json == NULL) goto _exit;
2,700!
3150
  if (cJSON_AddNumberToObject(json, "file_version", GLOBAL_CONFIG_FILE_VERSION) == NULL) goto _exit;
2,700!
3151
  if (cJSON_AddNumberToObject(json, "version", version) == NULL) goto _exit;
2,700!
3152
  int sz = taosArrayGetSize(array);
2,700✔
3153

3154
  cJSON *cField = cJSON_CreateObject();
2,700✔
3155
  if (cField == NULL) goto _exit;
2,700!
3156

3157
  if (!cJSON_AddItemToObject(json, "configs", cField)) goto _exit;
2,700!
3158

3159
  // cjson only support int32_t or double
3160
  // string are used to prohibit the loss of precision
3161
  for (int i = 0; i < sz; i++) {
251,940✔
3162
    SConfigItem *item = (SConfigItem *)taosArrayGet(array, i);
249,240✔
3163
    switch (item->dtype) {
249,240!
3164
      {
3165
        case CFG_DTYPE_NONE:
×
3166
          break;
×
3167
        case CFG_DTYPE_BOOL:
56,280✔
3168
          if (cJSON_AddBoolToObject(cField, item->name, item->bval) == NULL) goto _exit;
56,280!
3169
          break;
56,280✔
3170
        case CFG_DTYPE_INT32:
128,640✔
3171
          if (cJSON_AddNumberToObject(cField, item->name, item->i32) == NULL) goto _exit;
128,640!
3172
          break;
128,640✔
3173
        case CFG_DTYPE_INT64:
21,440✔
3174
          (void)sprintf(buf, "%" PRId64, item->i64);
21,440✔
3175
          if (cJSON_AddStringToObject(cField, item->name, buf) == NULL) goto _exit;
21,440!
3176
          break;
21,440✔
3177
        case CFG_DTYPE_FLOAT:
8,040✔
3178
        case CFG_DTYPE_DOUBLE:
3179
          (void)sprintf(buf, "%f", item->fval);
8,040✔
3180
          if (cJSON_AddStringToObject(cField, item->name, buf) == NULL) goto _exit;
8,040!
3181
          break;
8,040✔
3182
        case CFG_DTYPE_STRING:
34,840✔
3183
        case CFG_DTYPE_DIR:
3184
        case CFG_DTYPE_LOCALE:
3185
        case CFG_DTYPE_CHARSET:
3186
        case CFG_DTYPE_TIMEZONE:
3187
          if (cJSON_AddStringToObject(cField, item->name, item->str) == NULL) goto _exit;
34,840!
3188
          break;
34,840✔
3189
      }
3190
    }
3191
  }
3192
  char *pSerialized = tjsonToString(json);
2,700✔
3193
_exit:
2,700✔
3194
  if (terrno != TSDB_CODE_SUCCESS) {
2,700✔
3195
    uError("failed to serialize global config since %s", tstrerror(terrno));
12!
3196
  }
3197
  cJSON_Delete(json);
2,700✔
3198
  *serialized = pSerialized;
2,700✔
3199
  return terrno;
2,700✔
3200
}
3201

3202
int32_t localConfigSerialize(SArray *array, char **serialized) {
2,892✔
3203
  char   buf[30];
3204
  cJSON *json = cJSON_CreateObject();
2,892✔
3205
  if (json == NULL) goto _exit;
2,892!
3206

3207
  int sz = taosArrayGetSize(array);
2,892✔
3208

3209
  cJSON *cField = cJSON_CreateObject();
2,892✔
3210
  if (cField == NULL) goto _exit;
2,892!
3211
  if (cJSON_AddNumberToObject(json, "file_version", LOCAL_CONFIG_FILE_VERSION) == NULL) goto _exit;
2,892!
3212
  if (!cJSON_AddItemToObject(json, "configs", cField)) goto _exit;
2,892!
3213

3214
  // cjson only support int32_t or double
3215
  // string are used to prohibit the loss of precision
3216
  for (int i = 0; i < sz; i++) {
378,852✔
3217
    SConfigItem *item = (SConfigItem *)taosArrayGet(array, i);
375,960✔
3218
    if (strcasecmp(item->name, "dataDir") == 0) {
375,960✔
3219
      int32_t sz = taosArrayGetSize(item->array);
2,892✔
3220
      cJSON  *dataDirs = cJSON_CreateArray();
2,892✔
3221
      if (!cJSON_AddItemToObject(cField, item->name, dataDirs)) {
2,892!
3222
        uError("failed to serialize global config since %s", tstrerror(terrno));
×
3223
        goto _exit;
×
3224
      }
3225
      for (int j = 0; j < sz; j++) {
5,846✔
3226
        SDiskCfg *disk = (SDiskCfg *)taosArrayGet(item->array, j);
2,954✔
3227
        cJSON    *dataDir = cJSON_CreateObject();
2,954✔
3228
        if (dataDir == NULL) goto _exit;
2,954!
3229
        if (!cJSON_AddItemToArray(dataDirs, dataDir)) {
2,954!
3230
          uError("failed to serialize global config since %s", tstrerror(terrno));
×
3231
          goto _exit;
×
3232
        }
3233
        if (cJSON_AddStringToObject(dataDir, "dir", disk->dir) == NULL) goto _exit;
2,954!
3234
        if (cJSON_AddNumberToObject(dataDir, "level", disk->level) == NULL) goto _exit;
2,954!
3235
        if (disk->diskId == 0) {
2,954✔
3236
          if (taosGetFileDiskID(disk->dir, &disk->diskId) != 0) {
2,807!
3237
            uError("failed to get disk id for %s", disk->dir);
×
3238
            goto _exit;
×
3239
          }
3240
        }
3241
        (void)sprintf(buf, "%" PRId64, disk->diskId);
2,954✔
3242
        if (cJSON_AddStringToObject(dataDir, "disk_id", buf) == NULL) goto _exit;
2,954!
3243
        if (cJSON_AddNumberToObject(dataDir, "primary", disk->primary) == NULL) goto _exit;
2,954!
3244
        if (cJSON_AddNumberToObject(dataDir, "disable", disk->disable) == NULL) goto _exit;
2,954!
3245
      }
3246
      continue;
2,892✔
3247
    }
3248
    if (strcasecmp(item->name, "forceReadConfig") == 0) {
373,068✔
3249
      continue;
2,892✔
3250
    }
3251
    switch (item->dtype) {
370,176!
3252
      {
3253
        case CFG_DTYPE_NONE:
×
3254
          break;
×
3255
        case CFG_DTYPE_BOOL:
54,948✔
3256
          if (cJSON_AddBoolToObject(cField, item->name, item->bval) == NULL) goto _exit;
54,948!
3257
          break;
54,948✔
3258
        case CFG_DTYPE_INT32:
205,332✔
3259
          if (cJSON_AddNumberToObject(cField, item->name, item->i32) == NULL) goto _exit;
205,332!
3260
          break;
205,332✔
3261
        case CFG_DTYPE_INT64:
20,244✔
3262
          (void)sprintf(buf, "%" PRId64, item->i64);
20,244✔
3263
          if (cJSON_AddStringToObject(cField, item->name, buf) == NULL) goto _exit;
20,244!
3264
          break;
20,244✔
3265
        case CFG_DTYPE_FLOAT:
14,460✔
3266
        case CFG_DTYPE_DOUBLE:
3267
          (void)sprintf(buf, "%f", item->fval);
14,460✔
3268
          if (cJSON_AddStringToObject(cField, item->name, buf) == NULL) goto _exit;
14,460!
3269
          break;
14,460✔
3270
        case CFG_DTYPE_STRING:
75,192✔
3271
        case CFG_DTYPE_DIR:
3272
        case CFG_DTYPE_LOCALE:
3273
        case CFG_DTYPE_CHARSET:
3274
        case CFG_DTYPE_TIMEZONE:
3275
          if (cJSON_AddStringToObject(cField, item->name, item->str) == NULL) goto _exit;
75,192!
3276
          break;
75,192✔
3277
      }
3278
    }
3279
  }
3280
  char *pSerialized = tjsonToString(json);
2,892✔
3281
_exit:
2,892✔
3282
  if (terrno != TSDB_CODE_SUCCESS) {
2,892!
3283
    uError("failed to serialize local config since %s", tstrerror(terrno));
×
3284
  }
3285
  cJSON_Delete(json);
2,892✔
3286
  *serialized = pSerialized;
2,892✔
3287
  return terrno;
2,892✔
3288
}
3289

3290
int32_t stypeConfigSerialize(SArray *array, char **serialized) {
2,892✔
3291
  char   buf[30];
3292
  cJSON *json = cJSON_CreateObject();
2,892✔
3293
  if (json == NULL) goto _exit;
2,892!
3294

3295
  int sz = taosArrayGetSize(array);
2,892✔
3296

3297
  cJSON *cField = cJSON_CreateObject();
2,892✔
3298
  if (cField == NULL) goto _exit;
2,892!
3299
  if (cJSON_AddNumberToObject(json, "file_version", LOCAL_CONFIG_FILE_VERSION) == NULL) goto _exit;
2,892!
3300
  if (!cJSON_AddItemToObject(json, "config_stypes", cField)) goto _exit;
2,892!
3301

3302
  // cjson only support int32_t or double
3303
  // string are used to prohibit the loss of precision
3304
  for (int i = 0; i < sz; i++) {
378,852✔
3305
    SConfigItem *item = (SConfigItem *)taosArrayGet(array, i);
375,960✔
3306
    if (cJSON_AddNumberToObject(cField, item->name, item->stype) == NULL) goto _exit;
375,960!
3307
  }
3308
  char *pSerialized = tjsonToString(json);
2,892✔
3309
_exit:
2,892✔
3310
  if (terrno != TSDB_CODE_SUCCESS) {
2,892!
3311
    uError("failed to serialize local config since %s", tstrerror(terrno));
×
3312
  }
3313
  cJSON_Delete(json);
2,892✔
3314
  *serialized = pSerialized;
2,892✔
3315
  return terrno;
2,892✔
3316
}
3317

3318
int32_t taosPersistGlobalConfig(SArray *array, const char *path, int32_t version) {
2,700✔
3319
  int32_t   code = 0;
2,700✔
3320
  int32_t   lino = 0;
2,700✔
3321
  char     *buffer = NULL;
2,700✔
3322
  TdFilePtr pFile = NULL;
2,700✔
3323
  char     *serialized = NULL;
2,700✔
3324
  char      filepath[CONFIG_FILE_LEN] = {0};
2,700✔
3325
  char      filename[CONFIG_FILE_LEN] = {0};
2,700✔
3326
  snprintf(filepath, sizeof(filepath), "%s%sconfig", path, TD_DIRSEP);
2,700✔
3327
  snprintf(filename, sizeof(filename), "%s%sconfig%sglobal.json", path, TD_DIRSEP, TD_DIRSEP);
2,700✔
3328

3329
  TAOS_CHECK_GOTO(taosMkDir(filepath), &lino, _exit);
2,700!
3330

3331
  TdFilePtr pConfigFile =
2,700✔
3332
      taosOpenFile(filename, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_TRUNC | TD_FILE_WRITE_THROUGH);
2,700✔
3333

3334
  if (pConfigFile == NULL) {
2,700!
3335
    code = TAOS_SYSTEM_ERROR(ERRNO);
×
3336
    uError("failed to open file:%s since %s", filename, tstrerror(code));
×
3337
    TAOS_RETURN(code);
×
3338
  }
3339
  TAOS_CHECK_GOTO(globalConfigSerialize(version, array, &serialized), &lino, _exit);
2,700✔
3340

3341
  if (taosWriteFile(pConfigFile, serialized, strlen(serialized)) < 0) {
2,688!
3342
    lino = __LINE__;
×
3343
    code = TAOS_SYSTEM_ERROR(ERRNO);
×
3344
    uError("failed to write file:%s since %s", filename, tstrerror(code));
×
3345
    goto _exit;
×
3346
  }
3347

3348
_exit:
2,688✔
3349
  if (code != TSDB_CODE_SUCCESS) {
2,700✔
3350
    uError("failed to persist global config at line:%d, since %s", lino, tstrerror(code));
12!
3351
  }
3352
  (void)taosCloseFile(&pConfigFile);
2,700✔
3353
  taosMemoryFree(serialized);
2,700!
3354
  return code;
2,700✔
3355
}
3356

3357
int32_t taosPersistLocalConfig(const char *path) {
2,892✔
3358
  int32_t   code = 0;
2,892✔
3359
  int32_t   lino = 0;
2,892✔
3360
  char     *buffer = NULL;
2,892✔
3361
  TdFilePtr pFile = NULL;
2,892✔
3362
  char     *serializedCfg = NULL;
2,892✔
3363
  char     *serializedStype = NULL;
2,892✔
3364
  char      filepath[CONFIG_FILE_LEN] = {0};
2,892✔
3365
  char      filename[CONFIG_FILE_LEN] = {0};
2,892✔
3366
  char      stypeFilename[CONFIG_FILE_LEN] = {0};
2,892✔
3367
  snprintf(filepath, sizeof(filepath), "%s%sconfig", path, TD_DIRSEP);
2,892✔
3368
  snprintf(filename, sizeof(filename), "%s%sconfig%slocal.json", path, TD_DIRSEP, TD_DIRSEP);
2,892✔
3369
  snprintf(stypeFilename, sizeof(stypeFilename), "%s%sconfig%sstype.json", path, TD_DIRSEP, TD_DIRSEP);
2,892✔
3370

3371
  // TODO(beryl) need to check if the file is existed
3372
  TAOS_CHECK_GOTO(taosMkDir(filepath), &lino, _exit);
2,892!
3373

3374
  TdFilePtr pConfigFile =
2,892✔
3375
      taosOpenFile(filename, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_TRUNC | TD_FILE_WRITE_THROUGH);
2,892✔
3376

3377
  if (pConfigFile == NULL) {
2,892!
3378
    code = TAOS_SYSTEM_ERROR(terrno);
×
3379
    uError("failed to open file:%s since %s", filename, tstrerror(code));
×
3380
    TAOS_RETURN(code);
×
3381
  }
3382

3383
  TdFilePtr pStypeFile =
2,892✔
3384
      taosOpenFile(stypeFilename, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_TRUNC | TD_FILE_WRITE_THROUGH);
2,892✔
3385
  if (pStypeFile == NULL) {
2,892!
3386
    code = TAOS_SYSTEM_ERROR(terrno);
×
3387
    uError("failed to open file:%s since %s", stypeFilename, tstrerror(code));
×
3388
    TAOS_RETURN(code);
×
3389
  }
3390

3391
  TAOS_CHECK_GOTO(localConfigSerialize(taosGetLocalCfg(tsCfg), &serializedCfg), &lino, _exit);
2,892!
3392
  if (taosWriteFile(pConfigFile, serializedCfg, strlen(serializedCfg)) < 0) {
2,892!
3393
    lino = __LINE__;
×
3394
    code = TAOS_SYSTEM_ERROR(terrno);
×
3395
    uError("failed to write file:%s since %s", filename, tstrerror(code));
×
3396
    goto _exit;
×
3397
  }
3398

3399
  TAOS_CHECK_GOTO(stypeConfigSerialize(taosGetLocalCfg(tsCfg), &serializedStype), &lino, _exit);
2,892!
3400
  if (taosWriteFile(pStypeFile, serializedStype, strlen(serializedStype)) < 0) {
2,892!
3401
    lino = __LINE__;
×
3402
    code = TAOS_SYSTEM_ERROR(terrno);
×
3403
    uError("failed to write file:%s since %s", stypeFilename, tstrerror(code));
×
3404
    goto _exit;
×
3405
  }
3406

3407
_exit:
2,892✔
3408
  if (code != TSDB_CODE_SUCCESS) {
2,892!
3409
    uError("failed to persist local config at line:%d, since %s", lino, tstrerror(code));
×
3410
  }
3411
  (void)taosCloseFile(&pConfigFile);
2,892✔
3412
  (void)taosCloseFile(&pStypeFile);
2,892✔
3413
  taosMemoryFree(serializedCfg);
2,892!
3414
  taosMemoryFree(serializedStype);
2,892!
3415
  return code;
2,892✔
3416
}
3417

3418
int32_t tSerializeSConfigArray(SEncoder *pEncoder, SArray *array) {
5,472✔
3419
  int32_t code = 0;
5,472✔
3420
  int32_t lino = 0;
5,472✔
3421
  int32_t sz = taosArrayGetSize(array);
5,472✔
3422
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, sz));
5,472!
3423
  for (int i = 0; i < sz; i++) {
409,650✔
3424
    SConfigItem *item = (SConfigItem *)taosArrayGet(array, i);
404,178✔
3425
    TAOS_CHECK_EXIT(tEncodeCStr(pEncoder, item->name));
808,356!
3426
    TAOS_CHECK_EXIT(tEncodeI32(pEncoder, item->dtype));
808,356!
3427
    switch (item->dtype) {
404,178!
3428
      {
3429
        case CFG_DTYPE_NONE:
×
3430
          break;
×
3431
        case CFG_DTYPE_BOOL:
91,266✔
3432
          TAOS_CHECK_EXIT(tEncodeBool(pEncoder, item->bval));
91,266!
3433
          break;
91,266✔
3434
        case CFG_DTYPE_INT32:
208,608✔
3435
          TAOS_CHECK_EXIT(tEncodeI32(pEncoder, item->i32));
417,216!
3436
          break;
208,608✔
3437
        case CFG_DTYPE_INT64:
34,768✔
3438
          TAOS_CHECK_EXIT(tEncodeI64(pEncoder, item->i64));
69,536!
3439
          break;
34,768✔
3440
        case CFG_DTYPE_FLOAT:
13,038✔
3441
        case CFG_DTYPE_DOUBLE:
3442
          TAOS_CHECK_EXIT(tEncodeFloat(pEncoder, item->fval));
26,076!
3443
          break;
13,038✔
3444
        case CFG_DTYPE_STRING:
56,498✔
3445
        case CFG_DTYPE_DIR:
3446
        case CFG_DTYPE_LOCALE:
3447
        case CFG_DTYPE_CHARSET:
3448
        case CFG_DTYPE_TIMEZONE:
3449
          TAOS_CHECK_EXIT(tEncodeCStr(pEncoder, item->str));
112,996!
3450
          break;
56,498✔
3451
      }
3452
    }
3453
  }
3454
_exit:
5,472✔
3455
  return code;
5,472✔
3456
}
3457

3458
int32_t tDeserializeSConfigArray(SDecoder *pDecoder, SArray *array) {
2,768✔
3459
  int32_t code = 0;
2,768✔
3460
  int32_t lino = 0;
2,768✔
3461
  int32_t sz = 0;
2,768✔
3462
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &sz));
2,768!
3463
  for (int i = 0; i < sz; i++) {
211,274✔
3464
    SConfigItem item = {0};
208,506✔
3465
    TAOS_CHECK_EXIT(tDecodeCStr(pDecoder, &item.name));
208,506!
3466
    TAOS_CHECK_EXIT(tDecodeI32(pDecoder, (int32_t *)&item.dtype));
208,506!
3467
    switch (item.dtype) {
208,506!
3468
      {
3469
        case CFG_DTYPE_NONE:
×
3470
          break;
×
3471
        case CFG_DTYPE_BOOL:
47,082✔
3472
          TAOS_CHECK_EXIT(tDecodeBool(pDecoder, &item.bval));
47,082!
3473
          break;
47,082✔
3474
        case CFG_DTYPE_INT32:
107,616✔
3475
          TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &item.i32));
107,616!
3476
          break;
107,616✔
3477
        case CFG_DTYPE_INT64:
17,936✔
3478
          TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &item.i64));
17,936!
3479
          break;
17,936✔
3480
        case CFG_DTYPE_FLOAT:
6,726✔
3481
        case CFG_DTYPE_DOUBLE:
3482
          TAOS_CHECK_EXIT(tDecodeFloat(pDecoder, &item.fval));
6,726!
3483
          break;
6,726✔
3484
        case CFG_DTYPE_STRING:
29,146✔
3485
        case CFG_DTYPE_DIR:
3486
        case CFG_DTYPE_LOCALE:
3487
        case CFG_DTYPE_CHARSET:
3488
        case CFG_DTYPE_TIMEZONE:
3489
          TAOS_CHECK_EXIT(tDecodeCStr(pDecoder, &item.str));
29,146!
3490
          break;
29,146✔
3491
      }
3492
    }
3493
    if (taosArrayPush(array, &item) == NULL) {
208,506!
3494
      code = terrno;
×
3495
      goto _exit;
×
3496
    }
3497
  }
3498
_exit:
2,768✔
3499
  if (code != TSDB_CODE_SUCCESS) {
2,768!
3500
    uError("failed to deserialize SConfigItem at line:%d, since %s", lino, tstrerror(code));
×
3501
  }
3502
  return code;
2,768✔
3503
}
3504

3505
bool isConifgItemLazyMode(SConfigItem *item) {
588✔
3506
  if (item->dynScope == CFG_DYN_CLIENT_LAZY || item->dynScope == CFG_DYN_SERVER_LAZY ||
588!
3507
      item->dynScope == CFG_DYN_BOTH_LAZY) {
517✔
3508
    return true;
119✔
3509
  }
3510
  return false;
469✔
3511
}
3512

3513
int32_t taosCheckCfgStrValueLen(const char *name, const char *value, int32_t len) {
289,878✔
3514
  if (strlen(value) > len) {
289,878!
3515
    uError("invalid config:%s, value:%s, length should be less than %d", name, value, len);
×
3516
    TAOS_RETURN(TSDB_CODE_INVALID_CFG_VALUE);
×
3517
  }
3518
  TAOS_RETURN(TSDB_CODE_SUCCESS);
289,878✔
3519
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc