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

#define _DEFAULT_SOURCE
K
kailixu 已提交
17
#include "os.h"
S
common  
Shengliang Guan 已提交
18
#include "tglobal.h"
S
Shengliang Guan 已提交
19
#include "tconfig.h"
wafwerar's avatar
wafwerar 已提交
20
#include "tgrant.h"
21
#include "tlog.h"
dengyihao's avatar
dengyihao 已提交
22
#include "tmisce.h"
wafwerar's avatar
wafwerar 已提交
23

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

wafwerar's avatar
wafwerar 已提交
28
GRANT_CFG_DECLARE;
S
slguan 已提交
29

S
config  
Shengliang Guan 已提交
30 31
SConfig *tsCfg = NULL;

S
Shengliang Guan 已提交
32
// cluster
S
Shengliang Guan 已提交
33 34 35 36 37 38 39
char     tsFirst[TSDB_EP_LEN] = {0};
char     tsSecond[TSDB_EP_LEN] = {0};
char     tsLocalFqdn[TSDB_FQDN_LEN] = {0};
char     tsLocalEp[TSDB_EP_LEN] = {0};  // Local End Point, hostname:port
uint16_t tsServerPort = 6030;
int32_t  tsVersion = 30000000;
int32_t  tsStatusInterval = 1;  // second
40
int32_t  tsNumOfSupportVnodes = 256;
H
Hui Li 已提交
41

S
Shengliang Guan 已提交
42
// common
S
Shengliang Guan 已提交
43 44
int32_t tsMaxShellConns = 50000;
int32_t tsShellActivityTimer = 3;  // second
S
Shengliang Guan 已提交
45
bool    tsPrintAuth = false;
S
Shengliang Guan 已提交
46

S
Shengliang Guan 已提交
47 48
// queue & threads
int32_t tsNumOfRpcThreads = 1;
dengyihao's avatar
dengyihao 已提交
49
int32_t tsNumOfRpcSessions = 10000;
dengyihao's avatar
dengyihao 已提交
50
int32_t tsTimeToGetAvailableConn = 500000;
S
Shengliang Guan 已提交
51
int32_t tsNumOfCommitThreads = 2;
D
dapan1121 已提交
52
int32_t tsNumOfTaskQueueThreads = 4;
D
dapan1121 已提交
53
int32_t tsNumOfMnodeQueryThreads = 4;
D
dapan1121 已提交
54
int32_t tsNumOfMnodeFetchThreads = 1;
S
Shengliang Guan 已提交
55
int32_t tsNumOfMnodeReadThreads = 1;
D
dapan1121 已提交
56
int32_t tsNumOfVnodeQueryThreads = 4;
L
liuyao 已提交
57
float   tsRatioOfVnodeStreamThreads = 2.0;
58
int32_t tsNumOfVnodeFetchThreads = 4;
C
Cary Xu 已提交
59
int32_t tsNumOfVnodeRsmaThreads = 2;
D
dapan1121 已提交
60
int32_t tsNumOfQnodeQueryThreads = 4;
61
int32_t tsNumOfQnodeFetchThreads = 1;
L
Liu Jicong 已提交
62 63
int32_t tsNumOfSnodeStreamThreads = 4;
int32_t tsNumOfSnodeWriteThreads = 1;
dengyihao's avatar
dengyihao 已提交
64
int32_t tsMaxStreamBackendCache = 128;  // M
65
int32_t tsPQSortMemThreshold = 16; // M
66

67 68 69 70 71
// sync raft
int32_t tsElectInterval = 25 * 1000;
int32_t tsHeartbeatInterval = 1000;
int32_t tsHeartbeatTimeout = 20 * 1000;

72
// vnode
73
int64_t tsVndCommitMaxIntervalMs = 600 * 1000;
74

75
// mnode
76 77
int64_t tsMndSdbWriteDelta = 200;
int64_t tsMndLogRetention = 2000;
K
kailixu 已提交
78
int8_t  tsGrant = 1;
H
Haojun Liao 已提交
79
bool    tsMndSkipGrant = false;
80

S
monitor  
Shengliang Guan 已提交
81
// monitor
S
Shengliang Guan 已提交
82
bool     tsEnableMonitor = true;
S
Shengliang Guan 已提交
83
int32_t  tsMonitorInterval = 30;
S
monitor  
Shengliang Guan 已提交
84 85
char     tsMonitorFqdn[TSDB_FQDN_LEN] = {0};
uint16_t tsMonitorPort = 6043;
S
monitor  
Shengliang Guan 已提交
86
int32_t  tsMonitorMaxLogs = 100;
S
Shengliang Guan 已提交
87
bool     tsMonitorComp = false;
S
monitor  
Shengliang Guan 已提交
88

S
Shengliang Guan 已提交
89
// telem
dengyihao's avatar
dengyihao 已提交
90
bool     tsEnableTelem = true;
91
int32_t  tsTelemInterval = 43200;
92
char     tsTelemServer[TSDB_FQDN_LEN] = "telemetry.tdengine.com";
S
Shengliang Guan 已提交
93
uint16_t tsTelemPort = 80;
dengyihao's avatar
dengyihao 已提交
94
char    *tsTelemUri = "/report";
D
dapan1121 已提交
95

dengyihao's avatar
dengyihao 已提交
96 97 98
bool  tsEnableCrashReport = true;
char *tsClientCrashReportUri = "/ccrashreport";
char *tsSvrCrashReportUri = "/dcrashreport";
S
Shengliang Guan 已提交
99

100
// schemaless
101
char tsSmlTagName[TSDB_COL_NAME_LEN] = "_tag_null";
dengyihao's avatar
dengyihao 已提交
102 103
char tsSmlChildTableName[TSDB_TABLE_NAME_LEN] = "";  // user defined child table name can be specified in tag value.
                                                     // If set to empty system will generate table name using MD5 hash.
104
// true means that the name and order of cols in each line are the same(only for influx protocol)
X
Xiaoyu Wang 已提交
105 106
// bool    tsSmlDataFormat = false;
// int32_t tsSmlBatchSize = 10000;
107

wmmhello's avatar
wmmhello 已提交
108 109
// tmq
int32_t tmqMaxTopicNum = 20;
X
Xiaoyu Wang 已提交
110 111
// query
int32_t tsQueryPolicy = 1;
D
dapan1121 已提交
112
int32_t tsQueryRspPolicy = 0;
113
int64_t tsQueryMaxConcurrentTables = 200;  // unit is TSDB_TABLE_NUM_UNIT
D
dapan1121 已提交
114
bool    tsEnableQueryHb = true;
dengyihao's avatar
dengyihao 已提交
115
bool    tsEnableScience = false;  // on taos-cli show float and doulbe with scientific notation if true
116
bool    tsTtlChangeOnWrite = false; // ttl delete time changes on last write if true
C
Cary Xu 已提交
117
int32_t tsQuerySmaOptimize = 0;
118
int32_t tsQueryRsmaTolerance = 1000;  // the tolerance time (ms) to judge from which level to query rsma data.
119
bool    tsQueryPlannerTrace = false;
120 121
int32_t tsQueryNodeChunkSize = 32 * 1024;
bool    tsQueryUseNodeAllocator = true;
122
bool    tsKeepColumnName = false;
dengyihao's avatar
dengyihao 已提交
123 124 125 126
int32_t tsRedirectPeriod = 10;
int32_t tsRedirectFactor = 2;
int32_t tsRedirectMaxPeriod = 1000;
int32_t tsMaxRetryWaitTime = 10000;
127
bool    tsUseAdapter = false;
dengyihao's avatar
dengyihao 已提交
128 129
int32_t tsMetaCacheMaxSize = -1;  // MB
int32_t tsSlowLogThreshold = 3;   // seconds
D
dapan1121 已提交
130
int32_t tsSlowLogScope = SLOW_LOG_TYPE_ALL;
131

S
Shengliang Guan 已提交
132 133 134 135 136 137 138 139
/*
 * denote if the server needs to compress response message at the application layer to client, including query rsp,
 * metricmeta rsp, and multi-meter query rsp message body. The client compress the submit message to server.
 *
 * 0: all data are compressed
 * -1: all data are not compressed
 * other values: if the message payload size is greater than the tsCompressMsgSize, the message will be compressed.
 */
D
dapan1121 已提交
140
int32_t tsCompressMsgSize = -1;
S
Shengliang Guan 已提交
141

142
/* denote if server needs to compress the retrieved column data before adding to the rpc response message body.
143 144
 * 0: all data are compressed
 * -1: all data are not compressed
145
 * other values: if any retrieved column size is greater than the tsCompressColData, all data will be compressed.
146
 */
147
int32_t tsCompressColData = -1;
148

149
// count/hyperloglog function always return values in case of all NULL data or Empty data set.
150
int32_t tsCountAlwaysReturnValue = 1;
151

D
dapan1121 已提交
152 153
// 1 ms for sliding time, the value will changed in case of time precision changed
int32_t tsMinSlidingTime = 1;
S
Shengliang Guan 已提交
154

155
// the maxinum number of distict query result
S
Shengliang Guan 已提交
156
int32_t tsMaxNumOfDistinctResults = 1000 * 10000;
157

X
Xiaoyu Wang 已提交
158
// 1 database precision unit for interval time range, changed accordingly
159
int32_t tsMinIntervalTime = 1;
S
Shengliang Guan 已提交
160

161 162
// maximum batch rows numbers imported from a single csv load
int32_t tsMaxInsertBatchRows = 1000000;
163

H
Haojun Liao 已提交
164
float   tsSelectivityRatio = 1.0;
dengyihao's avatar
dengyihao 已提交
165
int32_t tsTagFilterResCacheSize = 1024 * 10;
166
char    tsTagFilterCache = 0;
H
Haojun Liao 已提交
167

H
Haojun Liao 已提交
168 169 170 171 172
// the maximum allowed query buffer size during query processing for each data node.
// -1 no limit (default)
// 0  no query allowed, queries are disabled
// positive value (in MB)
int32_t tsQueryBufferSize = -1;
173
int64_t tsQueryBufferSizeBytes = -1;
174
int32_t tsCacheLazyLoadThreshold = 500;
H
Haojun Liao 已提交
175

S
Shengliang Guan 已提交
176 177 178
int32_t  tsDiskCfgNum = 0;
SDiskCfg tsDiskCfg[TFS_MAX_DISKS] = {0};

L
Liu Jicong 已提交
179
// stream scheduler
L
Liu Jicong 已提交
180
bool tsDeployOnSnode = true;
L
Liu Jicong 已提交
181

S
Shengliang Guan 已提交
182 183
/*
 * minimum scale for whole system, millisecond by default
184 185 186
 * for TSDB_TIME_PRECISION_MILLI: 60000L
 *     TSDB_TIME_PRECISION_MICRO: 60000000L
 *     TSDB_TIME_PRECISION_NANO:  60000000000L
S
Shengliang Guan 已提交
187
 */
188
int64_t tsTickPerMin[] = {60000L, 60000000L, 60000000000L};
189 190 191 192 193 194 195
/*
 * millisecond by default
 * for TSDB_TIME_PRECISION_MILLI: 3600000L
 *     TSDB_TIME_PRECISION_MICRO: 3600000000L
 *     TSDB_TIME_PRECISION_NANO:  3600000000000L
 */
int64_t tsTickPerHour[] = {3600000L, 3600000000L, 3600000000000L};
S
Shengliang Guan 已提交
196

S
Shengliang Guan 已提交
197 198 199 200 201 202 203 204 205
// lossy compress 6
char tsLossyColumns[32] = "";  // "float|double" means all float and double columns can be lossy compressed.  set empty
                               // can close lossy compress.
// below option can take effect when tsLossyColumns not empty
double   tsFPrecision = 1E-8;                   // float column precision
double   tsDPrecision = 1E-16;                  // double column precision
uint32_t tsMaxRange = 500;                      // max range
uint32_t tsCurRange = 100;                      // range
char     tsCompressor[32] = "ZSTD_COMPRESSOR";  // ZSTD_COMPRESSOR or GZIP_COMPRESSOR
206

S
slzhou 已提交
207
// udf
208
bool tsStartUdfd = true;
S
slzhou 已提交
209

210
// wal
211
int64_t tsWalFsyncDataSizeLimit = (100 * 1024 * 1024L);
212

213
// internal
214
int32_t tsTransPullupInterval = 2;
215
int32_t tsMqRebalanceInterval = 2;
216
int32_t tsStreamCheckpointTickInterval = 1;
wmmhello's avatar
wmmhello 已提交
217
int32_t tsTtlUnit = 86400;
218
int32_t tsTtlPushInterval = 3600;
C
Cary Xu 已提交
219
int32_t tsGrantHBInterval = 60;
dengyihao's avatar
dengyihao 已提交
220
int32_t tsUptimeInterval = 300;    // seconds
221 222
char    tsUdfdResFuncs[512] = "";  // udfd resident funcs that teardown when udfd exits
char    tsUdfdLdLibPath[512] = "";
5
54liuyao 已提交
223
bool    tsDisableStream = false;
5
54liuyao 已提交
224
int64_t tsStreamBufferSize = 128 * 1024 * 1024;
L
liuyao 已提交
225
int64_t tsCheckpointInterval = 3 * 60 * 60 * 1000;
226
bool    tsFilterScalarMode = false;
227
int32_t tsKeepTimeOffset = 0;  // latency of data migration
wmmhello's avatar
wmmhello 已提交
228

wafwerar's avatar
wafwerar 已提交
229
#ifndef _STORAGE
dengyihao's avatar
dengyihao 已提交
230
int32_t taosSetTfsCfg(SConfig *pCfg) {
wafwerar's avatar
wafwerar 已提交
231 232 233 234 235 236 237 238 239 240 241 242 243
  SConfigItem *pItem = cfgGetItem(pCfg, "dataDir");
  memset(tsDataDir, 0, PATH_MAX);

  int32_t size = taosArrayGetSize(pItem->array);
  tsDiskCfgNum = 1;
  tstrncpy(tsDiskCfg[0].dir, pItem->str, TSDB_FILENAME_LEN);
  tsDiskCfg[0].level = 0;
  tsDiskCfg[0].primary = 1;
  tstrncpy(tsDataDir, pItem->str, PATH_MAX);
  if (taosMulMkDir(tsDataDir) != 0) {
    uError("failed to create dataDir:%s", tsDataDir);
    return -1;
  }
dengyihao's avatar
dengyihao 已提交
244
  return 0;
wafwerar's avatar
wafwerar 已提交
245
}
wafwerar's avatar
wafwerar 已提交
246 247
#else
int32_t taosSetTfsCfg(SConfig *pCfg);
wafwerar's avatar
wafwerar 已提交
248
#endif
S
config  
Shengliang Guan 已提交
249

dengyihao's avatar
dengyihao 已提交
250
struct SConfig *taosGetCfg() { return tsCfg; }
S
Shengliang Guan 已提交
251

252 253
static int32_t taosLoadCfg(SConfig *pCfg, const char **envCmd, const char *inputCfgDir, const char *envFile,
                           char *apolloUrl) {
S
Shengliang Guan 已提交
254 255
  char cfgDir[PATH_MAX] = {0};
  char cfgFile[PATH_MAX + 100] = {0};
S
TD-1767  
Shengliang Guan 已提交
256

S
Shengliang Guan 已提交
257
  taosExpandDir(inputCfgDir, cfgDir, PATH_MAX);
258
  if (taosIsDir(cfgDir)) {
259
#ifdef CUS_PROMPT
260
    snprintf(cfgFile, sizeof(cfgFile), "%s" TD_DIRSEP "%s.cfg", cfgDir, CUS_PROMPT);
261
#else
262
    snprintf(cfgFile, sizeof(cfgFile), "%s" TD_DIRSEP "taos.cfg", cfgDir);
263
#endif
264 265 266
  } else {
    tstrncpy(cfgFile, cfgDir, sizeof(cfgDir));
  }
S
config  
Shengliang Guan 已提交
267

S
Shengliang Guan 已提交
268 269 270
  if (apolloUrl != NULL && apolloUrl[0] == '\0') {
    cfgGetApollUrl(envCmd, envFile, apolloUrl);
  }
wafwerar's avatar
wafwerar 已提交
271

S
Shengliang Guan 已提交
272
  if (cfgLoad(pCfg, CFG_STYPE_APOLLO_URL, apolloUrl) != 0) {
273
    uError("failed to load from apollo url:%s since %s", apolloUrl, terrstr());
S
Shengliang Guan 已提交
274 275 276
    return -1;
  }

277 278 279
  if (cfgLoad(pCfg, CFG_STYPE_CFG_FILE, cfgFile) != 0) {
    uError("failed to load from cfg file:%s since %s", cfgFile, terrstr());
    return -1;
S
Shengliang Guan 已提交
280 281 282
  }

  if (cfgLoad(pCfg, CFG_STYPE_ENV_FILE, envFile) != 0) {
283
    uError("failed to load from env file:%s since %s", envFile, terrstr());
S
Shengliang Guan 已提交
284 285 286 287
    return -1;
  }

  if (cfgLoad(pCfg, CFG_STYPE_ENV_VAR, NULL) != 0) {
288
    uError("failed to load from global env variables since %s", terrstr());
S
Shengliang Guan 已提交
289 290 291
    return -1;
  }

wafwerar's avatar
wafwerar 已提交
292 293 294 295 296
  if (cfgLoad(pCfg, CFG_STYPE_ENV_CMD, envCmd) != 0) {
    uError("failed to load from cmd env variables since %s", terrstr());
    return -1;
  }

S
Shengliang Guan 已提交
297
  return 0;
S
slguan 已提交
298 299
}

S
Shengliang Guan 已提交
300
int32_t taosAddClientLogCfg(SConfig *pCfg) {
301 302 303 304 305 306 307 308 309 310 311 312 313 314 315
  if (cfgAddDir(pCfg, "configDir", configDir, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddDir(pCfg, "scriptDir", configDir, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddDir(pCfg, "logDir", tsLogDir, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddFloat(pCfg, "minimalLogDirGB", 1.0f, 0.001f, 10000000, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddInt32(pCfg, "numOfLogLines", tsNumOfLogLines, 1000, 2000000000, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddBool(pCfg, "asyncLog", tsAsyncLog, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddInt32(pCfg, "logKeepDays", 0, -365000, 365000, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddInt32(pCfg, "debugFlag", 0, 0, 255, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddInt32(pCfg, "simDebugFlag", 143, 0, 255, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddInt32(pCfg, "tmrDebugFlag", tmrDebugFlag, 0, 255, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddInt32(pCfg, "uDebugFlag", uDebugFlag, 0, 255, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddInt32(pCfg, "rpcDebugFlag", rpcDebugFlag, 0, 255, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddInt32(pCfg, "jniDebugFlag", jniDebugFlag, 0, 255, CFG_SCOPE_CLIENT) != 0) return -1;
  if (cfgAddInt32(pCfg, "qDebugFlag", qDebugFlag, 0, 255, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddInt32(pCfg, "cDebugFlag", cDebugFlag, 0, 255, CFG_SCOPE_CLIENT) != 0) return -1;
S
Shengliang Guan 已提交
316
  return 0;
S
Shengliang Guan 已提交
317 318
}

S
Shengliang Guan 已提交
319
static int32_t taosAddServerLogCfg(SConfig *pCfg) {
320 321 322 323 324 325 326 327 328 329 330 331 332
  if (cfgAddInt32(pCfg, "dDebugFlag", dDebugFlag, 0, 255, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt32(pCfg, "vDebugFlag", vDebugFlag, 0, 255, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt32(pCfg, "mDebugFlag", mDebugFlag, 0, 255, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt32(pCfg, "wDebugFlag", wDebugFlag, 0, 255, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt32(pCfg, "sDebugFlag", sDebugFlag, 0, 255, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddInt32(pCfg, "tsdbDebugFlag", tsdbDebugFlag, 0, 255, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt32(pCfg, "tqDebugFlag", tqDebugFlag, 0, 255, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt32(pCfg, "fsDebugFlag", fsDebugFlag, 0, 255, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt32(pCfg, "udfDebugFlag", udfDebugFlag, 0, 255, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt32(pCfg, "smaDebugFlag", smaDebugFlag, 0, 255, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt32(pCfg, "idxDebugFlag", idxDebugFlag, 0, 255, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt32(pCfg, "tdbDebugFlag", tdbDebugFlag, 0, 255, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt32(pCfg, "metaDebugFlag", metaDebugFlag, 0, 255, 0) != CFG_SCOPE_SERVER) return -1;
S
Shengliang Guan 已提交
333
  return 0;
S
Shengliang Guan 已提交
334 335
}

S
Shengliang Guan 已提交
336
static int32_t taosAddClientCfg(SConfig *pCfg) {
S
Shengliang Guan 已提交
337 338
  char    defaultFqdn[TSDB_FQDN_LEN] = {0};
  int32_t defaultServerPort = 6030;
dengyihao's avatar
dengyihao 已提交
339 340 341
  if (taosGetFqdn(defaultFqdn) != 0) {
    strcpy(defaultFqdn, "localhost");
  }
S
Shengliang Guan 已提交
342

343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371
  if (cfgAddString(pCfg, "firstEp", "", CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddString(pCfg, "secondEp", "", CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddString(pCfg, "fqdn", defaultFqdn, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt32(pCfg, "serverPort", defaultServerPort, 1, 65056, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddDir(pCfg, "tempDir", tsTempDir, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddFloat(pCfg, "minimalTmpDirGB", 1.0f, 0.001f, 10000000, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddInt32(pCfg, "shellActivityTimer", tsShellActivityTimer, 1, 120, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddInt32(pCfg, "compressMsgSize", tsCompressMsgSize, -1, 100000000, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddInt32(pCfg, "compressColData", tsCompressColData, -1, 100000000, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddInt32(pCfg, "queryPolicy", tsQueryPolicy, 1, 4, CFG_SCOPE_CLIENT) != 0) return -1;
  if (cfgAddBool(pCfg, "enableQueryHb", tsEnableQueryHb, CFG_SCOPE_CLIENT) != 0) return -1;
  if (cfgAddBool(pCfg, "enableScience", tsEnableScience, CFG_SCOPE_CLIENT) != 0) return -1;
  if (cfgAddInt32(pCfg, "querySmaOptimize", tsQuerySmaOptimize, 0, 1, CFG_SCOPE_CLIENT) != 0) return -1;
  if (cfgAddBool(pCfg, "queryPlannerTrace", tsQueryPlannerTrace, CFG_SCOPE_CLIENT) != 0) return -1;
  if (cfgAddInt32(pCfg, "queryNodeChunkSize", tsQueryNodeChunkSize, 1024, 128 * 1024, CFG_SCOPE_CLIENT) != 0) return -1;
  if (cfgAddBool(pCfg, "queryUseNodeAllocator", tsQueryUseNodeAllocator, CFG_SCOPE_CLIENT) != 0) return -1;
  if (cfgAddBool(pCfg, "keepColumnName", tsKeepColumnName, CFG_SCOPE_CLIENT) != 0) return -1;
  if (cfgAddString(pCfg, "smlChildTableName", "", CFG_SCOPE_CLIENT) != 0) return -1;
  if (cfgAddString(pCfg, "smlTagName", tsSmlTagName, CFG_SCOPE_CLIENT) != 0) return -1;
  //  if (cfgAddBool(pCfg, "smlDataFormat", tsSmlDataFormat, CFG_SCOPE_CLIENT) != 0) return -1;
  //  if (cfgAddInt32(pCfg, "smlBatchSize", tsSmlBatchSize, 1, INT32_MAX, CFG_SCOPE_CLIENT) != 0) return -1;
  if (cfgAddInt32(pCfg, "maxInsertBatchRows", tsMaxInsertBatchRows, 1, INT32_MAX, CFG_SCOPE_CLIENT) != 0) return -1;
  if (cfgAddInt32(pCfg, "maxRetryWaitTime", tsMaxRetryWaitTime, 0, 86400000, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddBool(pCfg, "useAdapter", tsUseAdapter, CFG_SCOPE_CLIENT) != 0) return -1;
  if (cfgAddBool(pCfg, "crashReporting", tsEnableCrashReport, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt64(pCfg, "queryMaxConcurrentTables", tsQueryMaxConcurrentTables, INT64_MIN, INT64_MAX, CFG_SCOPE_CLIENT) != 0) return -1;
  if (cfgAddInt32(pCfg, "metaCacheMaxSize", tsMetaCacheMaxSize, -1, INT32_MAX, CFG_SCOPE_CLIENT) != 0) return -1;
  if (cfgAddInt32(pCfg, "slowLogThreshold", tsSlowLogThreshold, 0, INT32_MAX, CFG_SCOPE_CLIENT) != 0) return -1;
  if (cfgAddString(pCfg, "slowLogScope", "", CFG_SCOPE_CLIENT) != 0) return -1;
S
Shengliang Guan 已提交
372

dengyihao's avatar
dengyihao 已提交
373 374
  tsNumOfRpcThreads = tsNumOfCores / 2;
  tsNumOfRpcThreads = TRANGE(tsNumOfRpcThreads, 2, TSDB_MAX_RPC_THREADS);
375
  if (cfgAddInt32(pCfg, "numOfRpcThreads", tsNumOfRpcThreads, 1, 1024, CFG_SCOPE_BOTH) != 0) return -1;
dengyihao's avatar
dengyihao 已提交
376

dengyihao's avatar
dengyihao 已提交
377
  tsNumOfRpcSessions = TRANGE(tsNumOfRpcSessions, 100, 100000);
378
  if (cfgAddInt32(pCfg, "numOfRpcSessions", tsNumOfRpcSessions, 1, 100000, CFG_SCOPE_BOTH) != 0) return -1;
dengyihao's avatar
dengyihao 已提交
379 380

  tsTimeToGetAvailableConn = TRANGE(tsTimeToGetAvailableConn, 20, 10000000);
381
  if (cfgAddInt32(pCfg, "timeToGetAvailableConn", tsTimeToGetAvailableConn, 20, 1000000, CFG_SCOPE_BOTH) != 0) return -1;
dengyihao's avatar
dengyihao 已提交
382

D
dapan1121 已提交
383 384
  tsNumOfTaskQueueThreads = tsNumOfCores / 2;
  tsNumOfTaskQueueThreads = TMAX(tsNumOfTaskQueueThreads, 4);
dengyihao's avatar
dengyihao 已提交
385 386 387
  if (tsNumOfTaskQueueThreads >= 10) {
    tsNumOfTaskQueueThreads = 10;
  }
388
  if (cfgAddInt32(pCfg, "numOfTaskQueueThreads", tsNumOfTaskQueueThreads, 4, 1024, CFG_SCOPE_CLIENT) != 0) return -1;
S
Shengliang Guan 已提交
389

S
Shengliang Guan 已提交
390
  return 0;
S
os  
Shengliang Guan 已提交
391 392
}

S
Shengliang Guan 已提交
393
static int32_t taosAddSystemCfg(SConfig *pCfg) {
S
os  
Shengliang Guan 已提交
394 395
  SysNameInfo info = taosGetSysNameInfo();

396 397 398 399 400 401 402 403 404 405 406 407 408 409 410
  if (cfgAddTimezone(pCfg, "timezone", tsTimezoneStr, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddLocale(pCfg, "locale", tsLocale, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddCharset(pCfg, "charset", tsCharset, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddBool(pCfg, "assert", 1, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddBool(pCfg, "enableCoreFile", 1, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddFloat(pCfg, "numOfCores", tsNumOfCores, 1, 100000, CFG_SCOPE_BOTH) != 0) return -1;

  if (cfgAddBool(pCfg, "SSE42", tsSSE42Enable, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddBool(pCfg, "AVX", tsAVXEnable, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddBool(pCfg, "AVX2", tsAVX2Enable, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddBool(pCfg, "FMA", tsFMAEnable, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddBool(pCfg, "SIMD-builtins", tsSIMDBuiltins, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddBool(pCfg, "tagFilterCache", tsTagFilterCache, CFG_SCOPE_BOTH) != 0) return -1;

  if (cfgAddInt64(pCfg, "openMax", tsOpenMax, 0, INT64_MAX, CFG_SCOPE_BOTH) != 0) return -1;
sangshuduo's avatar
sangshuduo 已提交
411
#if !defined(_ALPINE)
412
  if (cfgAddInt64(pCfg, "streamMax", tsStreamMax, 0, INT64_MAX, CFG_SCOPE_BOTH) != 0) return -1;
sangshuduo's avatar
sangshuduo 已提交
413
#endif
414 415 416 417 418 419 420 421 422 423 424 425
  if (cfgAddInt32(pCfg, "pageSizeKB", tsPageSizeKB, 0, INT64_MAX, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddInt64(pCfg, "totalMemoryKB", tsTotalMemoryKB, 0, INT64_MAX, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddString(pCfg, "os sysname", info.sysname, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddString(pCfg, "os nodename", info.nodename, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddString(pCfg, "os release", info.release, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddString(pCfg, "os version", info.version, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddString(pCfg, "os machine", info.machine, CFG_SCOPE_BOTH) != 0) return -1;

  if (cfgAddString(pCfg, "version", version, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddString(pCfg, "compatible_version", compatible_version, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddString(pCfg, "gitinfo", gitinfo, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddString(pCfg, "buildinfo", buildinfo, CFG_SCOPE_BOTH) != 0) return -1;
S
Shengliang Guan 已提交
426
  return 0;
S
Shengliang Guan 已提交
427 428
}

S
Shengliang Guan 已提交
429
static int32_t taosAddServerCfg(SConfig *pCfg) {
430 431
  if (cfgAddDir(pCfg, "dataDir", tsDataDir, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddFloat(pCfg, "minimalDataDirGB", 2.0f, 0.001f, 10000000, CFG_SCOPE_SERVER) != 0) return -1;
432 433 434

  tsNumOfSupportVnodes = tsNumOfCores * 2;
  tsNumOfSupportVnodes = TMAX(tsNumOfSupportVnodes, 2);
435 436 437 438 439 440 441 442 443 444 445
  if (cfgAddInt32(pCfg, "supportVnodes", tsNumOfSupportVnodes, 0, 4096, CFG_SCOPE_SERVER) != 0) return -1;

  if (cfgAddInt32(pCfg, "maxShellConns", tsMaxShellConns, 10, 50000000, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt32(pCfg, "statusInterval", tsStatusInterval, 1, 30, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt32(pCfg, "minSlidingTime", tsMinSlidingTime, 1, 1000000, CFG_SCOPE_CLIENT) != 0) return -1;
  if (cfgAddInt32(pCfg, "minIntervalTime", tsMinIntervalTime, 1, 1000000, CFG_SCOPE_CLIENT) != 0) return -1;
  if (cfgAddInt32(pCfg, "maxNumOfDistinctRes", tsMaxNumOfDistinctResults, 10 * 10000, 10000 * 10000, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt32(pCfg, "countAlwaysReturnValue", tsCountAlwaysReturnValue, 0, 1, CFG_SCOPE_BOTH) != 0) return -1;
  if (cfgAddInt32(pCfg, "queryBufferSize", tsQueryBufferSize, -1, 500000000000, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddBool(pCfg, "printAuth", tsPrintAuth, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt32(pCfg, "queryRspPolicy", tsQueryRspPolicy, 0, 1, CFG_SCOPE_SERVER) != 0) return -1;
S
Shengliang Guan 已提交
446

S
Shengliang Guan 已提交
447
  tsNumOfRpcThreads = tsNumOfCores / 2;
dengyihao's avatar
dengyihao 已提交
448
  tsNumOfRpcThreads = TRANGE(tsNumOfRpcThreads, 2, TSDB_MAX_RPC_THREADS);
449
  if (cfgAddInt32(pCfg, "numOfRpcThreads", tsNumOfRpcThreads, 1, 1024, CFG_SCOPE_BOTH) != 0) return -1;
S
Shengliang Guan 已提交
450

dengyihao's avatar
dengyihao 已提交
451
  tsNumOfRpcSessions = TRANGE(tsNumOfRpcSessions, 100, 10000);
452
  if (cfgAddInt32(pCfg, "numOfRpcSessions", tsNumOfRpcSessions, 1, 100000, CFG_SCOPE_BOTH) != 0) return -1;
dengyihao's avatar
dengyihao 已提交
453

dengyihao's avatar
dengyihao 已提交
454
  tsTimeToGetAvailableConn = TRANGE(tsTimeToGetAvailableConn, 20, 1000000);
455
  if (cfgAddInt32(pCfg, "timeToGetAvailableConn", tsNumOfRpcSessions, 20, 1000000, CFG_SCOPE_BOTH) != 0) return -1;
dengyihao's avatar
dengyihao 已提交
456

S
Shengliang Guan 已提交
457
  tsNumOfCommitThreads = tsNumOfCores / 2;
S
Shengliang Guan 已提交
458
  tsNumOfCommitThreads = TRANGE(tsNumOfCommitThreads, 2, 4);
459
  if (cfgAddInt32(pCfg, "numOfCommitThreads", tsNumOfCommitThreads, 1, 1024, CFG_SCOPE_SERVER) != 0) return -1;
S
Shengliang Guan 已提交
460 461 462

  tsNumOfMnodeReadThreads = tsNumOfCores / 8;
  tsNumOfMnodeReadThreads = TRANGE(tsNumOfMnodeReadThreads, 1, 4);
463
  if (cfgAddInt32(pCfg, "numOfMnodeReadThreads", tsNumOfMnodeReadThreads, 1, 1024, CFG_SCOPE_SERVER) != 0) return -1;
S
Shengliang Guan 已提交
464

D
dapan1121 已提交
465 466
  tsNumOfVnodeQueryThreads = tsNumOfCores * 2;
  tsNumOfVnodeQueryThreads = TMAX(tsNumOfVnodeQueryThreads, 4);
467
  if (cfgAddInt32(pCfg, "numOfVnodeQueryThreads", tsNumOfVnodeQueryThreads, 4, 1024, CFG_SCOPE_SERVER) != 0) return -1;
S
Shengliang Guan 已提交
468

469
  if (cfgAddFloat(pCfg, "ratioOfVnodeStreamThreads", tsRatioOfVnodeStreamThreads, 0.01, 100, CFG_SCOPE_SERVER) != 0) return -1;
S
Shengliang Guan 已提交
470

471 472
  tsNumOfVnodeFetchThreads = tsNumOfCores / 4;
  tsNumOfVnodeFetchThreads = TMAX(tsNumOfVnodeFetchThreads, 4);
473
  if (cfgAddInt32(pCfg, "numOfVnodeFetchThreads", tsNumOfVnodeFetchThreads, 4, 1024, CFG_SCOPE_SERVER) != 0) return -1;
S
Shengliang Guan 已提交
474

C
Cary Xu 已提交
475 476
  tsNumOfVnodeRsmaThreads = tsNumOfCores;
  tsNumOfVnodeRsmaThreads = TMAX(tsNumOfVnodeRsmaThreads, 4);
477
  if (cfgAddInt32(pCfg, "numOfVnodeRsmaThreads", tsNumOfVnodeRsmaThreads, 1, 1024, CFG_SCOPE_SERVER) != 0) return -1;
C
Cary Xu 已提交
478

D
dapan1121 已提交
479 480
  tsNumOfQnodeQueryThreads = tsNumOfCores * 2;
  tsNumOfQnodeQueryThreads = TMAX(tsNumOfQnodeQueryThreads, 4);
481
  if (cfgAddInt32(pCfg, "numOfQnodeQueryThreads", tsNumOfQnodeQueryThreads, 4, 1024, CFG_SCOPE_SERVER) != 0) return -1;
S
Shengliang Guan 已提交
482

L
Liu Jicong 已提交
483 484 485
  //  tsNumOfQnodeFetchThreads = tsNumOfCores / 2;
  //  tsNumOfQnodeFetchThreads = TMAX(tsNumOfQnodeFetchThreads, 4);
  //  if (cfgAddInt32(pCfg, "numOfQnodeFetchThreads", tsNumOfQnodeFetchThreads, 1, 1024, 0) != 0) return -1;
S
Shengliang Guan 已提交
486

L
Liu Jicong 已提交
487 488
  tsNumOfSnodeStreamThreads = tsNumOfCores / 4;
  tsNumOfSnodeStreamThreads = TRANGE(tsNumOfSnodeStreamThreads, 2, 4);
489
  if (cfgAddInt32(pCfg, "numOfSnodeSharedThreads", tsNumOfSnodeStreamThreads, 2, 1024, CFG_SCOPE_SERVER) != 0) return -1;
S
Shengliang Guan 已提交
490

L
Liu Jicong 已提交
491 492
  tsNumOfSnodeWriteThreads = tsNumOfCores / 4;
  tsNumOfSnodeWriteThreads = TRANGE(tsNumOfSnodeWriteThreads, 2, 4);
493
  if (cfgAddInt32(pCfg, "numOfSnodeUniqueThreads", tsNumOfSnodeWriteThreads, 2, 1024, CFG_SCOPE_SERVER) != 0) return -1;
S
Shengliang Guan 已提交
494

495
  tsRpcQueueMemoryAllowed = tsTotalMemoryKB * 1024 * 0.1;
wafwerar's avatar
wafwerar 已提交
496
  tsRpcQueueMemoryAllowed = TRANGE(tsRpcQueueMemoryAllowed, TSDB_MAX_MSG_SIZE * 10LL, TSDB_MAX_MSG_SIZE * 10000LL);
497
  if (cfgAddInt64(pCfg, "rpcQueueMemoryAllowed", tsRpcQueueMemoryAllowed, TSDB_MAX_MSG_SIZE * 10L, INT64_MAX, CFG_SCOPE_BOTH) != 0)
dengyihao's avatar
dengyihao 已提交
498
    return -1;
499

500 501 502
  if (cfgAddInt32(pCfg, "syncElectInterval", tsElectInterval, 10, 1000 * 60 * 24 * 2, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt32(pCfg, "syncHeartbeatInterval", tsHeartbeatInterval, 10, 1000 * 60 * 24 * 2, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt32(pCfg, "syncHeartbeatTimeout", tsHeartbeatTimeout, 10, 1000 * 60 * 24 * 2, CFG_SCOPE_SERVER) != 0) return -1;
503

504
  if (cfgAddInt64(pCfg, "vndCommitMaxInterval", tsVndCommitMaxIntervalMs, 1000, 1000 * 60 * 60, CFG_SCOPE_SERVER) != 0) return -1;
505

506 507 508
  if (cfgAddInt64(pCfg, "mndSdbWriteDelta", tsMndSdbWriteDelta, 20, 10000, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt64(pCfg, "mndLogRetention", tsMndLogRetention, 500, 10000, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddBool(pCfg, "skipGrant", tsMndSkipGrant, CFG_SCOPE_SERVER) != 0) return -1;
509

510 511 512 513 514 515
  if (cfgAddBool(pCfg, "monitor", tsEnableMonitor, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt32(pCfg, "monitorInterval", tsMonitorInterval, 1, 200000, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddString(pCfg, "monitorFqdn", tsMonitorFqdn, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt32(pCfg, "monitorPort", tsMonitorPort, 1, 65056, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt32(pCfg, "monitorMaxLogs", tsMonitorMaxLogs, 1, 1000000, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddBool(pCfg, "monitorComp", tsMonitorComp, CFG_SCOPE_SERVER) != 0) return -1;
S
monitor  
Shengliang Guan 已提交
516

517 518 519 520 521
  if (cfgAddBool(pCfg, "crashReporting", tsEnableCrashReport, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddBool(pCfg, "telemetryReporting", tsEnableTelem, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt32(pCfg, "telemetryInterval", tsTelemInterval, 1, 200000, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddString(pCfg, "telemetryServer", tsTelemServer, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt32(pCfg, "telemetryPort", tsTelemPort, 1, 65056, CFG_SCOPE_SERVER) != 0) return -1;
S
Shengliang Guan 已提交
522

523
  if (cfgAddInt32(pCfg, "tmqMaxTopicNum", tmqMaxTopicNum, 1, 10000, CFG_SCOPE_SERVER) != 0) return -1;
wmmhello's avatar
wmmhello 已提交
524

525 526 527 528 529 530 531
  if (cfgAddInt32(pCfg, "transPullupInterval", tsTransPullupInterval, 1, 10000, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt32(pCfg, "mqRebalanceInterval", tsMqRebalanceInterval, 1, 10000, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt32(pCfg, "ttlUnit", tsTtlUnit, 1, 86400 * 365, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt32(pCfg, "ttlPushInterval", tsTtlPushInterval, 1, 100000, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddBool(pCfg, "ttlChangeOnWrite", tsTtlChangeOnWrite, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt32(pCfg, "uptimeInterval", tsUptimeInterval, 1, 100000, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt32(pCfg, "queryRsmaTolerance", tsQueryRsmaTolerance, 0, 900000, CFG_SCOPE_SERVER) != 0) return -1;
532

533
  if (cfgAddInt64(pCfg, "walFsyncDataSizeLimit", tsWalFsyncDataSizeLimit, 100 * 1024 * 1024, INT64_MAX, CFG_SCOPE_SERVER) != 0)
534
    return -1;
535

536 537 538
  if (cfgAddBool(pCfg, "udf", tsStartUdfd, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddString(pCfg, "udfdResFuncs", tsUdfdResFuncs, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddString(pCfg, "udfdLdLibPath", tsUdfdLdLibPath, CFG_SCOPE_SERVER) != 0) return -1;
dengyihao's avatar
dengyihao 已提交
539

540 541 542
  if (cfgAddBool(pCfg, "disableStream", tsDisableStream, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt64(pCfg, "streamBufferSize", tsStreamBufferSize, 0, INT64_MAX, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt64(pCfg, "checkpointInterval", tsCheckpointInterval, 0, INT64_MAX, CFG_SCOPE_SERVER) != 0) return -1;
5
54liuyao 已提交
543

544
  if (cfgAddInt32(pCfg, "cacheLazyLoadThreshold", tsCacheLazyLoadThreshold, 0, 100000, CFG_SCOPE_SERVER) != 0) return -1;
545

546
  if (cfgAddBool(pCfg, "filterScalarMode", tsFilterScalarMode, CFG_SCOPE_SERVER) != 0) return -1;
547
  if (cfgAddInt32(pCfg, "keepTimeOffset", tsKeepTimeOffset, 0, 23, CFG_SCOPE_SERVER) != 0) return -1;
548 549
  if (cfgAddInt32(pCfg, "maxStreamBackendCache", tsMaxStreamBackendCache, 16, 1024, CFG_SCOPE_SERVER) != 0) return -1;
  if (cfgAddInt32(pCfg, "pqSortMemThreshold", tsPQSortMemThreshold, 1, 10240, CFG_SCOPE_SERVER) != 0) return -1;
550

wafwerar's avatar
wafwerar 已提交
551
  GRANT_CFG_ADD;
S
Shengliang Guan 已提交
552
  return 0;
S
Shengliang Guan 已提交
553 554
}

wafwerar's avatar
wafwerar 已提交
555 556
static int32_t taosUpdateServerCfg(SConfig *pCfg) {
  SConfigItem *pItem;
557 558 559
  ECfgSrcType  stype;
  int32_t      numOfCores;
  int64_t      totalMemoryKB;
wafwerar's avatar
wafwerar 已提交
560 561 562 563 564 565

  pItem = cfgGetItem(tsCfg, "numOfCores");
  if (pItem == NULL) {
    return -1;
  } else {
    stype = pItem->stype;
wafwerar's avatar
wafwerar 已提交
566
    numOfCores = pItem->fval;
wafwerar's avatar
wafwerar 已提交
567 568 569 570 571 572 573 574 575 576 577 578 579
  }

  pItem = cfgGetItem(tsCfg, "supportVnodes");
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
    tsNumOfSupportVnodes = numOfCores * 2;
    tsNumOfSupportVnodes = TMAX(tsNumOfSupportVnodes, 2);
    pItem->i32 = tsNumOfSupportVnodes;
    pItem->stype = stype;
  }

  pItem = cfgGetItem(tsCfg, "numOfRpcThreads");
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
    tsNumOfRpcThreads = numOfCores / 2;
dengyihao's avatar
dengyihao 已提交
580
    tsNumOfRpcThreads = TRANGE(tsNumOfRpcThreads, 2, TSDB_MAX_RPC_THREADS);
wafwerar's avatar
wafwerar 已提交
581 582 583 584
    pItem->i32 = tsNumOfRpcThreads;
    pItem->stype = stype;
  }

dengyihao's avatar
dengyihao 已提交
585 586 587 588 589 590 591
  pItem = cfgGetItem(tsCfg, "numOfRpcSessions");
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
    tsNumOfRpcSessions = TRANGE(tsNumOfRpcSessions, 100, 10000);
    pItem->i32 = tsNumOfRpcSessions;
    pItem->stype = stype;
  }

dengyihao's avatar
dengyihao 已提交
592 593 594 595 596 597 598
  pItem = cfgGetItem(tsCfg, "timeToGetAvailableConn");
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
    tsTimeToGetAvailableConn = TRANGE(tsTimeToGetAvailableConn, 20, 1000000);
    pItem->i32 = tsTimeToGetAvailableConn;
    pItem->stype = stype;
  }

wafwerar's avatar
wafwerar 已提交
599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622
  pItem = cfgGetItem(tsCfg, "numOfCommitThreads");
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
    tsNumOfCommitThreads = numOfCores / 2;
    tsNumOfCommitThreads = TRANGE(tsNumOfCommitThreads, 2, 4);
    pItem->i32 = tsNumOfCommitThreads;
    pItem->stype = stype;
  }

  pItem = cfgGetItem(tsCfg, "numOfMnodeReadThreads");
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
    tsNumOfMnodeReadThreads = numOfCores / 8;
    tsNumOfMnodeReadThreads = TRANGE(tsNumOfMnodeReadThreads, 1, 4);
    pItem->i32 = tsNumOfMnodeReadThreads;
    pItem->stype = stype;
  }

  pItem = cfgGetItem(tsCfg, "numOfVnodeQueryThreads");
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
    tsNumOfVnodeQueryThreads = numOfCores * 2;
    tsNumOfVnodeQueryThreads = TMAX(tsNumOfVnodeQueryThreads, 4);
    pItem->i32 = tsNumOfVnodeQueryThreads;
    pItem->stype = stype;
  }

623
  pItem = cfgGetItem(tsCfg, "ratioOfVnodeStreamThreads");
wafwerar's avatar
wafwerar 已提交
624
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
625
    pItem->fval = tsRatioOfVnodeStreamThreads;
wafwerar's avatar
wafwerar 已提交
626 627 628
    pItem->stype = stype;
  }

629 630 631 632 633 634 635
  pItem = cfgGetItem(tsCfg, "numOfVnodeFetchThreads");
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
    tsNumOfVnodeFetchThreads = numOfCores / 4;
    tsNumOfVnodeFetchThreads = TMAX(tsNumOfVnodeFetchThreads, 4);
    pItem->i32 = tsNumOfVnodeFetchThreads;
    pItem->stype = stype;
  }
wafwerar's avatar
wafwerar 已提交
636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652

  pItem = cfgGetItem(tsCfg, "numOfVnodeRsmaThreads");
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
    tsNumOfVnodeRsmaThreads = numOfCores;
    tsNumOfVnodeRsmaThreads = TMAX(tsNumOfVnodeRsmaThreads, 4);
    pItem->i32 = tsNumOfVnodeRsmaThreads;
    pItem->stype = stype;
  }

  pItem = cfgGetItem(tsCfg, "numOfQnodeQueryThreads");
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
    tsNumOfQnodeQueryThreads = numOfCores * 2;
    tsNumOfQnodeQueryThreads = TMAX(tsNumOfQnodeQueryThreads, 4);
    pItem->i32 = tsNumOfQnodeQueryThreads;
    pItem->stype = stype;
  }

L
Liu Jicong 已提交
653 654 655 656 657 658 659 660 661
  /*
    pItem = cfgGetItem(tsCfg, "numOfQnodeFetchThreads");
    if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
      tsNumOfQnodeFetchThreads = numOfCores / 2;
      tsNumOfQnodeFetchThreads = TMAX(tsNumOfQnodeFetchThreads, 4);
      pItem->i32 = tsNumOfQnodeFetchThreads;
      pItem->stype = stype;
    }
  */
wafwerar's avatar
wafwerar 已提交
662 663 664

  pItem = cfgGetItem(tsCfg, "numOfSnodeSharedThreads");
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
L
Liu Jicong 已提交
665 666 667
    tsNumOfSnodeStreamThreads = numOfCores / 4;
    tsNumOfSnodeStreamThreads = TRANGE(tsNumOfSnodeStreamThreads, 2, 4);
    pItem->i32 = tsNumOfSnodeStreamThreads;
wafwerar's avatar
wafwerar 已提交
668 669 670 671 672
    pItem->stype = stype;
  }

  pItem = cfgGetItem(tsCfg, "numOfSnodeUniqueThreads");
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
L
Liu Jicong 已提交
673 674 675
    tsNumOfSnodeWriteThreads = numOfCores / 4;
    tsNumOfSnodeWriteThreads = TRANGE(tsNumOfSnodeWriteThreads, 2, 4);
    pItem->i32 = tsNumOfSnodeWriteThreads;
wafwerar's avatar
wafwerar 已提交
676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697
    pItem->stype = stype;
  }

  pItem = cfgGetItem(tsCfg, "totalMemoryKB");
  if (pItem == NULL) {
    return -1;
  } else {
    stype = pItem->stype;
    totalMemoryKB = pItem->i64;
  }

  pItem = cfgGetItem(tsCfg, "rpcQueueMemoryAllowed");
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
    tsRpcQueueMemoryAllowed = totalMemoryKB * 1024 * 0.1;
    tsRpcQueueMemoryAllowed = TRANGE(tsRpcQueueMemoryAllowed, TSDB_MAX_MSG_SIZE * 10LL, TSDB_MAX_MSG_SIZE * 10000LL);
    pItem->i64 = tsRpcQueueMemoryAllowed;
    pItem->stype = stype;
  }

  return 0;
}

S
Shengliang Guan 已提交
698
static void taosSetClientLogCfg(SConfig *pCfg) {
S
Shengliang Guan 已提交
699
  SConfigItem *pItem = cfgGetItem(pCfg, "logDir");
S
os env  
Shengliang Guan 已提交
700
  tstrncpy(tsLogDir, cfgGetItem(pCfg, "logDir")->str, PATH_MAX);
S
Shengliang Guan 已提交
701
  taosExpandDir(tsLogDir, tsLogDir, PATH_MAX);
wafwerar's avatar
wafwerar 已提交
702
  tsLogSpace.reserved = (int64_t)(((double)cfgGetItem(pCfg, "minimalLogDirGB")->fval) * 1024 * 1024 * 1024);
S
Shengliang Guan 已提交
703 704 705 706
  tsNumOfLogLines = cfgGetItem(pCfg, "numOfLogLines")->i32;
  tsAsyncLog = cfgGetItem(pCfg, "asyncLog")->bval;
  tsLogKeepDays = cfgGetItem(pCfg, "logKeepDays")->i32;
  tmrDebugFlag = cfgGetItem(pCfg, "tmrDebugFlag")->i32;
S
Shengliang Guan 已提交
707
  uDebugFlag = cfgGetItem(pCfg, "uDebugFlag")->i32;
S
Shengliang Guan 已提交
708
  jniDebugFlag = cfgGetItem(pCfg, "jniDebugFlag")->i32;
S
Shengliang Guan 已提交
709 710 711
  rpcDebugFlag = cfgGetItem(pCfg, "rpcDebugFlag")->i32;
  qDebugFlag = cfgGetItem(pCfg, "qDebugFlag")->i32;
  cDebugFlag = cfgGetItem(pCfg, "cDebugFlag")->i32;
S
Shengliang Guan 已提交
712 713 714 715 716 717 718 719 720 721 722
}

static void taosSetServerLogCfg(SConfig *pCfg) {
  dDebugFlag = cfgGetItem(pCfg, "dDebugFlag")->i32;
  vDebugFlag = cfgGetItem(pCfg, "vDebugFlag")->i32;
  mDebugFlag = cfgGetItem(pCfg, "mDebugFlag")->i32;
  wDebugFlag = cfgGetItem(pCfg, "wDebugFlag")->i32;
  sDebugFlag = cfgGetItem(pCfg, "sDebugFlag")->i32;
  tsdbDebugFlag = cfgGetItem(pCfg, "tsdbDebugFlag")->i32;
  tqDebugFlag = cfgGetItem(pCfg, "tqDebugFlag")->i32;
  fsDebugFlag = cfgGetItem(pCfg, "fsDebugFlag")->i32;
S
Shengliang Guan 已提交
723
  udfDebugFlag = cfgGetItem(pCfg, "udfDebugFlag")->i32;
724
  smaDebugFlag = cfgGetItem(pCfg, "smaDebugFlag")->i32;
dengyihao's avatar
dengyihao 已提交
725
  idxDebugFlag = cfgGetItem(pCfg, "idxDebugFlag")->i32;
M
Minglei Jin 已提交
726
  tdbDebugFlag = cfgGetItem(pCfg, "tdbDebugFlag")->i32;
S
Shengliang Guan 已提交
727
  metaDebugFlag = cfgGetItem(pCfg, "metaDebugFlag")->i32;
S
Shengliang Guan 已提交
728 729
}

D
dapan1121 已提交
730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755
static int32_t taosSetSlowLogScope(char *pScope) {
  if (NULL == pScope || 0 == strlen(pScope)) {
    tsSlowLogScope = SLOW_LOG_TYPE_ALL;
    return 0;
  }

  if (0 == strcasecmp(pScope, "all")) {
    tsSlowLogScope = SLOW_LOG_TYPE_ALL;
    return 0;
  }

  if (0 == strcasecmp(pScope, "query")) {
    tsSlowLogScope = SLOW_LOG_TYPE_QUERY;
    return 0;
  }

  if (0 == strcasecmp(pScope, "insert")) {
    tsSlowLogScope = SLOW_LOG_TYPE_INSERT;
    return 0;
  }

  if (0 == strcasecmp(pScope, "others")) {
    tsSlowLogScope = SLOW_LOG_TYPE_OTHERS;
    return 0;
  }

756 757 758 759 760
  if (0 == strcasecmp(pScope, "none")) {
    tsSlowLogScope = 0;
    return 0;
  }

D
dapan1121 已提交
761
  uError("Invalid slowLog scope value:%s", pScope);
762
  terrno = TSDB_CODE_INVALID_CFG_VALUE;
D
dapan1121 已提交
763 764 765
  return -1;
}

S
Shengliang Guan 已提交
766
static int32_t taosSetClientCfg(SConfig *pCfg) {
S
monitor  
Shengliang Guan 已提交
767
  tstrncpy(tsLocalFqdn, cfgGetItem(pCfg, "fqdn")->str, TSDB_FQDN_LEN);
S
Shengliang Guan 已提交
768 769
  tsServerPort = (uint16_t)cfgGetItem(pCfg, "serverPort")->i32;
  snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
770

771 772 773
  char defaultFirstEp[TSDB_EP_LEN] = {0};
  snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort);

774 775
  SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp");
  SEp          firstEp = {0};
776
  taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp);
777 778 779 780 781
  snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port);
  cfgSetItem(pCfg, "firstEp", tsFirst, pFirstEpItem->stype);

  SConfigItem *pSecondpItem = cfgGetItem(pCfg, "secondEp");
  SEp          secondEp = {0};
782
  taosGetFqdnPortFromEp(strlen(pSecondpItem->str) == 0 ? defaultFirstEp : pSecondpItem->str, &secondEp);
783 784 785
  snprintf(tsSecond, sizeof(tsSecond), "%s:%u", secondEp.fqdn, secondEp.port);
  cfgSetItem(pCfg, "secondEp", tsSecond, pSecondpItem->stype);

S
Shengliang Guan 已提交
786 787
  tstrncpy(tsTempDir, cfgGetItem(pCfg, "tempDir")->str, PATH_MAX);
  taosExpandDir(tsTempDir, tsTempDir, PATH_MAX);
wafwerar's avatar
wafwerar 已提交
788
  tsTempSpace.reserved = (int64_t)(((double)cfgGetItem(pCfg, "minimalTmpDirGB")->fval) * 1024 * 1024 * 1024);
S
Shengliang Guan 已提交
789
  if (taosMulMkDir(tsTempDir) != 0) {
S
Shengliang Guan 已提交
790 791 792
    uError("failed to create tempDir:%s since %s", tsTempDir, terrstr());
    return -1;
  }
S
Shengliang Guan 已提交
793

794
  tstrncpy(tsSmlChildTableName, cfgGetItem(pCfg, "smlChildTableName")->str, TSDB_TABLE_NAME_LEN);
795
  tstrncpy(tsSmlTagName, cfgGetItem(pCfg, "smlTagName")->str, TSDB_COL_NAME_LEN);
X
Xiaoyu Wang 已提交
796
  //  tsSmlDataFormat = cfgGetItem(pCfg, "smlDataFormat")->bval;
797

X
Xiaoyu Wang 已提交
798
  //  tsSmlBatchSize = cfgGetItem(pCfg, "smlBatchSize")->i32;
799
  tsMaxInsertBatchRows = cfgGetItem(pCfg, "maxInsertBatchRows")->i32;
800

801
  tsShellActivityTimer = cfgGetItem(pCfg, "shellActivityTimer")->i32;
S
Shengliang Guan 已提交
802 803
  tsCompressMsgSize = cfgGetItem(pCfg, "compressMsgSize")->i32;
  tsCompressColData = cfgGetItem(pCfg, "compressColData")->i32;
S
Shengliang Guan 已提交
804
  tsNumOfTaskQueueThreads = cfgGetItem(pCfg, "numOfTaskQueueThreads")->i32;
X
Xiaoyu Wang 已提交
805
  tsQueryPolicy = cfgGetItem(pCfg, "queryPolicy")->i32;
806
  tsEnableQueryHb = cfgGetItem(pCfg, "enableQueryHb")->bval;
dengyihao's avatar
dengyihao 已提交
807
  tsEnableScience = cfgGetItem(pCfg, "enableScience")->bval;
X
Xiaoyu Wang 已提交
808
  tsQuerySmaOptimize = cfgGetItem(pCfg, "querySmaOptimize")->i32;
809
  tsQueryPlannerTrace = cfgGetItem(pCfg, "queryPlannerTrace")->bval;
810 811
  tsQueryNodeChunkSize = cfgGetItem(pCfg, "queryNodeChunkSize")->i32;
  tsQueryUseNodeAllocator = cfgGetItem(pCfg, "queryUseNodeAllocator")->bval;
812
  tsKeepColumnName = cfgGetItem(pCfg, "keepColumnName")->bval;
813
  tsUseAdapter = cfgGetItem(pCfg, "useAdapter")->bval;
D
dapan1121 已提交
814
  tsEnableCrashReport = cfgGetItem(pCfg, "crashReporting")->bval;
815
  tsQueryMaxConcurrentTables = cfgGetItem(pCfg, "queryMaxConcurrentTables")->i64;
D
dapan1121 已提交
816
  tsMetaCacheMaxSize = cfgGetItem(pCfg, "metaCacheMaxSize")->i32;
D
dapan1121 已提交
817 818 819 820
  tsSlowLogThreshold = cfgGetItem(pCfg, "slowLogThreshold")->i32;
  if (taosSetSlowLogScope(cfgGetItem(pCfg, "slowLogScope")->str)) {
    return -1;
  }
dengyihao's avatar
dengyihao 已提交
821

822
  tsMaxRetryWaitTime = cfgGetItem(pCfg, "maxRetryWaitTime")->i32;
dengyihao's avatar
dengyihao 已提交
823

dengyihao's avatar
dengyihao 已提交
824
  tsNumOfRpcThreads = cfgGetItem(pCfg, "numOfRpcThreads")->i32;
dengyihao's avatar
dengyihao 已提交
825 826 827
  tsNumOfRpcSessions = cfgGetItem(pCfg, "numOfRpcSessions")->i32;

  tsTimeToGetAvailableConn = cfgGetItem(pCfg, "timeToGetAvailableConn")->i32;
S
Shengliang Guan 已提交
828
  return 0;
S
os  
Shengliang Guan 已提交
829
}
S
config  
Shengliang Guan 已提交
830

S
os  
Shengliang Guan 已提交
831
static void taosSetSystemCfg(SConfig *pCfg) {
S
Shengliang Guan 已提交
832 833
  SConfigItem *pItem = cfgGetItem(pCfg, "timezone");
  osSetTimezone(pItem->str);
wafwerar's avatar
wafwerar 已提交
834 835
  uDebug("timezone format changed from %s to %s", pItem->str, tsTimezoneStr);
  cfgSetItem(pCfg, "timezone", tsTimezoneStr, pItem->stype);
S
Shengliang Guan 已提交
836

S
Shengliang Guan 已提交
837 838
  const char *locale = cfgGetItem(pCfg, "locale")->str;
  const char *charset = cfgGetItem(pCfg, "charset")->str;
S
os env  
Shengliang Guan 已提交
839
  taosSetSystemLocale(locale, charset);
wafwerar's avatar
wafwerar 已提交
840
  osSetSystemLocale(locale, charset);
S
Shengliang Guan 已提交
841

S
Shengliang Guan 已提交
842
  bool enableCore = cfgGetItem(pCfg, "enableCoreFile")->bval;
wafwerar's avatar
wafwerar 已提交
843
  taosSetCoreDump(enableCore);
S
config  
Shengliang Guan 已提交
844

S
Shengliang Guan 已提交
845 846
  tsAssert = cfgGetItem(pCfg, "assert")->bval;

S
config  
Shengliang Guan 已提交
847 848
  // todo
  tsVersion = 30000000;
S
Shengliang Guan 已提交
849
}
850

S
Shengliang Guan 已提交
851
static int32_t taosSetServerCfg(SConfig *pCfg) {
wafwerar's avatar
wafwerar 已提交
852
  tsDataSpace.reserved = (int64_t)(((double)cfgGetItem(pCfg, "minimalDataDirGB")->fval) * 1024 * 1024 * 1024);
853
  tsNumOfSupportVnodes = cfgGetItem(pCfg, "supportVnodes")->i32;
S
Shengliang Guan 已提交
854 855 856 857
  tsMaxShellConns = cfgGetItem(pCfg, "maxShellConns")->i32;
  tsStatusInterval = cfgGetItem(pCfg, "statusInterval")->i32;
  tsMinSlidingTime = cfgGetItem(pCfg, "minSlidingTime")->i32;
  tsMinIntervalTime = cfgGetItem(pCfg, "minIntervalTime")->i32;
S
Shengliang Guan 已提交
858
  tsMaxNumOfDistinctResults = cfgGetItem(pCfg, "maxNumOfDistinctRes")->i32;
859
  tsCountAlwaysReturnValue = cfgGetItem(pCfg, "countAlwaysReturnValue")->i32;
S
config  
Shengliang Guan 已提交
860
  tsQueryBufferSize = cfgGetItem(pCfg, "queryBufferSize")->i32;
S
Shengliang Guan 已提交
861
  tsPrintAuth = cfgGetItem(pCfg, "printAuth")->bval;
S
Shengliang Guan 已提交
862

S
Shengliang Guan 已提交
863
  tsNumOfRpcThreads = cfgGetItem(pCfg, "numOfRpcThreads")->i32;
dengyihao's avatar
dengyihao 已提交
864
  tsNumOfRpcSessions = cfgGetItem(pCfg, "numOfRpcSessions")->i32;
dengyihao's avatar
dengyihao 已提交
865 866
  tsTimeToGetAvailableConn = cfgGetItem(pCfg, "timeToGetAvailableConn")->i32;

S
Shengliang Guan 已提交
867
  tsNumOfCommitThreads = cfgGetItem(pCfg, "numOfCommitThreads")->i32;
S
Shengliang Guan 已提交
868 869
  tsNumOfMnodeReadThreads = cfgGetItem(pCfg, "numOfMnodeReadThreads")->i32;
  tsNumOfVnodeQueryThreads = cfgGetItem(pCfg, "numOfVnodeQueryThreads")->i32;
870
  tsRatioOfVnodeStreamThreads = cfgGetItem(pCfg, "ratioOfVnodeStreamThreads")->fval;
871
  tsNumOfVnodeFetchThreads = cfgGetItem(pCfg, "numOfVnodeFetchThreads")->i32;
C
Cary Xu 已提交
872
  tsNumOfVnodeRsmaThreads = cfgGetItem(pCfg, "numOfVnodeRsmaThreads")->i32;
S
Shengliang Guan 已提交
873
  tsNumOfQnodeQueryThreads = cfgGetItem(pCfg, "numOfQnodeQueryThreads")->i32;
dengyihao's avatar
dengyihao 已提交
874
  //  tsNumOfQnodeFetchThreads = cfgGetItem(pCfg, "numOfQnodeFetchTereads")->i32;
L
Liu Jicong 已提交
875 876
  tsNumOfSnodeStreamThreads = cfgGetItem(pCfg, "numOfSnodeSharedThreads")->i32;
  tsNumOfSnodeWriteThreads = cfgGetItem(pCfg, "numOfSnodeUniqueThreads")->i32;
877
  tsRpcQueueMemoryAllowed = cfgGetItem(pCfg, "rpcQueueMemoryAllowed")->i64;
S
Shengliang Guan 已提交
878

dengyihao's avatar
dengyihao 已提交
879
  tsSIMDBuiltins = (bool)cfgGetItem(pCfg, "SIMD-builtins")->bval;
880
  tsTagFilterCache = (bool)cfgGetItem(pCfg, "tagFilterCache")->bval;
H
Haojun Liao 已提交
881

S
monitor  
Shengliang Guan 已提交
882 883 884 885
  tsEnableMonitor = cfgGetItem(pCfg, "monitor")->bval;
  tsMonitorInterval = cfgGetItem(pCfg, "monitorInterval")->i32;
  tstrncpy(tsMonitorFqdn, cfgGetItem(pCfg, "monitorFqdn")->str, TSDB_FQDN_LEN);
  tsMonitorPort = (uint16_t)cfgGetItem(pCfg, "monitorPort")->i32;
S
monitor  
Shengliang Guan 已提交
886
  tsMonitorMaxLogs = cfgGetItem(pCfg, "monitorMaxLogs")->i32;
S
Shengliang Guan 已提交
887
  tsMonitorComp = cfgGetItem(pCfg, "monitorComp")->bval;
D
dapan1121 已提交
888
  tsQueryRspPolicy = cfgGetItem(pCfg, "queryRspPolicy")->i32;
S
monitor  
Shengliang Guan 已提交
889

S
Shengliang Guan 已提交
890
  tsEnableTelem = cfgGetItem(pCfg, "telemetryReporting")->bval;
D
dapan1121 已提交
891
  tsEnableCrashReport = cfgGetItem(pCfg, "crashReporting")->bval;
892
  tsTtlChangeOnWrite = cfgGetItem(pCfg, "ttlChangeOnWrite")->bval;
S
Shengliang Guan 已提交
893 894 895 896
  tsTelemInterval = cfgGetItem(pCfg, "telemetryInterval")->i32;
  tstrncpy(tsTelemServer, cfgGetItem(pCfg, "telemetryServer")->str, TSDB_FQDN_LEN);
  tsTelemPort = (uint16_t)cfgGetItem(pCfg, "telemetryPort")->i32;

wmmhello's avatar
wmmhello 已提交
897 898
  tmqMaxTopicNum= cfgGetItem(pCfg, "tmqMaxTopicNum")->i32;

899 900
  tsTransPullupInterval = cfgGetItem(pCfg, "transPullupInterval")->i32;
  tsMqRebalanceInterval = cfgGetItem(pCfg, "mqRebalanceInterval")->i32;
wmmhello's avatar
wmmhello 已提交
901
  tsTtlUnit = cfgGetItem(pCfg, "ttlUnit")->i32;
wmmhello's avatar
wmmhello 已提交
902
  tsTtlPushInterval = cfgGetItem(pCfg, "ttlPushInterval")->i32;
903
  tsUptimeInterval = cfgGetItem(pCfg, "uptimeInterval")->i32;
904
  tsQueryRsmaTolerance = cfgGetItem(pCfg, "queryRsmaTolerance")->i32;
905

906
  tsWalFsyncDataSizeLimit = cfgGetItem(pCfg, "walFsyncDataSizeLimit")->i64;
907

908 909 910 911
  tsElectInterval = cfgGetItem(pCfg, "syncElectInterval")->i32;
  tsHeartbeatInterval = cfgGetItem(pCfg, "syncHeartbeatInterval")->i32;
  tsHeartbeatTimeout = cfgGetItem(pCfg, "syncHeartbeatTimeout")->i32;

912 913
  tsVndCommitMaxIntervalMs = cfgGetItem(pCfg, "vndCommitMaxInterval")->i64;

914
  tsMndSdbWriteDelta = cfgGetItem(pCfg, "mndSdbWriteDelta")->i64;
915
  tsMndLogRetention = cfgGetItem(pCfg, "mndLogRetention")->i64;
K
kailixu 已提交
916
  tsMndSkipGrant = cfgGetItem(pCfg, "skipGrant")->bval;
917

918
  tsStartUdfd = cfgGetItem(pCfg, "udf")->bval;
S
slzhou 已提交
919
  tstrncpy(tsUdfdResFuncs, cfgGetItem(pCfg, "udfdResFuncs")->str, sizeof(tsUdfdResFuncs));
920
  tstrncpy(tsUdfdLdLibPath, cfgGetItem(pCfg, "udfdLdLibPath")->str, sizeof(tsUdfdLdLibPath));
S
config  
Shengliang Guan 已提交
921 922 923
  if (tsQueryBufferSize >= 0) {
    tsQueryBufferSizeBytes = tsQueryBufferSize * 1048576UL;
  }
dengyihao's avatar
dengyihao 已提交
924

925 926
  tsCacheLazyLoadThreshold = cfgGetItem(pCfg, "cacheLazyLoadThreshold")->i32;

5
54liuyao 已提交
927
  tsDisableStream = cfgGetItem(pCfg, "disableStream")->bval;
L
liuyao 已提交
928 929
  tsStreamBufferSize = cfgGetItem(pCfg, "streamBufferSize")->i64;
  tsCheckpointInterval = cfgGetItem(pCfg, "checkpointInterval")->i64;
5
54liuyao 已提交
930

931
  tsFilterScalarMode = cfgGetItem(pCfg, "filterScalarMode")->bval;
932
  tsKeepTimeOffset = cfgGetItem(pCfg, "keepTimeOffset")->i32;
dengyihao's avatar
dengyihao 已提交
933
  tsMaxStreamBackendCache = cfgGetItem(pCfg, "maxStreamBackendCache")->i32;
934
  tsPQSortMemThreshold = cfgGetItem(pCfg, "pqSortMemThreshold")->i32;
5
54liuyao 已提交
935

wafwerar's avatar
wafwerar 已提交
936
  GRANT_CFG_GET;
S
Shengliang Guan 已提交
937
  return 0;
S
Shengliang Guan 已提交
938 939
}

940
void taosLocalCfgForbiddenToChange(char *name, bool *forbidden) {
941 942 943 944 945 946 947 948
  int32_t len = strlen(name);
  char    lowcaseName[CFG_NAME_MAX_LEN + 1] = {0};
  strntolower(lowcaseName, name, TMIN(CFG_NAME_MAX_LEN, len));

  if (strcasecmp("charset", name) == 0) {
    *forbidden = true;
    return;
  }
wafwerar's avatar
wafwerar 已提交
949
  GRANT_CFG_CHECK;
950 951 952 953

  *forbidden = false;
}

D
dapan1121 已提交
954
int32_t taosApplyLocalCfg(SConfig *pCfg, char *name) {
D
dapan1121 已提交
955 956 957 958 959 960 961 962
  int32_t len = strlen(name);
  char    lowcaseName[CFG_NAME_MAX_LEN + 1] = {0};
  strntolower(lowcaseName, name, TMIN(CFG_NAME_MAX_LEN, len));

  switch (lowcaseName[0]) {
    case 'a': {
      if (strcasecmp("asyncLog", name) == 0) {
        tsAsyncLog = cfgGetItem(pCfg, "asyncLog")->bval;
S
Shengliang Guan 已提交
963 964
      } else if (strcasecmp("assert", name) == 0) {
        tsAssert = cfgGetItem(pCfg, "assert")->bval;
965
      }
D
dapan1121 已提交
966 967 968 969 970 971 972 973 974 975 976 977 978 979
      break;
    }
    case 'c': {
      if (strcasecmp("charset", name) == 0) {
        const char *locale = cfgGetItem(pCfg, "locale")->str;
        const char *charset = cfgGetItem(pCfg, "charset")->str;
        taosSetSystemLocale(locale, charset);
        osSetSystemLocale(locale, charset);
      } else if (strcasecmp("compressMsgSize", name) == 0) {
        tsCompressMsgSize = cfgGetItem(pCfg, "compressMsgSize")->i32;
      } else if (strcasecmp("compressColData", name) == 0) {
        tsCompressColData = cfgGetItem(pCfg, "compressColData")->i32;
      } else if (strcasecmp("countAlwaysReturnValue", name) == 0) {
        tsCountAlwaysReturnValue = cfgGetItem(pCfg, "countAlwaysReturnValue")->i32;
L
Liu Jicong 已提交
980
      } else if (strcasecmp("cDebugFlag", name) == 0) {
D
dapan1121 已提交
981
        cDebugFlag = cfgGetItem(pCfg, "cDebugFlag")->i32;
D
dapan1121 已提交
982 983
      } else if (strcasecmp("crashReporting", name) == 0) {
        tsEnableCrashReport = cfgGetItem(pCfg, "crashReporting")->bval;
D
dapan1121 已提交
984 985 986 987
      }
      break;
    }
    case 'd': {
S
Shengliang Guan 已提交
988
      if (strcasecmp("dDebugFlag", name) == 0) {
D
dapan1121 已提交
989
        dDebugFlag = cfgGetItem(pCfg, "dDebugFlag")->i32;
990 991 992
      } else if (strcasecmp("debugFlag", name) == 0) {
        int32_t flag = cfgGetItem(pCfg, "debugFlag")->i32;
        taosSetAllDebugFlag(flag, true);
D
dapan1121 已提交
993 994 995 996 997 998
      }
      break;
    }
    case 'e': {
      if (strcasecmp("enableCoreFile", name) == 0) {
        bool enableCore = cfgGetItem(pCfg, "enableCoreFile")->bval;
wafwerar's avatar
wafwerar 已提交
999
        taosSetCoreDump(enableCore);
1000 1001
      } else if (strcasecmp("enableQueryHb", name) == 0) {
        tsEnableQueryHb = cfgGetItem(pCfg, "enableQueryHb")->bval;
1002 1003
      }  else if (strcasecmp("ttlChangeOnWrite", name) == 0) {
        tsTtlChangeOnWrite = cfgGetItem(pCfg, "ttlChangeOnWrite")->bval;
D
dapan1121 已提交
1004 1005 1006 1007 1008 1009 1010 1011
      }
      break;
    }
    case 'f': {
      if (strcasecmp("fqdn", name) == 0) {
        tstrncpy(tsLocalFqdn, cfgGetItem(pCfg, "fqdn")->str, TSDB_FQDN_LEN);
        tsServerPort = (uint16_t)cfgGetItem(pCfg, "serverPort")->i32;
        snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
L
Liu Jicong 已提交
1012

D
dapan1121 已提交
1013 1014
        char defaultFirstEp[TSDB_EP_LEN] = {0};
        snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort);
L
Liu Jicong 已提交
1015

D
dapan1121 已提交
1016 1017 1018 1019 1020 1021 1022 1023 1024
        SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp");
        SEp          firstEp = {0};
        taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp);
        snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port);
        cfgSetItem(pCfg, "firstEp", tsFirst, pFirstEpItem->stype);
      } else if (strcasecmp("firstEp", name) == 0) {
        tstrncpy(tsLocalFqdn, cfgGetItem(pCfg, "fqdn")->str, TSDB_FQDN_LEN);
        tsServerPort = (uint16_t)cfgGetItem(pCfg, "serverPort")->i32;
        snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
L
Liu Jicong 已提交
1025

D
dapan1121 已提交
1026 1027
        char defaultFirstEp[TSDB_EP_LEN] = {0};
        snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort);
L
Liu Jicong 已提交
1028

D
dapan1121 已提交
1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051
        SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp");
        SEp          firstEp = {0};
        taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp);
        snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port);
        cfgSetItem(pCfg, "firstEp", tsFirst, pFirstEpItem->stype);
      } else if (strcasecmp("fsDebugFlag", name) == 0) {
        fsDebugFlag = cfgGetItem(pCfg, "fsDebugFlag")->i32;
      }
      break;
    }
    case 'i': {
      if (strcasecmp("idxDebugFlag", name) == 0) {
        idxDebugFlag = cfgGetItem(pCfg, "idxDebugFlag")->i32;
      }
      break;
    }
    case 'j': {
      if (strcasecmp("jniDebugFlag", name) == 0) {
        jniDebugFlag = cfgGetItem(pCfg, "jniDebugFlag")->i32;
      }
      break;
    }
    case 'k': {
1052 1053 1054
      if (strcasecmp("keepColumnName", name) == 0) {
        tsKeepColumnName = cfgGetItem(pCfg, "keepColumnName")->bval;
      }
D
dapan1121 已提交
1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077
      break;
    }
    case 'l': {
      if (strcasecmp("locale", name) == 0) {
        const char *locale = cfgGetItem(pCfg, "locale")->str;
        const char *charset = cfgGetItem(pCfg, "charset")->str;
        taosSetSystemLocale(locale, charset);
        osSetSystemLocale(locale, charset);
      } else if (strcasecmp("logDir", name) == 0) {
        tstrncpy(tsLogDir, cfgGetItem(pCfg, "logDir")->str, PATH_MAX);
        taosExpandDir(tsLogDir, tsLogDir, PATH_MAX);
      } else if (strcasecmp("logKeepDays", name) == 0) {
        tsLogKeepDays = cfgGetItem(pCfg, "logKeepDays")->i32;
      }
      break;
    }
    case 'm': {
      switch (lowcaseName[1]) {
        case 'a': {
          if (strcasecmp("maxShellConns", name) == 0) {
            tsMaxShellConns = cfgGetItem(pCfg, "maxShellConns")->i32;
          } else if (strcasecmp("maxNumOfDistinctRes", name) == 0) {
            tsMaxNumOfDistinctResults = cfgGetItem(pCfg, "maxNumOfDistinctRes")->i32;
1078
          } else if (strcasecmp("maxMemUsedByInsert", name) == 0) {
1079
            tsMaxInsertBatchRows = cfgGetItem(pCfg, "maxInsertBatchRows")->i32;
1080 1081
          } else if (strcasecmp("maxRetryWaitTime", name) == 0) {
            tsMaxRetryWaitTime = cfgGetItem(pCfg, "maxRetryWaitTime")->i32;
D
dapan1121 已提交
1082 1083 1084 1085 1086 1087 1088 1089 1090
          }
          break;
        }
        case 'd': {
          if (strcasecmp("mDebugFlag", name) == 0) {
            mDebugFlag = cfgGetItem(pCfg, "mDebugFlag")->i32;
          }
          break;
        }
D
dapan1121 已提交
1091 1092 1093 1094 1095 1096
        case 'e': {
          if (strcasecmp("metaCacheMaxSize", name) == 0) {
            atomic_store_32(&tsMetaCacheMaxSize, cfgGetItem(pCfg, "metaCacheMaxSize")->i32);
          }
          break;
        }
D
dapan1121 已提交
1097
        case 'i': {
S
Shengliang Guan 已提交
1098
          if (strcasecmp("minimalTmpDirGB", name) == 0) {
wafwerar's avatar
wafwerar 已提交
1099
            tsTempSpace.reserved = (int64_t)(((double)cfgGetItem(pCfg, "minimalTmpDirGB")->fval) * 1024 * 1024 * 1024);
D
dapan1121 已提交
1100
          } else if (strcasecmp("minimalDataDirGB", name) == 0) {
wafwerar's avatar
wafwerar 已提交
1101
            tsDataSpace.reserved = (int64_t)(((double)cfgGetItem(pCfg, "minimalDataDirGB")->fval) * 1024 * 1024 * 1024);
D
dapan1121 已提交
1102 1103 1104
          } else if (strcasecmp("minSlidingTime", name) == 0) {
            tsMinSlidingTime = cfgGetItem(pCfg, "minSlidingTime")->i32;
          } else if (strcasecmp("minIntervalTime", name) == 0) {
L
Liu Jicong 已提交
1105
            tsMinIntervalTime = cfgGetItem(pCfg, "minIntervalTime")->i32;
D
dapan1121 已提交
1106
          } else if (strcasecmp("minimalLogDirGB", name) == 0) {
wafwerar's avatar
wafwerar 已提交
1107
            tsLogSpace.reserved = (int64_t)(((double)cfgGetItem(pCfg, "minimalLogDirGB")->fval) * 1024 * 1024 * 1024);
D
dapan1121 已提交
1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133
          }
          break;
        }
        case 'o': {
          if (strcasecmp("monitor", name) == 0) {
            tsEnableMonitor = cfgGetItem(pCfg, "monitor")->bval;
          } else if (strcasecmp("monitorInterval", name) == 0) {
            tsMonitorInterval = cfgGetItem(pCfg, "monitorInterval")->i32;
          } else if (strcasecmp("monitorFqdn", name) == 0) {
            tstrncpy(tsMonitorFqdn, cfgGetItem(pCfg, "monitorFqdn")->str, TSDB_FQDN_LEN);
          } else if (strcasecmp("monitorPort", name) == 0) {
            tsMonitorPort = (uint16_t)cfgGetItem(pCfg, "monitorPort")->i32;
          } else if (strcasecmp("monitorMaxLogs", name) == 0) {
            tsMonitorMaxLogs = cfgGetItem(pCfg, "monitorMaxLogs")->i32;
          } else if (strcasecmp("monitorComp", name) == 0) {
            tsMonitorComp = cfgGetItem(pCfg, "monitorComp")->bval;
          }
          break;
        }
        case 'q': {
          if (strcasecmp("mqRebalanceInterval", name) == 0) {
            tsMqRebalanceInterval = cfgGetItem(pCfg, "mqRebalanceInterval")->i32;
          }
          break;
        }
        case 'u': {
1134
          if (strcasecmp("udfDebugFlag", name) == 0) {
S
Shengliang Guan 已提交
1135
            udfDebugFlag = cfgGetItem(pCfg, "udfDebugFlag")->i32;
D
dapan1121 已提交
1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149
          }
          break;
        }
        default:
          terrno = TSDB_CODE_CFG_NOT_FOUND;
          return -1;
      }
      break;
    }
    case 'n': {
      if (strcasecmp("numOfTaskQueueThreads", name) == 0) {
        tsNumOfTaskQueueThreads = cfgGetItem(pCfg, "numOfTaskQueueThreads")->i32;
      } else if (strcasecmp("numOfRpcThreads", name) == 0) {
        tsNumOfRpcThreads = cfgGetItem(pCfg, "numOfRpcThreads")->i32;
dengyihao's avatar
dengyihao 已提交
1150 1151
      } else if (strcasecmp("numOfRpcSessions", name) == 0) {
        tsNumOfRpcSessions = cfgGetItem(pCfg, "numOfRpcSessions")->i32;
D
dapan1121 已提交
1152 1153 1154 1155 1156 1157
      } else if (strcasecmp("numOfCommitThreads", name) == 0) {
        tsNumOfCommitThreads = cfgGetItem(pCfg, "numOfCommitThreads")->i32;
      } else if (strcasecmp("numOfMnodeReadThreads", name) == 0) {
        tsNumOfMnodeReadThreads = cfgGetItem(pCfg, "numOfMnodeReadThreads")->i32;
      } else if (strcasecmp("numOfVnodeQueryThreads", name) == 0) {
        tsNumOfVnodeQueryThreads = cfgGetItem(pCfg, "numOfVnodeQueryThreads")->i32;
1158 1159 1160 1161
        /*
              } else if (strcasecmp("numOfVnodeFetchThreads", name) == 0) {
                tsNumOfVnodeFetchThreads = cfgGetItem(pCfg, "numOfVnodeFetchThreads")->i32;
        */
C
Cary Xu 已提交
1162 1163
      } else if (strcasecmp("numOfVnodeRsmaThreads", name) == 0) {
        tsNumOfVnodeRsmaThreads = cfgGetItem(pCfg, "numOfVnodeRsmaThreads")->i32;
D
dapan1121 已提交
1164 1165
      } else if (strcasecmp("numOfQnodeQueryThreads", name) == 0) {
        tsNumOfQnodeQueryThreads = cfgGetItem(pCfg, "numOfQnodeQueryThreads")->i32;
L
Liu Jicong 已提交
1166 1167 1168 1169
        /*
              } else if (strcasecmp("numOfQnodeFetchThreads", name) == 0) {
                tsNumOfQnodeFetchThreads = cfgGetItem(pCfg, "numOfQnodeFetchThreads")->i32;
        */
D
dapan1121 已提交
1170
      } else if (strcasecmp("numOfSnodeSharedThreads", name) == 0) {
L
Liu Jicong 已提交
1171
        tsNumOfSnodeStreamThreads = cfgGetItem(pCfg, "numOfSnodeSharedThreads")->i32;
D
dapan1121 已提交
1172
      } else if (strcasecmp("numOfSnodeUniqueThreads", name) == 0) {
L
Liu Jicong 已提交
1173
        tsNumOfSnodeWriteThreads = cfgGetItem(pCfg, "numOfSnodeUniqueThreads")->i32;
D
dapan1121 已提交
1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196
      } else if (strcasecmp("numOfLogLines", name) == 0) {
        tsNumOfLogLines = cfgGetItem(pCfg, "numOfLogLines")->i32;
      }
      break;
    }
    case 'p': {
      if (strcasecmp("printAuth", name) == 0) {
        tsPrintAuth = cfgGetItem(pCfg, "printAuth")->bval;
      }
      break;
    }
    case 'q': {
      if (strcasecmp("queryPolicy", name) == 0) {
        tsQueryPolicy = cfgGetItem(pCfg, "queryPolicy")->i32;
      } else if (strcasecmp("querySmaOptimize", name) == 0) {
        tsQuerySmaOptimize = cfgGetItem(pCfg, "querySmaOptimize")->i32;
      } else if (strcasecmp("queryBufferSize", name) == 0) {
        tsQueryBufferSize = cfgGetItem(pCfg, "queryBufferSize")->i32;
        if (tsQueryBufferSize >= 0) {
          tsQueryBufferSizeBytes = tsQueryBufferSize * 1048576UL;
        }
      } else if (strcasecmp("qDebugFlag", name) == 0) {
        qDebugFlag = cfgGetItem(pCfg, "qDebugFlag")->i32;
1197 1198
      } else if (strcasecmp("queryPlannerTrace", name) == 0) {
        tsQueryPlannerTrace = cfgGetItem(pCfg, "queryPlannerTrace")->bval;
1199 1200 1201 1202
      } else if (strcasecmp("queryNodeChunkSize", name) == 0) {
        tsQueryNodeChunkSize = cfgGetItem(pCfg, "queryNodeChunkSize")->i32;
      } else if (strcasecmp("queryUseNodeAllocator", name) == 0) {
        tsQueryUseNodeAllocator = cfgGetItem(pCfg, "queryUseNodeAllocator")->bval;
1203 1204
      } else if (strcasecmp("queryRsmaTolerance", name) == 0) {
        tsQueryRsmaTolerance = cfgGetItem(pCfg, "queryRsmaTolerance")->i32;
D
dapan1121 已提交
1205 1206 1207 1208
      }
      break;
    }
    case 'r': {
S
Shengliang Guan 已提交
1209
      if (strcasecmp("rpcQueueMemoryAllowed", name) == 0) {
D
dapan1121 已提交
1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226
        tsRpcQueueMemoryAllowed = cfgGetItem(pCfg, "rpcQueueMemoryAllowed")->i64;
      } else if (strcasecmp("rpcDebugFlag", name) == 0) {
        rpcDebugFlag = cfgGetItem(pCfg, "rpcDebugFlag")->i32;
      }
      break;
    }
    case 's': {
      if (strcasecmp("secondEp", name) == 0) {
        SConfigItem *pSecondpItem = cfgGetItem(pCfg, "secondEp");
        SEp          secondEp = {0};
        taosGetFqdnPortFromEp(strlen(pSecondpItem->str) == 0 ? tsFirst : pSecondpItem->str, &secondEp);
        snprintf(tsSecond, sizeof(tsSecond), "%s:%u", secondEp.fqdn, secondEp.port);
        cfgSetItem(pCfg, "secondEp", tsSecond, pSecondpItem->stype);
      } else if (strcasecmp("smlChildTableName", name) == 0) {
        tstrncpy(tsSmlChildTableName, cfgGetItem(pCfg, "smlChildTableName")->str, TSDB_TABLE_NAME_LEN);
      } else if (strcasecmp("smlTagName", name) == 0) {
        tstrncpy(tsSmlTagName, cfgGetItem(pCfg, "smlTagName")->str, TSDB_COL_NAME_LEN);
X
Xiaoyu Wang 已提交
1227 1228 1229 1230
        //      } else if (strcasecmp("smlDataFormat", name) == 0) {
        //        tsSmlDataFormat = cfgGetItem(pCfg, "smlDataFormat")->bval;
        //      } else if (strcasecmp("smlBatchSize", name) == 0) {
        //        tsSmlBatchSize = cfgGetItem(pCfg, "smlBatchSize")->i32;
D
dapan1121 已提交
1231 1232 1233 1234 1235 1236 1237 1238 1239 1240
      } else if (strcasecmp("shellActivityTimer", name) == 0) {
        tsShellActivityTimer = cfgGetItem(pCfg, "shellActivityTimer")->i32;
      } else if (strcasecmp("supportVnodes", name) == 0) {
        tsNumOfSupportVnodes = cfgGetItem(pCfg, "supportVnodes")->i32;
      } else if (strcasecmp("statusInterval", name) == 0) {
        tsStatusInterval = cfgGetItem(pCfg, "statusInterval")->i32;
      } else if (strcasecmp("serverPort", name) == 0) {
        tstrncpy(tsLocalFqdn, cfgGetItem(pCfg, "fqdn")->str, TSDB_FQDN_LEN);
        tsServerPort = (uint16_t)cfgGetItem(pCfg, "serverPort")->i32;
        snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
L
Liu Jicong 已提交
1241

D
dapan1121 已提交
1242 1243
        char defaultFirstEp[TSDB_EP_LEN] = {0};
        snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort);
L
Liu Jicong 已提交
1244

D
dapan1121 已提交
1245 1246 1247 1248 1249 1250 1251 1252 1253
        SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp");
        SEp          firstEp = {0};
        taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp);
        snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port);
        cfgSetItem(pCfg, "firstEp", tsFirst, pFirstEpItem->stype);
      } else if (strcasecmp("sDebugFlag", name) == 0) {
        sDebugFlag = cfgGetItem(pCfg, "sDebugFlag")->i32;
      } else if (strcasecmp("smaDebugFlag", name) == 0) {
        smaDebugFlag = cfgGetItem(pCfg, "smaDebugFlag")->i32;
D
dapan1121 已提交
1254 1255 1256
      } else if (strcasecmp("slowLogThreshold", name) == 0) {
        tsSlowLogThreshold = cfgGetItem(pCfg, "slowLogThreshold")->i32;
      } else if (strcasecmp("slowLogScope", name) == 0) {
1257 1258 1259
        if (taosSetSlowLogScope(cfgGetItem(pCfg, "slowLogScope")->str)) {
          return -1;
        }
D
dapan1121 已提交
1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275
      }
      break;
    }
    case 't': {
      if (strcasecmp("timezone", name) == 0) {
        SConfigItem *pItem = cfgGetItem(pCfg, "timezone");
        osSetTimezone(pItem->str);
        uDebug("timezone format changed from %s to %s", pItem->str, tsTimezoneStr);
        cfgSetItem(pCfg, "timezone", tsTimezoneStr, pItem->stype);
      } else if (strcasecmp("tempDir", name) == 0) {
        tstrncpy(tsTempDir, cfgGetItem(pCfg, "tempDir")->str, PATH_MAX);
        taosExpandDir(tsTempDir, tsTempDir, PATH_MAX);
        if (taosMulMkDir(tsTempDir) != 0) {
          uError("failed to create tempDir:%s since %s", tsTempDir, terrstr());
          return -1;
        }
M
Minglei Jin 已提交
1276 1277
      } else if (strcasecmp("tdbDebugFlag", name) == 0) {
        tdbDebugFlag = cfgGetItem(pCfg, "tdbDebugFlag")->i32;
D
dapan1121 已提交
1278 1279 1280 1281 1282 1283 1284 1285 1286 1287
      } else if (strcasecmp("telemetryReporting", name) == 0) {
        tsEnableTelem = cfgGetItem(pCfg, "telemetryReporting")->bval;
      } else if (strcasecmp("telemetryInterval", name) == 0) {
        tsTelemInterval = cfgGetItem(pCfg, "telemetryInterval")->i32;
      } else if (strcasecmp("telemetryServer", name) == 0) {
        tstrncpy(tsTelemServer, cfgGetItem(pCfg, "telemetryServer")->str, TSDB_FQDN_LEN);
      } else if (strcasecmp("telemetryPort", name) == 0) {
        tsTelemPort = (uint16_t)cfgGetItem(pCfg, "telemetryPort")->i32;
      } else if (strcasecmp("transPullupInterval", name) == 0) {
        tsTransPullupInterval = cfgGetItem(pCfg, "transPullupInterval")->i32;
wmmhello's avatar
wmmhello 已提交
1288 1289 1290 1291
      } else if (strcasecmp("ttlUnit", name) == 0) {
        tsTtlUnit = cfgGetItem(pCfg, "ttlUnit")->i32;
      } else if (strcasecmp("ttlPushInterval", name) == 0) {
        tsTtlPushInterval = cfgGetItem(pCfg, "ttlPushInterval")->i32;
D
dapan1121 已提交
1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305
      } else if (strcasecmp("tmrDebugFlag", name) == 0) {
        tmrDebugFlag = cfgGetItem(pCfg, "tmrDebugFlag")->i32;
      } else if (strcasecmp("tsdbDebugFlag", name) == 0) {
        tsdbDebugFlag = cfgGetItem(pCfg, "tsdbDebugFlag")->i32;
      } else if (strcasecmp("tqDebugFlag", name) == 0) {
        tqDebugFlag = cfgGetItem(pCfg, "tqDebugFlag")->i32;
      }
      break;
    }
    case 'u': {
      if (strcasecmp("udf", name) == 0) {
        tsStartUdfd = cfgGetItem(pCfg, "udf")->bval;
      } else if (strcasecmp("uDebugFlag", name) == 0) {
        uDebugFlag = cfgGetItem(pCfg, "uDebugFlag")->i32;
X
Xiaoyu Wang 已提交
1306 1307
      } else if (strcasecmp("useAdapter", name) == 0) {
        tsUseAdapter = cfgGetItem(pCfg, "useAdapter")->bval;
D
dapan1121 已提交
1308 1309 1310 1311
      }
      break;
    }
    case 'v': {
1312
      if (strcasecmp("vDebugFlag", name) == 0) {
D
dapan1121 已提交
1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323
        vDebugFlag = cfgGetItem(pCfg, "vDebugFlag")->i32;
      }
      break;
    }
    case 'w': {
      if (strcasecmp("wDebugFlag", name) == 0) {
        wDebugFlag = cfgGetItem(pCfg, "wDebugFlag")->i32;
      }
      break;
    }
    default:
L
Liu Jicong 已提交
1324
      terrno = TSDB_CODE_CFG_NOT_FOUND;
D
dapan1121 已提交
1325 1326
      return -1;
  }
L
Liu Jicong 已提交
1327

D
dapan1121 已提交
1328 1329 1330
  return 0;
}

1331 1332
int32_t taosCreateLog(const char *logname, int32_t logFileNum, const char *cfgDir, const char **envCmd,
                      const char *envFile, char *apolloUrl, SArray *pArgs, bool tsc) {
wafwerar's avatar
wafwerar 已提交
1333
  if (tsCfg == NULL) osDefaultInit();
S
Shengliang Guan 已提交
1334

S
Shengliang Guan 已提交
1335
  SConfig *pCfg = cfgInit();
S
config  
Shengliang Guan 已提交
1336
  if (pCfg == NULL) return -1;
S
Shengliang Guan 已提交
1337 1338

  if (tsc) {
S
Shengliang Guan 已提交
1339
    tsLogEmbedded = 0;
S
Shengliang Guan 已提交
1340 1341 1342 1343
    if (taosAddClientLogCfg(pCfg) != 0) {
      cfgCleanup(pCfg);
      return -1;
    }
S
Shengliang Guan 已提交
1344
  } else {
S
Shengliang Guan 已提交
1345
    tsLogEmbedded = 1;
S
Shengliang Guan 已提交
1346 1347 1348 1349 1350 1351 1352 1353
    if (taosAddClientLogCfg(pCfg) != 0) {
      cfgCleanup(pCfg);
      return -1;
    }
    if (taosAddServerLogCfg(pCfg) != 0) {
      cfgCleanup(pCfg);
      return -1;
    }
S
Shengliang Guan 已提交
1354 1355
  }

wafwerar's avatar
wafwerar 已提交
1356
  if (taosLoadCfg(pCfg, envCmd, cfgDir, envFile, apolloUrl) != 0) {
wmmhello's avatar
wmmhello 已提交
1357
    printf("failed to load cfg since %s", terrstr());
S
Shengliang Guan 已提交
1358 1359 1360 1361
    cfgCleanup(pCfg);
    return -1;
  }

1362
  if (cfgLoadFromArray(pCfg, pArgs) != 0) {
wmmhello's avatar
wmmhello 已提交
1363
    printf("failed to load cfg from array since %s", terrstr());
S
Shengliang Guan 已提交
1364 1365 1366 1367
    cfgCleanup(pCfg);
    return -1;
  }

S
Shengliang Guan 已提交
1368 1369 1370
  if (tsc) {
    taosSetClientLogCfg(pCfg);
  } else {
S
config  
Shengliang Guan 已提交
1371
    taosSetClientLogCfg(pCfg);
S
Shengliang Guan 已提交
1372 1373 1374
    taosSetServerLogCfg(pCfg);
  }

wafwerar's avatar
wafwerar 已提交
1375
  taosSetAllDebugFlag(cfgGetItem(pCfg, "debugFlag")->i32, false);
S
Shengliang Guan 已提交
1376

wafwerar's avatar
wafwerar 已提交
1377
  if (taosMulModeMkDir(tsLogDir, 0777) != 0) {
1378
    terrno = TAOS_SYSTEM_ERROR(errno);
wmmhello's avatar
wmmhello 已提交
1379
    printf("failed to create dir:%s since %s", tsLogDir, terrstr());
1380 1381 1382 1383
    cfgCleanup(pCfg);
    return -1;
  }

S
Shengliang Guan 已提交
1384
  if (taosInitLog(logname, logFileNum) != 0) {
wmmhello's avatar
wmmhello 已提交
1385
    printf("failed to init log file since %s", terrstr());
S
Shengliang Guan 已提交
1386 1387
    cfgCleanup(pCfg);
    return -1;
1388 1389
  }

S
Shengliang Guan 已提交
1390 1391 1392 1393
  cfgCleanup(pCfg);
  return 0;
}

1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411
static int32_t taosCheckGlobalCfg() {
  uint32_t ipv4 = taosGetIpv4FromFqdn(tsLocalFqdn);
  if (ipv4 == 0xffffffff) {
    terrno = TAOS_SYSTEM_ERROR(errno);
    uError("failed to get ip from fqdn:%s since %s, dnode can not be initialized", tsLocalFqdn, terrstr());
    return -1;
  }

  if (tsServerPort <= 0) {
    uError("invalid server port:%u, dnode can not be initialized", tsServerPort);
    return -1;
  }

  return 0;
}

int32_t taosInitCfg(const char *cfgDir, const char **envCmd, const char *envFile, char *apolloUrl, SArray *pArgs,
                    bool tsc) {
S
Shengliang Guan 已提交
1412 1413 1414 1415
  if (tsCfg != NULL) return 0;
  tsCfg = cfgInit();

  if (tsc) {
S
Shengliang Guan 已提交
1416
    if (taosAddClientCfg(tsCfg) != 0) return -1;
S
Shengliang Guan 已提交
1417
    if (taosAddClientLogCfg(tsCfg) != 0) return -1;
S
Shengliang Guan 已提交
1418
  } else {
S
Shengliang Guan 已提交
1419 1420
    if (taosAddClientCfg(tsCfg) != 0) return -1;
    if (taosAddServerCfg(tsCfg) != 0) return -1;
S
Shengliang Guan 已提交
1421 1422
    if (taosAddClientLogCfg(tsCfg) != 0) return -1;
    if (taosAddServerLogCfg(tsCfg) != 0) return -1;
1423
  }
S
Shengliang Guan 已提交
1424
  taosAddSystemCfg(tsCfg);
1425

wafwerar's avatar
wafwerar 已提交
1426
  if (taosLoadCfg(tsCfg, envCmd, cfgDir, envFile, apolloUrl) != 0) {
S
config  
Shengliang Guan 已提交
1427
    uError("failed to load cfg since %s", terrstr());
S
Shengliang Guan 已提交
1428 1429 1430
    cfgCleanup(tsCfg);
    tsCfg = NULL;
    return -1;
1431 1432
  }

1433
  if (cfgLoadFromArray(tsCfg, pArgs) != 0) {
S
Shengliang Guan 已提交
1434 1435
    uError("failed to load cfg from array since %s", terrstr());
    cfgCleanup(tsCfg);
1436
    tsCfg = NULL;
S
Shengliang Guan 已提交
1437 1438 1439
    return -1;
  }

S
Shengliang Guan 已提交
1440
  if (tsc) {
S
Shengliang Guan 已提交
1441
    if (taosSetClientCfg(tsCfg)) return -1;
S
Shengliang Guan 已提交
1442
  } else {
S
Shengliang Guan 已提交
1443
    if (taosSetClientCfg(tsCfg)) return -1;
wafwerar's avatar
wafwerar 已提交
1444
    if (taosUpdateServerCfg(tsCfg)) return -1;
S
Shengliang Guan 已提交
1445 1446
    if (taosSetServerCfg(tsCfg)) return -1;
    if (taosSetTfsCfg(tsCfg) != 0) return -1;
1447
  }
S
os  
Shengliang Guan 已提交
1448
  taosSetSystemCfg(tsCfg);
1449

S
Shengliang Guan 已提交
1450
  cfgDumpCfg(tsCfg, tsc, false);
1451 1452 1453 1454 1455

  if (taosCheckGlobalCfg() != 0) {
    return -1;
  }

S
Shengliang Guan 已提交
1456 1457 1458
  return 0;
}

S
config  
Shengliang Guan 已提交
1459 1460 1461 1462 1463 1464 1465
void taosCleanupCfg() {
  if (tsCfg) {
    cfgCleanup(tsCfg);
    tsCfg = NULL;
  }
}

S
Shengliang Guan 已提交
1466
void taosCfgDynamicOptions(const char *option, const char *value) {
S
Shengliang Guan 已提交
1467 1468
  if (strncasecmp(option, "debugFlag", 9) == 0) {
    int32_t flag = atoi(value);
wafwerar's avatar
wafwerar 已提交
1469
    taosSetAllDebugFlag(flag, true);
1470
    return;
S
Shengliang Guan 已提交
1471 1472 1473 1474
  }

  if (strcasecmp(option, "resetlog") == 0) {
    taosResetLog();
1475
    cfgDumpCfg(tsCfg, 0, false);
1476
    return;
S
Shengliang Guan 已提交
1477
  }
1478 1479 1480 1481 1482

  if (strcasecmp(option, "monitor") == 0) {
    int32_t monitor = atoi(value);
    uInfo("monitor set from %d to %d", tsEnableMonitor, monitor);
    tsEnableMonitor = monitor;
1483 1484 1485 1486
    SConfigItem *pItem = cfgGetItem(tsCfg, "monitor");
    if (pItem != NULL) {
      pItem->bval = tsEnableMonitor;
    }
1487 1488 1489
    return;
  }

1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502
  if (strcasecmp(option, "keepTimeOffset") == 0) {
    int32_t newKeepTimeOffset = atoi(value);
    if (newKeepTimeOffset < 0 || newKeepTimeOffset > 23) {
      uError("failed to set keepTimeOffset from %d to %d. Valid range: [0, 23]", tsKeepTimeOffset, newKeepTimeOffset);
      return;
    }

    uInfo("keepTimeOffset set from %d to %d", tsKeepTimeOffset, newKeepTimeOffset);
    tsKeepTimeOffset = newKeepTimeOffset;

    return;
  }

1503
  const char *options[] = {
1504 1505 1506
      "dDebugFlag",   "vDebugFlag",   "mDebugFlag",   "wDebugFlag",    "sDebugFlag",   "tsdbDebugFlag", "tqDebugFlag",
      "fsDebugFlag",  "udfDebugFlag", "smaDebugFlag", "idxDebugFlag",  "tdbDebugFlag", "tmrDebugFlag",  "uDebugFlag",
      "smaDebugFlag", "rpcDebugFlag", "qDebugFlag",   "metaDebugFlag", "jniDebugFlag",
1507 1508
  };
  int32_t *optionVars[] = {
1509 1510 1511
      &dDebugFlag,   &vDebugFlag,   &mDebugFlag,   &wDebugFlag,    &sDebugFlag,   &tsdbDebugFlag, &tqDebugFlag,
      &fsDebugFlag,  &udfDebugFlag, &smaDebugFlag, &idxDebugFlag,  &tdbDebugFlag, &tmrDebugFlag,  &uDebugFlag,
      &smaDebugFlag, &rpcDebugFlag, &qDebugFlag,   &metaDebugFlag, &jniDebugFlag,
1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522
  };

  int32_t optionSize = tListLen(options);
  for (int32_t d = 0; d < optionSize; ++d) {
    const char *optName = options[d];
    int32_t     optLen = strlen(optName);
    if (strncasecmp(option, optName, optLen) != 0) continue;

    int32_t flag = atoi(value);
    uInfo("%s set from %d to %d", optName, *optionVars[d], flag);
    *optionVars[d] = flag;
wafwerar's avatar
wafwerar 已提交
1523
    taosSetDebugFlag(optionVars[d], optName, flag, true);
1524
    return;
S
Shengliang Guan 已提交
1525
  }
1526 1527

  uError("failed to cfg dynamic option:%s value:%s", option, value);
L
Liu Jicong 已提交
1528
}
S
Shengliang Guan 已提交
1529

wafwerar's avatar
wafwerar 已提交
1530
void taosSetDebugFlag(int32_t *pFlagPtr, const char *flagName, int32_t flagVal, bool rewrite) {
S
Shengliang Guan 已提交
1531
  SConfigItem *pItem = cfgGetItem(tsCfg, flagName);
wafwerar's avatar
wafwerar 已提交
1532
  if (pItem != NULL && (rewrite || pItem->i32 == 0)) {
S
Shengliang Guan 已提交
1533 1534
    pItem->i32 = flagVal;
  }
1535 1536 1537
  if (pFlagPtr != NULL) {
    *pFlagPtr = flagVal;
  }
S
Shengliang Guan 已提交
1538 1539
}

wafwerar's avatar
wafwerar 已提交
1540
void taosSetAllDebugFlag(int32_t flag, bool rewrite) {
S
Shengliang Guan 已提交
1541 1542
  if (flag <= 0) return;

1543 1544 1545
  taosSetDebugFlag(NULL, "debugFlag", flag, rewrite);
  taosSetDebugFlag(NULL, "simDebugFlag", flag, rewrite);
  taosSetDebugFlag(NULL, "tmrDebugFlag", flag, rewrite);
wafwerar's avatar
wafwerar 已提交
1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563
  taosSetDebugFlag(&uDebugFlag, "uDebugFlag", flag, rewrite);
  taosSetDebugFlag(&rpcDebugFlag, "rpcDebugFlag", flag, rewrite);
  taosSetDebugFlag(&jniDebugFlag, "jniDebugFlag", flag, rewrite);
  taosSetDebugFlag(&qDebugFlag, "qDebugFlag", flag, rewrite);
  taosSetDebugFlag(&cDebugFlag, "cDebugFlag", flag, rewrite);
  taosSetDebugFlag(&dDebugFlag, "dDebugFlag", flag, rewrite);
  taosSetDebugFlag(&vDebugFlag, "vDebugFlag", flag, rewrite);
  taosSetDebugFlag(&mDebugFlag, "mDebugFlag", flag, rewrite);
  taosSetDebugFlag(&wDebugFlag, "wDebugFlag", flag, rewrite);
  taosSetDebugFlag(&sDebugFlag, "sDebugFlag", flag, rewrite);
  taosSetDebugFlag(&tsdbDebugFlag, "tsdbDebugFlag", flag, rewrite);
  taosSetDebugFlag(&tqDebugFlag, "tqDebugFlag", flag, rewrite);
  taosSetDebugFlag(&fsDebugFlag, "fsDebugFlag", flag, rewrite);
  taosSetDebugFlag(&udfDebugFlag, "udfDebugFlag", flag, rewrite);
  taosSetDebugFlag(&smaDebugFlag, "smaDebugFlag", flag, rewrite);
  taosSetDebugFlag(&idxDebugFlag, "idxDebugFlag", flag, rewrite);
  taosSetDebugFlag(&tdbDebugFlag, "tdbDebugFlag", flag, rewrite);
  taosSetDebugFlag(&metaDebugFlag, "metaDebugFlag", flag, rewrite);
S
Shengliang Guan 已提交
1564 1565
  uInfo("all debug flag are set to %d", flag);
}
K
kailixu 已提交
1566

K
kailixu 已提交
1567
int8_t taosGranted() { return atomic_load_8(&tsGrant); }