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

taosdata / TDengine / #3903

24 Apr 2025 11:36AM UTC coverage: 55.307% (+0.09%) from 55.213%
#3903

push

travis-ci

happyguoxy
Sync branches at 2025-04-24 19:35

175024 of 316459 relevant lines covered (55.31%)

1151858.11 hits per line

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

81.97
/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

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

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

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

121
// mnode
122
int64_t tsMndSdbWriteDelta = 200;
123
int64_t tsMndLogRetention = 2000;
124
bool    tsMndSkipGrant = false;
125
bool    tsEnableWhiteList = false;  // ip white list cfg
126

127
// arbitrator
128
int32_t tsArbHeartBeatIntervalSec = 2;
129
int32_t tsArbCheckSyncIntervalSec = 3;
130
int32_t tsArbSetAssignedTimeoutSec = 14;
131

132
// dnode
133
int64_t tsDndStart = 0;
134
int64_t tsDndStartOsUptime = 0;
135
int64_t tsDndUpTime = 0;
136

137
// dnode misc
138
uint32_t tsEncryptionKeyChksum = 0;
139
int8_t   tsEncryptionKeyStat = ENCRYPT_KEY_STAT_UNSET;
140
int8_t   tsGrant = 1;
141

142
bool tsCompareAsStrInGreatest = true;
143

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

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

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

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

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

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

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

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

255
// count/hyperloglog function always return values in case of all NULL data or Empty data set.
256
int32_t tsCountAlwaysReturnValue = 1;
257

258
// 1 ms for sliding time, the value will changed in case of time precision changed
259
int32_t tsMinSlidingTime = 1;
260

261
// 1 database precision unit for interval time range, changed accordingly
262
int32_t tsMinIntervalTime = 1;
263

264
// maximum batch rows numbers imported from a single csv load
265
int32_t tsMaxInsertBatchRows = 1000000;
266

267
float   tsSelectivityRatio = 1.0;
268
int32_t tsTagFilterResCacheSize = 1024 * 10;
269
char    tsTagFilterCache = 0;
270

271
int32_t tsBypassFlag = 0;
272

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

281
int32_t  tsDiskCfgNum = 0;
282
SDiskCfg tsDiskCfg[TFS_MAX_DISKS] = {0};
283
int64_t  tsMinDiskFreeSize = TFS_MIN_DISK_FREE_SIZE;
284

285
// stream scheduler
286
bool tsDeployOnSnode = true;
287

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

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

314
// udf
315
#if defined(WINDOWS) || !defined(USE_UDF)
316
bool tsStartUdfd = false;
317
#else
318
bool    tsStartUdfd = true;
319
#endif
320

321
// wal
322
int64_t tsWalFsyncDataSizeLimit = (100 * 1024 * 1024L);
323

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

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

360
char     tsAdapterFqdn[TSDB_FQDN_LEN] = "localhost";
361
uint16_t tsAdapterPort = 6041;
362
char     tsAdapterToken[512] = "cm9vdDp0YW9zZGF0YQ==";
363

364
bool tsUpdateCacheBatch = true;
365

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

379
int8_t tsS3Https[TSDB_MAX_EP_NUM] = {true};
380
char   tsS3Hostname[TSDB_MAX_EP_NUM][TSDB_FQDN_LEN] = {"<hostname>"};
381

382
int32_t tsS3BlockSize = -1;        // number of tsdb pages (4096)
383
int32_t tsS3BlockCacheSize = 16;   // number of blocks
384
int32_t tsS3PageCacheSize = 4096;  // number of pages
385
int32_t tsS3UploadDelaySec = 60;
386

387
bool tsExperimental = true;
388

389
int32_t tsMaxTsmaNum = 3;
390
int32_t tsMaxTsmaCalcDelay = 600;
391
int64_t tsmaDataDeleteMark = 1000 * 60 * 60 * 24;  // in ms, default to 1d
392
void   *pTimezoneNameMap = NULL;
393

394
int32_t tsStreamNotifyMessageSize = 8 * 1024;  // KB, default 8MB
395
int32_t tsStreamNotifyFrameSize = 256;         // KB, default 256KB
396

397
int32_t tsStreamVirtualMergeMaxDelayMs = 10 * 1000;  // 10s
398
int32_t tsStreamVirtualMergeMaxMemKb = 16 * 1024;    // 16MB
399
int32_t tsStreamVirtualMergeWaitMode = 0;            // 0 wait forever, 1 wait for max delay, 2 wait for max mem
400

401
int32_t taosCheckCfgStrValueLen(const char *name, const char *value, int32_t len);
402

403
#define TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, pName) \
404
  if ((pItem = cfgGetItem(pCfg, pName)) == NULL) {  \
405
    TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND);           \
406
  }
407

408
#ifndef _STORAGE
409
int32_t taosSetTfsCfg(SConfig *pCfg) {
410
  SConfigItem *pItem = NULL;
411
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "dataDir");
412
  (void)memset(tsDataDir, 0, PATH_MAX);
413

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

432
#ifndef _STORAGE
433
int32_t cfgUpdateTfsItemDisable(SConfig *pCfg, const char *value, void *pTfs) { return TSDB_CODE_INVALID_CFG; }
434
#else
435
int32_t cfgUpdateTfsItemDisable(SConfig *pCfg, const char *value, void *pTfs);
436
#endif
437

438
int32_t taosUpdateTfsItemDisable(SConfig *pCfg, const char *value, void *pTfs) {
×
439
  return cfgUpdateTfsItemDisable(pCfg, value, pTfs);
×
440
}
441

442
static int32_t taosSplitS3Cfg(SConfig *pCfg, const char *name, char gVarible[TSDB_MAX_EP_NUM][TSDB_FQDN_LEN],
204✔
443
                              int8_t *pNum) {
444
  int32_t code = TSDB_CODE_SUCCESS;
204✔
445

446
  SConfigItem *pItem = NULL;
204✔
447
  int32_t      num = 0;
204✔
448
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, name);
204✔
449

450
  char *strDup = NULL;
204✔
451
  if ((strDup = taosStrdup(pItem->str)) == NULL) {
204✔
452
    code = terrno;
×
453
    goto _exit;
×
454
  }
455

456
  char **slices = strsplit(strDup, ",", &num);
204✔
457
  if (num > TSDB_MAX_EP_NUM) {
204✔
458
    code = TSDB_CODE_INVALID_CFG;
×
459
    goto _exit;
×
460
  }
461

462
  for (int i = 0; i < num; ++i) {
408✔
463
    tstrncpy(gVarible[i], slices[i], TSDB_FQDN_LEN);
204✔
464
  }
465
  *pNum = num;
204✔
466

467
_exit:
204✔
468
  taosMemoryFreeClear(slices);
204✔
469
  taosMemoryFreeClear(strDup);
204✔
470
  TAOS_RETURN(code);
204✔
471
}
472

473
int32_t taosSetS3Cfg(SConfig *pCfg) {
203✔
474
  int8_t num = 0;
203✔
475

476
  TAOS_CHECK_RETURN(taosSplitS3Cfg(pCfg, "s3Accesskey", tsS3AccessKey, &num));
203✔
477
  if (num == 0) TAOS_RETURN(TSDB_CODE_SUCCESS);
203✔
478

479
  tsS3EpNum = num;
203✔
480

481
  if (tsS3AccessKey[0][0] == '<') {
203✔
482
    TAOS_RETURN(TSDB_CODE_SUCCESS);
202✔
483
  }
484
  for (int i = 0; i < tsS3EpNum; ++i) {
2✔
485
    char *colon = strchr(tsS3AccessKey[i], ':');
1✔
486
    if (!colon) {
1✔
487
      uError("invalid access key:%s", tsS3AccessKey[i]);
×
488
      TAOS_RETURN(TSDB_CODE_INVALID_CFG);
×
489
    }
490
    *colon = '\0';
1✔
491
    tstrncpy(tsS3AccessKeyId[i], tsS3AccessKey[i], TSDB_FQDN_LEN);
1✔
492
    tstrncpy(tsS3AccessKeySecret[i], colon + 1, TSDB_FQDN_LEN);
1✔
493
  }
494

495
  TAOS_CHECK_RETURN(taosSplitS3Cfg(pCfg, "s3Endpoint", tsS3Endpoint, &num));
1✔
496
  if (num != tsS3EpNum) {
1✔
497
    uError("invalid s3 ep num:%d, expected:%d, ", num, tsS3EpNum);
×
498
    TAOS_RETURN(TSDB_CODE_INVALID_CFG);
×
499
  }
500

501
  SConfigItem *pItem = NULL;
1✔
502
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "s3BucketName");
1✔
503
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen("s3BucketName", pItem->str, TSDB_FQDN_LEN));
1✔
504
  tstrncpy(tsS3BucketName, pItem->str, TSDB_FQDN_LEN);
1✔
505

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

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

529
  if (tsS3BucketName[0] != '<') {
1✔
530
#if defined(USE_COS) || defined(USE_S3)
531
#ifdef TD_ENTERPRISE
532
    /*if (tsDiskCfgNum > 1) */ tsS3Enabled = true;
1✔
533
    tsS3EnabledCfg = true;
1✔
534
#endif
535
    tsS3StreamEnabled = true;
1✔
536
#endif
537
  }
538

539
  TAOS_RETURN(TSDB_CODE_SUCCESS);
1✔
540
}
541

542
struct SConfig *taosGetCfg() { return tsCfg; }
75✔
543

544
static int32_t taosLoadCfg(SConfig *pCfg, const char **envCmd, const char *inputCfgDir, const char *envFile,
1,142✔
545
                           char *apolloUrl) {
546
  int32_t code = 0;
1,142✔
547
  char    cfgDir[PATH_MAX] = {0};
1,142✔
548
  char    cfgFile[PATH_MAX + 100] = {0};
1,142✔
549

550
  TAOS_CHECK_RETURN(taosExpandDir(inputCfgDir, cfgDir, PATH_MAX));
1,142✔
551
  int32_t pos = strlen(cfgDir);
1,142✔
552
  if(pos > 0) {
1,142✔
553
    pos -= 1;
1,141✔
554
  }
555
  char  lastC = cfgDir[pos];  
1,142✔
556
  char *tdDirsep = TD_DIRSEP;
1,142✔
557
  if (lastC == '\\' || lastC == '/') {
1,142✔
558
    tdDirsep = "";
463✔
559
  }
560
  if (taosIsDir(cfgDir)) {
1,142✔
561
#ifdef CUS_PROMPT
562
    (void)snprintf(cfgFile, sizeof(cfgFile),
476✔
563
                   "%s"
564
                   "%s"
565
                   "%s.cfg",
566
                   cfgDir, tdDirsep, CUS_PROMPT);
567
#else
568
    (void)snprintf(cfgFile, sizeof(cfgFile),
569
                   "%s"
570
                   "%s"
571
                   "taos.cfg",
572
                   cfgDir, tdDirsep);
573
#endif
574
  } else {
575
    tstrncpy(cfgFile, cfgDir, sizeof(cfgDir));
666✔
576
  }
577

578
  if (apolloUrl != NULL && apolloUrl[0] == '\0') {
1,142✔
579
    (void)(cfgGetApollUrl(envCmd, envFile, apolloUrl));
141✔
580
  }
581

582
  if ((code = cfgLoad(pCfg, CFG_STYPE_APOLLO_URL, apolloUrl)) != 0) {
1,142✔
583
    (void)printf("failed to load from apollo url:%s since %s\n", apolloUrl, tstrerror(code));
1✔
584
    TAOS_RETURN(code);
1✔
585
  }
586

587
  if ((code = cfgLoad(pCfg, CFG_STYPE_CFG_FILE, cfgFile)) != 0) {
1,141✔
588
    (void)printf("failed to load from cfg file:%s since %s\n", cfgFile, tstrerror(code));
×
589
    TAOS_RETURN(code);
×
590
  }
591

592
  if ((code = cfgLoad(pCfg, CFG_STYPE_ENV_FILE, envFile)) != 0) {
1,141✔
593
    (void)printf("failed to load from env file:%s since %s\n", envFile, tstrerror(code));
1✔
594
    TAOS_RETURN(code);
1✔
595
  }
596

597
  if ((code = cfgLoad(pCfg, CFG_STYPE_ENV_VAR, NULL)) != 0) {
1,140✔
598
    (void)printf("failed to load from global env variables since %s\n", tstrerror(code));
×
599
    TAOS_RETURN(code);
×
600
  }
601

602
  if ((code = cfgLoad(pCfg, CFG_STYPE_ENV_CMD, envCmd)) != 0) {
1,140✔
603
    (void)printf("failed to load from cmd env variables since %s\n", tstrerror(code));
×
604
    TAOS_RETURN(code);
×
605
  }
606

607
  TAOS_RETURN(TSDB_CODE_SUCCESS);
1,140✔
608
}
609

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

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

679
static int32_t taosAddClientCfg(SConfig *pCfg) {
570✔
680
  char    defaultFqdn[TSDB_FQDN_LEN] = {0};
570✔
681
  int32_t defaultServerPort = 6030;
570✔
682
  if (taosGetFqdn(defaultFqdn) != 0) {
570✔
683
    tstrncpy(defaultFqdn, "localhost", TSDB_FQDN_LEN);
×
684
  }
685

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

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

759
  tsNumOfRpcSessions = TRANGE(tsNumOfRpcSessions, 100, 100000);
570✔
760
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfRpcSessions", tsNumOfRpcSessions, 1, 100000, CFG_SCOPE_BOTH,
570✔
761
                                CFG_DYN_BOTH_LAZY, CFG_CATEGORY_LOCAL));
762

763
  tsShareConnLimit = TRANGE(tsShareConnLimit, 1, 512);
570✔
764
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "shareConnLimit", tsShareConnLimit, 1, 512, CFG_SCOPE_BOTH, CFG_DYN_BOTH_LAZY,
570✔
765
                                CFG_CATEGORY_GLOBAL));
766

767
  tsReadTimeout = TRANGE(tsReadTimeout, 64, 24 * 3600 * 7);
570✔
768
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "readTimeout", tsReadTimeout, 64, 24 * 3600 * 7, CFG_SCOPE_BOTH,
570✔
769
                                CFG_DYN_BOTH_LAZY, CFG_CATEGORY_GLOBAL));
770

771
  tsTimeToGetAvailableConn = TRANGE(tsTimeToGetAvailableConn, 20, 10000000);
570✔
772
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "timeToGetAvailableConn", tsTimeToGetAvailableConn, 20, 1000000, CFG_SCOPE_BOTH,
570✔
773
                                CFG_DYN_BOTH_LAZY, CFG_CATEGORY_GLOBAL));
774
  tsNumOfTaskQueueThreads = tsNumOfCores * 2;
570✔
775
  tsNumOfTaskQueueThreads = TMAX(tsNumOfTaskQueueThreads, 16);
570✔
776

777
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfTaskQueueThreads", tsNumOfTaskQueueThreads, 4, 1024, CFG_SCOPE_CLIENT,
570✔
778
                                CFG_DYN_CLIENT_LAZY, CFG_CATEGORY_LOCAL));
779
  TAOS_CHECK_RETURN(
570✔
780
      cfgAddBool(pCfg, "experimental", tsExperimental, CFG_SCOPE_BOTH, CFG_DYN_BOTH_LAZY, CFG_CATEGORY_GLOBAL));
781
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "multiResultFunctionStarReturnTags", tsMultiResultFunctionStarReturnTags,
570✔
782
                               CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
783
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "countAlwaysReturnValue", tsCountAlwaysReturnValue, 0, 1, CFG_SCOPE_BOTH,
570✔
784
                                CFG_DYN_BOTH, CFG_CATEGORY_LOCAL));
785
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxTsmaCalcDelay", tsMaxTsmaCalcDelay, 600, 86400, CFG_SCOPE_CLIENT,
570✔
786
                                CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
787
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tsmaDataDeleteMark", tsmaDataDeleteMark, 60 * 60 * 1000, INT64_MAX,
570✔
788
                                CFG_SCOPE_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
789

790
  TAOS_CHECK_RETURN(
570✔
791
      cfgAddBool(pCfg, "streamCoverage", tsStreamCoverage, CFG_DYN_CLIENT, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL));
792
  
793
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "compareAsStrInGreatest", tsCompareAsStrInGreatest, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT,CFG_CATEGORY_LOCAL));
570✔
794

795
  TAOS_RETURN(TSDB_CODE_SUCCESS);
570✔
796
}
797

798
static int32_t taosAddSystemCfg(SConfig *pCfg) {
570✔
799
  SysNameInfo info = taosGetSysNameInfo();
570✔
800

801
  TAOS_CHECK_RETURN(cfgAddTimezone(pCfg, "timezone", tsTimezoneStr, CFG_SCOPE_BOTH, CFG_DYN_BOTH, CFG_CATEGORY_GLOBAL));
570✔
802
  TAOS_CHECK_RETURN(cfgAddLocale(pCfg, "locale", tsLocale, CFG_SCOPE_BOTH, CFG_DYN_BOTH, CFG_CATEGORY_GLOBAL));
570✔
803
  TAOS_CHECK_RETURN(cfgAddCharset(pCfg, "charset", tsCharset, CFG_SCOPE_BOTH, CFG_DYN_BOTH, CFG_CATEGORY_GLOBAL));
570✔
804
  TAOS_CHECK_RETURN(
570✔
805
      cfgAddBool(pCfg, "enableCoreFile", tsEnableCoreFile, CFG_SCOPE_BOTH, CFG_DYN_BOTH_LAZY, CFG_CATEGORY_GLOBAL));
806
  TAOS_CHECK_RETURN(
570✔
807
      cfgAddFloat(pCfg, "numOfCores", tsNumOfCores, 1, 100000, CFG_SCOPE_BOTH, CFG_DYN_BOTH_LAZY, CFG_CATEGORY_LOCAL));
808

809
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "simdEnable", tsSIMDEnable, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
570✔
810
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "AVX512Enable", tsAVX512Enable, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
570✔
811
  TAOS_CHECK_RETURN(
570✔
812
      cfgAddBool(pCfg, "tagFilterCache", tsTagFilterCache, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
813

814
  TAOS_CHECK_RETURN(
570✔
815
      cfgAddInt64(pCfg, "openMax", tsOpenMax, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
816
#if !defined(_ALPINE)
817
  TAOS_CHECK_RETURN(
570✔
818
      cfgAddInt64(pCfg, "streamMax", tsStreamMax, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
819
#endif
820
  TAOS_CHECK_RETURN(
570✔
821
      cfgAddInt32(pCfg, "pageSizeKB", tsPageSizeKB, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
822
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "totalMemoryKB", tsTotalMemoryKB, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_NONE,
570✔
823
                                CFG_CATEGORY_LOCAL));
824
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "os sysname", info.sysname, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
570✔
825
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "os nodename", info.nodename, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
570✔
826
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "os release", info.release, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
570✔
827
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "os version", info.version, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
570✔
828
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "os machine", info.machine, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
570✔
829

830
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "version", td_version, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
570✔
831
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "compatible_version", td_compatible_version, CFG_SCOPE_BOTH, CFG_DYN_NONE,
570✔
832
                                 CFG_CATEGORY_LOCAL));
833
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "gitinfo", td_gitinfo, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
570✔
834
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "buildinfo", td_buildinfo, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
570✔
835
  TAOS_RETURN(TSDB_CODE_SUCCESS);
570✔
836
}
837

838
static int32_t taosAddServerCfg(SConfig *pCfg) {
150✔
839
  tsNumOfCommitThreads = tsNumOfCores / 2;
150✔
840
  tsNumOfCommitThreads = TRANGE(tsNumOfCommitThreads, 2, 4);
150✔
841

842
  tsNumOfSupportVnodes = tsNumOfCores * 2 + 5;
150✔
843
  tsNumOfSupportVnodes = TMAX(tsNumOfSupportVnodes, 2);
150✔
844

845
  tsNumOfMnodeReadThreads = tsNumOfCores / 8;
150✔
846
  tsNumOfMnodeReadThreads = TRANGE(tsNumOfMnodeReadThreads, 1, 4);
150✔
847

848
  tsNumOfVnodeQueryThreads = tsNumOfCores * 2;
150✔
849
  tsNumOfVnodeQueryThreads = TMAX(tsNumOfVnodeQueryThreads, 16);
150✔
850

851
  tsNumOfVnodeFetchThreads = tsNumOfCores / 4;
150✔
852
  tsNumOfVnodeFetchThreads = TMAX(tsNumOfVnodeFetchThreads, 4);
150✔
853

854
  tsNumOfVnodeRsmaThreads = tsNumOfCores / 4;
150✔
855
  tsNumOfVnodeRsmaThreads = TMAX(tsNumOfVnodeRsmaThreads, 4);
150✔
856

857
  tsNumOfQnodeQueryThreads = tsNumOfCores * 2;
150✔
858
  tsNumOfQnodeQueryThreads = TMAX(tsNumOfQnodeQueryThreads, 16);
150✔
859

860
  tsNumOfSnodeStreamThreads = tsNumOfCores / 4;
150✔
861
  tsNumOfSnodeStreamThreads = TRANGE(tsNumOfSnodeStreamThreads, 2, 4);
150✔
862

863
  tsNumOfSnodeWriteThreads = tsNumOfCores / 4;
150✔
864
  tsNumOfSnodeWriteThreads = TRANGE(tsNumOfSnodeWriteThreads, 2, 4);
150✔
865

866
  tsQueueMemoryAllowed = tsTotalMemoryKB * 1024 * RPC_MEMORY_USAGE_RATIO * QUEUE_MEMORY_USAGE_RATIO;
150✔
867
  tsQueueMemoryAllowed = TRANGE(tsQueueMemoryAllowed, TSDB_MAX_MSG_SIZE * QUEUE_MEMORY_USAGE_RATIO * 10LL,
150✔
868
                                TSDB_MAX_MSG_SIZE * QUEUE_MEMORY_USAGE_RATIO * 10000LL);
869

870
  tsApplyMemoryAllowed = tsTotalMemoryKB * 1024 * RPC_MEMORY_USAGE_RATIO * (1 - QUEUE_MEMORY_USAGE_RATIO);
150✔
871
  tsApplyMemoryAllowed = TRANGE(tsApplyMemoryAllowed, TSDB_MAX_MSG_SIZE * (1 - QUEUE_MEMORY_USAGE_RATIO) * 10LL,
150✔
872
                                TSDB_MAX_MSG_SIZE * (1 - QUEUE_MEMORY_USAGE_RATIO) * 10000LL);
873

874
  tsLogBufferMemoryAllowed = tsTotalMemoryKB * 1024 * 0.1;
150✔
875
  tsLogBufferMemoryAllowed = TRANGE(tsLogBufferMemoryAllowed, TSDB_MAX_MSG_SIZE * 10LL, TSDB_MAX_MSG_SIZE * 10000LL);
150✔
876

877
  // clang-format off
878
  TAOS_CHECK_RETURN(cfgAddDir(pCfg, "dataDir", tsDataDir, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL));
150✔
879
  TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "minimalDataDirGB", 2.0f, 0.001f, 10000000, CFG_SCOPE_SERVER, CFG_DYN_NONE, CFG_CATEGORY_LOCAL));
150✔
880
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "supportVnodes", tsNumOfSupportVnodes, 0, 4096, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER, CFG_CATEGORY_LOCAL));
150✔
881

882
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "encryptAlgorithm", tsEncryptAlgorithm, CFG_SCOPE_SERVER, CFG_DYN_NONE, CFG_CATEGORY_GLOBAL));
150✔
883
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "encryptScope", tsEncryptScope, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_GLOBAL));
150✔
884
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "enableStrongPassword", tsEnableStrongPassword, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
150✔
885

886
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "statusInterval", tsStatusInterval, 1, 30, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
150✔
887
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxShellConns", tsMaxShellConns, 10, 50000000, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY, CFG_CATEGORY_LOCAL));
150✔
888

889
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryBufferSize", tsQueryBufferSize, -1, 500000000000, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY, CFG_CATEGORY_LOCAL));
150✔
890
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryRspPolicy", tsQueryRspPolicy, 0, 1, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
150✔
891
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfCommitThreads", tsNumOfCommitThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
150✔
892
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfCompactThreads", tsNumOfCompactThreads, 1, 16, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_LOCAL));
150✔
893
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "retentionSpeedLimitMB", tsRetentionSpeedLimitMB, 0, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
150✔
894
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "queryUseMemoryPool", tsQueryUseMemoryPool, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL) != 0);
150✔
895
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "memPoolFullFunc", tsMemPoolFullFunc, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL) != 0);
150✔
896
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "singleQueryMaxMemorySize", tsSingleQueryMaxMemorySize, 0, 1000000000, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL) != 0);
150✔
897
  //TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryBufferPoolSize", tsQueryBufferPoolSize, 0, 1000000000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0);
898
  TAOS_CHECK_RETURN(cfgAddInt32Ex(pCfg, "minReservedMemorySize", 0, 1024, 1000000000, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL) != 0);
150✔
899
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryNoFetchTimeoutSec", tsQueryNoFetchTimeoutSec, 60, 1000000000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_LOCAL) != 0);
150✔
900

901
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfMnodeReadThreads", tsNumOfMnodeReadThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
150✔
902
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfVnodeQueryThreads", tsNumOfVnodeQueryThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
150✔
903
  TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "ratioOfVnodeStreamThreads", tsRatioOfVnodeStreamThreads, 0.01, 4, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
150✔
904
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfVnodeFetchThreads", tsNumOfVnodeFetchThreads, 4, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
150✔
905

906
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfVnodeRsmaThreads", tsNumOfVnodeRsmaThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
150✔
907
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfQnodeQueryThreads", tsNumOfQnodeQueryThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
150✔
908

909
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfSnodeSharedThreads", tsNumOfSnodeStreamThreads, 2, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
150✔
910
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfSnodeUniqueThreads", tsNumOfSnodeWriteThreads, 2, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
150✔
911
  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));
150✔
912
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncElectInterval", tsElectInterval, 10, 1000 * 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
150✔
913
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncHeartbeatInterval", tsHeartbeatInterval, 10, 1000 * 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
150✔
914
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncHeartbeatTimeout", tsHeartbeatTimeout, 10, 1000 * 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
150✔
915
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncSnapReplMaxWaitN", tsSnapReplMaxWaitN, 16, (TSDB_SYNC_SNAP_BUFFER_SIZE >> 2), CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
150✔
916
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "syncLogBufferMemoryAllowed", tsLogBufferMemoryAllowed, TSDB_MAX_MSG_SIZE * 10L, INT64_MAX, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_LOCAL));
150✔
917

918
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "arbHeartBeatIntervalSec", tsArbHeartBeatIntervalSec, 1, 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
150✔
919
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "arbCheckSyncIntervalSec", tsArbCheckSyncIntervalSec, 1, 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
150✔
920
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "arbSetAssignedTimeoutSec", tsArbSetAssignedTimeoutSec, 1, 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
150✔
921

922
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "mndSdbWriteDelta", tsMndSdbWriteDelta, 20, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
150✔
923
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "mndLogRetention", tsMndLogRetention, 500, 10000, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
150✔
924
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "skipGrant", tsMndSkipGrant, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_GLOBAL));
150✔
925

926
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "monitor", tsEnableMonitor, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
150✔
927
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "monitorInterval", tsMonitorInterval, 1, 86400, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
150✔
928

929
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "slowLogThreshold", tsSlowLogThreshold, 1, INT32_MAX, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
150✔
930
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "slowLogMaxLen", tsSlowLogMaxLen, 1, 16384, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
150✔
931
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "slowLogScope", tsSlowLogScopeString, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
150✔
932
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "slowLogExceptDb", tsSlowLogExceptDb, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
150✔
933

934
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "monitorFqdn", tsMonitorFqdn, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY, CFG_CATEGORY_LOCAL));
150✔
935
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "monitorPort", tsMonitorPort, 1, 65056, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY, CFG_CATEGORY_LOCAL));
150✔
936
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "monitorMaxLogs", tsMonitorMaxLogs, 1, 1000000, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
150✔
937
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "monitorComp", tsMonitorComp, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
150✔
938
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "monitorLogProtocol", tsMonitorLogProtocol, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
150✔
939
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "monitorForceV2", tsMonitorForceV2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
150✔
940

941
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "audit", tsEnableAudit, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
150✔
942
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "enableAuditDelete", tsEnableAuditDelete, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_GLOBAL));
150✔
943
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "auditCreateTable", tsEnableAuditCreateTable, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
150✔
944
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "auditInterval", tsAuditInterval, 500, 200000, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
150✔
945

946
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "telemetryReporting", tsEnableTelem, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
150✔
947
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "telemetryInterval", tsTelemInterval, 1, 200000, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
150✔
948
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "telemetryServer", tsTelemServer, CFG_SCOPE_SERVER, CFG_DYN_BOTH,CFG_CATEGORY_GLOBAL));
150✔
949
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "telemetryPort", tsTelemPort, 1, 65056, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
150✔
950

951
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "rsyncPort", tsRsyncPort, 1, 65535, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
150✔
952
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "snodeAddress", tsSnodeAddress, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
150✔
953
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "checkpointBackupDir", tsCheckpointBackupDir, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
150✔
954

955
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tmqMaxTopicNum", tmqMaxTopicNum, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
150✔
956

957
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tmqRowSize", tmqRowSize, 1, 1000000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
150✔
958

959
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxTsmaNum", tsMaxTsmaNum, 0, 3, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
150✔
960
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "diskIDCheckEnabled", tsDiskIDCheckEnabled,  CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
150✔
961
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "transPullupInterval", tsTransPullupInterval, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
150✔
962
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "compactPullupInterval", tsCompactPullupInterval, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
150✔
963
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "mqRebalanceInterval", tsMqRebalanceInterval, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
150✔
964

965
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "ttlUnit", tsTtlUnit, 1, 86400 * 365, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
150✔
966
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "ttlPushInterval", tsTtlPushIntervalSec, 1, 100000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
150✔
967
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "ttlBatchDropNum", tsTtlBatchDropNum, 0, INT32_MAX, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
150✔
968
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "ttlChangeOnWrite", tsTtlChangeOnWrite, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
150✔
969
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "ttlFlushThreshold", tsTtlFlushThreshold, -1, 1000000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
150✔
970
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "trimVDbIntervalSec", tsTrimVDbIntervalSec, 1, 100000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
150✔
971
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "s3MigrateIntervalSec", tsS3MigrateIntervalSec, 600, 100000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
150✔
972
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "s3MigrateEnabled", tsS3MigrateEnabled, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
150✔
973
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "uptimeInterval", tsUptimeInterval, 1, 100000, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
150✔
974
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryRsmaTolerance", tsQueryRsmaTolerance, 0, 900000, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
150✔
975
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "timeseriesThreshold", tsTimeSeriesThreshold, 0, 2000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
150✔
976

977
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "walFsyncDataSizeLimit", tsWalFsyncDataSizeLimit, 100 * 1024 * 1024, INT64_MAX, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
150✔
978

979
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "udf", tsStartUdfd, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
150✔
980
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "udfdResFuncs", tsUdfdResFuncs, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
150✔
981
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "udfdLdLibPath", tsUdfdLdLibPath, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
150✔
982

983
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "disableStream", tsDisableStream, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
150✔
984
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "streamBufferSize", tsStreamBufferSize, 0, INT64_MAX, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
150✔
985
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "streamFailedTimeout", tsStreamFailedTimeout, 0, INT64_MAX, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
150✔
986
  TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "streamAggCnt", tsStreamAggCnt, 2, INT32_MAX, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_GLOBAL));
150✔
987

988
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "checkpointInterval", tsStreamCheckpointInterval, 60, 1800, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
150✔
989
  TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "streamSinkDataRate", tsSinkDataRate, 0.1, 5, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY, CFG_CATEGORY_GLOBAL));
150✔
990
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "concurrentCheckpoint", tsMaxConcurrentCheckpoint, 1, 10, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
150✔
991

992
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "cacheLazyLoadThreshold", tsCacheLazyLoadThreshold, 0, 100000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
150✔
993

994
  TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "fPrecision", tsFPrecision, 0.0f, 100000.0f, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
150✔
995
  TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "dPrecision", tsDPrecision, 0.0f, 1000000.0f, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
150✔
996
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxRange", tsMaxRange, 0, 65536, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
150✔
997
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "curRange", tsCurRange, 0, 65536, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
150✔
998
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "ifAdtFse", tsIfAdtFse, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
150✔
999
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "compressor", tsCompressor, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
150✔
1000

1001
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "filterScalarMode", tsFilterScalarMode, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
150✔
1002
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxStreamBackendCache", tsMaxStreamBackendCache, 16, 1024, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER_LAZY,CFG_CATEGORY_LOCAL));
150✔
1003
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "pqSortMemThreshold", tsPQSortMemThreshold, 1, 10240, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
150✔
1004

1005
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "s3Accesskey", tsS3AccessKey[0], CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
150✔
1006
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "s3Endpoint", tsS3Endpoint[0], CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
150✔
1007
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "s3BucketName", tsS3BucketName, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER_LAZY,CFG_CATEGORY_LOCAL));
150✔
1008

1009
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "s3PageCacheSize", tsS3PageCacheSize, 4, 1024 * 1024 * 1024, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
150✔
1010
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "s3UploadDelaySec", tsS3UploadDelaySec, 1, 60 * 60 * 24 * 30, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
150✔
1011

1012
  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));
150✔
1013
  TAOS_CHECK_RETURN(cfgAddBool(pCfg, "enableWhiteList", tsEnableWhiteList, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
150✔
1014

1015
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "streamNotifyMessageSize", tsStreamNotifyMessageSize, 8, 1024 * 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
150✔
1016
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "streamNotifyFrameSize", tsStreamNotifyFrameSize, 8, 1024 * 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
150✔
1017

1018
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "adapterFqdn", tsAdapterFqdn, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY, CFG_CATEGORY_LOCAL));
150✔
1019
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "adapterPort", tsAdapterPort, 1, 65056, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY, CFG_CATEGORY_LOCAL));
150✔
1020
  TAOS_CHECK_RETURN(cfgAddString(pCfg, "adapterToken", tsAdapterToken, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY, CFG_CATEGORY_LOCAL));
150✔
1021

1022
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "streamVirtualMergeMaxDelay", tsStreamVirtualMergeMaxDelayMs, 500, 10 * 60 * 1000, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
150✔
1023
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "streamVirtualMergeMaxMem", tsStreamVirtualMergeMaxMemKb, 8 * 1024, 1 * 1024 * 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
150✔
1024
  TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "streamVirtualMergeWaitMode", tsStreamVirtualMergeWaitMode, 0, 2, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_LOCAL));
150✔
1025

1026
  // clang-format on
1027

1028
  // GRANT_CFG_ADD;
1029
  TAOS_RETURN(TSDB_CODE_SUCCESS);
150✔
1030
}
1031

1032
static int32_t taosUpdateServerCfg(SConfig *pCfg) {
203✔
1033
  SConfigItem *pItem;
1034
  ECfgSrcType  stype;
1035
  int32_t      numOfCores;
1036
  int64_t      totalMemoryKB;
1037

1038
  pItem = cfgGetItem(pCfg, "numOfCores");
203✔
1039
  if (pItem == NULL) {
203✔
1040
    TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND);
×
1041
  } else {
1042
    stype = pItem->stype;
203✔
1043
    numOfCores = pItem->fval;
203✔
1044
  }
1045

1046
  pItem = cfgGetItem(pCfg, "supportVnodes");
203✔
1047
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
203✔
1048
    tsNumOfSupportVnodes = numOfCores * 2 + 5;
13✔
1049
    tsNumOfSupportVnodes = TMAX(tsNumOfSupportVnodes, 2);
13✔
1050
    pItem->i32 = tsNumOfSupportVnodes;
13✔
1051
    pItem->stype = stype;
13✔
1052
  }
1053

1054
  pItem = cfgGetItem(pCfg, "numOfRpcThreads");
203✔
1055
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
203✔
1056
    tsNumOfRpcThreads = TRANGE(tsNumOfRpcThreads, 1, TSDB_MAX_RPC_THREADS);
173✔
1057
    pItem->i32 = tsNumOfRpcThreads;
173✔
1058
    pItem->stype = stype;
173✔
1059
  }
1060

1061
  pItem = cfgGetItem(pCfg, "numOfRpcSessions");
203✔
1062
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
203✔
1063
    tsNumOfRpcSessions = TRANGE(tsNumOfRpcSessions, 100, 10000);
173✔
1064
    pItem->i32 = tsNumOfRpcSessions;
173✔
1065
    pItem->stype = stype;
173✔
1066
  }
1067

1068
  pItem = cfgGetItem(pCfg, "shareConnLimit");
203✔
1069
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
203✔
1070
    tsShareConnLimit = TRANGE(tsShareConnLimit, 1, 512);
173✔
1071
    pItem->i32 = tsShareConnLimit;
173✔
1072
    pItem->stype = stype;
173✔
1073
  }
1074

1075
  pItem = cfgGetItem(pCfg, "readTimeout");
203✔
1076
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
203✔
1077
    tsReadTimeout = TRANGE(tsReadTimeout, 64, 24 * 3600 * 7);
173✔
1078
    pItem->i32 = tsReadTimeout;
173✔
1079
    pItem->stype = stype;
173✔
1080
  }
1081

1082
  pItem = cfgGetItem(pCfg, "timeToGetAvailableConn");
203✔
1083
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
203✔
1084
    tsTimeToGetAvailableConn = TRANGE(tsTimeToGetAvailableConn, 20, 1000000);
173✔
1085
    pItem->i32 = tsTimeToGetAvailableConn;
173✔
1086
    pItem->stype = stype;
173✔
1087
  }
1088

1089
  pItem = cfgGetItem(pCfg, "numOfCommitThreads");
203✔
1090
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
203✔
1091
    tsNumOfCommitThreads = numOfCores / 2;
173✔
1092
    tsNumOfCommitThreads = TRANGE(tsNumOfCommitThreads, 2, 4);
173✔
1093
    pItem->i32 = tsNumOfCommitThreads;
173✔
1094
    pItem->stype = stype;
173✔
1095
  }
1096

1097
  pItem = cfgGetItem(pCfg, "numOfCompactThreads");
203✔
1098
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
203✔
1099
    pItem->i32 = tsNumOfCompactThreads;
173✔
1100
    pItem->stype = stype;
173✔
1101
  }
1102

1103
  pItem = cfgGetItem(pCfg, "numOfMnodeReadThreads");
203✔
1104
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
203✔
1105
    tsNumOfMnodeReadThreads = numOfCores / 8;
173✔
1106
    tsNumOfMnodeReadThreads = TRANGE(tsNumOfMnodeReadThreads, 1, 4);
173✔
1107
    pItem->i32 = tsNumOfMnodeReadThreads;
173✔
1108
    pItem->stype = stype;
173✔
1109
  }
1110

1111
  pItem = cfgGetItem(pCfg, "numOfVnodeQueryThreads");
203✔
1112
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
203✔
1113
    tsNumOfVnodeQueryThreads = numOfCores * 2;
173✔
1114
    tsNumOfVnodeQueryThreads = TMAX(tsNumOfVnodeQueryThreads, 16);
173✔
1115
    pItem->i32 = tsNumOfVnodeQueryThreads;
173✔
1116
    pItem->stype = stype;
173✔
1117
  }
1118

1119
  pItem = cfgGetItem(pCfg, "ratioOfVnodeStreamThreads");
203✔
1120
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
203✔
1121
    pItem->fval = tsRatioOfVnodeStreamThreads;
173✔
1122
    pItem->stype = stype;
173✔
1123
  }
1124

1125
  pItem = cfgGetItem(pCfg, "numOfVnodeFetchThreads");
203✔
1126
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
203✔
1127
    tsNumOfVnodeFetchThreads = numOfCores / 4;
173✔
1128
    tsNumOfVnodeFetchThreads = TMAX(tsNumOfVnodeFetchThreads, 4);
173✔
1129
    pItem->i32 = tsNumOfVnodeFetchThreads;
173✔
1130
    pItem->stype = stype;
173✔
1131
  }
1132

1133
  pItem = cfgGetItem(pCfg, "numOfVnodeRsmaThreads");
203✔
1134
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
203✔
1135
    tsNumOfVnodeRsmaThreads = numOfCores;
173✔
1136
    tsNumOfVnodeRsmaThreads = TMAX(tsNumOfVnodeRsmaThreads, 4);
173✔
1137
    pItem->i32 = tsNumOfVnodeRsmaThreads;
173✔
1138
    pItem->stype = stype;
173✔
1139
  }
1140

1141
  pItem = cfgGetItem(pCfg, "numOfQnodeQueryThreads");
203✔
1142
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
203✔
1143
    tsNumOfQnodeQueryThreads = numOfCores * 2;
173✔
1144
    tsNumOfQnodeQueryThreads = TMAX(tsNumOfQnodeQueryThreads, 16);
173✔
1145
    pItem->i32 = tsNumOfQnodeQueryThreads;
173✔
1146
    pItem->stype = stype;
173✔
1147
  }
1148

1149
  pItem = cfgGetItem(pCfg, "numOfSnodeSharedThreads");
203✔
1150
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
203✔
1151
    tsNumOfSnodeStreamThreads = numOfCores / 4;
173✔
1152
    tsNumOfSnodeStreamThreads = TRANGE(tsNumOfSnodeStreamThreads, 2, 4);
173✔
1153
    pItem->i32 = tsNumOfSnodeStreamThreads;
173✔
1154
    pItem->stype = stype;
173✔
1155
  }
1156

1157
  pItem = cfgGetItem(pCfg, "numOfSnodeUniqueThreads");
203✔
1158
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
203✔
1159
    tsNumOfSnodeWriteThreads = numOfCores / 4;
173✔
1160
    tsNumOfSnodeWriteThreads = TRANGE(tsNumOfSnodeWriteThreads, 2, 4);
173✔
1161
    pItem->i32 = tsNumOfSnodeWriteThreads;
173✔
1162
    pItem->stype = stype;
173✔
1163
  }
1164

1165
  pItem = cfgGetItem(pCfg, "totalMemoryKB");
203✔
1166
  if (pItem == NULL) {
203✔
1167
    TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND);
×
1168
  } else {
1169
    stype = pItem->stype;
203✔
1170
    totalMemoryKB = pItem->i64;
203✔
1171
  }
1172

1173
  pItem = cfgGetItem(pCfg, "rpcQueueMemoryAllowed");
203✔
1174
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
203✔
1175
    tsQueueMemoryAllowed = totalMemoryKB * 1024 * 0.1;
172✔
1176
    tsQueueMemoryAllowed = TRANGE(tsQueueMemoryAllowed, TSDB_MAX_MSG_SIZE * 10LL, TSDB_MAX_MSG_SIZE * 10000LL);
172✔
1177
    pItem->i64 = tsQueueMemoryAllowed;
172✔
1178
    pItem->stype = stype;
172✔
1179
  }
1180

1181
  pItem = cfgGetItem(tsCfg, "syncLogBufferMemoryAllowed");
203✔
1182
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
203✔
1183
    tsLogBufferMemoryAllowed = totalMemoryKB * 1024 * 0.1;
172✔
1184
    tsLogBufferMemoryAllowed = TRANGE(tsLogBufferMemoryAllowed, TSDB_MAX_MSG_SIZE * 10LL, TSDB_MAX_MSG_SIZE * 10000LL);
172✔
1185
    pItem->i64 = tsLogBufferMemoryAllowed;
172✔
1186
    pItem->stype = stype;
172✔
1187
  }
1188

1189
  TAOS_RETURN(TSDB_CODE_SUCCESS);
203✔
1190
}
1191

1192
static int32_t taosSetLogOutput(SConfig *pCfg) {
1,140✔
1193
  if (tsLogOutput) {
1,140✔
1194
    char *pLog = tsLogOutput;
16✔
1195
    char *pEnd = NULL;
16✔
1196
    if (strcasecmp(pLog, "stdout") && strcasecmp(pLog, "stderr") && strcasecmp(pLog, "/dev/null")) {
16✔
1197
      if ((pEnd = strrchr(pLog, '/')) || (pEnd = strrchr(pLog, '\\'))) {
12✔
1198
        int32_t pathLen = POINTER_DISTANCE(pEnd, pLog) + 1;
8✔
1199
        if (*pLog == '/' || *pLog == '\\') {
8✔
1200
          if (pathLen <= 0 || pathLen > PATH_MAX) TAOS_RETURN(TSDB_CODE_OUT_OF_RANGE);
4✔
1201
          tstrncpy(tsLogDir, pLog, pathLen);
4✔
1202
        } else {
1203
          int32_t len = strlen(tsLogDir);
4✔
1204
          if (len < 0 || len >= (PATH_MAX - 1)) TAOS_RETURN(TSDB_CODE_OUT_OF_RANGE);
4✔
1205
          if (len == 0 || (tsLogDir[len - 1] != '/' && tsLogDir[len - 1] != '\\')) {
4✔
1206
            tsLogDir[len++] = TD_DIRSEP_CHAR;
4✔
1207
          }
1208
          int32_t remain = PATH_MAX - len - 1;
4✔
1209
          if (remain < pathLen) TAOS_RETURN(TSDB_CODE_OUT_OF_RANGE);
4✔
1210
          tstrncpy(tsLogDir + len, pLog, pathLen);
4✔
1211
        }
1212
        TAOS_CHECK_RETURN(cfgSetItem(pCfg, "logDir", tsLogDir, CFG_STYPE_DEFAULT, true));
8✔
1213
      }
1214
    } else {
1215
      tstrncpy(tsLogDir, pLog, PATH_MAX);
4✔
1216
      TAOS_CHECK_RETURN(cfgSetItem(pCfg, "logDir", tsLogDir, CFG_STYPE_DEFAULT, true));
4✔
1217
    }
1218
  }
1219
  return 0;
1,140✔
1220
}
1221

1222
static int32_t taosSetClientLogCfg(SConfig *pCfg) {
1,140✔
1223
  SConfigItem *pItem = NULL;
1,140✔
1224

1225
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "logDir");
1,140✔
1226
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, PATH_MAX));
1,140✔
1227
  tstrncpy(tsLogDir, pItem->str, PATH_MAX);
1,140✔
1228
  TAOS_CHECK_RETURN(taosExpandDir(tsLogDir, tsLogDir, PATH_MAX));
1,140✔
1229
  TAOS_CHECK_RETURN(taosSetLogOutput(pCfg));
1,140✔
1230

1231
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minimalLogDirGB");
1,140✔
1232
  tsLogSpace.reserved = (int64_t)(((double)pItem->fval) * 1024 * 1024 * 1024);
1,140✔
1233

1234
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfLogLines");
1,140✔
1235
  tsNumOfLogLines = pItem->i32;
1,140✔
1236

1237
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "asyncLog");
1,140✔
1238
  tsAsyncLog = pItem->bval;
1,140✔
1239

1240
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "logKeepDays");
1,140✔
1241
  tsLogKeepDays = pItem->i32;
1,140✔
1242

1243
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tmrDebugFlag");
1,140✔
1244
  tmrDebugFlag = pItem->i32;
1,140✔
1245

1246
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "uDebugFlag");
1,140✔
1247
  uDebugFlag = pItem->i32;
1,140✔
1248

1249
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "jniDebugFlag");
1,140✔
1250
  jniDebugFlag = pItem->i32;
1,140✔
1251

1252
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "rpcDebugFlag");
1,140✔
1253
  rpcDebugFlag = pItem->i32;
1,140✔
1254

1255
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "qDebugFlag");
1,140✔
1256
  qDebugFlag = pItem->i32;
1,140✔
1257

1258
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "cDebugFlag");
1,140✔
1259
  cDebugFlag = pItem->i32;
1,140✔
1260

1261
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "simDebugFlag");
1,140✔
1262
  simDebugFlag = pItem->i32;
1,140✔
1263

1264
  TAOS_RETURN(TSDB_CODE_SUCCESS);
1,140✔
1265
}
1266

1267
static int32_t taosSetServerLogCfg(SConfig *pCfg) {
150✔
1268
  SConfigItem *pItem = NULL;
150✔
1269
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "dDebugFlag");
150✔
1270
  dDebugFlag = pItem->i32;
150✔
1271

1272
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "vDebugFlag");
150✔
1273
  vDebugFlag = pItem->i32;
150✔
1274

1275
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "mDebugFlag");
150✔
1276
  mDebugFlag = pItem->i32;
150✔
1277

1278
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "wDebugFlag");
150✔
1279
  wDebugFlag = pItem->i32;
150✔
1280

1281
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "azDebugFlag");
150✔
1282
  azDebugFlag = pItem->i32;
150✔
1283

1284
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "sDebugFlag");
150✔
1285
  sDebugFlag = pItem->i32;
150✔
1286

1287
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tsdbDebugFlag");
150✔
1288
  tsdbDebugFlag = pItem->i32;
150✔
1289

1290
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tqDebugFlag");
150✔
1291
  tqDebugFlag = pItem->i32;
150✔
1292

1293
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "fsDebugFlag");
150✔
1294
  fsDebugFlag = pItem->i32;
150✔
1295

1296
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "udfDebugFlag");
150✔
1297
  udfDebugFlag = pItem->i32;
150✔
1298

1299
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "smaDebugFlag");
150✔
1300
  smaDebugFlag = pItem->i32;
150✔
1301

1302
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "idxDebugFlag");
150✔
1303
  idxDebugFlag = pItem->i32;
150✔
1304

1305
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tdbDebugFlag");
150✔
1306
  tdbDebugFlag = pItem->i32;
150✔
1307

1308
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "metaDebugFlag");
150✔
1309
  metaDebugFlag = pItem->i32;
150✔
1310

1311
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "stDebugFlag");
150✔
1312
  stDebugFlag = pItem->i32;
150✔
1313

1314
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "sndDebugFlag");
150✔
1315
  sndDebugFlag = pItem->i32;
150✔
1316

1317
  TAOS_RETURN(TSDB_CODE_SUCCESS);
150✔
1318
}
1319

1320
int32_t taosSetSlowLogScope(char *pScopeStr, int32_t *pScope) {
203✔
1321
  if (NULL == pScopeStr || 0 == strlen(pScopeStr)) {
203✔
1322
    *pScope = SLOW_LOG_TYPE_QUERY;
×
1323
    TAOS_RETURN(TSDB_CODE_SUCCESS);
×
1324
  }
1325

1326
  int32_t slowScope = 0;
203✔
1327

1328
  char *scope = NULL;
203✔
1329
  char *tmp = NULL;
203✔
1330
  while ((scope = strsep(&pScopeStr, "|")) != NULL) {
406✔
1331
    taosMemoryFreeClear(tmp);
203✔
1332
    tmp = taosStrdup(scope);
203✔
1333
    if (tmp == NULL) {
203✔
1334
      TAOS_RETURN(terrno);
×
1335
    }
1336
    (void)strtrim(tmp);
203✔
1337
    if (0 == strcasecmp(tmp, "all")) {
203✔
1338
      slowScope |= SLOW_LOG_TYPE_ALL;
×
1339
      continue;
×
1340
    }
1341

1342
    if (0 == strcasecmp(tmp, "query")) {
203✔
1343
      slowScope |= SLOW_LOG_TYPE_QUERY;
203✔
1344
      continue;
203✔
1345
    }
1346

1347
    if (0 == strcasecmp(tmp, "insert")) {
×
1348
      slowScope |= SLOW_LOG_TYPE_INSERT;
×
1349
      continue;
×
1350
    }
1351

1352
    if (0 == strcasecmp(tmp, "others")) {
×
1353
      slowScope |= SLOW_LOG_TYPE_OTHERS;
×
1354
      continue;
×
1355
    }
1356

1357
    if (0 == strcasecmp(tmp, "none")) {
×
1358
      slowScope |= SLOW_LOG_TYPE_NULL;
×
1359
      continue;
×
1360
    }
1361

1362
    taosMemoryFreeClear(tmp);
×
1363
    uError("Invalid slowLog scope value:%s", pScopeStr);
×
1364
    TAOS_RETURN(TSDB_CODE_INVALID_CFG_VALUE);
×
1365
  }
1366

1367
  *pScope = slowScope;
203✔
1368
  taosMemoryFreeClear(tmp);
203✔
1369
  TAOS_RETURN(TSDB_CODE_SUCCESS);
203✔
1370
}
1371

1372
// for common configs
1373
static int32_t taosSetClientCfg(SConfig *pCfg) {
631✔
1374
  SConfigItem *pItem = NULL;
631✔
1375

1376
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "fqdn");
631✔
1377
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_FQDN_LEN));
623✔
1378
  tstrncpy(tsLocalFqdn, pItem->str, TSDB_FQDN_LEN);
623✔
1379

1380
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "forceReadConfig");
623✔
1381
  tsForceReadConfig = pItem->bval;
623✔
1382

1383
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "serverPort");
623✔
1384
  tsServerPort = (uint16_t)pItem->i32;
623✔
1385
  (void)snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
623✔
1386

1387
  char defaultFirstEp[TSDB_EP_LEN] = {0};
623✔
1388
  (void)snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort);
623✔
1389

1390
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "firstEp");
623✔
1391
  SEp firstEp = {0};
623✔
1392
  TAOS_CHECK_RETURN(taosGetFqdnPortFromEp(strlen(pItem->str) == 0 ? defaultFirstEp : pItem->str, &firstEp));
623✔
1393
  (void)snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port);
623✔
1394
  TAOS_CHECK_RETURN(cfgSetItem(pCfg, "firstEp", tsFirst, pItem->stype, true));
623✔
1395

1396
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "secondEp");
623✔
1397
  SEp secondEp = {0};
623✔
1398
  TAOS_CHECK_RETURN(taosGetFqdnPortFromEp(strlen(pItem->str) == 0 ? defaultFirstEp : pItem->str, &secondEp));
623✔
1399
  (void)snprintf(tsSecond, sizeof(tsSecond), "%s:%u", secondEp.fqdn, secondEp.port);
623✔
1400
  TAOS_CHECK_RETURN(cfgSetItem(pCfg, "secondEp", tsSecond, pItem->stype, true));
623✔
1401

1402
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tempDir");
623✔
1403
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, PATH_MAX));
623✔
1404
  tstrncpy(tsTempDir, pItem->str, PATH_MAX);
623✔
1405
  TAOS_CHECK_RETURN(taosExpandDir(tsTempDir, tsTempDir, PATH_MAX));
623✔
1406

1407
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minimalTmpDirGB");
623✔
1408
  tsTempSpace.reserved = (int64_t)(((double)pItem->fval) * 1024 * 1024 * 1024);
623✔
1409
  if (taosMulMkDir(tsTempDir) != 0) {
623✔
1410
    int32_t code = TAOS_SYSTEM_ERROR(ERRNO);
×
1411
    uError("failed to create tempDir:%s since %s", tsTempDir, tstrerror(code));
×
1412
    TAOS_RETURN(code);
×
1413
  }
1414

1415
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "smlAutoChildTableNameDelimiter");
623✔
1416
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_TABLE_NAME_LEN));
623✔
1417
  tstrncpy(tsSmlAutoChildTableNameDelimiter, pItem->str, TSDB_TABLE_NAME_LEN);
623✔
1418

1419
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "smlChildTableName");
623✔
1420
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_TABLE_NAME_LEN));
623✔
1421
  tstrncpy(tsSmlChildTableName, pItem->str, TSDB_TABLE_NAME_LEN);
623✔
1422

1423
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "smlTagName");
623✔
1424
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_COL_NAME_LEN));
623✔
1425
  tstrncpy(tsSmlTagName, pItem->str, TSDB_COL_NAME_LEN);
623✔
1426

1427
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "smlTsDefaultName");
623✔
1428
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_COL_NAME_LEN));
623✔
1429
  tstrncpy(tsSmlTsDefaultName, pItem->str, TSDB_COL_NAME_LEN);
623✔
1430

1431
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "smlDot2Underline");
623✔
1432
  tsSmlDot2Underline = pItem->bval;
623✔
1433

1434
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxInsertBatchRows");
623✔
1435
  tsMaxInsertBatchRows = pItem->i32;
623✔
1436

1437
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "shellActivityTimer");
623✔
1438
  tsShellActivityTimer = pItem->i32;
623✔
1439

1440
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "compressMsgSize");
623✔
1441
  tsCompressMsgSize = pItem->i32;
623✔
1442

1443
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfTaskQueueThreads");
623✔
1444
  tsNumOfTaskQueueThreads = pItem->i32;
623✔
1445

1446
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryPolicy");
623✔
1447
  tsQueryPolicy = pItem->i32;
623✔
1448

1449
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryTableNotExistAsEmpty");
623✔
1450
  tsQueryTbNotExistAsEmpty = pItem->bval;
623✔
1451

1452
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableQueryHb");
623✔
1453
  tsEnableQueryHb = pItem->bval;
623✔
1454

1455
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableScience");
623✔
1456
  tsEnableScience = pItem->bval;
623✔
1457

1458
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "querySmaOptimize");
623✔
1459
  tsQuerySmaOptimize = pItem->i32;
623✔
1460

1461
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryPlannerTrace");
623✔
1462
  tsQueryPlannerTrace = pItem->bval;
623✔
1463

1464
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryNodeChunkSize");
623✔
1465
  tsQueryNodeChunkSize = pItem->i32;
623✔
1466

1467
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryUseNodeAllocator");
623✔
1468
  tsQueryUseNodeAllocator = pItem->bval;
623✔
1469

1470
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "keepColumnName");
623✔
1471
  tsKeepColumnName = pItem->bval;
623✔
1472

1473
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "useAdapter");
623✔
1474
  tsUseAdapter = pItem->bval;
623✔
1475

1476
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "crashReporting");
623✔
1477
  tsEnableCrashReport = pItem->bval;
623✔
1478

1479
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryMaxConcurrentTables");
623✔
1480
  tsQueryMaxConcurrentTables = pItem->i64;
623✔
1481

1482
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "metaCacheMaxSize");
623✔
1483
  tsMetaCacheMaxSize = pItem->i32;
623✔
1484

1485
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "randErrorChance");
623✔
1486
  tsRandErrChance = pItem->i32;
623✔
1487

1488
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "randErrorDivisor");
623✔
1489
  tsRandErrDivisor = pItem->i64;
623✔
1490

1491
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "randErrorScope");
623✔
1492
  tsRandErrScope = pItem->i64;
623✔
1493

1494
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "countAlwaysReturnValue");
623✔
1495
  tsCountAlwaysReturnValue = pItem->i32;
623✔
1496

1497
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxRetryWaitTime");
623✔
1498
  tsMaxRetryWaitTime = pItem->i32;
623✔
1499

1500
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfRpcThreads");
623✔
1501
  tsNumOfRpcThreads = pItem->i32;
623✔
1502

1503
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfRpcSessions");
623✔
1504
  tsNumOfRpcSessions = pItem->i32;
623✔
1505

1506
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "shareConnLimit");
623✔
1507
  tsShareConnLimit = pItem->i32;
623✔
1508

1509
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "readTimeout");
623✔
1510
  tsReadTimeout = pItem->i32;
623✔
1511

1512
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "timeToGetAvailableConn");
623✔
1513
  tsTimeToGetAvailableConn = pItem->i32;
623✔
1514

1515
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "experimental");
623✔
1516
  tsExperimental = pItem->bval;
623✔
1517

1518
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "multiResultFunctionStarReturnTags");
623✔
1519
  tsMultiResultFunctionStarReturnTags = pItem->bval;
623✔
1520

1521
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxTsmaCalcDelay");
623✔
1522
  tsMaxTsmaCalcDelay = pItem->i32;
623✔
1523

1524
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tsmaDataDeleteMark");
623✔
1525
  tsmaDataDeleteMark = pItem->i32;
623✔
1526

1527
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "safetyCheckLevel");
623✔
1528
  tsSafetyCheckLevel = pItem->i32;
623✔
1529

1530
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "bypassFlag");
623✔
1531
  tsBypassFlag = pItem->i32;
623✔
1532

1533
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamCoverage");
623✔
1534
  tsStreamCoverage = pItem->bval;
623✔
1535

1536
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "compareAsStrInGreatest");
623✔
1537
  tsCompareAsStrInGreatest = pItem->bval;
623✔
1538

1539
  TAOS_RETURN(TSDB_CODE_SUCCESS);
623✔
1540
}
1541

1542
static int32_t taosSetSystemCfg(SConfig *pCfg) {
623✔
1543
  SConfigItem *pItem = NULL;
623✔
1544

1545
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableCoreFile");
623✔
1546
  tsEnableCoreFile = pItem->bval;
623✔
1547
  taosSetCoreDump(tsEnableCoreFile);
623✔
1548

1549
  // todo
1550
  tsVersion = 30000000;
623✔
1551

1552
  TAOS_RETURN(TSDB_CODE_SUCCESS);
623✔
1553
}
1554

1555
// for server configs
1556
static int32_t taosSetServerCfg(SConfig *pCfg) {
203✔
1557
  SConfigItem *pItem = NULL;
203✔
1558

1559
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minimalDataDirGB");
203✔
1560
  tsDataSpace.reserved = (int64_t)(((double)pItem->fval) * 1024 * 1024 * 1024);
203✔
1561

1562
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "supportVnodes");
203✔
1563
  tsNumOfSupportVnodes = pItem->i32;
203✔
1564

1565
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxShellConns");
203✔
1566
  tsMaxShellConns = pItem->i32;
203✔
1567

1568
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "statusInterval");
203✔
1569
  tsStatusInterval = pItem->i32;
203✔
1570

1571
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minSlidingTime");
203✔
1572
  tsMinSlidingTime = pItem->i32;
203✔
1573

1574
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minIntervalTime");
203✔
1575
  tsMinIntervalTime = pItem->i32;
203✔
1576

1577
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryBufferSize");
203✔
1578
  tsQueryBufferSize = pItem->i32;
203✔
1579

1580
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "encryptAlgorithm");
203✔
1581
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, 16));
203✔
1582
  tstrncpy(tsEncryptAlgorithm, pItem->str, 16);
203✔
1583

1584
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "encryptScope");
203✔
1585
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, 100));
203✔
1586
  tstrncpy(tsEncryptScope, pItem->str, 100);
203✔
1587

1588
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableStrongPassword");
203✔
1589
  tsEnableStrongPassword = pItem->i32;
203✔
1590

1591
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfRpcThreads");
203✔
1592
  tsNumOfRpcThreads = pItem->i32;
203✔
1593

1594
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfRpcSessions");
203✔
1595
  tsNumOfRpcSessions = pItem->i32;
203✔
1596

1597
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "shareConnLimit");
203✔
1598
  tsShareConnLimit = pItem->i32;
203✔
1599

1600
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "readTimeout");
203✔
1601
  tsReadTimeout = pItem->i32;
203✔
1602

1603
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "timeToGetAvailableConn");
203✔
1604
  tsTimeToGetAvailableConn = pItem->i32;
203✔
1605

1606
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfCommitThreads");
203✔
1607
  tsNumOfCommitThreads = pItem->i32;
203✔
1608

1609
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfCompactThreads");
203✔
1610
  tsNumOfCompactThreads = pItem->i32;
203✔
1611

1612
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "retentionSpeedLimitMB");
203✔
1613
  tsRetentionSpeedLimitMB = pItem->i32;
203✔
1614

1615
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfMnodeReadThreads");
203✔
1616
  tsNumOfMnodeReadThreads = pItem->i32;
203✔
1617

1618
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfVnodeQueryThreads");
203✔
1619
  tsNumOfVnodeQueryThreads = pItem->i32;
203✔
1620

1621
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ratioOfVnodeStreamThreads");
203✔
1622
  tsRatioOfVnodeStreamThreads = pItem->fval;
203✔
1623

1624
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfVnodeFetchThreads");
203✔
1625
  tsNumOfVnodeFetchThreads = pItem->i32;
203✔
1626

1627
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfVnodeRsmaThreads");
203✔
1628
  tsNumOfVnodeRsmaThreads = pItem->i32;
203✔
1629

1630
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfQnodeQueryThreads");
203✔
1631
  tsNumOfQnodeQueryThreads = pItem->i32;
203✔
1632

1633
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfSnodeSharedThreads");
203✔
1634
  tsNumOfSnodeStreamThreads = pItem->i32;
203✔
1635

1636
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "numOfSnodeUniqueThreads");
203✔
1637
  tsNumOfSnodeWriteThreads = pItem->i32;
203✔
1638

1639
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "rpcQueueMemoryAllowed");
203✔
1640
  tsQueueMemoryAllowed = cfgGetItem(pCfg, "rpcQueueMemoryAllowed")->i64 * QUEUE_MEMORY_USAGE_RATIO;
203✔
1641
  tsApplyMemoryAllowed = cfgGetItem(pCfg, "rpcQueueMemoryAllowed")->i64 * (1 - QUEUE_MEMORY_USAGE_RATIO);
203✔
1642

1643
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "simdEnable");
203✔
1644
  tsSIMDEnable = (bool)pItem->bval;
203✔
1645

1646
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "AVX512Enable");
203✔
1647
  tsAVX512Enable = (bool)pItem->bval;
203✔
1648

1649
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tagFilterCache");
203✔
1650
  tsTagFilterCache = (bool)pItem->bval;
203✔
1651

1652
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "slowLogExceptDb");
203✔
1653
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_DB_NAME_LEN));
203✔
1654
  tstrncpy(tsSlowLogExceptDb, pItem->str, TSDB_DB_NAME_LEN);
203✔
1655

1656
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "slowLogThreshold");
203✔
1657
  tsSlowLogThreshold = pItem->i32;
203✔
1658

1659
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "slowLogMaxLen");
203✔
1660
  tsSlowLogMaxLen = pItem->i32;
203✔
1661

1662
  int32_t scope = 0;
203✔
1663
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "slowLogScope");
203✔
1664
  TAOS_CHECK_RETURN(taosSetSlowLogScope(pItem->str, &scope));
203✔
1665
  tsSlowLogScope = scope;
203✔
1666

1667
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryRspPolicy");
203✔
1668
  tsQueryRspPolicy = pItem->i32;
203✔
1669
#ifdef USE_MONITOR
1670
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitor");
203✔
1671
  tsEnableMonitor = pItem->bval;
203✔
1672

1673
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorInterval");
203✔
1674
  tsMonitorInterval = pItem->i32;
203✔
1675

1676
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorFqdn");
203✔
1677
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_FQDN_LEN));
203✔
1678
  tstrncpy(tsMonitorFqdn, pItem->str, TSDB_FQDN_LEN);
203✔
1679

1680
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorPort");
203✔
1681
  tsMonitorPort = (uint16_t)pItem->i32;
203✔
1682

1683
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorMaxLogs");
203✔
1684
  tsMonitorMaxLogs = pItem->i32;
203✔
1685

1686
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorComp");
203✔
1687
  tsMonitorComp = pItem->bval;
203✔
1688

1689
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorLogProtocol");
203✔
1690
  tsMonitorLogProtocol = pItem->bval;
203✔
1691

1692
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "monitorForceV2");
203✔
1693
  tsMonitorForceV2 = pItem->i32;
203✔
1694
#endif
1695
#ifdef USE_AUDIT
1696
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "audit");
203✔
1697
  tsEnableAudit = pItem->bval;
203✔
1698

1699
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "auditCreateTable");
203✔
1700
  tsEnableAuditCreateTable = pItem->bval;
203✔
1701

1702
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableAuditDelete");
203✔
1703
  tsEnableAuditDelete = pItem->bval;
203✔
1704

1705
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "auditInterval");
203✔
1706
  tsAuditInterval = pItem->i32;
203✔
1707
#endif
1708
#ifdef USE_REPORT
1709
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "telemetryReporting");
203✔
1710
  tsEnableTelem = pItem->bval;
203✔
1711

1712
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "crashReporting");
203✔
1713
  tsEnableCrashReport = pItem->bval;
203✔
1714

1715
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "telemetryInterval");
203✔
1716
  tsTelemInterval = pItem->i32;
203✔
1717

1718
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "telemetryServer");
203✔
1719
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_FQDN_LEN));
203✔
1720
  tstrncpy(tsTelemServer, pItem->str, TSDB_FQDN_LEN);
203✔
1721
#endif
1722

1723
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ttlChangeOnWrite");
203✔
1724
  tsTtlChangeOnWrite = pItem->bval;
203✔
1725

1726
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ttlFlushThreshold");
203✔
1727
  tsTtlFlushThreshold = pItem->i32;
203✔
1728

1729
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "rsyncPort");
203✔
1730
  tsRsyncPort = pItem->i32;
203✔
1731

1732
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "snodeAddress");
203✔
1733
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_FQDN_LEN));
203✔
1734
  tstrncpy(tsSnodeAddress, pItem->str, TSDB_FQDN_LEN);
203✔
1735

1736
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "checkpointBackupDir");
203✔
1737
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, PATH_MAX));
203✔
1738
  tstrncpy(tsCheckpointBackupDir, pItem->str, PATH_MAX);
203✔
1739

1740
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "telemetryPort");
203✔
1741
  tsTelemPort = (uint16_t)pItem->i32;
203✔
1742

1743
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tmqMaxTopicNum");
203✔
1744
  tmqMaxTopicNum = pItem->i32;
203✔
1745

1746
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tmqRowSize");
203✔
1747
  tmqRowSize = pItem->i32;
203✔
1748

1749
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxTsmaNum");
203✔
1750
  tsMaxTsmaNum = pItem->i32;
203✔
1751

1752
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "diskIDCheckEnabled");
203✔
1753
  tsDiskIDCheckEnabled = pItem->bval;
203✔
1754

1755
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "transPullupInterval");
203✔
1756
  tsTransPullupInterval = pItem->i32;
203✔
1757

1758
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "compactPullupInterval");
203✔
1759
  tsCompactPullupInterval = pItem->i32;
203✔
1760

1761
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "mqRebalanceInterval");
203✔
1762
  tsMqRebalanceInterval = pItem->i32;
203✔
1763

1764
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ttlUnit");
203✔
1765
  tsTtlUnit = pItem->i32;
203✔
1766

1767
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ttlPushInterval");
203✔
1768
  tsTtlPushIntervalSec = pItem->i32;
203✔
1769

1770
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ttlBatchDropNum");
203✔
1771
  tsTtlBatchDropNum = pItem->i32;
203✔
1772

1773
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "trimVDbIntervalSec");
203✔
1774
  tsTrimVDbIntervalSec = pItem->i32;
203✔
1775

1776
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "uptimeInterval");
203✔
1777
  tsUptimeInterval = pItem->i32;
203✔
1778

1779
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryRsmaTolerance");
203✔
1780
  tsQueryRsmaTolerance = pItem->i32;
203✔
1781

1782
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "timeseriesThreshold");
203✔
1783
  tsTimeSeriesThreshold = pItem->i32;
203✔
1784

1785
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "walFsyncDataSizeLimit");
203✔
1786
  tsWalFsyncDataSizeLimit = pItem->i64;
203✔
1787

1788
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncElectInterval");
203✔
1789
  tsElectInterval = pItem->i32;
203✔
1790

1791
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncHeartbeatInterval");
203✔
1792
  tsHeartbeatInterval = pItem->i32;
203✔
1793

1794
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncHeartbeatTimeout");
203✔
1795
  tsHeartbeatTimeout = pItem->i32;
203✔
1796

1797
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncSnapReplMaxWaitN");
203✔
1798
  tsSnapReplMaxWaitN = pItem->i32;
203✔
1799

1800
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "syncLogBufferMemoryAllowed");
203✔
1801
  tsLogBufferMemoryAllowed = pItem->i64;
203✔
1802

1803
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "arbHeartBeatIntervalSec");
203✔
1804
  tsArbHeartBeatIntervalSec = pItem->i32;
203✔
1805

1806
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "arbCheckSyncIntervalSec");
203✔
1807
  tsArbCheckSyncIntervalSec = pItem->i32;
203✔
1808

1809
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "arbSetAssignedTimeoutSec");
203✔
1810
  tsArbSetAssignedTimeoutSec = pItem->i32;
203✔
1811

1812
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "mndSdbWriteDelta");
203✔
1813
  tsMndSdbWriteDelta = pItem->i64;
203✔
1814

1815
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "mndLogRetention");
203✔
1816
  tsMndLogRetention = pItem->i64;
203✔
1817

1818
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "skipGrant");
203✔
1819
  tsMndSkipGrant = pItem->bval;
203✔
1820

1821
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "enableWhiteList");
203✔
1822
  tsEnableWhiteList = pItem->bval;
203✔
1823
#ifdef USE_UDF
1824
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "udf");
203✔
1825
  tsStartUdfd = pItem->bval;
203✔
1826

1827
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "udfdResFuncs");
203✔
1828
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, sizeof(tsUdfdResFuncs)));
203✔
1829
  tstrncpy(tsUdfdResFuncs, pItem->str, sizeof(tsUdfdResFuncs));
203✔
1830

1831
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "udfdLdLibPath");
203✔
1832
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, sizeof(tsUdfdLdLibPath)));
203✔
1833
  tstrncpy(tsUdfdLdLibPath, pItem->str, sizeof(tsUdfdLdLibPath));
203✔
1834
  if (tsQueryBufferSize >= 0) {
203✔
1835
    tsQueryBufferSizeBytes = tsQueryBufferSize * 1048576UL;
×
1836
  }
1837
#endif
1838
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "cacheLazyLoadThreshold");
203✔
1839
  tsCacheLazyLoadThreshold = pItem->i32;
203✔
1840

1841
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "fPrecision");
203✔
1842
  tsFPrecision = pItem->fval;
203✔
1843

1844
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "dPrecision");
203✔
1845
  tsDPrecision = pItem->fval;
203✔
1846

1847
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxRange");
203✔
1848
  tsMaxRange = pItem->i32;
203✔
1849

1850
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "curRange");
203✔
1851
  tsCurRange = pItem->i32;
203✔
1852

1853
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "ifAdtFse");
203✔
1854
  tsIfAdtFse = pItem->bval;
203✔
1855

1856
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "compressor");
203✔
1857
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, sizeof(tsCompressor)));
203✔
1858
  tstrncpy(tsCompressor, pItem->str, sizeof(tsCompressor));
203✔
1859

1860
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "disableStream");
203✔
1861
  tsDisableStream = pItem->bval;
203✔
1862

1863
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamBufferSize");
203✔
1864
  tsStreamBufferSize = pItem->i64;
203✔
1865

1866
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamFailedTimeout");
203✔
1867
  tsStreamFailedTimeout = pItem->i64;
203✔
1868

1869
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamAggCnt");
203✔
1870
  tsStreamAggCnt = pItem->i32;
203✔
1871

1872
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "checkpointInterval");
203✔
1873
  tsStreamCheckpointInterval = pItem->i32;
203✔
1874

1875
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "concurrentCheckpoint");
203✔
1876
  tsMaxConcurrentCheckpoint = pItem->i32;
203✔
1877

1878
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamSinkDataRate");
203✔
1879
  tsSinkDataRate = pItem->fval;
203✔
1880

1881
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "filterScalarMode");
203✔
1882
  tsFilterScalarMode = pItem->bval;
203✔
1883

1884
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "maxStreamBackendCache");
203✔
1885
  tsMaxStreamBackendCache = pItem->i32;
203✔
1886

1887
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "pqSortMemThreshold");
203✔
1888
  tsPQSortMemThreshold = pItem->i32;
203✔
1889

1890
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minDiskFreeSize");
203✔
1891
  tsMinDiskFreeSize = pItem->i64;
203✔
1892
#ifdef USE_S3
1893
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "s3MigrateIntervalSec");
203✔
1894
  tsS3MigrateIntervalSec = pItem->i32;
203✔
1895

1896
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "s3MigrateEnabled");
203✔
1897
  tsS3MigrateEnabled = (bool)pItem->bval;
203✔
1898

1899
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "s3PageCacheSize");
203✔
1900
  tsS3PageCacheSize = pItem->i32;
203✔
1901

1902
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "s3UploadDelaySec");
203✔
1903
  tsS3UploadDelaySec = pItem->i32;
203✔
1904
#endif
1905
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "experimental");
203✔
1906
  tsExperimental = pItem->bval;
203✔
1907

1908
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryUseMemoryPool");
203✔
1909
  tsQueryUseMemoryPool = pItem->bval;
203✔
1910

1911
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "memPoolFullFunc");
203✔
1912
  tsMemPoolFullFunc = pItem->bval;
203✔
1913

1914
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "singleQueryMaxMemorySize");
203✔
1915
  tsSingleQueryMaxMemorySize = pItem->i32;
203✔
1916

1917
  // TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "queryBufferPoolSize");
1918
  // tsQueryBufferPoolSize = pItem->i32;
1919

1920
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "minReservedMemorySize");
203✔
1921
  tsMinReservedMemorySize = pItem->i32;
203✔
1922

1923
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamNotifyMessageSize");
203✔
1924
  tsStreamNotifyMessageSize = pItem->i32;
203✔
1925

1926
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamNotifyFrameSize");
203✔
1927
  tsStreamNotifyFrameSize = pItem->i32;
203✔
1928

1929
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "adapterFqdn");
203✔
1930
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_FQDN_LEN));
203✔
1931
  tstrncpy(tsAdapterFqdn, pItem->str, TSDB_FQDN_LEN);
203✔
1932

1933
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "adapterPort");
203✔
1934
  tsAdapterPort = (uint16_t)pItem->i32;
203✔
1935

1936
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "adapterToken");
203✔
1937
  TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, tListLen(tsAdapterToken)));
203✔
1938
  tstrncpy(tsAdapterToken, pItem->str, tListLen(tsAdapterToken));
203✔
1939

1940
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamVirtualMergeMaxDelay");
203✔
1941
  tsStreamVirtualMergeMaxDelayMs = pItem->i32;
203✔
1942

1943
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamVirtualMergeMaxMem");
203✔
1944
  tsStreamVirtualMergeMaxMemKb = pItem->i32;
203✔
1945

1946
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "streamVirtualMergeWaitMode");
203✔
1947
  tsStreamVirtualMergeWaitMode = pItem->i32;
203✔
1948

1949
  // GRANT_CFG_GET;
1950
  TAOS_RETURN(TSDB_CODE_SUCCESS);
203✔
1951
}
1952

1953
#ifndef TD_ENTERPRISE
1954
static int32_t taosSetReleaseCfg(SConfig *pCfg) { return 0; }
1955
#else
1956
int32_t taosSetReleaseCfg(SConfig *pCfg);
1957
#endif
1958

1959
static int32_t taosSetAllDebugFlag(SConfig *pCfg, int32_t flag);
1960

1961
static int8_t tsLogCreated = 0;
1962

1963
int32_t taosCreateLog(const char *logname, int32_t logFileNum, const char *cfgDir, const char **envCmd,
585✔
1964
                      const char *envFile, char *apolloUrl, SArray *pArgs, bool tsc) {
1965
  int32_t  code = TSDB_CODE_SUCCESS;
585✔
1966
  int32_t  lino = 0;
585✔
1967
  int32_t  mode = tsc ? LOG_MODE_TAOSC : LOG_MODE_TAOSD;
585✔
1968
  SConfig *pCfg = NULL;
585✔
1969

1970
  if (atomic_val_compare_exchange_8(&tsLogCreated, 0, 1) != 0) return 0;
585✔
1971

1972
  if (tsCfg == NULL) {
572✔
1973
    TAOS_CHECK_GOTO(osDefaultInit(), &lino, _exit);
572✔
1974
  }
1975

1976
  TAOS_CHECK_GOTO(cfgInit(&pCfg), &lino, _exit);
572✔
1977

1978
#ifdef TAOSD_INTEGRATED
1979
  mode |= LOG_MODE_TAOSD;
1980
  tsLogEmbedded = 1;
1981
#else
1982
  tsLogEmbedded = (mode & LOG_MODE_TAOSC) ? 0 : 1;
572✔
1983
#endif
1984
  TAOS_CHECK_GOTO(taosAddClientLogCfg(pCfg), &lino, _exit);
572✔
1985
  if (mode & LOG_MODE_TAOSD) {
572✔
1986
    TAOS_CHECK_GOTO(taosAddServerLogCfg(pCfg), &lino, _exit);
152✔
1987
  }
1988

1989
  if ((code = taosLoadCfg(pCfg, envCmd, cfgDir, envFile, apolloUrl)) != TSDB_CODE_SUCCESS) {
572✔
1990
    (void)printf("failed to load cfg since %s\n", tstrerror(code));
2✔
1991
    goto _exit;
2✔
1992
  }
1993

1994
  if ((code = cfgLoadFromArray(pCfg, pArgs)) != TSDB_CODE_SUCCESS) {
570✔
1995
    (void)printf("failed to load cfg from array since %s\n", tstrerror(code));
×
1996
    goto _exit;
×
1997
  }
1998

1999
  TAOS_CHECK_GOTO(taosSetClientLogCfg(pCfg), &lino, _exit);
570✔
2000
  if (mode & LOG_MODE_TAOSD) {
570✔
2001
    TAOS_CHECK_GOTO(taosSetServerLogCfg(pCfg), &lino, _exit);
150✔
2002
  }
2003

2004
  SConfigItem *pDebugItem = NULL;
570✔
2005
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pDebugItem, "debugFlag");
570✔
2006
  TAOS_CHECK_GOTO(taosSetAllDebugFlag(pCfg, pDebugItem->i32), &lino, _exit);
570✔
2007

2008
  if ((code = taosMulModeMkDir(tsLogDir, 0777, true)) != TSDB_CODE_SUCCESS) {
570✔
2009
    (void)printf("failed to create dir:%s since %s\n", tsLogDir, tstrerror(code));
×
2010
    goto _exit;
×
2011
  }
2012

2013
  if ((code = taosInitLog(logname, logFileNum, mode)) != 0) {
570✔
2014
    (void)printf("failed to init log file since %s\n", tstrerror(code));
×
2015
    goto _exit;
×
2016
  }
2017

2018
_exit:
570✔
2019
  if (TSDB_CODE_SUCCESS != code) {
572✔
2020
    (void)printf("failed to create log at %d since %s\n", lino, tstrerror(code));
2✔
2021
  }
2022

2023
  cfgCleanup(pCfg);
572✔
2024
  TAOS_RETURN(code);
572✔
2025
}
2026

2027
int32_t taosReadDataFolder(const char *cfgDir, const char **envCmd, const char *envFile, char *apolloUrl,
×
2028
                           SArray *pArgs) {
2029
  int32_t code = TSDB_CODE_SUCCESS;
×
2030
  int32_t lino = -1;
×
2031
  if (tsCfg == NULL) code = osDefaultInit();
×
2032
  if (code != 0) {
×
2033
    (void)printf("failed to init os since %s\n", tstrerror(code));
×
2034
  }
2035

2036
  SConfig *pCfg = NULL;
×
2037
  TAOS_CHECK_RETURN(cfgInit(&pCfg));
×
2038
  TAOS_CHECK_GOTO(cfgAddDir(pCfg, "dataDir", tsDataDir, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL), &lino,
×
2039
                  _exit);
2040
  TAOS_CHECK_GOTO(
×
2041
      cfgAddInt32(pCfg, "debugFlag", dDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL), &lino,
2042
      _exit);
2043
  TAOS_CHECK_GOTO(
×
2044
      cfgAddInt32(pCfg, "dDebugFlag", dDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER, CFG_CATEGORY_LOCAL), &lino,
2045
      _exit);
2046

2047
  if ((code = taosLoadCfg(pCfg, envCmd, cfgDir, envFile, apolloUrl)) != 0) {
×
2048
    (void)printf("failed to load cfg since %s\n", tstrerror(code));
×
2049
    goto _exit;
×
2050
  }
2051

2052
  if ((code = cfgLoadFromArray(pCfg, pArgs)) != 0) {
×
2053
    (void)printf("failed to load cfg from array since %s\n", tstrerror(code));
×
2054
    goto _exit;
×
2055
  }
2056

2057
  TAOS_CHECK_GOTO(taosSetTfsCfg(pCfg), &lino, _exit);
×
2058

2059
  SConfigItem *pItem = NULL;
×
2060
  if ((pItem = cfgGetItem(pCfg, "dDebugFlag")) == NULL) {
×
2061
    code = TSDB_CODE_CFG_NOT_FOUND;
×
2062
    goto _exit;
×
2063
  }
2064

2065
  dDebugFlag = pItem->i32;
×
2066

2067
_exit:
×
2068
  cfgCleanup(pCfg);
×
2069
  TAOS_RETURN(code);
×
2070
}
2071

2072
static int32_t taosCheckGlobalCfg() {
570✔
2073
  uint32_t ipv4 = 0;
570✔
2074
  uInfo("check global fqdn:%s and port:%u", tsLocalFqdn, tsServerPort);
570✔
2075
  int32_t code = taosGetIpv4FromFqdn(tsLocalFqdn, &ipv4);
570✔
2076
  if (code) {
570✔
2077
    uError("failed to get ip from fqdn:%s since %s, can not be initialized", tsLocalFqdn, tstrerror(code));
×
2078
    TAOS_RETURN(TSDB_CODE_RPC_FQDN_ERROR);
×
2079
  }
2080

2081
  if (tsServerPort <= 0) {
570✔
2082
    uError("invalid server port:%u, can not be initialized", tsServerPort);
×
2083
    TAOS_RETURN(TSDB_CODE_RPC_FQDN_ERROR);
×
2084
  }
2085

2086
  TAOS_RETURN(TSDB_CODE_SUCCESS);
570✔
2087
}
2088

2089
static int32_t cfgInitWrapper(SConfig **pCfg) {
570✔
2090
  if (*pCfg == NULL) {
570✔
2091
    TAOS_CHECK_RETURN(cfgInit(pCfg));
570✔
2092
  }
2093
  TAOS_RETURN(TSDB_CODE_SUCCESS);
570✔
2094
}
2095

2096
int32_t setAllConfigs(SConfig *pCfg) {
61✔
2097
  int32_t code = 0;
61✔
2098
  int32_t lino = -1;
61✔
2099
  TAOS_CHECK_GOTO(taosSetClientCfg(tsCfg), &lino, _exit);
61✔
2100
  TAOS_CHECK_GOTO(taosUpdateServerCfg(tsCfg), &lino, _exit);
53✔
2101
  TAOS_CHECK_GOTO(taosSetServerCfg(tsCfg), &lino, _exit);
53✔
2102
  TAOS_CHECK_GOTO(taosSetReleaseCfg(tsCfg), &lino, _exit);
53✔
2103
  TAOS_CHECK_GOTO(taosSetTfsCfg(tsCfg), &lino, _exit);
53✔
2104
  TAOS_CHECK_GOTO(taosSetS3Cfg(tsCfg), &lino, _exit);
53✔
2105
  TAOS_CHECK_GOTO(taosSetSystemCfg(tsCfg), &lino, _exit);
53✔
2106
  TAOS_CHECK_GOTO(taosSetFileHandlesLimit(), &lino, _exit);
53✔
2107
_exit:
53✔
2108
  TAOS_RETURN(code);
61✔
2109
}
2110

2111
int32_t cfgDeserialize(SArray *array, char *buf, bool isGlobal) {
60✔
2112
  int32_t code = TSDB_CODE_SUCCESS;
60✔
2113

2114
  cJSON *pRoot = cJSON_Parse(buf);
60✔
2115
  if (pRoot == NULL) {
60✔
2116
    return TSDB_CODE_OUT_OF_MEMORY;
×
2117
  }
2118
  if (isGlobal) {
60✔
2119
    cJSON *pItem = cJSON_GetObjectItem(pRoot, "version");
30✔
2120
    if (pItem == NULL) {
30✔
2121
      code = TSDB_CODE_OUT_OF_MEMORY;
×
2122
      goto _exit;
×
2123
    }
2124
    tsdmConfigVersion = pItem->valueint;
30✔
2125
  }
2126

2127
  int32_t sz = taosArrayGetSize(array);
60✔
2128
  cJSON  *configs = cJSON_GetObjectItem(pRoot, "configs");
60✔
2129
  if (configs == NULL) {
60✔
2130
    code = TSDB_CODE_OUT_OF_MEMORY;
×
2131
    goto _exit;
×
2132
  }
2133
  for (int i = 0; i < sz; i++) {
6,600✔
2134
    SConfigItem *pItem = (SConfigItem *)taosArrayGet(array, i);
6,540✔
2135
    cJSON       *pJson = cJSON_GetObjectItem(configs, pItem->name);
6,540✔
2136
    if (pJson == NULL) {
6,540✔
2137
      continue;
30✔
2138
    }
2139
    if (strcasecmp(pItem->name, "dataDir") == 0) {
6,510✔
2140
      if (!tsDiskIDCheckEnabled) {
30✔
2141
        continue;
30✔
2142
      }
2143
      int    sz = cJSON_GetArraySize(pJson);
×
2144
      cJSON *filed = NULL;
×
2145
      // check disk id for each dir
2146
      for (int j = 0; j < sz; j++) {
×
2147
        cJSON *diskCfgJson = cJSON_GetArrayItem(pJson, j);
×
2148
        if (diskCfgJson == NULL) {
×
2149
          code = TSDB_CODE_OUT_OF_MEMORY;
×
2150
          goto _exit;
×
2151
        }
2152

2153
        filed = cJSON_GetObjectItem(diskCfgJson, "dir");
×
2154
        if (filed == NULL) {
×
2155
          code = TSDB_CODE_OUT_OF_MEMORY;
×
2156
          goto _exit;
×
2157
        }
2158

2159
        char *dir = cJSON_GetStringValue(filed);
×
2160
        filed = cJSON_GetObjectItem(diskCfgJson, "disk_id");
×
2161
        if (filed == NULL) {
×
2162
          code = TSDB_CODE_OUT_OF_MEMORY;
×
2163
          goto _exit;
×
2164
        }
2165

2166
        int64_t actDiskID = 0;
×
2167
        int64_t expDiskID = taosStr2Int64(cJSON_GetStringValue(filed), NULL, 10);
×
2168
        if ((code = taosGetFileDiskID(dir, &actDiskID)) != 0) {
×
2169
          uError("failed to get disk id for dir:%s, since %s", dir, tstrerror(code));
×
2170
          goto _exit;
×
2171
        }
2172
        if (actDiskID != expDiskID) {
×
2173
          uError("failed to check disk id for dir:%s, actDiskID%" PRId64 ", expDiskID%" PRId64, dir, actDiskID,
×
2174
                 expDiskID);
2175
          code = TSDB_CODE_INVALID_DISK_ID;
×
2176
          goto _exit;
×
2177
        }
2178
      }
2179
      continue;
×
2180
    }
2181
    pItem->stype = CFG_STYPE_CFG_FILE;
6,480✔
2182
    switch (pItem->dtype) {
6,480✔
2183
      {
2184
        case CFG_DTYPE_NONE:
×
2185
          break;
×
2186
        case CFG_DTYPE_BOOL:
1,140✔
2187
          pItem->bval = cJSON_IsTrue(pJson);
1,140✔
2188
          break;
1,140✔
2189
        case CFG_DTYPE_INT32:
3,480✔
2190
          pItem->i32 = pJson->valueint;
3,480✔
2191
          break;
3,480✔
2192
        case CFG_DTYPE_INT64:
450✔
2193
          pItem->i64 = atoll(cJSON_GetStringValue(pJson));
450✔
2194
          break;
450✔
2195
        case CFG_DTYPE_FLOAT:
240✔
2196
        case CFG_DTYPE_DOUBLE:
2197
          pItem->fval = taosStr2Float(cJSON_GetStringValue(pJson), NULL);
240✔
2198
          break;
240✔
2199
        case CFG_DTYPE_STRING:
1,170✔
2200
        case CFG_DTYPE_DIR:
2201
        case CFG_DTYPE_LOCALE:
2202
        case CFG_DTYPE_CHARSET:
2203
        case CFG_DTYPE_TIMEZONE:
2204
          taosMemoryFree(pItem->str);
1,170✔
2205
          pItem->str = taosStrdup(pJson->valuestring);
1,170✔
2206
          if (pItem->str == NULL) {
1,170✔
2207
            code = terrno;
×
2208
            goto _exit;
×
2209
          }
2210
          break;
1,170✔
2211
      }
2212
    }
2213
  }
6,540✔
2214
_exit:
60✔
2215
  if (code != TSDB_CODE_SUCCESS) {
60✔
2216
    uError("failed to deserialize config since %s", tstrerror(code));
×
2217
  }
2218
  cJSON_Delete(pRoot);
60✔
2219
  return code;
60✔
2220
}
2221

2222
int32_t readCfgFile(const char *path, bool isGlobal) {
300✔
2223
  int32_t code = 0;
300✔
2224
  char    filename[CONFIG_FILE_LEN] = {0};
300✔
2225
  SArray *array = NULL;
300✔
2226
  if (isGlobal) {
300✔
2227
    array = taosGetGlobalCfg(tsCfg);
150✔
2228
    snprintf(filename, sizeof(filename), "%s%sdnode%sconfig%sglobal.json", path, TD_DIRSEP, TD_DIRSEP, TD_DIRSEP);
150✔
2229
  } else {
2230
    array = taosGetLocalCfg(tsCfg);
150✔
2231
    snprintf(filename, sizeof(filename), "%s%sdnode%sconfig%slocal.json", path, TD_DIRSEP, TD_DIRSEP, TD_DIRSEP);
150✔
2232
  }
2233
  uInfo("start to read config file:%s", filename);
300✔
2234

2235
  if (!taosCheckExistFile(filename)) {
300✔
2236
    uInfo("config file:%s does not exist", filename);
240✔
2237
    TAOS_RETURN(TSDB_CODE_SUCCESS);
240✔
2238
  }
2239
  int64_t fileSize = 0;
60✔
2240
  char   *buf = NULL;
60✔
2241
  if (taosStatFile(filename, &fileSize, NULL, NULL) < 0) {
60✔
2242
    code = terrno;
×
2243
    uError("failed to stat file:%s , since %s", filename, tstrerror(code));
×
2244
    TAOS_RETURN(code);
×
2245
  }
2246
  if (fileSize == 0) {
60✔
2247
    uInfo("config file:%s is empty", filename);
×
2248
    TAOS_RETURN(TSDB_CODE_SUCCESS);
×
2249
  }
2250
  TdFilePtr pFile = taosOpenFile(filename, TD_FILE_READ);
60✔
2251
  if (pFile == NULL) {
60✔
2252
    code = terrno;
×
2253
    uError("failed to open file:%s , since %s", filename, tstrerror(code));
×
2254
    goto _exit;
×
2255
  }
2256
  buf = (char *)taosMemoryMalloc(fileSize + 1);
60✔
2257
  if (buf == NULL) {
60✔
2258
    code = terrno;
×
2259
    uError("failed to malloc memory for file:%s , since %s", filename, tstrerror(code));
×
2260
    goto _exit;
×
2261
  }
2262
  if (taosReadFile(pFile, buf, fileSize) != fileSize) {
60✔
2263
    code = terrno;
×
2264
    uError("failed to read file:%s , config since %s", filename, tstrerror(code));
×
2265
    goto _exit;
×
2266
  }
2267
  buf[fileSize] = 0;
60✔
2268
  code = cfgDeserialize(array, buf, isGlobal);
60✔
2269
  if (code != TSDB_CODE_SUCCESS) {
60✔
2270
    uError("failed to deserialize config from %s since %s", filename, tstrerror(code));
×
2271
    goto _exit;
×
2272
  }
2273

2274
_exit:
60✔
2275
  if (code != TSDB_CODE_SUCCESS) {
60✔
2276
    uError("failed to read config from %s since %s", filename, tstrerror(code));
×
2277
  }
2278
  taosMemoryFree(buf);
60✔
2279
  (void)taosCloseFile(&pFile);
60✔
2280
  TAOS_RETURN(code);
60✔
2281
}
2282

2283
int32_t tryLoadCfgFromDataDir(SConfig *pCfg) {
150✔
2284
  int32_t      code = 0;
150✔
2285
  SConfigItem *pItem = NULL;
150✔
2286
  TAOS_CHECK_GET_CFG_ITEM(tsCfg, pItem, "forceReadConfig");
150✔
2287
  tsForceReadConfig = pItem->i32;
150✔
2288
  code = readCfgFile(tsDataDir, true);
150✔
2289
  if (code != TSDB_CODE_SUCCESS) {
150✔
2290
    uError("failed to read global config from %s since %s", tsDataDir, tstrerror(code));
×
2291
    TAOS_RETURN(code);
×
2292
  }
2293
  if (!tsForceReadConfig) {
150✔
2294
    uInfo("load config from tsDataDir:%s", tsDataDir);
150✔
2295
    code = readCfgFile(tsDataDir, false);
150✔
2296
    if (code != TSDB_CODE_SUCCESS) {
150✔
2297
      uError("failed to read local config from %s since %s", tsDataDir, tstrerror(code));
×
2298
      TAOS_RETURN(code);
×
2299
    }
2300
  }
2301
  TAOS_RETURN(code);
150✔
2302
}
2303

2304
int32_t taosInitCfg(const char *cfgDir, const char **envCmd, const char *envFile, char *apolloUrl, SArray *pArgs,
583✔
2305
                    bool tsc) {
2306
  if (tsCfg != NULL) TAOS_RETURN(TSDB_CODE_SUCCESS);
583✔
2307

2308
  int32_t code = TSDB_CODE_SUCCESS;
570✔
2309
  int32_t lino = -1;
570✔
2310

2311
  TAOS_CHECK_GOTO(cfgInitWrapper(&tsCfg), &lino, _exit);
570✔
2312

2313
  if (tsc) {
570✔
2314
    TAOS_CHECK_GOTO(taosAddClientCfg(tsCfg), &lino, _exit);
420✔
2315
    TAOS_CHECK_GOTO(taosAddClientLogCfg(tsCfg), &lino, _exit);
420✔
2316
  } else {
2317
    TAOS_CHECK_GOTO(taosAddClientCfg(tsCfg), &lino, _exit);
150✔
2318
    TAOS_CHECK_GOTO(taosAddServerCfg(tsCfg), &lino, _exit);
150✔
2319
    TAOS_CHECK_GOTO(taosAddClientLogCfg(tsCfg), &lino, _exit);
150✔
2320
    TAOS_CHECK_GOTO(taosAddServerLogCfg(tsCfg), &lino, _exit);
150✔
2321
  }
2322

2323
  TAOS_CHECK_GOTO(taosAddSystemCfg(tsCfg), &lino, _exit);
570✔
2324

2325
  if ((code = taosLoadCfg(tsCfg, envCmd, cfgDir, envFile, apolloUrl)) != 0) {
570✔
2326
    (void)printf("failed to load cfg since %s\n", tstrerror(code));
×
2327
    cfgCleanup(tsCfg);
×
2328
    tsCfg = NULL;
×
2329
    TAOS_RETURN(code);
×
2330
  }
2331

2332
  if ((code = cfgLoadFromArray(tsCfg, pArgs)) != 0) {
570✔
2333
    (void)printf("failed to load cfg from array since %s\n", tstrerror(code));
×
2334
    cfgCleanup(tsCfg);
×
2335
    tsCfg = NULL;
×
2336
    TAOS_RETURN(code);
×
2337
  }
2338

2339
  if (!tsc) {
570✔
2340
    TAOS_CHECK_GOTO(taosSetTfsCfg(tsCfg), &lino, _exit);
150✔
2341
    TAOS_CHECK_GOTO(tryLoadCfgFromDataDir(tsCfg), &lino, _exit);
150✔
2342
  }
2343

2344
  if (tsc) {
570✔
2345
    TAOS_CHECK_GOTO(taosSetClientLogCfg(tsCfg), &lino, _exit);
420✔
2346
    TAOS_CHECK_GOTO(taosSetClientCfg(tsCfg), &lino, _exit);
420✔
2347
  } else {
2348
    TAOS_CHECK_GOTO(taosSetClientLogCfg(tsCfg), &lino, _exit);
150✔
2349
    TAOS_CHECK_GOTO(taosSetClientCfg(tsCfg), &lino, _exit);
150✔
2350
    TAOS_CHECK_GOTO(taosUpdateServerCfg(tsCfg), &lino, _exit);
150✔
2351
    TAOS_CHECK_GOTO(taosSetServerCfg(tsCfg), &lino, _exit);
150✔
2352
    TAOS_CHECK_GOTO(taosSetReleaseCfg(tsCfg), &lino, _exit);
150✔
2353
    TAOS_CHECK_GOTO(taosSetS3Cfg(tsCfg), &lino, _exit);
150✔
2354
  }
2355

2356
  TAOS_CHECK_GOTO(taosSetSystemCfg(tsCfg), &lino, _exit);
570✔
2357
  TAOS_CHECK_GOTO(taosSetFileHandlesLimit(), &lino, _exit);
570✔
2358

2359
  SConfigItem *pItem = cfgGetItem(tsCfg, "debugFlag");
570✔
2360
  if (NULL == pItem) {
570✔
2361
    (void)printf("debugFlag not found in cfg\n");
×
2362
    TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND);
×
2363
  }
2364
  TAOS_CHECK_GOTO(taosSetAllDebugFlag(tsCfg, pItem->i32), &lino, _exit);
570✔
2365

2366
  cfgDumpCfg(tsCfg, tsc, false);
570✔
2367
  TAOS_CHECK_GOTO(taosCheckGlobalCfg(), &lino, _exit);
570✔
2368

2369
_exit:
570✔
2370
  if (TSDB_CODE_SUCCESS != code) {
570✔
2371
    cfgCleanup(tsCfg);
×
2372
    tsCfg = NULL;
×
2373
    (void)printf("failed to init cfg at %d since %s\n", lino, tstrerror(code));
×
2374
  }
2375

2376
  TAOS_RETURN(code);
570✔
2377
}
2378

2379
void taosCleanupCfg() {
574✔
2380
  if (tsCfg) {
574✔
2381
    cfgCleanup(tsCfg);
574✔
2382
    tsCfg = NULL;
574✔
2383
  }
2384
}
574✔
2385

2386
typedef struct {
2387
  const char *optionName;
2388
  void       *optionVar;
2389
} OptionNameAndVar;
2390

2391
static int32_t taosCfgSetOption(OptionNameAndVar *pOptions, int32_t optionSize, SConfigItem *pItem, bool isDebugflag) {
14✔
2392
  int32_t code = TSDB_CODE_CFG_NOT_FOUND;
14✔
2393
  char   *name = pItem->name;
14✔
2394
  for (int32_t d = 0; d < optionSize; ++d) {
174✔
2395
    const char *optName = pOptions[d].optionName;
167✔
2396
    if (taosStrcasecmp(name, optName) != 0) continue;
167✔
2397
    code = TSDB_CODE_SUCCESS;
7✔
2398
    switch (pItem->dtype) {
7✔
2399
      case CFG_DTYPE_BOOL: {
×
2400
        int32_t flag = pItem->i32;
×
2401
        bool   *pVar = pOptions[d].optionVar;
×
2402
        uInfo("%s set from %d to %d", optName, *pVar, flag);
×
2403
        *pVar = flag;
×
2404
      } break;
×
2405
      case CFG_DTYPE_INT32: {
7✔
2406
        int32_t  flag = pItem->i32;
7✔
2407
        int32_t *pVar = pOptions[d].optionVar;
7✔
2408
        uInfo("%s set from %d to %d", optName, *pVar, flag);
7✔
2409
        *pVar = flag;
7✔
2410

2411
        if (isDebugflag) {
7✔
2412
          TAOS_CHECK_RETURN(taosSetDebugFlag(pOptions[d].optionVar, optName, flag));
×
2413
        }
2414
      } break;
7✔
2415
      case CFG_DTYPE_INT64: {
×
2416
        int64_t  flag = pItem->i64;
×
2417
        int64_t *pVar = pOptions[d].optionVar;
×
2418
        uInfo("%s set from %" PRId64 " to %" PRId64, optName, *pVar, flag);
×
2419
        *pVar = flag;
×
2420
      } break;
×
2421
      case CFG_DTYPE_FLOAT:
×
2422
      case CFG_DTYPE_DOUBLE: {
2423
        float  flag = pItem->fval;
×
2424
        float *pVar = pOptions[d].optionVar;
×
2425
        uInfo("%s set from %f to %f", optName, *pVar, flag);
×
2426
        *pVar = flag;
×
2427
      } break;
×
2428
      case CFG_DTYPE_STRING:
×
2429
      case CFG_DTYPE_DIR:
2430
      case CFG_DTYPE_LOCALE:
2431
      case CFG_DTYPE_CHARSET:
2432
      case CFG_DTYPE_TIMEZONE: {
2433
        if (strcasecmp(pItem->name, "slowLogExceptDb") == 0) {
×
2434
          TAOS_CHECK_RETURN(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_DB_NAME_LEN));
×
2435
          tstrncpy(tsSlowLogExceptDb, pItem->str, TSDB_DB_NAME_LEN);
×
2436
        } else {
2437
          uError("not support string type for %s", optName);
×
2438
          code = TSDB_CODE_INVALID_CFG;
×
2439
          break;
×
2440
        }
2441
        uInfo("%s set to %s", optName, pItem->str);
×
2442
      } break;
×
2443
      default:
×
2444
        code = TSDB_CODE_INVALID_CFG;
×
2445
        break;
×
2446
    }
2447

2448
    break;
7✔
2449
  }
2450

2451
  TAOS_RETURN(code);
14✔
2452
}
2453

2454
extern void tsdbAlterNumCompactThreads();
2455

2456
static int32_t taosCfgDynamicOptionsForServer(SConfig *pCfg, const char *name) {
3✔
2457
  int32_t code = TSDB_CODE_SUCCESS;
3✔
2458
  int32_t lino = -1;
3✔
2459

2460
  if (strcasecmp("timezone", name) == 0) {
3✔
2461
    TAOS_RETURN(TSDB_CODE_SUCCESS);
×
2462
  }
2463

2464
  if (strcasecmp(name, "resetlog") == 0) {
3✔
2465
    // trigger, no item in cfg
2466
    taosResetLog();
×
2467
    cfgDumpCfg(tsCfg, 0, false);
×
2468
    TAOS_RETURN(TSDB_CODE_SUCCESS);
×
2469
  }
2470

2471
  cfgLock(pCfg);
3✔
2472

2473
  SConfigItem *pItem = cfgGetItem(pCfg, name);
3✔
2474
  if (!pItem || (pItem->dynScope == CFG_DYN_CLIENT)) {
3✔
2475
    uError("failed to config:%s, not support", name);
×
2476
    code = TSDB_CODE_INVALID_CFG;
×
2477
    goto _exit;
×
2478
  }
2479

2480
  if (strncasecmp(name, "debugFlag", 9) == 0) {
3✔
2481
    code = taosSetAllDebugFlag(pCfg, pItem->i32);
3✔
2482
    goto _exit;
3✔
2483
  }
2484

2485
  if (strncasecmp(name, "enableCoreFile", 9) == 0) {
×
2486
    tsEnableCoreFile = pItem->bval;
×
2487
    taosSetCoreDump(tsEnableCoreFile);
×
2488
    uInfo("%s set to %d", name, tsEnableCoreFile);
×
2489
    goto _exit;
×
2490
  }
2491

2492
  if (strcasecmp("slowLogScope", name) == 0) {
×
2493
    int32_t scope = 0;
×
2494
    TAOS_CHECK_GOTO(taosSetSlowLogScope(pItem->str, &scope), &lino, _exit);
×
2495
    tsSlowLogScope = scope;
×
2496
    code = TSDB_CODE_SUCCESS;
×
2497
    goto _exit;
×
2498
  }
2499

2500
  if (strcasecmp("slowLogExceptDb", name) == 0) {
×
2501
    tstrncpy(tsSlowLogExceptDb, pItem->str, TSDB_DB_NAME_LEN);
×
2502
    code = TSDB_CODE_SUCCESS;
×
2503
    goto _exit;
×
2504
  }
2505
  if (strcasecmp(name, "dataDir") == 0) {
×
2506
    code = TSDB_CODE_SUCCESS;
×
2507
    goto _exit;
×
2508
  }
2509
  if (strcasecmp("rpcQueueMemoryAllowed", name) == 0) {
×
2510
    tsQueueMemoryAllowed = cfgGetItem(pCfg, "rpcQueueMemoryAllowed")->i64 * QUEUE_MEMORY_USAGE_RATIO;
×
2511
    tsApplyMemoryAllowed = cfgGetItem(pCfg, "rpcQueueMemoryAllowed")->i64 * (1 - QUEUE_MEMORY_USAGE_RATIO);
×
2512
    code = TSDB_CODE_SUCCESS;
×
2513
    goto _exit;
×
2514
  }
2515

2516
  if (strcasecmp(name, "numOfCompactThreads") == 0) {
×
2517
#ifdef TD_ENTERPRISE
2518
    tsNumOfCompactThreads = pItem->i32;
×
2519
    code = TSDB_CODE_SUCCESS;
×
2520
    // tsdbAlterNumCompactThreads();
2521
#else
2522
    code = TSDB_CODE_INVALID_CFG;
2523
#endif
2524
    goto _exit;
×
2525
  }
2526

2527
  {  //  'bool/int32_t/int64_t/float/double' variables with general modification function
2528
    static OptionNameAndVar debugOptions[] = {
2529
        {"dDebugFlag", &dDebugFlag},       {"vDebugFlag", &vDebugFlag},
2530
        {"mDebugFlag", &mDebugFlag},       {"wDebugFlag", &wDebugFlag},
2531
        {"azDebugFlag", &azDebugFlag},     {"sDebugFlag", &sDebugFlag},
2532
        {"tsdbDebugFlag", &tsdbDebugFlag}, {"tqDebugFlag", &tqDebugFlag},
2533
        {"fsDebugFlag", &fsDebugFlag},     {"udfDebugFlag", &udfDebugFlag},
2534
        {"smaDebugFlag", &smaDebugFlag},   {"idxDebugFlag", &idxDebugFlag},
2535
        {"tdbDebugFlag", &tdbDebugFlag},   {"tmrDebugFlag", &tmrDebugFlag},
2536
        {"uDebugFlag", &uDebugFlag},       {"smaDebugFlag", &smaDebugFlag},
2537
        {"rpcDebugFlag", &rpcDebugFlag},   {"qDebugFlag", &qDebugFlag},
2538
        {"metaDebugFlag", &metaDebugFlag}, {"stDebugFlag", &stDebugFlag},
2539
        {"sndDebugFlag", &sndDebugFlag},   {"tqClientDebugFlag", &tqClientDebugFlag},
2540
    };
2541

2542
    static OptionNameAndVar options[] = {{"audit", &tsEnableAudit},
2543
                                         {"asynclog", &tsAsyncLog},
2544
                                         {"disableStream", &tsDisableStream},
2545
                                         {"enableWhiteList", &tsEnableWhiteList},
2546
                                         {"statusInterval", &tsStatusInterval},
2547
                                         {"telemetryReporting", &tsEnableTelem},
2548
                                         {"monitor", &tsEnableMonitor},
2549
                                         {"monitorInterval", &tsMonitorInterval},
2550
                                         {"monitorComp", &tsMonitorComp},
2551
                                         {"monitorForceV2", &tsMonitorForceV2},
2552
                                         {"monitorLogProtocol", &tsMonitorLogProtocol},
2553
                                         {"monitorMaxLogs", &tsMonitorMaxLogs},
2554
                                         {"auditCreateTable", &tsEnableAuditCreateTable},
2555
                                         {"auditInterval", &tsAuditInterval},
2556
                                         {"slowLogThreshold", &tsSlowLogThreshold},
2557
                                         {"compressMsgSize", &tsCompressMsgSize},
2558
                                         {"compressor", &tsCompressor},
2559
                                         {"dPrecision", &tsDPrecision},
2560
                                         {"fPrecision", &tsFPrecision},
2561
                                         {"maxRange", &tsMaxRange},
2562
                                         {"maxTsmaNum", &tsMaxTsmaNum},
2563
                                         {"queryRsmaTolerance", &tsQueryRsmaTolerance},
2564
                                         {"uptimeInterval", &tsUptimeInterval},
2565

2566
                                         {"slowLogMaxLen", &tsSlowLogMaxLen},
2567
                                         {"slowLogScope", &tsSlowLogScope},
2568
                                         {"slowLogExceptDb", &tsSlowLogExceptDb},
2569

2570
                                         {"mndSdbWriteDelta", &tsMndSdbWriteDelta},
2571
                                         {"minDiskFreeSize", &tsMinDiskFreeSize},
2572
                                         {"randErrorChance", &tsRandErrChance},
2573
                                         {"randErrorDivisor", &tsRandErrDivisor},
2574
                                         {"randErrorScope", &tsRandErrScope},
2575
                                         {"syncLogBufferMemoryAllowed", &tsLogBufferMemoryAllowed},
2576
                                         {"syncHeartbeatInterval", &tsHeartbeatInterval},
2577
                                         {"syncHeartbeatTimeout", &tsHeartbeatTimeout},
2578
                                         {"syncSnapReplMaxWaitN", &tsSnapReplMaxWaitN},
2579
                                         {"walFsyncDataSizeLimit", &tsWalFsyncDataSizeLimit},
2580

2581
                                         {"numOfCores", &tsNumOfCores},
2582

2583
                                         {"enableCoreFile", &tsEnableCoreFile},
2584

2585
                                         {"telemetryInterval", &tsTelemInterval},
2586

2587
                                         {"cacheLazyLoadThreshold", &tsCacheLazyLoadThreshold},
2588
                                         {"checkpointInterval", &tsStreamCheckpointInterval},
2589
                                         {"concurrentCheckpoint", &tsMaxConcurrentCheckpoint},
2590

2591
                                         {"retentionSpeedLimitMB", &tsRetentionSpeedLimitMB},
2592
                                         {"ttlChangeOnWrite", &tsTtlChangeOnWrite},
2593

2594
                                         {"logKeepDays", &tsLogKeepDays},
2595
                                         {"maxStreamBackendCache", &tsMaxStreamBackendCache},
2596
                                         {"mqRebalanceInterval", &tsMqRebalanceInterval},
2597
                                         {"numOfLogLines", &tsNumOfLogLines},
2598
                                         {"queryRspPolicy", &tsQueryRspPolicy},
2599
                                         {"timeseriesThreshold", &tsTimeSeriesThreshold},
2600
                                         {"tmqMaxTopicNum", &tmqMaxTopicNum},
2601
                                         {"tmqRowSize", &tmqRowSize},
2602
                                         {"transPullupInterval", &tsTransPullupInterval},
2603
                                         {"compactPullupInterval", &tsCompactPullupInterval},
2604
                                         {"trimVDbIntervalSec", &tsTrimVDbIntervalSec},
2605
                                         {"ttlBatchDropNum", &tsTtlBatchDropNum},
2606
                                         {"ttlFlushThreshold", &tsTtlFlushThreshold},
2607
                                         {"ttlPushInterval", &tsTtlPushIntervalSec},
2608
                                         {"ttlUnit", &tsTtlUnit},
2609
                                         {"s3MigrateIntervalSec", &tsS3MigrateIntervalSec},
2610
                                         {"s3MigrateEnabled", &tsS3MigrateEnabled},
2611
                                         //{"s3BlockSize", &tsS3BlockSize},
2612
                                         {"s3BlockCacheSize", &tsS3BlockCacheSize},
2613
                                         {"s3PageCacheSize", &tsS3PageCacheSize},
2614
                                         {"s3UploadDelaySec", &tsS3UploadDelaySec},
2615
                                         {"mndLogRetention", &tsMndLogRetention},
2616
                                         {"supportVnodes", &tsNumOfSupportVnodes},
2617
                                         {"experimental", &tsExperimental},
2618

2619
                                         {"numOfRpcSessions", &tsNumOfRpcSessions},
2620
                                         {"shellActivityTimer", &tsShellActivityTimer},
2621
                                         {"readTimeout", &tsReadTimeout},
2622
                                         {"safetyCheckLevel", &tsSafetyCheckLevel},
2623
                                         {"bypassFlag", &tsBypassFlag},
2624
                                         {"arbHeartBeatIntervalSec", &tsArbHeartBeatIntervalSec},
2625
                                         {"arbCheckSyncIntervalSec", &tsArbCheckSyncIntervalSec},
2626
                                         {"arbSetAssignedTimeoutSec", &tsArbSetAssignedTimeoutSec},
2627
                                         {"queryNoFetchTimeoutSec", &tsQueryNoFetchTimeoutSec},
2628
                                         {"enableStrongPassword", &tsEnableStrongPassword}};
2629

2630
    if ((code = taosCfgSetOption(debugOptions, tListLen(debugOptions), pItem, true)) != TSDB_CODE_SUCCESS) {
×
2631
      code = taosCfgSetOption(options, tListLen(options), pItem, false);
×
2632
    }
2633
  }
2634

2635
_exit:
×
2636
  cfgUnLock(pCfg);
3✔
2637
  TAOS_RETURN(code);
3✔
2638
}
2639

2640
static int32_t taosCfgDynamicOptionsForClient(SConfig *pCfg, const char *name) {
22✔
2641
  int32_t code = TSDB_CODE_SUCCESS;
22✔
2642
  int32_t lino = 0;
22✔
2643

2644
  if (strcasecmp("charset", name) == 0 || strcasecmp("timezone", name) == 0) {
22✔
2645
    TAOS_RETURN(TSDB_CODE_SUCCESS);
2✔
2646
  }
2647

2648
  cfgLock(pCfg);
20✔
2649

2650
  SConfigItem *pItem = cfgGetItem(pCfg, name);
20✔
2651
  if ((pItem == NULL) || pItem->dynScope == CFG_DYN_SERVER) {
20✔
2652
    uError("failed to config:%s, not support", name);
×
2653
    code = TSDB_CODE_INVALID_CFG;
×
2654
    goto _out;
×
2655
  }
2656

2657
  bool matched = false;
20✔
2658

2659
  int32_t len = strlen(name);
20✔
2660
  char    lowcaseName[CFG_NAME_MAX_LEN + 1] = {0};
20✔
2661
  (void)strntolower(lowcaseName, name, TMIN(CFG_NAME_MAX_LEN, len));
20✔
2662

2663
  switch (lowcaseName[0]) {
20✔
2664
    case 'd': {
2✔
2665
      if (strcasecmp("debugFlag", name) == 0) {
2✔
2666
        code = taosSetAllDebugFlag(pCfg, pItem->i32);
2✔
2667
        matched = true;
2✔
2668
      }
2669
      break;
2✔
2670
    }
2671
    case 'e': {
×
2672
      if (strcasecmp("enableCoreFile", name) == 0) {
×
2673
        tsEnableCoreFile = pItem->bval;
×
2674
        taosSetCoreDump(tsEnableCoreFile);
×
2675
        uInfo("%s set to %d", name, tsEnableCoreFile);
×
2676
        matched = true;
×
2677
      }
2678
      break;
×
2679
    }
2680
    case 'f': {
2✔
2681
      if (strcasecmp("fqdn", name) == 0) {
2✔
2682
        SConfigItem *pFqdnItem = cfgGetItem(pCfg, "fqdn");
1✔
2683
        SConfigItem *pServerPortItem = cfgGetItem(pCfg, "serverPort");
1✔
2684
        SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp");
1✔
2685
        if (pFqdnItem == NULL || pServerPortItem == NULL || pFirstEpItem == NULL) {
1✔
2686
          uError("failed to get fqdn or serverPort or firstEp from cfg");
×
2687
          code = TSDB_CODE_CFG_NOT_FOUND;
×
2688
          goto _out;
×
2689
        }
2690

2691
        tstrncpy(tsLocalFqdn, pFqdnItem->str, TSDB_FQDN_LEN);
1✔
2692
        tsServerPort = (uint16_t)pServerPortItem->i32;
1✔
2693
        (void)snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
1✔
2694

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

2698
        SEp firstEp = {0};
1✔
2699
        TAOS_CHECK_GOTO(
1✔
2700
            taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp), &lino,
2701
            _out);
2702
        (void)snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port);
1✔
2703

2704
        TAOS_CHECK_GOTO(cfgSetItem(pCfg, "firstEp", tsFirst, pFirstEpItem->stype, false), &lino, _out);
1✔
2705
        uInfo("localEp set to '%s', tsFirst set to '%s'", tsLocalEp, tsFirst);
1✔
2706
        matched = true;
1✔
2707
      } else if (strcasecmp("firstEp", name) == 0) {
1✔
2708
        SConfigItem *pFqdnItem = cfgGetItem(pCfg, "fqdn");
1✔
2709
        SConfigItem *pServerPortItem = cfgGetItem(pCfg, "serverPort");
1✔
2710
        SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp");
1✔
2711
        if (pFqdnItem == NULL || pServerPortItem == NULL || pFirstEpItem == NULL) {
1✔
2712
          uError("failed to get fqdn or serverPort or firstEp from cfg");
×
2713
          code = TSDB_CODE_CFG_NOT_FOUND;
×
2714
          goto _out;
×
2715
        }
2716

2717
        tstrncpy(tsLocalFqdn, pFqdnItem->str, TSDB_FQDN_LEN);
1✔
2718
        tsServerPort = (uint16_t)pServerPortItem->i32;
1✔
2719
        (void)snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
1✔
2720

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

2724
        SEp firstEp = {0};
1✔
2725
        TAOS_CHECK_GOTO(
1✔
2726
            taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp), &lino,
2727
            _out);
2728
        (void)snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port);
1✔
2729

2730
        TAOS_CHECK_GOTO(cfgSetItem(pCfg, "firstEp", tsFirst, pFirstEpItem->stype, false), &lino, _out);
1✔
2731
        uInfo("localEp set to '%s', tsFirst set to '%s'", tsLocalEp, tsFirst);
1✔
2732
        matched = true;
1✔
2733
      }
2734
      break;
2✔
2735
    }
2736
    case 'l': {
×
2737
      if (strcasecmp("locale", name) == 0) {
×
2738
        SConfigItem *pLocaleItem = cfgGetItem(pCfg, "locale");
×
2739
        if (pLocaleItem == NULL) {
×
2740
          uError("failed to get locale from cfg");
×
2741
          code = TSDB_CODE_CFG_NOT_FOUND;
×
2742
          goto _out;
×
2743
        }
2744

2745
        const char *locale = pLocaleItem->str;
×
2746
        TAOS_CHECK_GOTO(taosSetSystemLocale(locale), &lino, _out);
×
2747
        uInfo("locale set to '%s'", locale);
×
2748
        matched = true;
×
2749
      }
2750
      break;
×
2751
    }
2752
    case 'm': {
3✔
2753
      if (strcasecmp("metaCacheMaxSize", name) == 0) {
3✔
2754
        atomic_store_32(&tsMetaCacheMaxSize, pItem->i32);
1✔
2755
        uInfo("%s set to %d", name, atomic_load_32(&tsMetaCacheMaxSize));
1✔
2756
        matched = true;
1✔
2757
      } else if (strcasecmp("minimalTmpDirGB", name) == 0) {
2✔
2758
        tsTempSpace.reserved = (int64_t)(((double)pItem->fval) * 1024 * 1024 * 1024);
1✔
2759
        uInfo("%s set to %" PRId64, name, tsTempSpace.reserved);
1✔
2760
        matched = true;
1✔
2761
      } else if (strcasecmp("minimalLogDirGB", name) == 0) {
1✔
2762
        tsLogSpace.reserved = (int64_t)(((double)pItem->fval) * 1024 * 1024 * 1024);
1✔
2763
        uInfo("%s set to %" PRId64, name, tsLogSpace.reserved);
1✔
2764
        matched = true;
1✔
2765
      }
2766
      break;
3✔
2767
    }
2768
    case 's': {
6✔
2769
      if (strcasecmp("secondEp", name) == 0) {
6✔
2770
        SEp secondEp = {0};
1✔
2771
        TAOS_CHECK_GOTO(taosGetFqdnPortFromEp(strlen(pItem->str) == 0 ? tsFirst : pItem->str, &secondEp), &lino, _out);
1✔
2772
        (void)snprintf(tsSecond, sizeof(tsSecond), "%s:%u", secondEp.fqdn, secondEp.port);
1✔
2773
        TAOS_CHECK_GOTO(cfgSetItem(pCfg, "secondEp", tsSecond, pItem->stype, false), &lino, _out);
1✔
2774
        uInfo("%s set to %s", name, tsSecond);
1✔
2775
        matched = true;
1✔
2776
      } else if (strcasecmp("smlChildTableName", name) == 0) {
5✔
2777
        TAOS_CHECK_GOTO(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_TABLE_NAME_LEN), &lino, _out);
1✔
2778
        uInfo("%s set from %s to %s", name, tsSmlChildTableName, pItem->str);
1✔
2779
        tstrncpy(tsSmlChildTableName, pItem->str, TSDB_TABLE_NAME_LEN);
1✔
2780
        matched = true;
1✔
2781
      } else if (strcasecmp("smlAutoChildTableNameDelimiter", name) == 0) {
4✔
2782
        TAOS_CHECK_GOTO(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_TABLE_NAME_LEN), &lino, _out);
1✔
2783
        uInfo("%s set from %s to %s", name, tsSmlAutoChildTableNameDelimiter, pItem->str);
1✔
2784
        tstrncpy(tsSmlAutoChildTableNameDelimiter, pItem->str, TSDB_TABLE_NAME_LEN);
1✔
2785
        matched = true;
1✔
2786
      } else if (strcasecmp("smlTagName", name) == 0) {
3✔
2787
        TAOS_CHECK_GOTO(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_COL_NAME_LEN), &lino, _out);
1✔
2788
        uInfo("%s set from %s to %s", name, tsSmlTagName, pItem->str);
1✔
2789
        tstrncpy(tsSmlTagName, pItem->str, TSDB_COL_NAME_LEN);
1✔
2790
        matched = true;
1✔
2791
      } else if (strcasecmp("smlTsDefaultName", name) == 0) {
2✔
2792
        TAOS_CHECK_GOTO(taosCheckCfgStrValueLen(pItem->name, pItem->str, TSDB_COL_NAME_LEN), &lino, _out);
1✔
2793
        uInfo("%s set from %s to %s", name, tsSmlTsDefaultName, pItem->str);
1✔
2794
        tstrncpy(tsSmlTsDefaultName, pItem->str, TSDB_COL_NAME_LEN);
1✔
2795
        matched = true;
1✔
2796
      } else if (strcasecmp("serverPort", name) == 0) {
1✔
2797
        SConfigItem *pFqdnItem = cfgGetItem(pCfg, "fqdn");
1✔
2798
        SConfigItem *pServerPortItem = cfgGetItem(pCfg, "serverPort");
1✔
2799
        SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp");
1✔
2800
        if (pFqdnItem == NULL || pServerPortItem == NULL || pFirstEpItem == NULL) {
1✔
2801
          uError("failed to get fqdn or serverPort or firstEp from cfg");
×
2802
          code = TSDB_CODE_CFG_NOT_FOUND;
×
2803
          goto _out;
×
2804
        }
2805

2806
        TAOS_CHECK_GOTO(taosCheckCfgStrValueLen(pFqdnItem->name, pFqdnItem->str, TSDB_FQDN_LEN), &lino, _out);
1✔
2807
        tstrncpy(tsLocalFqdn, pFqdnItem->str, TSDB_FQDN_LEN);
1✔
2808
        tsServerPort = (uint16_t)pServerPortItem->i32;
1✔
2809
        (void)snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
1✔
2810

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

2814
        SEp firstEp = {0};
1✔
2815
        TAOS_CHECK_GOTO(
1✔
2816
            taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp), &lino,
2817
            _out);
2818
        (void)snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port);
1✔
2819

2820
        TAOS_CHECK_GOTO(cfgSetItem(pCfg, "firstEp", tsFirst, pFirstEpItem->stype, false), &lino, _out);
1✔
2821
        uInfo("localEp set to '%s', tsFirst set to '%s'", tsLocalEp, tsFirst);
1✔
2822
        matched = true;
1✔
2823
      }
2824
      break;
6✔
2825
    }
2826
    case 't': {
×
2827
      if (strcasecmp("tempDir", name) == 0) {
×
2828
        TAOS_CHECK_GOTO(taosCheckCfgStrValueLen(pItem->name, pItem->str, PATH_MAX), &lino, _out);
×
2829
        uInfo("%s set from %s to %s", name, tsTempDir, pItem->str);
×
2830
        tstrncpy(tsTempDir, pItem->str, PATH_MAX);
×
2831
        TAOS_CHECK_GOTO(taosExpandDir(tsTempDir, tsTempDir, PATH_MAX), &lino, _out);
×
2832
        if (taosMulMkDir(tsTempDir) != 0) {
×
2833
          code = TAOS_SYSTEM_ERROR(ERRNO);
×
2834
          uError("failed to create tempDir:%s since %s", tsTempDir, tstrerror(code));
×
2835
          goto _out;
×
2836
        }
2837
        matched = true;
×
2838
      }
2839
      break;
×
2840
    }
2841
    default:
7✔
2842
      code = TSDB_CODE_CFG_NOT_FOUND;
7✔
2843
      break;
7✔
2844
  }
2845

2846
  if (matched) goto _out;
20✔
2847

2848
  {  //  'bool/int32_t/int64_t/float/double' variables with general modification function
2849
    static OptionNameAndVar debugOptions[] = {
2850
        {"cDebugFlag", &cDebugFlag},     {"dDebugFlag", &dDebugFlag},     {"fsDebugFlag", &fsDebugFlag},
2851
        {"idxDebugFlag", &idxDebugFlag}, {"jniDebugFlag", &jniDebugFlag}, {"qDebugFlag", &qDebugFlag},
2852
        {"rpcDebugFlag", &rpcDebugFlag}, {"smaDebugFlag", &smaDebugFlag}, {"tmrDebugFlag", &tmrDebugFlag},
2853
        {"uDebugFlag", &uDebugFlag},     {"simDebugFlag", &simDebugFlag},
2854
    };
2855

2856
    static OptionNameAndVar options[] = {{"asyncLog", &tsAsyncLog},
2857
                                         {"compressMsgSize", &tsCompressMsgSize},
2858
                                         {"countAlwaysReturnValue", &tsCountAlwaysReturnValue},
2859
                                         {"crashReporting", &tsEnableCrashReport},
2860
                                         {"enableQueryHb", &tsEnableQueryHb},
2861
                                         {"keepColumnName", &tsKeepColumnName},
2862
                                         {"logKeepDays", &tsLogKeepDays},
2863
                                         {"maxInsertBatchRows", &tsMaxInsertBatchRows},
2864
                                         {"minSlidingTime", &tsMinSlidingTime},
2865
                                         {"minIntervalTime", &tsMinIntervalTime},
2866
                                         {"numOfLogLines", &tsNumOfLogLines},
2867
                                         {"querySmaOptimize", &tsQuerySmaOptimize},
2868
                                         {"queryPolicy", &tsQueryPolicy},
2869
                                         {"queryTableNotExistAsEmpty", &tsQueryTbNotExistAsEmpty},
2870
                                         {"queryPlannerTrace", &tsQueryPlannerTrace},
2871
                                         {"queryNodeChunkSize", &tsQueryNodeChunkSize},
2872
                                         {"queryUseNodeAllocator", &tsQueryUseNodeAllocator},
2873
                                         {"smlDot2Underline", &tsSmlDot2Underline},
2874
                                         {"useAdapter", &tsUseAdapter},
2875
                                         {"multiResultFunctionStarReturnTags", &tsMultiResultFunctionStarReturnTags},
2876
                                         {"maxTsmaCalcDelay", &tsMaxTsmaCalcDelay},
2877
                                         {"tsmaDataDeleteMark", &tsmaDataDeleteMark},
2878
                                         {"numOfRpcSessions", &tsNumOfRpcSessions},
2879
                                         {"bypassFlag", &tsBypassFlag},
2880
                                         {"safetyCheckLevel", &tsSafetyCheckLevel},
2881
                                         {"streamCoverage", &tsStreamCoverage},
2882
                                         {"compareAsStrInGreatest", &tsCompareAsStrInGreatest}};
2883

2884
    if ((code = taosCfgSetOption(debugOptions, tListLen(debugOptions), pItem, true)) != TSDB_CODE_SUCCESS) {
7✔
2885
      code = taosCfgSetOption(options, tListLen(options), pItem, false);
7✔
2886
    }
2887
  }
2888

2889
_out:
×
2890
  if (TSDB_CODE_SUCCESS != code) {
20✔
2891
    uError("failed to set option:%s, lino:%d, since:%s", name, lino, tstrerror(code));
×
2892
  }
2893

2894
  cfgUnLock(pCfg);
20✔
2895
  TAOS_RETURN(code);
20✔
2896
}
2897

2898
int32_t taosCfgDynamicOptions(SConfig *pCfg, const char *name, bool forServer) {
25✔
2899
  if (forServer) {
25✔
2900
    return taosCfgDynamicOptionsForServer(pCfg, name);
3✔
2901
  } else {
2902
    return taosCfgDynamicOptionsForClient(pCfg, name);
22✔
2903
  }
2904
}
2905

2906
int32_t taosSetDebugFlag(int32_t *pFlagPtr, const char *flagName, int32_t flagVal) {
1,470✔
2907
  SConfigItem *pItem = NULL;
1,470✔
2908
  TAOS_CHECK_GET_CFG_ITEM(tsCfg, pItem, flagName);
1,470✔
2909
  pItem->i32 = flagVal;
694✔
2910
  if (pFlagPtr != NULL) {
694✔
2911
    *pFlagPtr = flagVal;
694✔
2912
  }
2913
  TAOS_RETURN(TSDB_CODE_SUCCESS);
694✔
2914
}
2915

2916
static int taosLogVarComp(void const *lp, void const *rp) {
94✔
2917
  SLogVar *lpVar = (SLogVar *)lp;
94✔
2918
  SLogVar *rpVar = (SLogVar *)rp;
94✔
2919
  return taosStrcasecmp(lpVar->name, rpVar->name);
94✔
2920
}
2921

2922
static void taosCheckAndSetDebugFlag(int32_t *pFlagPtr, char *name, int32_t flag, SArray *noNeedToSetVars) {
1,474✔
2923
  if (noNeedToSetVars != NULL && taosArraySearch(noNeedToSetVars, name, taosLogVarComp, TD_EQ) != NULL) {
1,474✔
2924
    return;
4✔
2925
  }
2926
  int32_t code = 0;
1,470✔
2927
  if ((code = taosSetDebugFlag(pFlagPtr, name, flag)) != 0) {
1,470✔
2928
    if (code != TSDB_CODE_CFG_NOT_FOUND) {
776✔
2929
      uError("failed to set flag %s to %d, since:%s", name, flag, tstrerror(code));
×
2930
    } else {
2931
      uTrace("failed to set flag %s to %d, since:%s", name, flag, tstrerror(code));
776✔
2932
    }
2933
  }
2934
  return;
1,470✔
2935
}
2936

2937
int32_t taosSetGlobalDebugFlag(int32_t flag) { return taosSetAllDebugFlag(tsCfg, flag); }
×
2938

2939
// NOTE: set all command does not change the tmrDebugFlag
2940
static int32_t taosSetAllDebugFlag(SConfig *pCfg, int32_t flag) {
1,145✔
2941
  if (flag < 0) TAOS_RETURN(TSDB_CODE_INVALID_PARA);
1,145✔
2942
  if (flag == 0) TAOS_RETURN(TSDB_CODE_SUCCESS);  // just ignore
1,145✔
2943

2944
  SArray      *noNeedToSetVars = NULL;
67✔
2945
  SConfigItem *pItem = NULL;
67✔
2946
  TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "debugFlag");
67✔
2947

2948
  pItem->i32 = flag;
67✔
2949
  noNeedToSetVars = pItem->array;
67✔
2950

2951
  taosCheckAndSetDebugFlag(&simDebugFlag, "simDebugFlag", flag, noNeedToSetVars);
67✔
2952
  taosCheckAndSetDebugFlag(&uDebugFlag, "uDebugFlag", flag, noNeedToSetVars);
67✔
2953
  taosCheckAndSetDebugFlag(&rpcDebugFlag, "rpcDebugFlag", flag, noNeedToSetVars);
67✔
2954
  taosCheckAndSetDebugFlag(&qDebugFlag, "qDebugFlag", flag, noNeedToSetVars);
67✔
2955

2956
  taosCheckAndSetDebugFlag(&jniDebugFlag, "jniDebugFlag", flag, noNeedToSetVars);
67✔
2957
  taosCheckAndSetDebugFlag(&cDebugFlag, "cDebugFlag", flag, noNeedToSetVars);
67✔
2958

2959
  taosCheckAndSetDebugFlag(&dDebugFlag, "dDebugFlag", flag, noNeedToSetVars);
67✔
2960
  taosCheckAndSetDebugFlag(&vDebugFlag, "vDebugFlag", flag, noNeedToSetVars);
67✔
2961
  taosCheckAndSetDebugFlag(&mDebugFlag, "mDebugFlag", flag, noNeedToSetVars);
67✔
2962
  taosCheckAndSetDebugFlag(&wDebugFlag, "wDebugFlag", flag, noNeedToSetVars);
67✔
2963
  taosCheckAndSetDebugFlag(&azDebugFlag, "azDebugFlag", flag, noNeedToSetVars);
67✔
2964
  taosCheckAndSetDebugFlag(&sDebugFlag, "sDebugFlag", flag, noNeedToSetVars);
67✔
2965
  taosCheckAndSetDebugFlag(&tsdbDebugFlag, "tsdbDebugFlag", flag, noNeedToSetVars);
67✔
2966
  taosCheckAndSetDebugFlag(&tqDebugFlag, "tqDebugFlag", flag, noNeedToSetVars);
67✔
2967
  taosCheckAndSetDebugFlag(&fsDebugFlag, "fsDebugFlag", flag, noNeedToSetVars);
67✔
2968
  taosCheckAndSetDebugFlag(&udfDebugFlag, "udfDebugFlag", flag, noNeedToSetVars);
67✔
2969
  taosCheckAndSetDebugFlag(&smaDebugFlag, "smaDebugFlag", flag, noNeedToSetVars);
67✔
2970
  taosCheckAndSetDebugFlag(&idxDebugFlag, "idxDebugFlag", flag, noNeedToSetVars);
67✔
2971
  taosCheckAndSetDebugFlag(&tdbDebugFlag, "tdbDebugFlag", flag, noNeedToSetVars);
67✔
2972
  taosCheckAndSetDebugFlag(&metaDebugFlag, "metaDebugFlag", flag, noNeedToSetVars);
67✔
2973
  taosCheckAndSetDebugFlag(&stDebugFlag, "stDebugFlag", flag, noNeedToSetVars);
67✔
2974
  taosCheckAndSetDebugFlag(&sndDebugFlag, "sndDebugFlag", flag, noNeedToSetVars);
67✔
2975

2976
  taosArrayClear(noNeedToSetVars);  // reset array
67✔
2977

2978
  uInfo("all debug flag are set to %d", flag);
67✔
2979
  TAOS_RETURN(TSDB_CODE_SUCCESS);
67✔
2980
}
2981

2982
int8_t taosGranted(int8_t type) {
1,797✔
2983
  switch (type) {
1,797✔
2984
    case TSDB_GRANT_ALL:
1,797✔
2985
      return atomic_load_8(&tsGrant) & GRANT_FLAG_ALL;
1,797✔
2986
    case TSDB_GRANT_AUDIT:
×
2987
      return atomic_load_8(&tsGrant) & GRANT_FLAG_AUDIT;
×
2988
    case TSDB_GRANT_VIEW:
×
2989
      return atomic_load_8(&tsGrant) & GRANT_FLAG_VIEW;
×
2990
    default:
×
2991
      uWarn("undefined grant type:%" PRIi8, type);
×
2992
      break;
×
2993
  }
2994
  return 0;
×
2995
}
2996

2997
int32_t globalConfigSerialize(int32_t version, SArray *array, char **serialized) {
86✔
2998
  char   buf[30];
2999
  cJSON *json = cJSON_CreateObject();
86✔
3000
  if (json == NULL) goto _exit;
86✔
3001
  if (cJSON_AddNumberToObject(json, "file_version", GLOBAL_CONFIG_FILE_VERSION) == NULL) goto _exit;
86✔
3002
  if (cJSON_AddNumberToObject(json, "version", version) == NULL) goto _exit;
86✔
3003
  int sz = taosArrayGetSize(array);
86✔
3004

3005
  cJSON *cField = cJSON_CreateObject();
86✔
3006
  if (cField == NULL) goto _exit;
86✔
3007

3008
  if (!cJSON_AddItemToObject(json, "configs", cField)) goto _exit;
86✔
3009

3010
  // cjson only support int32_t or double
3011
  // string are used to prohibit the loss of precision
3012
  for (int i = 0; i < sz; i++) {
4,803✔
3013
    SConfigItem *item = (SConfigItem *)taosArrayGet(array, i);
4,717✔
3014
    switch (item->dtype) {
4,717✔
3015
      {
3016
        case CFG_DTYPE_NONE:
×
3017
          break;
×
3018
        case CFG_DTYPE_BOOL:
1,007✔
3019
          if (cJSON_AddBoolToObject(cField, item->name, item->bval) == NULL) goto _exit;
1,007✔
3020
          break;
1,007✔
3021
        case CFG_DTYPE_INT32:
2,438✔
3022
          if (cJSON_AddNumberToObject(cField, item->name, item->i32) == NULL) goto _exit;
2,438✔
3023
          break;
2,438✔
3024
        case CFG_DTYPE_INT64:
424✔
3025
          (void)sprintf(buf, "%" PRId64, item->i64);
424✔
3026
          if (cJSON_AddStringToObject(cField, item->name, buf) == NULL) goto _exit;
424✔
3027
          break;
424✔
3028
        case CFG_DTYPE_FLOAT:
159✔
3029
        case CFG_DTYPE_DOUBLE:
3030
          (void)sprintf(buf, "%f", item->fval);
159✔
3031
          if (cJSON_AddStringToObject(cField, item->name, buf) == NULL) goto _exit;
159✔
3032
          break;
159✔
3033
        case CFG_DTYPE_STRING:
689✔
3034
        case CFG_DTYPE_DIR:
3035
        case CFG_DTYPE_LOCALE:
3036
        case CFG_DTYPE_CHARSET:
3037
        case CFG_DTYPE_TIMEZONE:
3038
          if (cJSON_AddStringToObject(cField, item->name, item->str) == NULL) goto _exit;
689✔
3039
          break;
689✔
3040
      }
3041
    }
3042
  }
4,717✔
3043
  char *pSerialized = tjsonToString(json);
86✔
3044
_exit:
86✔
3045
  if (terrno != TSDB_CODE_SUCCESS) {
86✔
3046
    uError("failed to serialize global config since %s", tstrerror(terrno));
25✔
3047
  }
3048
  cJSON_Delete(json);
86✔
3049
  *serialized = pSerialized;
86✔
3050
  return terrno;
86✔
3051
}
3052

3053
int32_t localConfigSerialize(SArray *array, char **serialized) {
65✔
3054
  char   buf[30];
3055
  cJSON *json = cJSON_CreateObject();
65✔
3056
  if (json == NULL) goto _exit;
65✔
3057

3058
  int sz = taosArrayGetSize(array);
65✔
3059

3060
  cJSON *cField = cJSON_CreateObject();
65✔
3061
  if (cField == NULL) goto _exit;
65✔
3062
  if (cJSON_AddNumberToObject(json, "file_version", LOCAL_CONFIG_FILE_VERSION) == NULL) goto _exit;
65✔
3063
  if (!cJSON_AddItemToObject(json, "configs", cField)) goto _exit;
65✔
3064

3065
  // cjson only support int32_t or double
3066
  // string are used to prohibit the loss of precision
3067
  for (int i = 0; i < sz; i++) {
8,450✔
3068
    SConfigItem *item = (SConfigItem *)taosArrayGet(array, i);
8,385✔
3069
    if (strcasecmp(item->name, "dataDir") == 0) {
8,385✔
3070
      int32_t sz = taosArrayGetSize(item->array);
65✔
3071
      cJSON  *dataDirs = cJSON_CreateArray();
65✔
3072
      if (!cJSON_AddItemToObject(cField, item->name, dataDirs)) {
65✔
3073
        uError("failed to serialize global config since %s", tstrerror(terrno));
×
3074
        goto _exit;
×
3075
      }
3076
      for (int j = 0; j < sz; j++) {
130✔
3077
        SDiskCfg *disk = (SDiskCfg *)taosArrayGet(item->array, j);
65✔
3078
        cJSON    *dataDir = cJSON_CreateObject();
65✔
3079
        if (dataDir == NULL) goto _exit;
65✔
3080
        if (!cJSON_AddItemToArray(dataDirs, dataDir)) {
65✔
3081
          uError("failed to serialize global config since %s", tstrerror(terrno));
×
3082
          goto _exit;
×
3083
        }
3084
        if (cJSON_AddStringToObject(dataDir, "dir", disk->dir) == NULL) goto _exit;
65✔
3085
        if (cJSON_AddNumberToObject(dataDir, "level", disk->level) == NULL) goto _exit;
65✔
3086
        if (disk->diskId == 0) {
65✔
3087
          if (taosGetFileDiskID(disk->dir, &disk->diskId) != 0) {
62✔
3088
            uError("failed to get disk id for %s", disk->dir);
×
3089
            goto _exit;
×
3090
          }
3091
        }
3092
        (void)sprintf(buf, "%" PRId64, disk->diskId);
65✔
3093
        if (cJSON_AddStringToObject(dataDir, "disk_id", buf) == NULL) goto _exit;
65✔
3094
        if (cJSON_AddNumberToObject(dataDir, "primary", disk->primary) == NULL) goto _exit;
65✔
3095
        if (cJSON_AddNumberToObject(dataDir, "disable", disk->disable) == NULL) goto _exit;
65✔
3096
      }
3097
      continue;
65✔
3098
    }
3099
    if (strcasecmp(item->name, "forceReadConfig") == 0) {
8,320✔
3100
      continue;
65✔
3101
    }
3102
    switch (item->dtype) {
8,255✔
3103
      {
3104
        case CFG_DTYPE_NONE:
×
3105
          break;
×
3106
        case CFG_DTYPE_BOOL:
1,235✔
3107
          if (cJSON_AddBoolToObject(cField, item->name, item->bval) == NULL) goto _exit;
1,235✔
3108
          break;
1,235✔
3109
        case CFG_DTYPE_INT32:
4,550✔
3110
          if (cJSON_AddNumberToObject(cField, item->name, item->i32) == NULL) goto _exit;
4,550✔
3111
          break;
4,550✔
3112
        case CFG_DTYPE_INT64:
455✔
3113
          (void)sprintf(buf, "%" PRId64, item->i64);
455✔
3114
          if (cJSON_AddStringToObject(cField, item->name, buf) == NULL) goto _exit;
455✔
3115
          break;
455✔
3116
        case CFG_DTYPE_FLOAT:
325✔
3117
        case CFG_DTYPE_DOUBLE:
3118
          (void)sprintf(buf, "%f", item->fval);
325✔
3119
          if (cJSON_AddStringToObject(cField, item->name, buf) == NULL) goto _exit;
325✔
3120
          break;
325✔
3121
        case CFG_DTYPE_STRING:
1,690✔
3122
        case CFG_DTYPE_DIR:
3123
        case CFG_DTYPE_LOCALE:
3124
        case CFG_DTYPE_CHARSET:
3125
        case CFG_DTYPE_TIMEZONE:
3126
          if (cJSON_AddStringToObject(cField, item->name, item->str) == NULL) goto _exit;
1,690✔
3127
          break;
1,690✔
3128
      }
3129
    }
3130
  }
8,385✔
3131
  char *pSerialized = tjsonToString(json);
65✔
3132
_exit:
65✔
3133
  if (terrno != TSDB_CODE_SUCCESS) {
65✔
3134
    uError("failed to serialize local config since %s", tstrerror(terrno));
×
3135
  }
3136
  cJSON_Delete(json);
65✔
3137
  *serialized = pSerialized;
65✔
3138
  return terrno;
65✔
3139
}
3140

3141
int32_t taosPersistGlobalConfig(SArray *array, const char *path, int32_t version) {
86✔
3142
  int32_t   code = 0;
86✔
3143
  int32_t   lino = 0;
86✔
3144
  char     *buffer = NULL;
86✔
3145
  TdFilePtr pFile = NULL;
86✔
3146
  char     *serialized = NULL;
86✔
3147
  char      filepath[CONFIG_FILE_LEN] = {0};
86✔
3148
  char      filename[CONFIG_FILE_LEN] = {0};
86✔
3149
  snprintf(filepath, sizeof(filepath), "%s%sconfig", path, TD_DIRSEP);
86✔
3150
  snprintf(filename, sizeof(filename), "%s%sconfig%sglobal.json", path, TD_DIRSEP, TD_DIRSEP);
86✔
3151

3152
  TAOS_CHECK_GOTO(taosMkDir(filepath), &lino, _exit);
86✔
3153

3154
  TdFilePtr pConfigFile =
86✔
3155
      taosOpenFile(filename, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_TRUNC | TD_FILE_WRITE_THROUGH);
86✔
3156

3157
  if (pConfigFile == NULL) {
86✔
3158
    code = TAOS_SYSTEM_ERROR(ERRNO);
×
3159
    uError("failed to open file:%s since %s", filename, tstrerror(code));
×
3160
    TAOS_RETURN(code);
×
3161
  }
3162
  TAOS_CHECK_GOTO(globalConfigSerialize(version, array, &serialized), &lino, _exit);
86✔
3163

3164
  if (taosWriteFile(pConfigFile, serialized, strlen(serialized)) < 0) {
61✔
3165
    lino = __LINE__;
×
3166
    code = TAOS_SYSTEM_ERROR(ERRNO);
×
3167
    uError("failed to write file:%s since %s", filename, tstrerror(code));
×
3168
    goto _exit;
×
3169
  }
3170

3171
_exit:
61✔
3172
  if (code != TSDB_CODE_SUCCESS) {
86✔
3173
    uError("failed to persist global config at line:%d, since %s", lino, tstrerror(code));
25✔
3174
  }
3175
  (void)taosCloseFile(&pConfigFile);
86✔
3176
  taosMemoryFree(serialized);
86✔
3177
  return code;
86✔
3178
}
3179

3180
int32_t taosPersistLocalConfig(const char *path) {
65✔
3181
  int32_t   code = 0;
65✔
3182
  int32_t   lino = 0;
65✔
3183
  char     *buffer = NULL;
65✔
3184
  TdFilePtr pFile = NULL;
65✔
3185
  char     *serialized = NULL;
65✔
3186
  char      filepath[CONFIG_FILE_LEN] = {0};
65✔
3187
  char      filename[CONFIG_FILE_LEN] = {0};
65✔
3188
  snprintf(filepath, sizeof(filepath), "%s%sconfig", path, TD_DIRSEP);
65✔
3189
  snprintf(filename, sizeof(filename), "%s%sconfig%slocal.json", path, TD_DIRSEP, TD_DIRSEP);
65✔
3190

3191
  // TODO(beryl) need to check if the file is existed
3192
  TAOS_CHECK_GOTO(taosMkDir(filepath), &lino, _exit);
65✔
3193

3194
  TdFilePtr pConfigFile =
65✔
3195
      taosOpenFile(filename, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_TRUNC | TD_FILE_WRITE_THROUGH);
65✔
3196

3197
  if (pConfigFile == NULL) {
65✔
3198
    code = TAOS_SYSTEM_ERROR(terrno);
×
3199
    uError("failed to open file:%s since %s", filename, tstrerror(code));
×
3200
    TAOS_RETURN(code);
×
3201
  }
3202

3203
  TAOS_CHECK_GOTO(localConfigSerialize(taosGetLocalCfg(tsCfg), &serialized), &lino, _exit);
65✔
3204
  if (taosWriteFile(pConfigFile, serialized, strlen(serialized)) < 0) {
65✔
3205
    lino = __LINE__;
×
3206
    code = TAOS_SYSTEM_ERROR(terrno);
×
3207
    uError("failed to write file:%s since %s", filename, tstrerror(code));
×
3208
    goto _exit;
×
3209
  }
3210

3211
_exit:
65✔
3212
  if (code != TSDB_CODE_SUCCESS) {
65✔
3213
    uError("failed to persist local config at line:%d, since %s", lino, tstrerror(code));
×
3214
  }
3215
  (void)taosCloseFile(&pConfigFile);
65✔
3216
  taosMemoryFree(serialized);
65✔
3217
  return code;
65✔
3218
}
3219

3220
int32_t tSerializeSConfigArray(SEncoder *pEncoder, SArray *array) {
192✔
3221
  int32_t code = 0;
192✔
3222
  int32_t lino = 0;
192✔
3223
  int32_t sz = taosArrayGetSize(array);
192✔
3224
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, sz));
192✔
3225
  for (int i = 0; i < sz; i++) {
9,804✔
3226
    SConfigItem *item = (SConfigItem *)taosArrayGet(array, i);
9,612✔
3227
    TAOS_CHECK_EXIT(tEncodeCStr(pEncoder, item->name));
19,224✔
3228
    TAOS_CHECK_EXIT(tEncodeI32(pEncoder, item->dtype));
19,224✔
3229
    switch (item->dtype) {
9,612✔
3230
      {
3231
        case CFG_DTYPE_NONE:
×
3232
          break;
×
3233
        case CFG_DTYPE_BOOL:
2,052✔
3234
          TAOS_CHECK_EXIT(tEncodeBool(pEncoder, item->bval));
2,052✔
3235
          break;
2,052✔
3236
        case CFG_DTYPE_INT32:
4,968✔
3237
          TAOS_CHECK_EXIT(tEncodeI32(pEncoder, item->i32));
9,936✔
3238
          break;
4,968✔
3239
        case CFG_DTYPE_INT64:
864✔
3240
          TAOS_CHECK_EXIT(tEncodeI64(pEncoder, item->i64));
1,728✔
3241
          break;
864✔
3242
        case CFG_DTYPE_FLOAT:
324✔
3243
        case CFG_DTYPE_DOUBLE:
3244
          TAOS_CHECK_EXIT(tEncodeFloat(pEncoder, item->fval));
648✔
3245
          break;
324✔
3246
        case CFG_DTYPE_STRING:
1,404✔
3247
        case CFG_DTYPE_DIR:
3248
        case CFG_DTYPE_LOCALE:
3249
        case CFG_DTYPE_CHARSET:
3250
        case CFG_DTYPE_TIMEZONE:
3251
          TAOS_CHECK_EXIT(tEncodeCStr(pEncoder, item->str));
2,808✔
3252
          break;
1,404✔
3253
      }
3254
    }
3255
  }
9,612✔
3256
_exit:
192✔
3257
  return code;
192✔
3258
}
3259

3260
int32_t tDeserializeSConfigArray(SDecoder *pDecoder, SArray *array) {
95✔
3261
  int32_t code = 0;
95✔
3262
  int32_t lino = 0;
95✔
3263
  int32_t sz = 0;
95✔
3264
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &sz));
95✔
3265
  for (int i = 0; i < sz; i++) {
4,812✔
3266
    SConfigItem item = {0};
4,717✔
3267
    TAOS_CHECK_EXIT(tDecodeCStr(pDecoder, &item.name));
4,717✔
3268
    TAOS_CHECK_EXIT(tDecodeI32(pDecoder, (int32_t *)&item.dtype));
4,717✔
3269
    switch (item.dtype) {
4,717✔
3270
      {
3271
        case CFG_DTYPE_NONE:
×
3272
          break;
×
3273
        case CFG_DTYPE_BOOL:
1,007✔
3274
          TAOS_CHECK_EXIT(tDecodeBool(pDecoder, &item.bval));
1,007✔
3275
          break;
1,007✔
3276
        case CFG_DTYPE_INT32:
2,438✔
3277
          TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &item.i32));
2,438✔
3278
          break;
2,438✔
3279
        case CFG_DTYPE_INT64:
424✔
3280
          TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &item.i64));
424✔
3281
          break;
424✔
3282
        case CFG_DTYPE_FLOAT:
159✔
3283
        case CFG_DTYPE_DOUBLE:
3284
          TAOS_CHECK_EXIT(tDecodeFloat(pDecoder, &item.fval));
159✔
3285
          break;
159✔
3286
        case CFG_DTYPE_STRING:
689✔
3287
        case CFG_DTYPE_DIR:
3288
        case CFG_DTYPE_LOCALE:
3289
        case CFG_DTYPE_CHARSET:
3290
        case CFG_DTYPE_TIMEZONE:
3291
          TAOS_CHECK_EXIT(tDecodeCStr(pDecoder, &item.str));
689✔
3292
          break;
689✔
3293
      }
3294
    }
3295
    if (taosArrayPush(array, &item) == NULL) {
9,434✔
3296
      code = terrno;
×
3297
      goto _exit;
×
3298
    }
3299
  }
3300
_exit:
95✔
3301
  if (code != TSDB_CODE_SUCCESS) {
95✔
3302
    uError("failed to deserialize SConfigItem at line:%d, since %s", lino, tstrerror(code));
×
3303
  }
3304
  return code;
95✔
3305
}
3306

3307
void printConfigNotMatch(SArray *array) {
×
3308
  uError(
×
3309
      "The global configuration parameters in the configuration file do not match those in the cluster. Please "
3310
      "turn off the forceReadConfigFile option or modify the global configuration parameters that are not "
3311
      "configured.");
3312
  int32_t sz = taosArrayGetSize(array);
×
3313
  for (int i = 0; i < sz; i++) {
×
3314
    SConfigItem *item = (SConfigItem *)taosArrayGet(array, i);
×
3315
    switch (item->dtype) {
×
3316
      {
3317
        case CFG_DTYPE_NONE:
×
3318
          break;
×
3319
        case CFG_DTYPE_BOOL:
×
3320
          uError("config %s in cluster value is:%d", item->name, item->bval);
×
3321
          break;
×
3322
        case CFG_DTYPE_INT32:
×
3323
          uError("config %s in cluster value is:%d", item->name, item->i32);
×
3324
          break;
×
3325
        case CFG_DTYPE_INT64:
×
3326
          uError("config %s in cluster value is:%" PRId64, item->name, item->i64);
×
3327
          break;
×
3328
        case CFG_DTYPE_FLOAT:
×
3329
        case CFG_DTYPE_DOUBLE:
3330
          uError("config %s in cluster value is:%f", item->name, item->fval);
×
3331
          break;
×
3332
        case CFG_DTYPE_STRING:
×
3333
        case CFG_DTYPE_DIR:
3334
        case CFG_DTYPE_LOCALE:
3335
        case CFG_DTYPE_CHARSET:
3336
        case CFG_DTYPE_TIMEZONE:
3337
          uError("config %s in cluster value is:%s", item->name, item->str);
×
3338
          break;
×
3339
      }
3340
    }
3341
  }
×
3342
}
×
3343

3344
bool isConifgItemLazyMode(SConfigItem *item) {
3✔
3345
  if (item->dynScope == CFG_DYN_CLIENT_LAZY || item->dynScope == CFG_DYN_SERVER_LAZY ||
3✔
3346
      item->dynScope == CFG_DYN_BOTH_LAZY) {
3✔
3347
    return true;
×
3348
  }
3349
  return false;
3✔
3350
}
3351

3352
int32_t taosCheckCfgStrValueLen(const char *name, const char *value, int32_t len) {
7,320✔
3353
  if (strlen(value) > len) {
7,320✔
3354
    uError("invalid config:%s, value:%s, length should be less than %d", name, value, len);
×
3355
    TAOS_RETURN(TSDB_CODE_INVALID_CFG_VALUE);
×
3356
  }
3357
  TAOS_RETURN(TSDB_CODE_SUCCESS);
7,320✔
3358
}
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