tglobal.c 66.4 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};
S
Shengliang Guan 已提交
189

S
Shengliang Guan 已提交
190 191 192 193 194 195 196 197 198
// 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
199

S
slzhou 已提交
200
// udf
201
bool tsStartUdfd = true;
S
slzhou 已提交
202

203
// wal
204
int64_t tsWalFsyncDataSizeLimit = (100 * 1024 * 1024L);
205

206
// internal
207
int32_t tsTransPullupInterval = 2;
208
int32_t tsMqRebalanceInterval = 2;
209
int32_t tsStreamCheckpointTickInterval = 1;
wmmhello's avatar
wmmhello 已提交
210
int32_t tsTtlUnit = 86400;
211
int32_t tsTtlPushInterval = 3600;
C
Cary Xu 已提交
212
int32_t tsGrantHBInterval = 60;
dengyihao's avatar
dengyihao 已提交
213
int32_t tsUptimeInterval = 300;    // seconds
214 215
char    tsUdfdResFuncs[512] = "";  // udfd resident funcs that teardown when udfd exits
char    tsUdfdLdLibPath[512] = "";
5
54liuyao 已提交
216
bool    tsDisableStream = false;
5
54liuyao 已提交
217
int64_t tsStreamBufferSize = 128 * 1024 * 1024;
L
liuyao 已提交
218
int64_t tsCheckpointInterval = 3 * 60 * 60 * 1000;
219
bool    tsFilterScalarMode = false;
wmmhello's avatar
wmmhello 已提交
220

wafwerar's avatar
wafwerar 已提交
221
#ifndef _STORAGE
dengyihao's avatar
dengyihao 已提交
222
int32_t taosSetTfsCfg(SConfig *pCfg) {
wafwerar's avatar
wafwerar 已提交
223 224 225 226 227 228 229 230 231 232 233 234 235
  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 已提交
236
  return 0;
wafwerar's avatar
wafwerar 已提交
237
}
wafwerar's avatar
wafwerar 已提交
238 239
#else
int32_t taosSetTfsCfg(SConfig *pCfg);
wafwerar's avatar
wafwerar 已提交
240
#endif
S
config  
Shengliang Guan 已提交
241

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

244 245
static int32_t taosLoadCfg(SConfig *pCfg, const char **envCmd, const char *inputCfgDir, const char *envFile,
                           char *apolloUrl) {
S
Shengliang Guan 已提交
246 247
  char cfgDir[PATH_MAX] = {0};
  char cfgFile[PATH_MAX + 100] = {0};
S
TD-1767  
Shengliang Guan 已提交
248

S
Shengliang Guan 已提交
249
  taosExpandDir(inputCfgDir, cfgDir, PATH_MAX);
250
  if (taosIsDir(cfgDir)) {
251
#ifdef CUS_PROMPT
252
    snprintf(cfgFile, sizeof(cfgFile), "%s" TD_DIRSEP "%s.cfg", cfgDir, CUS_PROMPT);
253
#else
254
    snprintf(cfgFile, sizeof(cfgFile), "%s" TD_DIRSEP "taos.cfg", cfgDir);
255
#endif
256 257 258
  } else {
    tstrncpy(cfgFile, cfgDir, sizeof(cfgDir));
  }
S
config  
Shengliang Guan 已提交
259

S
Shengliang Guan 已提交
260 261 262
  if (apolloUrl != NULL && apolloUrl[0] == '\0') {
    cfgGetApollUrl(envCmd, envFile, apolloUrl);
  }
wafwerar's avatar
wafwerar 已提交
263

S
Shengliang Guan 已提交
264
  if (cfgLoad(pCfg, CFG_STYPE_APOLLO_URL, apolloUrl) != 0) {
265
    uError("failed to load from apollo url:%s since %s", apolloUrl, terrstr());
S
Shengliang Guan 已提交
266 267 268
    return -1;
  }

269 270 271
  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 已提交
272 273 274
  }

  if (cfgLoad(pCfg, CFG_STYPE_ENV_FILE, envFile) != 0) {
275
    uError("failed to load from env file:%s since %s", envFile, terrstr());
S
Shengliang Guan 已提交
276 277 278 279
    return -1;
  }

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

wafwerar's avatar
wafwerar 已提交
284 285 286 287 288
  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 已提交
289
  return 0;
S
slguan 已提交
290 291
}

S
Shengliang Guan 已提交
292
int32_t taosAddClientLogCfg(SConfig *pCfg) {
293 294 295 296 297 298 299 300 301 302 303 304 305 306 307
  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 已提交
308
  return 0;
S
Shengliang Guan 已提交
309 310
}

S
Shengliang Guan 已提交
311
static int32_t taosAddServerLogCfg(SConfig *pCfg) {
312 313 314 315 316 317 318 319 320 321 322 323 324
  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 已提交
325
  return 0;
S
Shengliang Guan 已提交
326 327
}

S
Shengliang Guan 已提交
328
static int32_t taosAddClientCfg(SConfig *pCfg) {
S
Shengliang Guan 已提交
329 330
  char    defaultFqdn[TSDB_FQDN_LEN] = {0};
  int32_t defaultServerPort = 6030;
dengyihao's avatar
dengyihao 已提交
331 332 333
  if (taosGetFqdn(defaultFqdn) != 0) {
    strcpy(defaultFqdn, "localhost");
  }
S
Shengliang Guan 已提交
334

335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363
  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 已提交
364

dengyihao's avatar
dengyihao 已提交
365 366
  tsNumOfRpcThreads = tsNumOfCores / 2;
  tsNumOfRpcThreads = TRANGE(tsNumOfRpcThreads, 2, TSDB_MAX_RPC_THREADS);
367
  if (cfgAddInt32(pCfg, "numOfRpcThreads", tsNumOfRpcThreads, 1, 1024, CFG_SCOPE_BOTH) != 0) return -1;
dengyihao's avatar
dengyihao 已提交
368

dengyihao's avatar
dengyihao 已提交
369
  tsNumOfRpcSessions = TRANGE(tsNumOfRpcSessions, 100, 100000);
370
  if (cfgAddInt32(pCfg, "numOfRpcSessions", tsNumOfRpcSessions, 1, 100000, CFG_SCOPE_BOTH) != 0) return -1;
dengyihao's avatar
dengyihao 已提交
371 372

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

D
dapan1121 已提交
375 376
  tsNumOfTaskQueueThreads = tsNumOfCores / 2;
  tsNumOfTaskQueueThreads = TMAX(tsNumOfTaskQueueThreads, 4);
dengyihao's avatar
dengyihao 已提交
377 378 379
  if (tsNumOfTaskQueueThreads >= 10) {
    tsNumOfTaskQueueThreads = 10;
  }
380
  if (cfgAddInt32(pCfg, "numOfTaskQueueThreads", tsNumOfTaskQueueThreads, 4, 1024, CFG_SCOPE_CLIENT) != 0) return -1;
S
Shengliang Guan 已提交
381

S
Shengliang Guan 已提交
382
  return 0;
S
os  
Shengliang Guan 已提交
383 384
}

S
Shengliang Guan 已提交
385
static int32_t taosAddSystemCfg(SConfig *pCfg) {
S
os  
Shengliang Guan 已提交
386 387
  SysNameInfo info = taosGetSysNameInfo();

388 389 390 391 392 393 394 395 396 397 398 399 400 401 402
  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 已提交
403
#if !defined(_ALPINE)
404
  if (cfgAddInt64(pCfg, "streamMax", tsStreamMax, 0, INT64_MAX, CFG_SCOPE_BOTH) != 0) return -1;
sangshuduo's avatar
sangshuduo 已提交
405
#endif
406 407 408 409 410 411 412 413 414 415 416 417
  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 已提交
418
  return 0;
S
Shengliang Guan 已提交
419 420
}

S
Shengliang Guan 已提交
421
static int32_t taosAddServerCfg(SConfig *pCfg) {
422 423
  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;
424 425 426

  tsNumOfSupportVnodes = tsNumOfCores * 2;
  tsNumOfSupportVnodes = TMAX(tsNumOfSupportVnodes, 2);
427 428 429 430 431 432 433 434 435 436 437
  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 已提交
438

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

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

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

S
Shengliang Guan 已提交
449
  tsNumOfCommitThreads = tsNumOfCores / 2;
S
Shengliang Guan 已提交
450
  tsNumOfCommitThreads = TRANGE(tsNumOfCommitThreads, 2, 4);
451
  if (cfgAddInt32(pCfg, "numOfCommitThreads", tsNumOfCommitThreads, 1, 1024, CFG_SCOPE_SERVER) != 0) return -1;
S
Shengliang Guan 已提交
452 453 454

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

D
dapan1121 已提交
457 458
  tsNumOfVnodeQueryThreads = tsNumOfCores * 2;
  tsNumOfVnodeQueryThreads = TMAX(tsNumOfVnodeQueryThreads, 4);
459
  if (cfgAddInt32(pCfg, "numOfVnodeQueryThreads", tsNumOfVnodeQueryThreads, 4, 1024, CFG_SCOPE_SERVER) != 0) return -1;
S
Shengliang Guan 已提交
460

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

463 464
  tsNumOfVnodeFetchThreads = tsNumOfCores / 4;
  tsNumOfVnodeFetchThreads = TMAX(tsNumOfVnodeFetchThreads, 4);
465
  if (cfgAddInt32(pCfg, "numOfVnodeFetchThreads", tsNumOfVnodeFetchThreads, 4, 1024, CFG_SCOPE_SERVER) != 0) return -1;
S
Shengliang Guan 已提交
466

C
Cary Xu 已提交
467 468
  tsNumOfVnodeRsmaThreads = tsNumOfCores;
  tsNumOfVnodeRsmaThreads = TMAX(tsNumOfVnodeRsmaThreads, 4);
469
  if (cfgAddInt32(pCfg, "numOfVnodeRsmaThreads", tsNumOfVnodeRsmaThreads, 1, 1024, CFG_SCOPE_SERVER) != 0) return -1;
C
Cary Xu 已提交
470

D
dapan1121 已提交
471 472
  tsNumOfQnodeQueryThreads = tsNumOfCores * 2;
  tsNumOfQnodeQueryThreads = TMAX(tsNumOfQnodeQueryThreads, 4);
473
  if (cfgAddInt32(pCfg, "numOfQnodeQueryThreads", tsNumOfQnodeQueryThreads, 4, 1024, CFG_SCOPE_SERVER) != 0) return -1;
S
Shengliang Guan 已提交
474

L
Liu Jicong 已提交
475 476 477
  //  tsNumOfQnodeFetchThreads = tsNumOfCores / 2;
  //  tsNumOfQnodeFetchThreads = TMAX(tsNumOfQnodeFetchThreads, 4);
  //  if (cfgAddInt32(pCfg, "numOfQnodeFetchThreads", tsNumOfQnodeFetchThreads, 1, 1024, 0) != 0) return -1;
S
Shengliang Guan 已提交
478

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

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

487
  tsRpcQueueMemoryAllowed = tsTotalMemoryKB * 1024 * 0.1;
wafwerar's avatar
wafwerar 已提交
488
  tsRpcQueueMemoryAllowed = TRANGE(tsRpcQueueMemoryAllowed, TSDB_MAX_MSG_SIZE * 10LL, TSDB_MAX_MSG_SIZE * 10000LL);
489
  if (cfgAddInt64(pCfg, "rpcQueueMemoryAllowed", tsRpcQueueMemoryAllowed, TSDB_MAX_MSG_SIZE * 10L, INT64_MAX, CFG_SCOPE_BOTH) != 0)
dengyihao's avatar
dengyihao 已提交
490
    return -1;
491

492 493 494
  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;
495

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

498 499 500
  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;
501

502 503 504 505 506 507
  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 已提交
508

509 510 511 512 513
  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 已提交
514

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

517 518 519 520 521 522 523
  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;
524

525
  if (cfgAddInt64(pCfg, "walFsyncDataSizeLimit", tsWalFsyncDataSizeLimit, 100 * 1024 * 1024, INT64_MAX, CFG_SCOPE_SERVER) != 0)
526
    return -1;
527

528 529 530
  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 已提交
531

532 533 534
  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 已提交
535

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

538 539 540
  if (cfgAddBool(pCfg, "filterScalarMode", tsFilterScalarMode, CFG_SCOPE_SERVER) != 0) return -1;
  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;
541

wafwerar's avatar
wafwerar 已提交
542
  GRANT_CFG_ADD;
S
Shengliang Guan 已提交
543
  return 0;
S
Shengliang Guan 已提交
544 545
}

wafwerar's avatar
wafwerar 已提交
546 547
static int32_t taosUpdateServerCfg(SConfig *pCfg) {
  SConfigItem *pItem;
548 549 550
  ECfgSrcType  stype;
  int32_t      numOfCores;
  int64_t      totalMemoryKB;
wafwerar's avatar
wafwerar 已提交
551 552 553 554 555 556

  pItem = cfgGetItem(tsCfg, "numOfCores");
  if (pItem == NULL) {
    return -1;
  } else {
    stype = pItem->stype;
wafwerar's avatar
wafwerar 已提交
557
    numOfCores = pItem->fval;
wafwerar's avatar
wafwerar 已提交
558 559 560 561 562 563 564 565 566 567 568 569 570
  }

  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 已提交
571
    tsNumOfRpcThreads = TRANGE(tsNumOfRpcThreads, 2, TSDB_MAX_RPC_THREADS);
wafwerar's avatar
wafwerar 已提交
572 573 574 575
    pItem->i32 = tsNumOfRpcThreads;
    pItem->stype = stype;
  }

dengyihao's avatar
dengyihao 已提交
576 577 578 579 580 581 582
  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 已提交
583 584 585 586 587 588 589
  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 已提交
590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613
  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;
  }

614
  pItem = cfgGetItem(tsCfg, "ratioOfVnodeStreamThreads");
wafwerar's avatar
wafwerar 已提交
615
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
616
    pItem->fval = tsRatioOfVnodeStreamThreads;
wafwerar's avatar
wafwerar 已提交
617 618 619
    pItem->stype = stype;
  }

620 621 622 623 624 625 626
  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 已提交
627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643

  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 已提交
644 645 646 647 648 649 650 651 652
  /*
    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 已提交
653 654 655

  pItem = cfgGetItem(tsCfg, "numOfSnodeSharedThreads");
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
L
Liu Jicong 已提交
656 657 658
    tsNumOfSnodeStreamThreads = numOfCores / 4;
    tsNumOfSnodeStreamThreads = TRANGE(tsNumOfSnodeStreamThreads, 2, 4);
    pItem->i32 = tsNumOfSnodeStreamThreads;
wafwerar's avatar
wafwerar 已提交
659 660 661 662 663
    pItem->stype = stype;
  }

  pItem = cfgGetItem(tsCfg, "numOfSnodeUniqueThreads");
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
L
Liu Jicong 已提交
664 665 666
    tsNumOfSnodeWriteThreads = numOfCores / 4;
    tsNumOfSnodeWriteThreads = TRANGE(tsNumOfSnodeWriteThreads, 2, 4);
    pItem->i32 = tsNumOfSnodeWriteThreads;
wafwerar's avatar
wafwerar 已提交
667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688
    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 已提交
689
static void taosSetClientLogCfg(SConfig *pCfg) {
S
Shengliang Guan 已提交
690
  SConfigItem *pItem = cfgGetItem(pCfg, "logDir");
S
os env  
Shengliang Guan 已提交
691
  tstrncpy(tsLogDir, cfgGetItem(pCfg, "logDir")->str, PATH_MAX);
S
Shengliang Guan 已提交
692
  taosExpandDir(tsLogDir, tsLogDir, PATH_MAX);
wafwerar's avatar
wafwerar 已提交
693
  tsLogSpace.reserved = (int64_t)(((double)cfgGetItem(pCfg, "minimalLogDirGB")->fval) * 1024 * 1024 * 1024);
S
Shengliang Guan 已提交
694 695 696 697
  tsNumOfLogLines = cfgGetItem(pCfg, "numOfLogLines")->i32;
  tsAsyncLog = cfgGetItem(pCfg, "asyncLog")->bval;
  tsLogKeepDays = cfgGetItem(pCfg, "logKeepDays")->i32;
  tmrDebugFlag = cfgGetItem(pCfg, "tmrDebugFlag")->i32;
S
Shengliang Guan 已提交
698
  uDebugFlag = cfgGetItem(pCfg, "uDebugFlag")->i32;
S
Shengliang Guan 已提交
699
  jniDebugFlag = cfgGetItem(pCfg, "jniDebugFlag")->i32;
S
Shengliang Guan 已提交
700 701 702
  rpcDebugFlag = cfgGetItem(pCfg, "rpcDebugFlag")->i32;
  qDebugFlag = cfgGetItem(pCfg, "qDebugFlag")->i32;
  cDebugFlag = cfgGetItem(pCfg, "cDebugFlag")->i32;
S
Shengliang Guan 已提交
703 704 705 706 707 708 709 710 711 712 713
}

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 已提交
714
  udfDebugFlag = cfgGetItem(pCfg, "udfDebugFlag")->i32;
715
  smaDebugFlag = cfgGetItem(pCfg, "smaDebugFlag")->i32;
dengyihao's avatar
dengyihao 已提交
716
  idxDebugFlag = cfgGetItem(pCfg, "idxDebugFlag")->i32;
M
Minglei Jin 已提交
717
  tdbDebugFlag = cfgGetItem(pCfg, "tdbDebugFlag")->i32;
S
Shengliang Guan 已提交
718
  metaDebugFlag = cfgGetItem(pCfg, "metaDebugFlag")->i32;
S
Shengliang Guan 已提交
719 720
}

D
dapan1121 已提交
721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746
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;
  }

747 748 749 750 751
  if (0 == strcasecmp(pScope, "none")) {
    tsSlowLogScope = 0;
    return 0;
  }

D
dapan1121 已提交
752
  uError("Invalid slowLog scope value:%s", pScope);
753
  terrno = TSDB_CODE_INVALID_CFG_VALUE;
D
dapan1121 已提交
754 755 756
  return -1;
}

S
Shengliang Guan 已提交
757
static int32_t taosSetClientCfg(SConfig *pCfg) {
S
monitor  
Shengliang Guan 已提交
758
  tstrncpy(tsLocalFqdn, cfgGetItem(pCfg, "fqdn")->str, TSDB_FQDN_LEN);
S
Shengliang Guan 已提交
759 760
  tsServerPort = (uint16_t)cfgGetItem(pCfg, "serverPort")->i32;
  snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
761

762 763 764
  char defaultFirstEp[TSDB_EP_LEN] = {0};
  snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort);

765 766
  SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp");
  SEp          firstEp = {0};
767
  taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp);
768 769 770 771 772
  snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port);
  cfgSetItem(pCfg, "firstEp", tsFirst, pFirstEpItem->stype);

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

S
Shengliang Guan 已提交
777 778
  tstrncpy(tsTempDir, cfgGetItem(pCfg, "tempDir")->str, PATH_MAX);
  taosExpandDir(tsTempDir, tsTempDir, PATH_MAX);
wafwerar's avatar
wafwerar 已提交
779
  tsTempSpace.reserved = (int64_t)(((double)cfgGetItem(pCfg, "minimalTmpDirGB")->fval) * 1024 * 1024 * 1024);
S
Shengliang Guan 已提交
780
  if (taosMulMkDir(tsTempDir) != 0) {
S
Shengliang Guan 已提交
781 782 783
    uError("failed to create tempDir:%s since %s", tsTempDir, terrstr());
    return -1;
  }
S
Shengliang Guan 已提交
784

785
  tstrncpy(tsSmlChildTableName, cfgGetItem(pCfg, "smlChildTableName")->str, TSDB_TABLE_NAME_LEN);
786
  tstrncpy(tsSmlTagName, cfgGetItem(pCfg, "smlTagName")->str, TSDB_COL_NAME_LEN);
X
Xiaoyu Wang 已提交
787
  //  tsSmlDataFormat = cfgGetItem(pCfg, "smlDataFormat")->bval;
788

X
Xiaoyu Wang 已提交
789
  //  tsSmlBatchSize = cfgGetItem(pCfg, "smlBatchSize")->i32;
790
  tsMaxInsertBatchRows = cfgGetItem(pCfg, "maxInsertBatchRows")->i32;
791

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

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

dengyihao's avatar
dengyihao 已提交
815
  tsNumOfRpcThreads = cfgGetItem(pCfg, "numOfRpcThreads")->i32;
dengyihao's avatar
dengyihao 已提交
816 817 818
  tsNumOfRpcSessions = cfgGetItem(pCfg, "numOfRpcSessions")->i32;

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

S
os  
Shengliang Guan 已提交
822
static void taosSetSystemCfg(SConfig *pCfg) {
S
Shengliang Guan 已提交
823 824
  SConfigItem *pItem = cfgGetItem(pCfg, "timezone");
  osSetTimezone(pItem->str);
wafwerar's avatar
wafwerar 已提交
825 826
  uDebug("timezone format changed from %s to %s", pItem->str, tsTimezoneStr);
  cfgSetItem(pCfg, "timezone", tsTimezoneStr, pItem->stype);
S
Shengliang Guan 已提交
827

S
Shengliang Guan 已提交
828 829
  const char *locale = cfgGetItem(pCfg, "locale")->str;
  const char *charset = cfgGetItem(pCfg, "charset")->str;
S
os env  
Shengliang Guan 已提交
830
  taosSetSystemLocale(locale, charset);
wafwerar's avatar
wafwerar 已提交
831
  osSetSystemLocale(locale, charset);
S
Shengliang Guan 已提交
832

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

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

S
config  
Shengliang Guan 已提交
838 839
  // todo
  tsVersion = 30000000;
S
Shengliang Guan 已提交
840
}
841

S
Shengliang Guan 已提交
842
static int32_t taosSetServerCfg(SConfig *pCfg) {
wafwerar's avatar
wafwerar 已提交
843
  tsDataSpace.reserved = (int64_t)(((double)cfgGetItem(pCfg, "minimalDataDirGB")->fval) * 1024 * 1024 * 1024);
844
  tsNumOfSupportVnodes = cfgGetItem(pCfg, "supportVnodes")->i32;
S
Shengliang Guan 已提交
845 846 847 848
  tsMaxShellConns = cfgGetItem(pCfg, "maxShellConns")->i32;
  tsStatusInterval = cfgGetItem(pCfg, "statusInterval")->i32;
  tsMinSlidingTime = cfgGetItem(pCfg, "minSlidingTime")->i32;
  tsMinIntervalTime = cfgGetItem(pCfg, "minIntervalTime")->i32;
S
Shengliang Guan 已提交
849
  tsMaxNumOfDistinctResults = cfgGetItem(pCfg, "maxNumOfDistinctRes")->i32;
850
  tsCountAlwaysReturnValue = cfgGetItem(pCfg, "countAlwaysReturnValue")->i32;
S
config  
Shengliang Guan 已提交
851
  tsQueryBufferSize = cfgGetItem(pCfg, "queryBufferSize")->i32;
S
Shengliang Guan 已提交
852
  tsPrintAuth = cfgGetItem(pCfg, "printAuth")->bval;
S
Shengliang Guan 已提交
853

S
Shengliang Guan 已提交
854
  tsNumOfRpcThreads = cfgGetItem(pCfg, "numOfRpcThreads")->i32;
dengyihao's avatar
dengyihao 已提交
855
  tsNumOfRpcSessions = cfgGetItem(pCfg, "numOfRpcSessions")->i32;
dengyihao's avatar
dengyihao 已提交
856 857
  tsTimeToGetAvailableConn = cfgGetItem(pCfg, "timeToGetAvailableConn")->i32;

S
Shengliang Guan 已提交
858
  tsNumOfCommitThreads = cfgGetItem(pCfg, "numOfCommitThreads")->i32;
S
Shengliang Guan 已提交
859 860
  tsNumOfMnodeReadThreads = cfgGetItem(pCfg, "numOfMnodeReadThreads")->i32;
  tsNumOfVnodeQueryThreads = cfgGetItem(pCfg, "numOfVnodeQueryThreads")->i32;
861
  tsRatioOfVnodeStreamThreads = cfgGetItem(pCfg, "ratioOfVnodeStreamThreads")->fval;
862
  tsNumOfVnodeFetchThreads = cfgGetItem(pCfg, "numOfVnodeFetchThreads")->i32;
C
Cary Xu 已提交
863
  tsNumOfVnodeRsmaThreads = cfgGetItem(pCfg, "numOfVnodeRsmaThreads")->i32;
S
Shengliang Guan 已提交
864
  tsNumOfQnodeQueryThreads = cfgGetItem(pCfg, "numOfQnodeQueryThreads")->i32;
dengyihao's avatar
dengyihao 已提交
865
  //  tsNumOfQnodeFetchThreads = cfgGetItem(pCfg, "numOfQnodeFetchTereads")->i32;
L
Liu Jicong 已提交
866 867
  tsNumOfSnodeStreamThreads = cfgGetItem(pCfg, "numOfSnodeSharedThreads")->i32;
  tsNumOfSnodeWriteThreads = cfgGetItem(pCfg, "numOfSnodeUniqueThreads")->i32;
868
  tsRpcQueueMemoryAllowed = cfgGetItem(pCfg, "rpcQueueMemoryAllowed")->i64;
S
Shengliang Guan 已提交
869

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

S
monitor  
Shengliang Guan 已提交
873 874 875 876
  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 已提交
877
  tsMonitorMaxLogs = cfgGetItem(pCfg, "monitorMaxLogs")->i32;
S
Shengliang Guan 已提交
878
  tsMonitorComp = cfgGetItem(pCfg, "monitorComp")->bval;
D
dapan1121 已提交
879
  tsQueryRspPolicy = cfgGetItem(pCfg, "queryRspPolicy")->i32;
S
monitor  
Shengliang Guan 已提交
880

S
Shengliang Guan 已提交
881
  tsEnableTelem = cfgGetItem(pCfg, "telemetryReporting")->bval;
D
dapan1121 已提交
882
  tsEnableCrashReport = cfgGetItem(pCfg, "crashReporting")->bval;
883
  tsTtlChangeOnWrite = cfgGetItem(pCfg, "ttlChangeOnWrite")->bval;
S
Shengliang Guan 已提交
884 885 886 887
  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 已提交
888 889
  tmqMaxTopicNum= cfgGetItem(pCfg, "tmqMaxTopicNum")->i32;

890 891
  tsTransPullupInterval = cfgGetItem(pCfg, "transPullupInterval")->i32;
  tsMqRebalanceInterval = cfgGetItem(pCfg, "mqRebalanceInterval")->i32;
wmmhello's avatar
wmmhello 已提交
892
  tsTtlUnit = cfgGetItem(pCfg, "ttlUnit")->i32;
wmmhello's avatar
wmmhello 已提交
893
  tsTtlPushInterval = cfgGetItem(pCfg, "ttlPushInterval")->i32;
894
  tsUptimeInterval = cfgGetItem(pCfg, "uptimeInterval")->i32;
895
  tsQueryRsmaTolerance = cfgGetItem(pCfg, "queryRsmaTolerance")->i32;
896

897
  tsWalFsyncDataSizeLimit = cfgGetItem(pCfg, "walFsyncDataSizeLimit")->i64;
898

899 900 901 902
  tsElectInterval = cfgGetItem(pCfg, "syncElectInterval")->i32;
  tsHeartbeatInterval = cfgGetItem(pCfg, "syncHeartbeatInterval")->i32;
  tsHeartbeatTimeout = cfgGetItem(pCfg, "syncHeartbeatTimeout")->i32;

903 904
  tsVndCommitMaxIntervalMs = cfgGetItem(pCfg, "vndCommitMaxInterval")->i64;

905
  tsMndSdbWriteDelta = cfgGetItem(pCfg, "mndSdbWriteDelta")->i64;
906
  tsMndLogRetention = cfgGetItem(pCfg, "mndLogRetention")->i64;
K
kailixu 已提交
907
  tsMndSkipGrant = cfgGetItem(pCfg, "skipGrant")->bval;
908

909
  tsStartUdfd = cfgGetItem(pCfg, "udf")->bval;
S
slzhou 已提交
910
  tstrncpy(tsUdfdResFuncs, cfgGetItem(pCfg, "udfdResFuncs")->str, sizeof(tsUdfdResFuncs));
911
  tstrncpy(tsUdfdLdLibPath, cfgGetItem(pCfg, "udfdLdLibPath")->str, sizeof(tsUdfdLdLibPath));
S
config  
Shengliang Guan 已提交
912 913 914
  if (tsQueryBufferSize >= 0) {
    tsQueryBufferSizeBytes = tsQueryBufferSize * 1048576UL;
  }
dengyihao's avatar
dengyihao 已提交
915

916 917
  tsCacheLazyLoadThreshold = cfgGetItem(pCfg, "cacheLazyLoadThreshold")->i32;

5
54liuyao 已提交
918
  tsDisableStream = cfgGetItem(pCfg, "disableStream")->bval;
L
liuyao 已提交
919 920
  tsStreamBufferSize = cfgGetItem(pCfg, "streamBufferSize")->i64;
  tsCheckpointInterval = cfgGetItem(pCfg, "checkpointInterval")->i64;
5
54liuyao 已提交
921

922
  tsFilterScalarMode = cfgGetItem(pCfg, "filterScalarMode")->bval;
dengyihao's avatar
dengyihao 已提交
923
  tsMaxStreamBackendCache = cfgGetItem(pCfg, "maxStreamBackendCache")->i32;
924
  tsPQSortMemThreshold = cfgGetItem(pCfg, "pqSortMemThreshold")->i32;
5
54liuyao 已提交
925

wafwerar's avatar
wafwerar 已提交
926
  GRANT_CFG_GET;
S
Shengliang Guan 已提交
927
  return 0;
S
Shengliang Guan 已提交
928 929
}

930
void taosLocalCfgForbiddenToChange(char *name, bool *forbidden) {
931 932 933 934 935 936 937 938
  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 已提交
939
  GRANT_CFG_CHECK;
940 941 942 943

  *forbidden = false;
}

D
dapan1121 已提交
944
int32_t taosApplyLocalCfg(SConfig *pCfg, char *name) {
D
dapan1121 已提交
945 946 947 948 949 950 951 952
  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 已提交
953 954
      } else if (strcasecmp("assert", name) == 0) {
        tsAssert = cfgGetItem(pCfg, "assert")->bval;
955
      }
D
dapan1121 已提交
956 957 958 959 960 961 962 963 964 965 966 967 968 969
      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 已提交
970
      } else if (strcasecmp("cDebugFlag", name) == 0) {
D
dapan1121 已提交
971
        cDebugFlag = cfgGetItem(pCfg, "cDebugFlag")->i32;
D
dapan1121 已提交
972 973
      } else if (strcasecmp("crashReporting", name) == 0) {
        tsEnableCrashReport = cfgGetItem(pCfg, "crashReporting")->bval;
D
dapan1121 已提交
974 975 976 977
      }
      break;
    }
    case 'd': {
S
Shengliang Guan 已提交
978
      if (strcasecmp("dDebugFlag", name) == 0) {
D
dapan1121 已提交
979
        dDebugFlag = cfgGetItem(pCfg, "dDebugFlag")->i32;
980 981 982
      } else if (strcasecmp("debugFlag", name) == 0) {
        int32_t flag = cfgGetItem(pCfg, "debugFlag")->i32;
        taosSetAllDebugFlag(flag, true);
D
dapan1121 已提交
983 984 985 986 987 988
      }
      break;
    }
    case 'e': {
      if (strcasecmp("enableCoreFile", name) == 0) {
        bool enableCore = cfgGetItem(pCfg, "enableCoreFile")->bval;
wafwerar's avatar
wafwerar 已提交
989
        taosSetCoreDump(enableCore);
990 991
      } else if (strcasecmp("enableQueryHb", name) == 0) {
        tsEnableQueryHb = cfgGetItem(pCfg, "enableQueryHb")->bval;
992 993
      }  else if (strcasecmp("ttlChangeOnWrite", name) == 0) {
        tsTtlChangeOnWrite = cfgGetItem(pCfg, "ttlChangeOnWrite")->bval;
D
dapan1121 已提交
994 995 996 997 998 999 1000 1001
      }
      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 已提交
1002

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

D
dapan1121 已提交
1006 1007 1008 1009 1010 1011 1012 1013 1014
        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 已提交
1015

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

D
dapan1121 已提交
1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041
        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': {
1042 1043 1044
      if (strcasecmp("keepColumnName", name) == 0) {
        tsKeepColumnName = cfgGetItem(pCfg, "keepColumnName")->bval;
      }
D
dapan1121 已提交
1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067
      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;
1068
          } else if (strcasecmp("maxMemUsedByInsert", name) == 0) {
1069
            tsMaxInsertBatchRows = cfgGetItem(pCfg, "maxInsertBatchRows")->i32;
1070 1071
          } else if (strcasecmp("maxRetryWaitTime", name) == 0) {
            tsMaxRetryWaitTime = cfgGetItem(pCfg, "maxRetryWaitTime")->i32;
D
dapan1121 已提交
1072 1073 1074 1075 1076 1077 1078 1079 1080
          }
          break;
        }
        case 'd': {
          if (strcasecmp("mDebugFlag", name) == 0) {
            mDebugFlag = cfgGetItem(pCfg, "mDebugFlag")->i32;
          }
          break;
        }
D
dapan1121 已提交
1081 1082 1083 1084 1085 1086
        case 'e': {
          if (strcasecmp("metaCacheMaxSize", name) == 0) {
            atomic_store_32(&tsMetaCacheMaxSize, cfgGetItem(pCfg, "metaCacheMaxSize")->i32);
          }
          break;
        }
D
dapan1121 已提交
1087
        case 'i': {
S
Shengliang Guan 已提交
1088
          if (strcasecmp("minimalTmpDirGB", name) == 0) {
wafwerar's avatar
wafwerar 已提交
1089
            tsTempSpace.reserved = (int64_t)(((double)cfgGetItem(pCfg, "minimalTmpDirGB")->fval) * 1024 * 1024 * 1024);
D
dapan1121 已提交
1090
          } else if (strcasecmp("minimalDataDirGB", name) == 0) {
wafwerar's avatar
wafwerar 已提交
1091
            tsDataSpace.reserved = (int64_t)(((double)cfgGetItem(pCfg, "minimalDataDirGB")->fval) * 1024 * 1024 * 1024);
D
dapan1121 已提交
1092 1093 1094
          } else if (strcasecmp("minSlidingTime", name) == 0) {
            tsMinSlidingTime = cfgGetItem(pCfg, "minSlidingTime")->i32;
          } else if (strcasecmp("minIntervalTime", name) == 0) {
L
Liu Jicong 已提交
1095
            tsMinIntervalTime = cfgGetItem(pCfg, "minIntervalTime")->i32;
D
dapan1121 已提交
1096
          } else if (strcasecmp("minimalLogDirGB", name) == 0) {
wafwerar's avatar
wafwerar 已提交
1097
            tsLogSpace.reserved = (int64_t)(((double)cfgGetItem(pCfg, "minimalLogDirGB")->fval) * 1024 * 1024 * 1024);
D
dapan1121 已提交
1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123
          }
          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': {
1124
          if (strcasecmp("udfDebugFlag", name) == 0) {
S
Shengliang Guan 已提交
1125
            udfDebugFlag = cfgGetItem(pCfg, "udfDebugFlag")->i32;
D
dapan1121 已提交
1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139
          }
          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 已提交
1140 1141
      } else if (strcasecmp("numOfRpcSessions", name) == 0) {
        tsNumOfRpcSessions = cfgGetItem(pCfg, "numOfRpcSessions")->i32;
D
dapan1121 已提交
1142 1143 1144 1145 1146 1147
      } 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;
1148 1149 1150 1151
        /*
              } else if (strcasecmp("numOfVnodeFetchThreads", name) == 0) {
                tsNumOfVnodeFetchThreads = cfgGetItem(pCfg, "numOfVnodeFetchThreads")->i32;
        */
C
Cary Xu 已提交
1152 1153
      } else if (strcasecmp("numOfVnodeRsmaThreads", name) == 0) {
        tsNumOfVnodeRsmaThreads = cfgGetItem(pCfg, "numOfVnodeRsmaThreads")->i32;
D
dapan1121 已提交
1154 1155
      } else if (strcasecmp("numOfQnodeQueryThreads", name) == 0) {
        tsNumOfQnodeQueryThreads = cfgGetItem(pCfg, "numOfQnodeQueryThreads")->i32;
L
Liu Jicong 已提交
1156 1157 1158 1159
        /*
              } else if (strcasecmp("numOfQnodeFetchThreads", name) == 0) {
                tsNumOfQnodeFetchThreads = cfgGetItem(pCfg, "numOfQnodeFetchThreads")->i32;
        */
D
dapan1121 已提交
1160
      } else if (strcasecmp("numOfSnodeSharedThreads", name) == 0) {
L
Liu Jicong 已提交
1161
        tsNumOfSnodeStreamThreads = cfgGetItem(pCfg, "numOfSnodeSharedThreads")->i32;
D
dapan1121 已提交
1162
      } else if (strcasecmp("numOfSnodeUniqueThreads", name) == 0) {
L
Liu Jicong 已提交
1163
        tsNumOfSnodeWriteThreads = cfgGetItem(pCfg, "numOfSnodeUniqueThreads")->i32;
D
dapan1121 已提交
1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186
      } 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;
1187 1188
      } else if (strcasecmp("queryPlannerTrace", name) == 0) {
        tsQueryPlannerTrace = cfgGetItem(pCfg, "queryPlannerTrace")->bval;
1189 1190 1191 1192
      } else if (strcasecmp("queryNodeChunkSize", name) == 0) {
        tsQueryNodeChunkSize = cfgGetItem(pCfg, "queryNodeChunkSize")->i32;
      } else if (strcasecmp("queryUseNodeAllocator", name) == 0) {
        tsQueryUseNodeAllocator = cfgGetItem(pCfg, "queryUseNodeAllocator")->bval;
1193 1194
      } else if (strcasecmp("queryRsmaTolerance", name) == 0) {
        tsQueryRsmaTolerance = cfgGetItem(pCfg, "queryRsmaTolerance")->i32;
D
dapan1121 已提交
1195 1196 1197 1198
      }
      break;
    }
    case 'r': {
S
Shengliang Guan 已提交
1199
      if (strcasecmp("rpcQueueMemoryAllowed", name) == 0) {
D
dapan1121 已提交
1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216
        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 已提交
1217 1218 1219 1220
        //      } else if (strcasecmp("smlDataFormat", name) == 0) {
        //        tsSmlDataFormat = cfgGetItem(pCfg, "smlDataFormat")->bval;
        //      } else if (strcasecmp("smlBatchSize", name) == 0) {
        //        tsSmlBatchSize = cfgGetItem(pCfg, "smlBatchSize")->i32;
D
dapan1121 已提交
1221 1222 1223 1224 1225 1226 1227 1228 1229 1230
      } 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 已提交
1231

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

D
dapan1121 已提交
1235 1236 1237 1238 1239 1240 1241 1242 1243
        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 已提交
1244 1245 1246
      } else if (strcasecmp("slowLogThreshold", name) == 0) {
        tsSlowLogThreshold = cfgGetItem(pCfg, "slowLogThreshold")->i32;
      } else if (strcasecmp("slowLogScope", name) == 0) {
1247 1248 1249
        if (taosSetSlowLogScope(cfgGetItem(pCfg, "slowLogScope")->str)) {
          return -1;
        }
D
dapan1121 已提交
1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265
      }
      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 已提交
1266 1267
      } else if (strcasecmp("tdbDebugFlag", name) == 0) {
        tdbDebugFlag = cfgGetItem(pCfg, "tdbDebugFlag")->i32;
D
dapan1121 已提交
1268 1269 1270 1271 1272 1273 1274 1275 1276 1277
      } 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 已提交
1278 1279 1280 1281
      } else if (strcasecmp("ttlUnit", name) == 0) {
        tsTtlUnit = cfgGetItem(pCfg, "ttlUnit")->i32;
      } else if (strcasecmp("ttlPushInterval", name) == 0) {
        tsTtlPushInterval = cfgGetItem(pCfg, "ttlPushInterval")->i32;
D
dapan1121 已提交
1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295
      } 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 已提交
1296 1297
      } else if (strcasecmp("useAdapter", name) == 0) {
        tsUseAdapter = cfgGetItem(pCfg, "useAdapter")->bval;
D
dapan1121 已提交
1298 1299 1300 1301
      }
      break;
    }
    case 'v': {
1302
      if (strcasecmp("vDebugFlag", name) == 0) {
D
dapan1121 已提交
1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313
        vDebugFlag = cfgGetItem(pCfg, "vDebugFlag")->i32;
      }
      break;
    }
    case 'w': {
      if (strcasecmp("wDebugFlag", name) == 0) {
        wDebugFlag = cfgGetItem(pCfg, "wDebugFlag")->i32;
      }
      break;
    }
    default:
L
Liu Jicong 已提交
1314
      terrno = TSDB_CODE_CFG_NOT_FOUND;
D
dapan1121 已提交
1315 1316
      return -1;
  }
L
Liu Jicong 已提交
1317

D
dapan1121 已提交
1318 1319 1320
  return 0;
}

1321 1322
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 已提交
1323
  if (tsCfg == NULL) osDefaultInit();
S
Shengliang Guan 已提交
1324

S
Shengliang Guan 已提交
1325
  SConfig *pCfg = cfgInit();
S
config  
Shengliang Guan 已提交
1326
  if (pCfg == NULL) return -1;
S
Shengliang Guan 已提交
1327 1328

  if (tsc) {
S
Shengliang Guan 已提交
1329
    tsLogEmbedded = 0;
S
Shengliang Guan 已提交
1330 1331 1332 1333
    if (taosAddClientLogCfg(pCfg) != 0) {
      cfgCleanup(pCfg);
      return -1;
    }
S
Shengliang Guan 已提交
1334
  } else {
S
Shengliang Guan 已提交
1335
    tsLogEmbedded = 1;
S
Shengliang Guan 已提交
1336 1337 1338 1339 1340 1341 1342 1343
    if (taosAddClientLogCfg(pCfg) != 0) {
      cfgCleanup(pCfg);
      return -1;
    }
    if (taosAddServerLogCfg(pCfg) != 0) {
      cfgCleanup(pCfg);
      return -1;
    }
S
Shengliang Guan 已提交
1344 1345
  }

wafwerar's avatar
wafwerar 已提交
1346
  if (taosLoadCfg(pCfg, envCmd, cfgDir, envFile, apolloUrl) != 0) {
wmmhello's avatar
wmmhello 已提交
1347
    printf("failed to load cfg since %s", terrstr());
S
Shengliang Guan 已提交
1348 1349 1350 1351
    cfgCleanup(pCfg);
    return -1;
  }

1352
  if (cfgLoadFromArray(pCfg, pArgs) != 0) {
wmmhello's avatar
wmmhello 已提交
1353
    printf("failed to load cfg from array since %s", terrstr());
S
Shengliang Guan 已提交
1354 1355 1356 1357
    cfgCleanup(pCfg);
    return -1;
  }

S
Shengliang Guan 已提交
1358 1359 1360
  if (tsc) {
    taosSetClientLogCfg(pCfg);
  } else {
S
config  
Shengliang Guan 已提交
1361
    taosSetClientLogCfg(pCfg);
S
Shengliang Guan 已提交
1362 1363 1364
    taosSetServerLogCfg(pCfg);
  }

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

wafwerar's avatar
wafwerar 已提交
1367
  if (taosMulModeMkDir(tsLogDir, 0777) != 0) {
1368
    terrno = TAOS_SYSTEM_ERROR(errno);
wmmhello's avatar
wmmhello 已提交
1369
    printf("failed to create dir:%s since %s", tsLogDir, terrstr());
1370 1371 1372 1373
    cfgCleanup(pCfg);
    return -1;
  }

S
Shengliang Guan 已提交
1374
  if (taosInitLog(logname, logFileNum) != 0) {
wmmhello's avatar
wmmhello 已提交
1375
    printf("failed to init log file since %s", terrstr());
S
Shengliang Guan 已提交
1376 1377
    cfgCleanup(pCfg);
    return -1;
1378 1379
  }

S
Shengliang Guan 已提交
1380 1381 1382 1383
  cfgCleanup(pCfg);
  return 0;
}

1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401
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 已提交
1402 1403 1404 1405
  if (tsCfg != NULL) return 0;
  tsCfg = cfgInit();

  if (tsc) {
S
Shengliang Guan 已提交
1406
    if (taosAddClientCfg(tsCfg) != 0) return -1;
S
Shengliang Guan 已提交
1407
    if (taosAddClientLogCfg(tsCfg) != 0) return -1;
S
Shengliang Guan 已提交
1408
  } else {
S
Shengliang Guan 已提交
1409 1410
    if (taosAddClientCfg(tsCfg) != 0) return -1;
    if (taosAddServerCfg(tsCfg) != 0) return -1;
S
Shengliang Guan 已提交
1411 1412
    if (taosAddClientLogCfg(tsCfg) != 0) return -1;
    if (taosAddServerLogCfg(tsCfg) != 0) return -1;
1413
  }
S
Shengliang Guan 已提交
1414
  taosAddSystemCfg(tsCfg);
1415

wafwerar's avatar
wafwerar 已提交
1416
  if (taosLoadCfg(tsCfg, envCmd, cfgDir, envFile, apolloUrl) != 0) {
S
config  
Shengliang Guan 已提交
1417
    uError("failed to load cfg since %s", terrstr());
S
Shengliang Guan 已提交
1418 1419 1420
    cfgCleanup(tsCfg);
    tsCfg = NULL;
    return -1;
1421 1422
  }

1423
  if (cfgLoadFromArray(tsCfg, pArgs) != 0) {
S
Shengliang Guan 已提交
1424 1425
    uError("failed to load cfg from array since %s", terrstr());
    cfgCleanup(tsCfg);
1426
    tsCfg = NULL;
S
Shengliang Guan 已提交
1427 1428 1429
    return -1;
  }

S
Shengliang Guan 已提交
1430
  if (tsc) {
S
Shengliang Guan 已提交
1431
    if (taosSetClientCfg(tsCfg)) return -1;
S
Shengliang Guan 已提交
1432
  } else {
S
Shengliang Guan 已提交
1433
    if (taosSetClientCfg(tsCfg)) return -1;
wafwerar's avatar
wafwerar 已提交
1434
    if (taosUpdateServerCfg(tsCfg)) return -1;
S
Shengliang Guan 已提交
1435 1436
    if (taosSetServerCfg(tsCfg)) return -1;
    if (taosSetTfsCfg(tsCfg) != 0) return -1;
1437
  }
S
os  
Shengliang Guan 已提交
1438
  taosSetSystemCfg(tsCfg);
1439

S
Shengliang Guan 已提交
1440
  cfgDumpCfg(tsCfg, tsc, false);
1441 1442 1443 1444 1445

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

S
Shengliang Guan 已提交
1446 1447 1448
  return 0;
}

S
config  
Shengliang Guan 已提交
1449 1450 1451 1452 1453 1454 1455
void taosCleanupCfg() {
  if (tsCfg) {
    cfgCleanup(tsCfg);
    tsCfg = NULL;
  }
}

S
Shengliang Guan 已提交
1456
void taosCfgDynamicOptions(const char *option, const char *value) {
S
Shengliang Guan 已提交
1457 1458
  if (strncasecmp(option, "debugFlag", 9) == 0) {
    int32_t flag = atoi(value);
wafwerar's avatar
wafwerar 已提交
1459
    taosSetAllDebugFlag(flag, true);
1460
    return;
S
Shengliang Guan 已提交
1461 1462 1463 1464
  }

  if (strcasecmp(option, "resetlog") == 0) {
    taosResetLog();
1465
    cfgDumpCfg(tsCfg, 0, false);
1466
    return;
S
Shengliang Guan 已提交
1467
  }
1468 1469 1470 1471 1472

  if (strcasecmp(option, "monitor") == 0) {
    int32_t monitor = atoi(value);
    uInfo("monitor set from %d to %d", tsEnableMonitor, monitor);
    tsEnableMonitor = monitor;
1473 1474 1475 1476
    SConfigItem *pItem = cfgGetItem(tsCfg, "monitor");
    if (pItem != NULL) {
      pItem->bval = tsEnableMonitor;
    }
1477 1478 1479 1480
    return;
  }

  const char *options[] = {
1481 1482 1483
      "dDebugFlag",   "vDebugFlag",   "mDebugFlag",   "wDebugFlag",    "sDebugFlag",   "tsdbDebugFlag", "tqDebugFlag",
      "fsDebugFlag",  "udfDebugFlag", "smaDebugFlag", "idxDebugFlag",  "tdbDebugFlag", "tmrDebugFlag",  "uDebugFlag",
      "smaDebugFlag", "rpcDebugFlag", "qDebugFlag",   "metaDebugFlag", "jniDebugFlag",
1484 1485
  };
  int32_t *optionVars[] = {
1486 1487 1488
      &dDebugFlag,   &vDebugFlag,   &mDebugFlag,   &wDebugFlag,    &sDebugFlag,   &tsdbDebugFlag, &tqDebugFlag,
      &fsDebugFlag,  &udfDebugFlag, &smaDebugFlag, &idxDebugFlag,  &tdbDebugFlag, &tmrDebugFlag,  &uDebugFlag,
      &smaDebugFlag, &rpcDebugFlag, &qDebugFlag,   &metaDebugFlag, &jniDebugFlag,
1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499
  };

  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 已提交
1500
    taosSetDebugFlag(optionVars[d], optName, flag, true);
1501
    return;
S
Shengliang Guan 已提交
1502
  }
1503 1504

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

wafwerar's avatar
wafwerar 已提交
1507
void taosSetDebugFlag(int32_t *pFlagPtr, const char *flagName, int32_t flagVal, bool rewrite) {
S
Shengliang Guan 已提交
1508
  SConfigItem *pItem = cfgGetItem(tsCfg, flagName);
wafwerar's avatar
wafwerar 已提交
1509
  if (pItem != NULL && (rewrite || pItem->i32 == 0)) {
S
Shengliang Guan 已提交
1510 1511
    pItem->i32 = flagVal;
  }
1512 1513 1514
  if (pFlagPtr != NULL) {
    *pFlagPtr = flagVal;
  }
S
Shengliang Guan 已提交
1515 1516
}

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

1520 1521 1522
  taosSetDebugFlag(NULL, "debugFlag", flag, rewrite);
  taosSetDebugFlag(NULL, "simDebugFlag", flag, rewrite);
  taosSetDebugFlag(NULL, "tmrDebugFlag", flag, rewrite);
wafwerar's avatar
wafwerar 已提交
1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540
  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 已提交
1541 1542
  uInfo("all debug flag are set to %d", flag);
}
K
kailixu 已提交
1543

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