tglobal.c 56.8 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
S
common  
Shengliang Guan 已提交
17
#include "tglobal.h"
S
Shengliang Guan 已提交
18
#include "tconfig.h"
wafwerar's avatar
wafwerar 已提交
19
#include "tgrant.h"
20
#include "tlog.h"
dengyihao's avatar
dengyihao 已提交
21
#include "tmisce.h"
wafwerar's avatar
wafwerar 已提交
22 23

GRANT_CFG_DECLARE;
S
slguan 已提交
24

S
config  
Shengliang Guan 已提交
25 26
SConfig *tsCfg = NULL;

S
Shengliang Guan 已提交
27
// cluster
S
Shengliang Guan 已提交
28 29 30 31 32 33 34
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
35
int32_t  tsNumOfSupportVnodes = 256;
H
Hui Li 已提交
36

S
Shengliang Guan 已提交
37
// common
S
Shengliang Guan 已提交
38 39
int32_t tsMaxShellConns = 50000;
int32_t tsShellActivityTimer = 3;  // second
S
Shengliang Guan 已提交
40
bool    tsPrintAuth = false;
S
Shengliang Guan 已提交
41

S
Shengliang Guan 已提交
42 43 44
// queue & threads
int32_t tsNumOfRpcThreads = 1;
int32_t tsNumOfCommitThreads = 2;
D
dapan1121 已提交
45
int32_t tsNumOfTaskQueueThreads = 4;
D
dapan1121 已提交
46
int32_t tsNumOfMnodeQueryThreads = 4;
D
dapan1121 已提交
47
int32_t tsNumOfMnodeFetchThreads = 1;
S
Shengliang Guan 已提交
48
int32_t tsNumOfMnodeReadThreads = 1;
D
dapan1121 已提交
49
int32_t tsNumOfVnodeQueryThreads = 4;
50
float   tsRatioOfVnodeStreamThreads = 1.0;
51
int32_t tsNumOfVnodeFetchThreads = 4;
C
Cary Xu 已提交
52
int32_t tsNumOfVnodeRsmaThreads = 2;
D
dapan1121 已提交
53
int32_t tsNumOfQnodeQueryThreads = 4;
54
int32_t tsNumOfQnodeFetchThreads = 1;
L
Liu Jicong 已提交
55 56
int32_t tsNumOfSnodeStreamThreads = 4;
int32_t tsNumOfSnodeWriteThreads = 1;
S
Shengliang Guan 已提交
57

58 59 60 61 62
// sync raft
int32_t tsElectInterval = 25 * 1000;
int32_t tsHeartbeatInterval = 1000;
int32_t tsHeartbeatTimeout = 20 * 1000;

63 64 65
// vnode
int64_t tsVndCommitMaxIntervalMs = 60 * 1000;

S
monitor  
Shengliang Guan 已提交
66
// monitor
S
Shengliang Guan 已提交
67
bool     tsEnableMonitor = true;
S
Shengliang Guan 已提交
68
int32_t  tsMonitorInterval = 30;
S
monitor  
Shengliang Guan 已提交
69 70
char     tsMonitorFqdn[TSDB_FQDN_LEN] = {0};
uint16_t tsMonitorPort = 6043;
S
monitor  
Shengliang Guan 已提交
71
int32_t  tsMonitorMaxLogs = 100;
S
Shengliang Guan 已提交
72
bool     tsMonitorComp = false;
S
monitor  
Shengliang Guan 已提交
73

S
Shengliang Guan 已提交
74
// telem
dengyihao's avatar
dengyihao 已提交
75
bool     tsEnableTelem = true;
76
int32_t  tsTelemInterval = 43200;
S
Shengliang Guan 已提交
77 78
char     tsTelemServer[TSDB_FQDN_LEN] = "telemetry.taosdata.com";
uint16_t tsTelemPort = 80;
D
dapan1121 已提交
79 80 81 82 83
char*    tsTelemUri = "/report";

bool     tsEnableCrashReport = true;
char*    tsClientCrashReportUri = "/ccrashreport";
char*    tsSvrCrashReportUri = "/dcrashreport";
S
Shengliang Guan 已提交
84

85
// schemaless
86
char tsSmlTagName[TSDB_COL_NAME_LEN] = "_tag_null";
dengyihao's avatar
dengyihao 已提交
87 88
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.
89
// true means that the name and order of cols in each line are the same(only for influx protocol)
90 91
bool    tsSmlDataFormat = false;
int32_t tsSmlBatchSize = 10000;
92

X
Xiaoyu Wang 已提交
93 94
// query
int32_t tsQueryPolicy = 1;
D
dapan1121 已提交
95
int32_t tsQueryRspPolicy = 0;
96
bool    tsEnableQueryHb = false;
C
Cary Xu 已提交
97
int32_t tsQuerySmaOptimize = 0;
98
int32_t tsQueryRsmaTolerance = 1000;  // the tolerance time (ms) to judge from which level to query rsma data.
99
bool    tsQueryPlannerTrace = false;
100 101
int32_t tsQueryNodeChunkSize = 32 * 1024;
bool    tsQueryUseNodeAllocator = true;
102
bool    tsKeepColumnName = false;
dengyihao's avatar
dengyihao 已提交
103 104 105 106
int32_t tsRedirectPeriod = 10;
int32_t tsRedirectFactor = 2;
int32_t tsRedirectMaxPeriod = 1000;
int32_t tsMaxRetryWaitTime = 10000;
107
bool    tsUseAdapter = false;
X
Xiaoyu Wang 已提交
108

S
Shengliang Guan 已提交
109 110 111 112 113 114 115 116
/*
 * 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 已提交
117
int32_t tsCompressMsgSize = -1;
S
Shengliang Guan 已提交
118

119
/* denote if server needs to compress the retrieved column data before adding to the rpc response message body.
120 121
 * 0: all data are compressed
 * -1: all data are not compressed
122
 * other values: if any retrieved column size is greater than the tsCompressColData, all data will be compressed.
123
 */
124
int32_t tsCompressColData = -1;
125

126 127 128
// count/hyperloglog function always return values in case of all NULL data or Empty data set.
int32_t tsCountAlwaysReturnValue = 1;

S
Shengliang Guan 已提交
129
// 10 ms for sliding time, the value will changed in case of time precision changed
X
Xiaoyu Wang 已提交
130
int32_t tsMinSlidingTime = 10;
S
Shengliang Guan 已提交
131

132
// the maxinum number of distict query result
S
Shengliang Guan 已提交
133
int32_t tsMaxNumOfDistinctResults = 1000 * 10000;
134

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

138 139 140
// maximum memory allowed to be allocated for a single csv load (in MB)
int32_t tsMaxMemUsedByInsert = 1024;

H
Haojun Liao 已提交
141
float   tsSelectivityRatio = 1.0;
dengyihao's avatar
dengyihao 已提交
142
int32_t tsTagFilterResCacheSize = 1024 * 10;
H
Haojun Liao 已提交
143

H
Haojun Liao 已提交
144 145 146 147 148
// 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;
149
int64_t tsQueryBufferSizeBytes = -1;
H
Haojun Liao 已提交
150

S
Shengliang Guan 已提交
151 152 153
int32_t  tsDiskCfgNum = 0;
SDiskCfg tsDiskCfg[TFS_MAX_DISKS] = {0};

L
Liu Jicong 已提交
154
// stream scheduler
L
Liu Jicong 已提交
155
bool tsDeployOnSnode = true;
L
Liu Jicong 已提交
156

S
Shengliang Guan 已提交
157 158
/*
 * minimum scale for whole system, millisecond by default
159 160 161
 * for TSDB_TIME_PRECISION_MILLI: 60000L
 *     TSDB_TIME_PRECISION_MICRO: 60000000L
 *     TSDB_TIME_PRECISION_NANO:  60000000000L
S
Shengliang Guan 已提交
162
 */
163
int64_t tsTickPerMin[] = {60000L, 60000000L, 60000000000L};
S
Shengliang Guan 已提交
164

S
Shengliang Guan 已提交
165 166 167 168 169 170 171 172 173
// 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
174

S
slzhou 已提交
175
// udf
176
bool tsStartUdfd = true;
S
slzhou 已提交
177

178
// wal
179
int64_t tsWalFsyncDataSizeLimit = (100 * 1024 * 1024L);
180

181
// internal
182
int32_t tsTransPullupInterval = 2;
183
int32_t tsMqRebalanceInterval = 2;
184
int32_t tsStreamCheckpointTickInterval = 1;
wmmhello's avatar
wmmhello 已提交
185
int32_t tsTtlUnit = 86400;
186
int32_t tsTtlPushInterval = 86400;
C
Cary Xu 已提交
187
int32_t tsGrantHBInterval = 60;
dengyihao's avatar
dengyihao 已提交
188
int32_t tsUptimeInterval = 300;    // seconds
189 190
char    tsUdfdResFuncs[512] = "";  // udfd resident funcs that teardown when udfd exits
char    tsUdfdLdLibPath[512] = "";
wmmhello's avatar
wmmhello 已提交
191

wafwerar's avatar
wafwerar 已提交
192
#ifndef _STORAGE
dengyihao's avatar
dengyihao 已提交
193
int32_t taosSetTfsCfg(SConfig *pCfg) {
wafwerar's avatar
wafwerar 已提交
194 195 196 197 198 199 200 201 202 203 204 205 206
  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 已提交
207
  return 0;
wafwerar's avatar
wafwerar 已提交
208
}
wafwerar's avatar
wafwerar 已提交
209 210
#else
int32_t taosSetTfsCfg(SConfig *pCfg);
wafwerar's avatar
wafwerar 已提交
211
#endif
S
config  
Shengliang Guan 已提交
212

dengyihao's avatar
dengyihao 已提交
213 214 215
struct SConfig *taosGetCfg() {
  return tsCfg;
}
S
Shengliang Guan 已提交
216

217 218
static int32_t taosLoadCfg(SConfig *pCfg, const char **envCmd, const char *inputCfgDir, const char *envFile,
                           char *apolloUrl) {
S
Shengliang Guan 已提交
219 220
  char cfgDir[PATH_MAX] = {0};
  char cfgFile[PATH_MAX + 100] = {0};
S
TD-1767  
Shengliang Guan 已提交
221

S
Shengliang Guan 已提交
222
  taosExpandDir(inputCfgDir, cfgDir, PATH_MAX);
223 224 225 226 227
  if (taosIsDir(cfgDir)) {
    snprintf(cfgFile, sizeof(cfgFile), "%s" TD_DIRSEP "taos.cfg", cfgDir);
  } else {
    tstrncpy(cfgFile, cfgDir, sizeof(cfgDir));
  }
S
config  
Shengliang Guan 已提交
228

S
Shengliang Guan 已提交
229 230 231
  if (apolloUrl != NULL && apolloUrl[0] == '\0') {
    cfgGetApollUrl(envCmd, envFile, apolloUrl);
  }
wafwerar's avatar
wafwerar 已提交
232

S
Shengliang Guan 已提交
233
  if (cfgLoad(pCfg, CFG_STYPE_APOLLO_URL, apolloUrl) != 0) {
234
    uError("failed to load from apollo url:%s since %s", apolloUrl, terrstr());
S
Shengliang Guan 已提交
235 236 237
    return -1;
  }

238 239 240
  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 已提交
241 242 243
  }

  if (cfgLoad(pCfg, CFG_STYPE_ENV_FILE, envFile) != 0) {
244
    uError("failed to load from env file:%s since %s", envFile, terrstr());
S
Shengliang Guan 已提交
245 246 247 248
    return -1;
  }

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

wafwerar's avatar
wafwerar 已提交
253 254 255 256 257
  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 已提交
258
  return 0;
S
slguan 已提交
259 260
}

S
Shengliang Guan 已提交
261
int32_t taosAddClientLogCfg(SConfig *pCfg) {
S
Shengliang Guan 已提交
262 263
  if (cfgAddDir(pCfg, "configDir", configDir, 1) != 0) return -1;
  if (cfgAddDir(pCfg, "scriptDir", configDir, 1) != 0) return -1;
S
Shengliang Guan 已提交
264 265 266 267 268
  if (cfgAddDir(pCfg, "logDir", tsLogDir, 1) != 0) return -1;
  if (cfgAddFloat(pCfg, "minimalLogDirGB", 1.0f, 0.001f, 10000000, 1) != 0) return -1;
  if (cfgAddInt32(pCfg, "numOfLogLines", tsNumOfLogLines, 1000, 2000000000, 1) != 0) return -1;
  if (cfgAddBool(pCfg, "asyncLog", tsAsyncLog, 1) != 0) return -1;
  if (cfgAddInt32(pCfg, "logKeepDays", 0, -365000, 365000, 1) != 0) return -1;
S
Shengliang Guan 已提交
269 270 271
  if (cfgAddInt32(pCfg, "debugFlag", 0, 0, 255, 1) != 0) return -1;
  if (cfgAddInt32(pCfg, "simDebugFlag", 143, 0, 255, 1) != 0) return -1;
  if (cfgAddInt32(pCfg, "tmrDebugFlag", tmrDebugFlag, 0, 255, 1) != 0) return -1;
S
Shengliang Guan 已提交
272 273 274
  if (cfgAddInt32(pCfg, "uDebugFlag", uDebugFlag, 0, 255, 1) != 0) return -1;
  if (cfgAddInt32(pCfg, "rpcDebugFlag", rpcDebugFlag, 0, 255, 1) != 0) return -1;
  if (cfgAddInt32(pCfg, "jniDebugFlag", jniDebugFlag, 0, 255, 1) != 0) return -1;
S
Shengliang Guan 已提交
275 276
  if (cfgAddInt32(pCfg, "qDebugFlag", qDebugFlag, 0, 255, 1) != 0) return -1;
  if (cfgAddInt32(pCfg, "cDebugFlag", cDebugFlag, 0, 255, 1) != 0) return -1;
S
Shengliang Guan 已提交
277
  return 0;
S
Shengliang Guan 已提交
278 279
}

S
Shengliang Guan 已提交
280 281 282 283 284 285 286 287 288
static int32_t taosAddServerLogCfg(SConfig *pCfg) {
  if (cfgAddInt32(pCfg, "dDebugFlag", dDebugFlag, 0, 255, 0) != 0) return -1;
  if (cfgAddInt32(pCfg, "vDebugFlag", vDebugFlag, 0, 255, 0) != 0) return -1;
  if (cfgAddInt32(pCfg, "mDebugFlag", mDebugFlag, 0, 255, 0) != 0) return -1;
  if (cfgAddInt32(pCfg, "wDebugFlag", wDebugFlag, 0, 255, 0) != 0) return -1;
  if (cfgAddInt32(pCfg, "sDebugFlag", sDebugFlag, 0, 255, 0) != 0) return -1;
  if (cfgAddInt32(pCfg, "tsdbDebugFlag", tsdbDebugFlag, 0, 255, 0) != 0) return -1;
  if (cfgAddInt32(pCfg, "tqDebugFlag", tqDebugFlag, 0, 255, 0) != 0) return -1;
  if (cfgAddInt32(pCfg, "fsDebugFlag", fsDebugFlag, 0, 255, 0) != 0) return -1;
S
Shengliang Guan 已提交
289
  if (cfgAddInt32(pCfg, "udfDebugFlag", udfDebugFlag, 0, 255, 0) != 0) return -1;
290
  if (cfgAddInt32(pCfg, "smaDebugFlag", smaDebugFlag, 0, 255, 0) != 0) return -1;
dengyihao's avatar
dengyihao 已提交
291
  if (cfgAddInt32(pCfg, "idxDebugFlag", idxDebugFlag, 0, 255, 0) != 0) return -1;
M
Minglei Jin 已提交
292
  if (cfgAddInt32(pCfg, "tdbDebugFlag", tdbDebugFlag, 0, 255, 0) != 0) return -1;
S
Shengliang Guan 已提交
293
  if (cfgAddInt32(pCfg, "metaDebugFlag", metaDebugFlag, 0, 255, 0) != 0) return -1;
S
Shengliang Guan 已提交
294
  return 0;
S
Shengliang Guan 已提交
295 296
}

S
Shengliang Guan 已提交
297
static int32_t taosAddClientCfg(SConfig *pCfg) {
S
Shengliang Guan 已提交
298 299
  char    defaultFqdn[TSDB_FQDN_LEN] = {0};
  int32_t defaultServerPort = 6030;
dengyihao's avatar
dengyihao 已提交
300 301 302
  if (taosGetFqdn(defaultFqdn) != 0) {
    strcpy(defaultFqdn, "localhost");
  }
S
Shengliang Guan 已提交
303

304 305
  if (cfgAddString(pCfg, "firstEp", "", 1) != 0) return -1;
  if (cfgAddString(pCfg, "secondEp", "", 1) != 0) return -1;
S
Shengliang Guan 已提交
306 307 308
  if (cfgAddString(pCfg, "fqdn", defaultFqdn, 1) != 0) return -1;
  if (cfgAddInt32(pCfg, "serverPort", defaultServerPort, 1, 65056, 1) != 0) return -1;
  if (cfgAddDir(pCfg, "tempDir", tsTempDir, 1) != 0) return -1;
S
Shengliang Guan 已提交
309
  if (cfgAddFloat(pCfg, "minimalTmpDirGB", 1.0f, 0.001f, 10000000, 1) != 0) return -1;
S
Shengliang Guan 已提交
310 311 312
  if (cfgAddInt32(pCfg, "shellActivityTimer", tsShellActivityTimer, 1, 120, 1) != 0) return -1;
  if (cfgAddInt32(pCfg, "compressMsgSize", tsCompressMsgSize, -1, 100000000, 1) != 0) return -1;
  if (cfgAddInt32(pCfg, "compressColData", tsCompressColData, -1, 100000000, 1) != 0) return -1;
D
dapan1121 已提交
313
  if (cfgAddInt32(pCfg, "queryPolicy", tsQueryPolicy, 1, 4, 1) != 0) return -1;
314
  if (cfgAddBool(pCfg, "enableQueryHb", tsEnableQueryHb, false) != 0) return -1;
X
Xiaoyu Wang 已提交
315
  if (cfgAddInt32(pCfg, "querySmaOptimize", tsQuerySmaOptimize, 0, 1, 1) != 0) return -1;
316
  if (cfgAddBool(pCfg, "queryPlannerTrace", tsQueryPlannerTrace, true) != 0) return -1;
317 318
  if (cfgAddInt32(pCfg, "queryNodeChunkSize", tsQueryNodeChunkSize, 1024, 128 * 1024, true) != 0) return -1;
  if (cfgAddBool(pCfg, "queryUseNodeAllocator", tsQueryUseNodeAllocator, true) != 0) return -1;
319
  if (cfgAddBool(pCfg, "keepColumnName", tsKeepColumnName, true) != 0) return -1;
320
  if (cfgAddString(pCfg, "smlChildTableName", "", 1) != 0) return -1;
321
  if (cfgAddString(pCfg, "smlTagName", tsSmlTagName, 1) != 0) return -1;
322
  if (cfgAddBool(pCfg, "smlDataFormat", tsSmlDataFormat, 1) != 0) return -1;
323
  if (cfgAddInt32(pCfg, "smlBatchSize", tsSmlBatchSize, 1, INT32_MAX, true) != 0) return -1;
324
  if (cfgAddInt32(pCfg, "maxMemUsedByInsert", tsMaxMemUsedByInsert, 1, INT32_MAX, true) != 0) return -1;
325
  if (cfgAddInt32(pCfg, "maxRetryWaitTime", tsMaxRetryWaitTime, 0, 86400000, 0) != 0) return -1;
326
  if (cfgAddBool(pCfg, "useAdapter", tsUseAdapter, true) != 0) return -1;
D
dapan1121 已提交
327
  if (cfgAddBool(pCfg, "crashReporting", tsEnableCrashReport, true) != 0) return -1;
S
Shengliang Guan 已提交
328

D
dapan1121 已提交
329 330
  tsNumOfTaskQueueThreads = tsNumOfCores / 2;
  tsNumOfTaskQueueThreads = TMAX(tsNumOfTaskQueueThreads, 4);
dengyihao's avatar
dengyihao 已提交
331 332 333
  if (tsNumOfTaskQueueThreads >= 10) {
    tsNumOfTaskQueueThreads = 10;
  }
D
dapan1121 已提交
334
  if (cfgAddInt32(pCfg, "numOfTaskQueueThreads", tsNumOfTaskQueueThreads, 4, 1024, 0) != 0) return -1;
S
Shengliang Guan 已提交
335

S
Shengliang Guan 已提交
336
  return 0;
S
os  
Shengliang Guan 已提交
337 338
}

S
Shengliang Guan 已提交
339
static int32_t taosAddSystemCfg(SConfig *pCfg) {
S
os  
Shengliang Guan 已提交
340 341
  SysNameInfo info = taosGetSysNameInfo();

wafwerar's avatar
wafwerar 已提交
342
  if (cfgAddTimezone(pCfg, "timezone", tsTimezoneStr) != 0) return -1;
S
Shengliang Guan 已提交
343 344
  if (cfgAddLocale(pCfg, "locale", tsLocale) != 0) return -1;
  if (cfgAddCharset(pCfg, "charset", tsCharset) != 0) return -1;
S
Shengliang Guan 已提交
345
  if (cfgAddBool(pCfg, "assert", 1, 1) != 0) return -1;
346
  if (cfgAddBool(pCfg, "enableCoreFile", 1, 1) != 0) return -1;
H
Haojun Liao 已提交
347 348 349 350 351 352
  if (cfgAddFloat(pCfg, "numOfCores", tsNumOfCores, 1, 100000, 1) != 0) return -1;

  if (cfgAddBool(pCfg, "SSE42", tsSSE42Enable, 0) != 0) return -1;
  if (cfgAddBool(pCfg, "AVX", tsAVXEnable, 0) != 0) return -1;
  if (cfgAddBool(pCfg, "AVX2", tsAVX2Enable, 0) != 0) return -1;
  if (cfgAddBool(pCfg, "FMA", tsFMAEnable, 0) != 0) return -1;
H
Haojun Liao 已提交
353
  if (cfgAddBool(pCfg, "SIMD-builtins", tsSIMDBuiltins, 0) != 0) return -1;
H
Haojun Liao 已提交
354

S
Shengliang Guan 已提交
355 356
  if (cfgAddInt64(pCfg, "openMax", tsOpenMax, 0, INT64_MAX, 1) != 0) return -1;
  if (cfgAddInt64(pCfg, "streamMax", tsStreamMax, 0, INT64_MAX, 1) != 0) return -1;
wafwerar's avatar
wafwerar 已提交
357 358
  if (cfgAddInt32(pCfg, "pageSizeKB", tsPageSizeKB, 0, INT64_MAX, 1) != 0) return -1;
  if (cfgAddInt64(pCfg, "totalMemoryKB", tsTotalMemoryKB, 0, INT64_MAX, 1) != 0) return -1;
S
Shengliang Guan 已提交
359 360 361 362 363 364 365 366 367 368 369
  if (cfgAddString(pCfg, "os sysname", info.sysname, 1) != 0) return -1;
  if (cfgAddString(pCfg, "os nodename", info.nodename, 1) != 0) return -1;
  if (cfgAddString(pCfg, "os release", info.release, 1) != 0) return -1;
  if (cfgAddString(pCfg, "os version", info.version, 1) != 0) return -1;
  if (cfgAddString(pCfg, "os machine", info.machine, 1) != 0) return -1;

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

S
Shengliang Guan 已提交
372 373 374
static int32_t taosAddServerCfg(SConfig *pCfg) {
  if (cfgAddDir(pCfg, "dataDir", tsDataDir, 0) != 0) return -1;
  if (cfgAddFloat(pCfg, "minimalDataDirGB", 2.0f, 0.001f, 10000000, 0) != 0) return -1;
375 376 377

  tsNumOfSupportVnodes = tsNumOfCores * 2;
  tsNumOfSupportVnodes = TMAX(tsNumOfSupportVnodes, 2);
378
  if (cfgAddInt32(pCfg, "supportVnodes", tsNumOfSupportVnodes, 0, 4096, 0) != 0) return -1;
379

S
Shengliang Guan 已提交
380 381 382 383
  if (cfgAddInt32(pCfg, "maxShellConns", tsMaxShellConns, 10, 50000000, 0) != 0) return -1;
  if (cfgAddInt32(pCfg, "statusInterval", tsStatusInterval, 1, 30, 0) != 0) return -1;
  if (cfgAddInt32(pCfg, "minSlidingTime", tsMinSlidingTime, 10, 1000000, 0) != 0) return -1;
  if (cfgAddInt32(pCfg, "minIntervalTime", tsMinIntervalTime, 1, 1000000, 0) != 0) return -1;
S
Shengliang Guan 已提交
384
  if (cfgAddInt32(pCfg, "maxNumOfDistinctRes", tsMaxNumOfDistinctResults, 10 * 10000, 10000 * 10000, 0) != 0) return -1;
385
  if (cfgAddInt32(pCfg, "countAlwaysReturnValue", tsCountAlwaysReturnValue, 0, 1, 0) != 0) return -1;
S
Shengliang Guan 已提交
386 387
  if (cfgAddInt32(pCfg, "queryBufferSize", tsQueryBufferSize, -1, 500000000000, 0) != 0) return -1;
  if (cfgAddBool(pCfg, "printAuth", tsPrintAuth, 0) != 0) return -1;
D
dapan1121 已提交
388
  if (cfgAddInt32(pCfg, "queryRspPolicy", tsQueryRspPolicy, 0, 1, 0) != 0) return -1;
S
Shengliang Guan 已提交
389

S
Shengliang Guan 已提交
390
  tsNumOfRpcThreads = tsNumOfCores / 2;
dengyihao's avatar
dengyihao 已提交
391
  tsNumOfRpcThreads = TRANGE(tsNumOfRpcThreads, 1, TSDB_MAX_RPC_THREADS);
S
Shengliang Guan 已提交
392 393
  if (cfgAddInt32(pCfg, "numOfRpcThreads", tsNumOfRpcThreads, 1, 1024, 0) != 0) return -1;

S
Shengliang Guan 已提交
394
  tsNumOfCommitThreads = tsNumOfCores / 2;
S
Shengliang Guan 已提交
395
  tsNumOfCommitThreads = TRANGE(tsNumOfCommitThreads, 2, 4);
S
Shengliang Guan 已提交
396 397 398 399 400 401
  if (cfgAddInt32(pCfg, "numOfCommitThreads", tsNumOfCommitThreads, 1, 1024, 0) != 0) return -1;

  tsNumOfMnodeReadThreads = tsNumOfCores / 8;
  tsNumOfMnodeReadThreads = TRANGE(tsNumOfMnodeReadThreads, 1, 4);
  if (cfgAddInt32(pCfg, "numOfMnodeReadThreads", tsNumOfMnodeReadThreads, 1, 1024, 0) != 0) return -1;

D
dapan1121 已提交
402 403
  tsNumOfVnodeQueryThreads = tsNumOfCores * 2;
  tsNumOfVnodeQueryThreads = TMAX(tsNumOfVnodeQueryThreads, 4);
S
Shengliang Guan 已提交
404
  if (cfgAddInt32(pCfg, "numOfVnodeQueryThreads", tsNumOfVnodeQueryThreads, 4, 1024, 0) != 0) return -1;
S
Shengliang Guan 已提交
405

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

408 409 410
  tsNumOfVnodeFetchThreads = tsNumOfCores / 4;
  tsNumOfVnodeFetchThreads = TMAX(tsNumOfVnodeFetchThreads, 4);
  if (cfgAddInt32(pCfg, "numOfVnodeFetchThreads", tsNumOfVnodeFetchThreads, 4, 1024, 0) != 0) return -1;
S
Shengliang Guan 已提交
411

C
Cary Xu 已提交
412 413 414 415
  tsNumOfVnodeRsmaThreads = tsNumOfCores;
  tsNumOfVnodeRsmaThreads = TMAX(tsNumOfVnodeRsmaThreads, 4);
  if (cfgAddInt32(pCfg, "numOfVnodeRsmaThreads", tsNumOfVnodeRsmaThreads, 1, 1024, 0) != 0) return -1;

D
dapan1121 已提交
416 417
  tsNumOfQnodeQueryThreads = tsNumOfCores * 2;
  tsNumOfQnodeQueryThreads = TMAX(tsNumOfQnodeQueryThreads, 4);
418
  if (cfgAddInt32(pCfg, "numOfQnodeQueryThreads", tsNumOfQnodeQueryThreads, 4, 1024, 0) != 0) return -1;
S
Shengliang Guan 已提交
419

L
Liu Jicong 已提交
420 421 422
  //  tsNumOfQnodeFetchThreads = tsNumOfCores / 2;
  //  tsNumOfQnodeFetchThreads = TMAX(tsNumOfQnodeFetchThreads, 4);
  //  if (cfgAddInt32(pCfg, "numOfQnodeFetchThreads", tsNumOfQnodeFetchThreads, 1, 1024, 0) != 0) return -1;
S
Shengliang Guan 已提交
423

L
Liu Jicong 已提交
424 425 426
  tsNumOfSnodeStreamThreads = tsNumOfCores / 4;
  tsNumOfSnodeStreamThreads = TRANGE(tsNumOfSnodeStreamThreads, 2, 4);
  if (cfgAddInt32(pCfg, "numOfSnodeSharedThreads", tsNumOfSnodeStreamThreads, 2, 1024, 0) != 0) return -1;
S
Shengliang Guan 已提交
427

L
Liu Jicong 已提交
428 429 430
  tsNumOfSnodeWriteThreads = tsNumOfCores / 4;
  tsNumOfSnodeWriteThreads = TRANGE(tsNumOfSnodeWriteThreads, 2, 4);
  if (cfgAddInt32(pCfg, "numOfSnodeUniqueThreads", tsNumOfSnodeWriteThreads, 2, 1024, 0) != 0) return -1;
S
Shengliang Guan 已提交
431

432
  tsRpcQueueMemoryAllowed = tsTotalMemoryKB * 1024 * 0.1;
wafwerar's avatar
wafwerar 已提交
433
  tsRpcQueueMemoryAllowed = TRANGE(tsRpcQueueMemoryAllowed, TSDB_MAX_MSG_SIZE * 10LL, TSDB_MAX_MSG_SIZE * 10000LL);
434
  if (cfgAddInt64(pCfg, "rpcQueueMemoryAllowed", tsRpcQueueMemoryAllowed, TSDB_MAX_MSG_SIZE * 10L, INT64_MAX, 0) != 0)
dengyihao's avatar
dengyihao 已提交
435
    return -1;
436

437 438 439 440
  if (cfgAddInt32(pCfg, "syncElectInterval", tsElectInterval, 10, 1000 * 60 * 24 * 2, 0) != 0) return -1;
  if (cfgAddInt32(pCfg, "syncHeartbeatInterval", tsHeartbeatInterval, 10, 1000 * 60 * 24 * 2, 0) != 0) return -1;
  if (cfgAddInt32(pCfg, "syncHeartbeatTimeout", tsHeartbeatTimeout, 10, 1000 * 60 * 24 * 2, 0) != 0) return -1;

441 442
  if (cfgAddInt64(pCfg, "vndCommitMaxInterval", tsVndCommitMaxIntervalMs, 1000, 1000 * 60 * 60, 0) != 0) return -1;

S
monitor  
Shengliang Guan 已提交
443
  if (cfgAddBool(pCfg, "monitor", tsEnableMonitor, 0) != 0) return -1;
S
Shengliang Guan 已提交
444
  if (cfgAddInt32(pCfg, "monitorInterval", tsMonitorInterval, 1, 200000, 0) != 0) return -1;
S
monitor  
Shengliang Guan 已提交
445 446
  if (cfgAddString(pCfg, "monitorFqdn", tsMonitorFqdn, 0) != 0) return -1;
  if (cfgAddInt32(pCfg, "monitorPort", tsMonitorPort, 1, 65056, 0) != 0) return -1;
S
monitor  
Shengliang Guan 已提交
447
  if (cfgAddInt32(pCfg, "monitorMaxLogs", tsMonitorMaxLogs, 1, 1000000, 0) != 0) return -1;
S
Shengliang Guan 已提交
448
  if (cfgAddBool(pCfg, "monitorComp", tsMonitorComp, 0) != 0) return -1;
S
monitor  
Shengliang Guan 已提交
449

D
dapan1121 已提交
450
  if (cfgAddBool(pCfg, "crashReporting", tsEnableCrashReport, 0) != 0) return -1;
S
Shengliang Guan 已提交
451 452 453 454 455
  if (cfgAddBool(pCfg, "telemetryReporting", tsEnableTelem, 0) != 0) return -1;
  if (cfgAddInt32(pCfg, "telemetryInterval", tsTelemInterval, 1, 200000, 0) != 0) return -1;
  if (cfgAddString(pCfg, "telemetryServer", tsTelemServer, 0) != 0) return -1;
  if (cfgAddInt32(pCfg, "telemetryPort", tsTelemPort, 1, 65056, 0) != 0) return -1;

456 457
  if (cfgAddInt32(pCfg, "transPullupInterval", tsTransPullupInterval, 1, 10000, 1) != 0) return -1;
  if (cfgAddInt32(pCfg, "mqRebalanceInterval", tsMqRebalanceInterval, 1, 10000, 1) != 0) return -1;
L
Liu Jicong 已提交
458
  if (cfgAddInt32(pCfg, "ttlUnit", tsTtlUnit, 1, 86400 * 365, 1) != 0) return -1;
459
  if (cfgAddInt32(pCfg, "ttlPushInterval", tsTtlPushInterval, 1, 100000, 1) != 0) return -1;
460
  if (cfgAddInt32(pCfg, "uptimeInterval", tsUptimeInterval, 1, 100000, 1) != 0) return -1;
461
  if (cfgAddInt32(pCfg, "queryRsmaTolerance", tsQueryRsmaTolerance, 0, 900000, 0) != 0) return -1;
462

463 464
  if (cfgAddInt64(pCfg, "walFsyncDataSizeLimit", tsWalFsyncDataSizeLimit, 100 * 1024 * 1024, INT64_MAX, 0) != 0)
    return -1;
465

466
  if (cfgAddBool(pCfg, "udf", tsStartUdfd, 0) != 0) return -1;
S
slzhou 已提交
467
  if (cfgAddString(pCfg, "udfdResFuncs", tsUdfdResFuncs, 0) != 0) return -1;
468
  if (cfgAddString(pCfg, "udfdLdLibPath", tsUdfdLdLibPath, 0) != 0) return -1;
dengyihao's avatar
dengyihao 已提交
469

wafwerar's avatar
wafwerar 已提交
470
  GRANT_CFG_ADD;
S
Shengliang Guan 已提交
471
  return 0;
S
Shengliang Guan 已提交
472 473
}

wafwerar's avatar
wafwerar 已提交
474 475
static int32_t taosUpdateServerCfg(SConfig *pCfg) {
  SConfigItem *pItem;
476 477 478
  ECfgSrcType  stype;
  int32_t      numOfCores;
  int64_t      totalMemoryKB;
wafwerar's avatar
wafwerar 已提交
479 480 481 482 483 484

  pItem = cfgGetItem(tsCfg, "numOfCores");
  if (pItem == NULL) {
    return -1;
  } else {
    stype = pItem->stype;
wafwerar's avatar
wafwerar 已提交
485
    numOfCores = pItem->fval;
wafwerar's avatar
wafwerar 已提交
486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527
  }

  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;
    tsNumOfRpcThreads = TRANGE(tsNumOfRpcThreads, 1, 4);
    pItem->i32 = tsNumOfRpcThreads;
    pItem->stype = stype;
  }

  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;
  }

528
  pItem = cfgGetItem(tsCfg, "ratioOfVnodeStreamThreads");
wafwerar's avatar
wafwerar 已提交
529
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
530
    pItem->fval = tsRatioOfVnodeStreamThreads;
wafwerar's avatar
wafwerar 已提交
531 532 533
    pItem->stype = stype;
  }

534 535 536 537 538 539 540
  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 已提交
541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557

  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 已提交
558 559 560 561 562 563 564 565 566
  /*
    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 已提交
567 568 569

  pItem = cfgGetItem(tsCfg, "numOfSnodeSharedThreads");
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
L
Liu Jicong 已提交
570 571 572
    tsNumOfSnodeStreamThreads = numOfCores / 4;
    tsNumOfSnodeStreamThreads = TRANGE(tsNumOfSnodeStreamThreads, 2, 4);
    pItem->i32 = tsNumOfSnodeStreamThreads;
wafwerar's avatar
wafwerar 已提交
573 574 575 576 577
    pItem->stype = stype;
  }

  pItem = cfgGetItem(tsCfg, "numOfSnodeUniqueThreads");
  if (pItem != NULL && pItem->stype == CFG_STYPE_DEFAULT) {
L
Liu Jicong 已提交
578 579 580
    tsNumOfSnodeWriteThreads = numOfCores / 4;
    tsNumOfSnodeWriteThreads = TRANGE(tsNumOfSnodeWriteThreads, 2, 4);
    pItem->i32 = tsNumOfSnodeWriteThreads;
wafwerar's avatar
wafwerar 已提交
581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602
    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 已提交
603
static void taosSetClientLogCfg(SConfig *pCfg) {
S
Shengliang Guan 已提交
604
  SConfigItem *pItem = cfgGetItem(pCfg, "logDir");
S
os env  
Shengliang Guan 已提交
605
  tstrncpy(tsLogDir, cfgGetItem(pCfg, "logDir")->str, PATH_MAX);
S
Shengliang Guan 已提交
606
  taosExpandDir(tsLogDir, tsLogDir, PATH_MAX);
wafwerar's avatar
wafwerar 已提交
607
  tsLogSpace.reserved = (int64_t)(((double)cfgGetItem(pCfg, "minimalLogDirGB")->fval) * 1024 * 1024 * 1024);
S
Shengliang Guan 已提交
608 609 610 611
  tsNumOfLogLines = cfgGetItem(pCfg, "numOfLogLines")->i32;
  tsAsyncLog = cfgGetItem(pCfg, "asyncLog")->bval;
  tsLogKeepDays = cfgGetItem(pCfg, "logKeepDays")->i32;
  tmrDebugFlag = cfgGetItem(pCfg, "tmrDebugFlag")->i32;
S
Shengliang Guan 已提交
612
  uDebugFlag = cfgGetItem(pCfg, "uDebugFlag")->i32;
S
Shengliang Guan 已提交
613
  jniDebugFlag = cfgGetItem(pCfg, "jniDebugFlag")->i32;
S
Shengliang Guan 已提交
614 615 616
  rpcDebugFlag = cfgGetItem(pCfg, "rpcDebugFlag")->i32;
  qDebugFlag = cfgGetItem(pCfg, "qDebugFlag")->i32;
  cDebugFlag = cfgGetItem(pCfg, "cDebugFlag")->i32;
S
Shengliang Guan 已提交
617 618 619 620 621 622 623 624 625 626 627
}

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 已提交
628
  udfDebugFlag = cfgGetItem(pCfg, "udfDebugFlag")->i32;
629
  smaDebugFlag = cfgGetItem(pCfg, "smaDebugFlag")->i32;
dengyihao's avatar
dengyihao 已提交
630
  idxDebugFlag = cfgGetItem(pCfg, "idxDebugFlag")->i32;
M
Minglei Jin 已提交
631
  tdbDebugFlag = cfgGetItem(pCfg, "tdbDebugFlag")->i32;
S
Shengliang Guan 已提交
632
  metaDebugFlag = cfgGetItem(pCfg, "metaDebugFlag")->i32;
S
Shengliang Guan 已提交
633 634
}

S
Shengliang Guan 已提交
635
static int32_t taosSetClientCfg(SConfig *pCfg) {
S
monitor  
Shengliang Guan 已提交
636
  tstrncpy(tsLocalFqdn, cfgGetItem(pCfg, "fqdn")->str, TSDB_FQDN_LEN);
S
Shengliang Guan 已提交
637 638
  tsServerPort = (uint16_t)cfgGetItem(pCfg, "serverPort")->i32;
  snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
639

640 641 642
  char defaultFirstEp[TSDB_EP_LEN] = {0};
  snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort);

643 644
  SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp");
  SEp          firstEp = {0};
645
  taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp);
646 647 648 649 650
  snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port);
  cfgSetItem(pCfg, "firstEp", tsFirst, pFirstEpItem->stype);

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

S
Shengliang Guan 已提交
655 656
  tstrncpy(tsTempDir, cfgGetItem(pCfg, "tempDir")->str, PATH_MAX);
  taosExpandDir(tsTempDir, tsTempDir, PATH_MAX);
wafwerar's avatar
wafwerar 已提交
657
  tsTempSpace.reserved = (int64_t)(((double)cfgGetItem(pCfg, "minimalTmpDirGB")->fval) * 1024 * 1024 * 1024);
S
Shengliang Guan 已提交
658
  if (taosMulMkDir(tsTempDir) != 0) {
S
Shengliang Guan 已提交
659 660 661
    uError("failed to create tempDir:%s since %s", tsTempDir, terrstr());
    return -1;
  }
S
Shengliang Guan 已提交
662

663
  tstrncpy(tsSmlChildTableName, cfgGetItem(pCfg, "smlChildTableName")->str, TSDB_TABLE_NAME_LEN);
664
  tstrncpy(tsSmlTagName, cfgGetItem(pCfg, "smlTagName")->str, TSDB_COL_NAME_LEN);
665
  tsSmlDataFormat = cfgGetItem(pCfg, "smlDataFormat")->bval;
666

667
  tsSmlBatchSize = cfgGetItem(pCfg, "smlBatchSize")->i32;
668 669
  tsMaxMemUsedByInsert = cfgGetItem(pCfg, "maxMemUsedByInsert")->i32;

670
  tsShellActivityTimer = cfgGetItem(pCfg, "shellActivityTimer")->i32;
S
Shengliang Guan 已提交
671 672
  tsCompressMsgSize = cfgGetItem(pCfg, "compressMsgSize")->i32;
  tsCompressColData = cfgGetItem(pCfg, "compressColData")->i32;
S
Shengliang Guan 已提交
673
  tsNumOfTaskQueueThreads = cfgGetItem(pCfg, "numOfTaskQueueThreads")->i32;
X
Xiaoyu Wang 已提交
674
  tsQueryPolicy = cfgGetItem(pCfg, "queryPolicy")->i32;
675
  tsEnableQueryHb = cfgGetItem(pCfg, "enableQueryHb")->bval;
X
Xiaoyu Wang 已提交
676
  tsQuerySmaOptimize = cfgGetItem(pCfg, "querySmaOptimize")->i32;
677
  tsQueryPlannerTrace = cfgGetItem(pCfg, "queryPlannerTrace")->bval;
678 679
  tsQueryNodeChunkSize = cfgGetItem(pCfg, "queryNodeChunkSize")->i32;
  tsQueryUseNodeAllocator = cfgGetItem(pCfg, "queryUseNodeAllocator")->bval;
680
  tsKeepColumnName = cfgGetItem(pCfg, "keepColumnName")->bval;
681
  tsUseAdapter = cfgGetItem(pCfg, "useAdapter")->bval;
D
dapan1121 已提交
682
  tsEnableCrashReport = cfgGetItem(pCfg, "crashReporting")->bval;
dengyihao's avatar
dengyihao 已提交
683

684
  tsMaxRetryWaitTime = cfgGetItem(pCfg, "maxRetryWaitTime")->i32;
S
Shengliang Guan 已提交
685
  return 0;
S
os  
Shengliang Guan 已提交
686
}
S
config  
Shengliang Guan 已提交
687

S
os  
Shengliang Guan 已提交
688
static void taosSetSystemCfg(SConfig *pCfg) {
S
Shengliang Guan 已提交
689 690
  SConfigItem *pItem = cfgGetItem(pCfg, "timezone");
  osSetTimezone(pItem->str);
wafwerar's avatar
wafwerar 已提交
691 692
  uDebug("timezone format changed from %s to %s", pItem->str, tsTimezoneStr);
  cfgSetItem(pCfg, "timezone", tsTimezoneStr, pItem->stype);
S
Shengliang Guan 已提交
693

S
Shengliang Guan 已提交
694 695
  const char *locale = cfgGetItem(pCfg, "locale")->str;
  const char *charset = cfgGetItem(pCfg, "charset")->str;
S
os env  
Shengliang Guan 已提交
696
  taosSetSystemLocale(locale, charset);
wafwerar's avatar
wafwerar 已提交
697
  osSetSystemLocale(locale, charset);
S
Shengliang Guan 已提交
698

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

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

S
config  
Shengliang Guan 已提交
704 705
  // todo
  tsVersion = 30000000;
S
Shengliang Guan 已提交
706
}
707

S
Shengliang Guan 已提交
708
static int32_t taosSetServerCfg(SConfig *pCfg) {
wafwerar's avatar
wafwerar 已提交
709
  tsDataSpace.reserved = (int64_t)(((double)cfgGetItem(pCfg, "minimalDataDirGB")->fval) * 1024 * 1024 * 1024);
710
  tsNumOfSupportVnodes = cfgGetItem(pCfg, "supportVnodes")->i32;
S
Shengliang Guan 已提交
711 712 713 714
  tsMaxShellConns = cfgGetItem(pCfg, "maxShellConns")->i32;
  tsStatusInterval = cfgGetItem(pCfg, "statusInterval")->i32;
  tsMinSlidingTime = cfgGetItem(pCfg, "minSlidingTime")->i32;
  tsMinIntervalTime = cfgGetItem(pCfg, "minIntervalTime")->i32;
S
Shengliang Guan 已提交
715
  tsMaxNumOfDistinctResults = cfgGetItem(pCfg, "maxNumOfDistinctRes")->i32;
716
  tsCountAlwaysReturnValue = cfgGetItem(pCfg, "countAlwaysReturnValue")->i32;
S
config  
Shengliang Guan 已提交
717
  tsQueryBufferSize = cfgGetItem(pCfg, "queryBufferSize")->i32;
S
Shengliang Guan 已提交
718
  tsPrintAuth = cfgGetItem(pCfg, "printAuth")->bval;
S
Shengliang Guan 已提交
719

S
Shengliang Guan 已提交
720 721
  tsNumOfRpcThreads = cfgGetItem(pCfg, "numOfRpcThreads")->i32;
  tsNumOfCommitThreads = cfgGetItem(pCfg, "numOfCommitThreads")->i32;
S
Shengliang Guan 已提交
722 723
  tsNumOfMnodeReadThreads = cfgGetItem(pCfg, "numOfMnodeReadThreads")->i32;
  tsNumOfVnodeQueryThreads = cfgGetItem(pCfg, "numOfVnodeQueryThreads")->i32;
724
  tsRatioOfVnodeStreamThreads = cfgGetItem(pCfg, "ratioOfVnodeStreamThreads")->fval;
725
  tsNumOfVnodeFetchThreads = cfgGetItem(pCfg, "numOfVnodeFetchThreads")->i32;
C
Cary Xu 已提交
726
  tsNumOfVnodeRsmaThreads = cfgGetItem(pCfg, "numOfVnodeRsmaThreads")->i32;
S
Shengliang Guan 已提交
727
  tsNumOfQnodeQueryThreads = cfgGetItem(pCfg, "numOfQnodeQueryThreads")->i32;
L
Liu Jicong 已提交
728
  //  tsNumOfQnodeFetchThreads = cfgGetItem(pCfg, "numOfQnodeFetchThreads")->i32;
L
Liu Jicong 已提交
729 730
  tsNumOfSnodeStreamThreads = cfgGetItem(pCfg, "numOfSnodeSharedThreads")->i32;
  tsNumOfSnodeWriteThreads = cfgGetItem(pCfg, "numOfSnodeUniqueThreads")->i32;
731
  tsRpcQueueMemoryAllowed = cfgGetItem(pCfg, "rpcQueueMemoryAllowed")->i64;
S
Shengliang Guan 已提交
732

dengyihao's avatar
dengyihao 已提交
733
  tsSIMDBuiltins = (bool)cfgGetItem(pCfg, "SIMD-builtins")->bval;
H
Haojun Liao 已提交
734

S
monitor  
Shengliang Guan 已提交
735 736 737 738
  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 已提交
739
  tsMonitorMaxLogs = cfgGetItem(pCfg, "monitorMaxLogs")->i32;
S
Shengliang Guan 已提交
740
  tsMonitorComp = cfgGetItem(pCfg, "monitorComp")->bval;
D
dapan1121 已提交
741
  tsQueryRspPolicy = cfgGetItem(pCfg, "queryRspPolicy")->i32;
S
monitor  
Shengliang Guan 已提交
742

S
Shengliang Guan 已提交
743
  tsEnableTelem = cfgGetItem(pCfg, "telemetryReporting")->bval;
D
dapan1121 已提交
744
  tsEnableCrashReport = cfgGetItem(pCfg, "crashReporting")->bval;
S
Shengliang Guan 已提交
745 746 747 748
  tsTelemInterval = cfgGetItem(pCfg, "telemetryInterval")->i32;
  tstrncpy(tsTelemServer, cfgGetItem(pCfg, "telemetryServer")->str, TSDB_FQDN_LEN);
  tsTelemPort = (uint16_t)cfgGetItem(pCfg, "telemetryPort")->i32;

749 750
  tsTransPullupInterval = cfgGetItem(pCfg, "transPullupInterval")->i32;
  tsMqRebalanceInterval = cfgGetItem(pCfg, "mqRebalanceInterval")->i32;
wmmhello's avatar
wmmhello 已提交
751
  tsTtlUnit = cfgGetItem(pCfg, "ttlUnit")->i32;
wmmhello's avatar
wmmhello 已提交
752
  tsTtlPushInterval = cfgGetItem(pCfg, "ttlPushInterval")->i32;
753
  tsUptimeInterval = cfgGetItem(pCfg, "uptimeInterval")->i32;
754
  tsQueryRsmaTolerance = cfgGetItem(pCfg, "queryRsmaTolerance")->i32;
755

756
  tsWalFsyncDataSizeLimit = cfgGetItem(pCfg, "walFsyncDataSizeLimit")->i64;
757

758 759 760 761
  tsElectInterval = cfgGetItem(pCfg, "syncElectInterval")->i32;
  tsHeartbeatInterval = cfgGetItem(pCfg, "syncHeartbeatInterval")->i32;
  tsHeartbeatTimeout = cfgGetItem(pCfg, "syncHeartbeatTimeout")->i32;

762 763
  tsVndCommitMaxIntervalMs = cfgGetItem(pCfg, "vndCommitMaxInterval")->i64;

764
  tsStartUdfd = cfgGetItem(pCfg, "udf")->bval;
S
slzhou 已提交
765
  tstrncpy(tsUdfdResFuncs, cfgGetItem(pCfg, "udfdResFuncs")->str, sizeof(tsUdfdResFuncs));
766
  tstrncpy(tsUdfdLdLibPath, cfgGetItem(pCfg, "udfdLdLibPath")->str, sizeof(tsUdfdLdLibPath));
S
config  
Shengliang Guan 已提交
767 768 769
  if (tsQueryBufferSize >= 0) {
    tsQueryBufferSizeBytes = tsQueryBufferSize * 1048576UL;
  }
wafwerar's avatar
wafwerar 已提交
770
  GRANT_CFG_GET;
S
Shengliang Guan 已提交
771
  return 0;
S
Shengliang Guan 已提交
772 773
}

774
void taosLocalCfgForbiddenToChange(char *name, bool *forbidden) {
775 776 777 778 779 780 781 782
  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 已提交
783
  GRANT_CFG_CHECK;
784 785 786 787

  *forbidden = false;
}

L
Liu Jicong 已提交
788
int32_t taosSetCfg(SConfig *pCfg, char *name) {
D
dapan1121 已提交
789 790 791 792 793 794 795 796
  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 已提交
797 798
      } else if (strcasecmp("assert", name) == 0) {
        tsAssert = cfgGetItem(pCfg, "assert")->bval;
799
      }
D
dapan1121 已提交
800 801 802 803 804 805 806 807 808 809 810 811 812 813
      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 已提交
814
      } else if (strcasecmp("cDebugFlag", name) == 0) {
D
dapan1121 已提交
815
        cDebugFlag = cfgGetItem(pCfg, "cDebugFlag")->i32;
D
dapan1121 已提交
816 817
      } else if (strcasecmp("crashReporting", name) == 0) {
        tsEnableCrashReport = cfgGetItem(pCfg, "crashReporting")->bval;
D
dapan1121 已提交
818 819 820 821
      }
      break;
    }
    case 'd': {
S
Shengliang Guan 已提交
822
      if (strcasecmp("dDebugFlag", name) == 0) {
D
dapan1121 已提交
823
        dDebugFlag = cfgGetItem(pCfg, "dDebugFlag")->i32;
824 825 826
      } else if (strcasecmp("debugFlag", name) == 0) {
        int32_t flag = cfgGetItem(pCfg, "debugFlag")->i32;
        taosSetAllDebugFlag(flag, true);
D
dapan1121 已提交
827 828 829 830 831 832
      }
      break;
    }
    case 'e': {
      if (strcasecmp("enableCoreFile", name) == 0) {
        bool enableCore = cfgGetItem(pCfg, "enableCoreFile")->bval;
wafwerar's avatar
wafwerar 已提交
833
        taosSetCoreDump(enableCore);
834 835
      } else if (strcasecmp("enableQueryHb", name) == 0) {
        tsEnableQueryHb = cfgGetItem(pCfg, "enableQueryHb")->bval;
D
dapan1121 已提交
836 837 838 839 840 841 842 843
      }
      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 已提交
844

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

D
dapan1121 已提交
848 849 850 851 852 853 854 855 856
        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 已提交
857

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

D
dapan1121 已提交
861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883
        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': {
884 885 886
      if (strcasecmp("keepColumnName", name) == 0) {
        tsKeepColumnName = cfgGetItem(pCfg, "keepColumnName")->bval;
      }
D
dapan1121 已提交
887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909
      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;
910 911
          } else if (strcasecmp("maxMemUsedByInsert", name) == 0) {
            tsMaxMemUsedByInsert = cfgGetItem(pCfg, "maxMemUsedByInsert")->i32;
912 913
          } else if (strcasecmp("maxRetryWaitTime", name) == 0) {
            tsMaxRetryWaitTime = cfgGetItem(pCfg, "maxRetryWaitTime")->i32;
D
dapan1121 已提交
914 915 916 917 918 919 920 921 922 923
          }
          break;
        }
        case 'd': {
          if (strcasecmp("mDebugFlag", name) == 0) {
            mDebugFlag = cfgGetItem(pCfg, "mDebugFlag")->i32;
          }
          break;
        }
        case 'i': {
S
Shengliang Guan 已提交
924
          if (strcasecmp("minimalTmpDirGB", name) == 0) {
wafwerar's avatar
wafwerar 已提交
925
            tsTempSpace.reserved = (int64_t)(((double)cfgGetItem(pCfg, "minimalTmpDirGB")->fval) * 1024 * 1024 * 1024);
D
dapan1121 已提交
926
          } else if (strcasecmp("minimalDataDirGB", name) == 0) {
wafwerar's avatar
wafwerar 已提交
927
            tsDataSpace.reserved = (int64_t)(((double)cfgGetItem(pCfg, "minimalDataDirGB")->fval) * 1024 * 1024 * 1024);
D
dapan1121 已提交
928 929 930
          } else if (strcasecmp("minSlidingTime", name) == 0) {
            tsMinSlidingTime = cfgGetItem(pCfg, "minSlidingTime")->i32;
          } else if (strcasecmp("minIntervalTime", name) == 0) {
L
Liu Jicong 已提交
931
            tsMinIntervalTime = cfgGetItem(pCfg, "minIntervalTime")->i32;
D
dapan1121 已提交
932
          } else if (strcasecmp("minimalLogDirGB", name) == 0) {
wafwerar's avatar
wafwerar 已提交
933
            tsLogSpace.reserved = (int64_t)(((double)cfgGetItem(pCfg, "minimalLogDirGB")->fval) * 1024 * 1024 * 1024);
D
dapan1121 已提交
934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959
          }
          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': {
960
          if (strcasecmp("udfDebugFlag", name) == 0) {
S
Shengliang Guan 已提交
961
            udfDebugFlag = cfgGetItem(pCfg, "udfDebugFlag")->i32;
D
dapan1121 已提交
962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981
          }
          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;
      } 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;
982 983 984 985
        /*
              } else if (strcasecmp("numOfVnodeFetchThreads", name) == 0) {
                tsNumOfVnodeFetchThreads = cfgGetItem(pCfg, "numOfVnodeFetchThreads")->i32;
        */
C
Cary Xu 已提交
986 987
      } else if (strcasecmp("numOfVnodeRsmaThreads", name) == 0) {
        tsNumOfVnodeRsmaThreads = cfgGetItem(pCfg, "numOfVnodeRsmaThreads")->i32;
D
dapan1121 已提交
988 989
      } else if (strcasecmp("numOfQnodeQueryThreads", name) == 0) {
        tsNumOfQnodeQueryThreads = cfgGetItem(pCfg, "numOfQnodeQueryThreads")->i32;
L
Liu Jicong 已提交
990 991 992 993
        /*
              } else if (strcasecmp("numOfQnodeFetchThreads", name) == 0) {
                tsNumOfQnodeFetchThreads = cfgGetItem(pCfg, "numOfQnodeFetchThreads")->i32;
        */
D
dapan1121 已提交
994
      } else if (strcasecmp("numOfSnodeSharedThreads", name) == 0) {
L
Liu Jicong 已提交
995
        tsNumOfSnodeStreamThreads = cfgGetItem(pCfg, "numOfSnodeSharedThreads")->i32;
D
dapan1121 已提交
996
      } else if (strcasecmp("numOfSnodeUniqueThreads", name) == 0) {
L
Liu Jicong 已提交
997
        tsNumOfSnodeWriteThreads = cfgGetItem(pCfg, "numOfSnodeUniqueThreads")->i32;
D
dapan1121 已提交
998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020
      } 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;
1021 1022
      } else if (strcasecmp("queryPlannerTrace", name) == 0) {
        tsQueryPlannerTrace = cfgGetItem(pCfg, "queryPlannerTrace")->bval;
1023 1024 1025 1026
      } else if (strcasecmp("queryNodeChunkSize", name) == 0) {
        tsQueryNodeChunkSize = cfgGetItem(pCfg, "queryNodeChunkSize")->i32;
      } else if (strcasecmp("queryUseNodeAllocator", name) == 0) {
        tsQueryUseNodeAllocator = cfgGetItem(pCfg, "queryUseNodeAllocator")->bval;
1027 1028
      } else if (strcasecmp("queryRsmaTolerance", name) == 0) {
        tsQueryRsmaTolerance = cfgGetItem(pCfg, "queryRsmaTolerance")->i32;
D
dapan1121 已提交
1029 1030 1031 1032
      }
      break;
    }
    case 'r': {
S
Shengliang Guan 已提交
1033
      if (strcasecmp("rpcQueueMemoryAllowed", name) == 0) {
D
dapan1121 已提交
1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052
        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);
      } else if (strcasecmp("smlDataFormat", name) == 0) {
        tsSmlDataFormat = cfgGetItem(pCfg, "smlDataFormat")->bval;
1053 1054
      } else if (strcasecmp("smlBatchSize", name) == 0) {
        tsSmlBatchSize = cfgGetItem(pCfg, "smlBatchSize")->i32;
D
dapan1121 已提交
1055 1056 1057 1058 1059 1060 1061 1062 1063 1064
      } 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 已提交
1065

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

D
dapan1121 已提交
1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093
        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;
      }
      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 已提交
1094 1095
      } else if (strcasecmp("tdbDebugFlag", name) == 0) {
        tdbDebugFlag = cfgGetItem(pCfg, "tdbDebugFlag")->i32;
D
dapan1121 已提交
1096 1097 1098 1099 1100 1101 1102 1103 1104 1105
      } 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 已提交
1106 1107 1108 1109
      } else if (strcasecmp("ttlUnit", name) == 0) {
        tsTtlUnit = cfgGetItem(pCfg, "ttlUnit")->i32;
      } else if (strcasecmp("ttlPushInterval", name) == 0) {
        tsTtlPushInterval = cfgGetItem(pCfg, "ttlPushInterval")->i32;
D
dapan1121 已提交
1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127
      } 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;
      }
      break;
    }
    case 'v': {
1128
      if (strcasecmp("vDebugFlag", name) == 0) {
D
dapan1121 已提交
1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139
        vDebugFlag = cfgGetItem(pCfg, "vDebugFlag")->i32;
      }
      break;
    }
    case 'w': {
      if (strcasecmp("wDebugFlag", name) == 0) {
        wDebugFlag = cfgGetItem(pCfg, "wDebugFlag")->i32;
      }
      break;
    }
    default:
L
Liu Jicong 已提交
1140
      terrno = TSDB_CODE_CFG_NOT_FOUND;
D
dapan1121 已提交
1141 1142
      return -1;
  }
L
Liu Jicong 已提交
1143

D
dapan1121 已提交
1144 1145 1146
  return 0;
}

1147 1148
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 已提交
1149
  if (tsCfg == NULL) osDefaultInit();
S
Shengliang Guan 已提交
1150

S
Shengliang Guan 已提交
1151
  SConfig *pCfg = cfgInit();
S
config  
Shengliang Guan 已提交
1152
  if (pCfg == NULL) return -1;
S
Shengliang Guan 已提交
1153 1154

  if (tsc) {
S
Shengliang Guan 已提交
1155
    tsLogEmbedded = 0;
S
Shengliang Guan 已提交
1156 1157 1158 1159
    if (taosAddClientLogCfg(pCfg) != 0) {
      cfgCleanup(pCfg);
      return -1;
    }
S
Shengliang Guan 已提交
1160
  } else {
S
Shengliang Guan 已提交
1161
    tsLogEmbedded = 1;
S
Shengliang Guan 已提交
1162 1163 1164 1165 1166 1167 1168 1169
    if (taosAddClientLogCfg(pCfg) != 0) {
      cfgCleanup(pCfg);
      return -1;
    }
    if (taosAddServerLogCfg(pCfg) != 0) {
      cfgCleanup(pCfg);
      return -1;
    }
S
Shengliang Guan 已提交
1170 1171
  }

wafwerar's avatar
wafwerar 已提交
1172
  if (taosLoadCfg(pCfg, envCmd, cfgDir, envFile, apolloUrl) != 0) {
S
config  
Shengliang Guan 已提交
1173
    uError("failed to load cfg since %s", terrstr());
S
Shengliang Guan 已提交
1174 1175 1176 1177
    cfgCleanup(pCfg);
    return -1;
  }

1178
  if (cfgLoadFromArray(pCfg, pArgs) != 0) {
S
Shengliang Guan 已提交
1179 1180 1181 1182 1183
    uError("failed to load cfg from array since %s", terrstr());
    cfgCleanup(pCfg);
    return -1;
  }

S
Shengliang Guan 已提交
1184 1185 1186
  if (tsc) {
    taosSetClientLogCfg(pCfg);
  } else {
S
config  
Shengliang Guan 已提交
1187
    taosSetClientLogCfg(pCfg);
S
Shengliang Guan 已提交
1188 1189 1190
    taosSetServerLogCfg(pCfg);
  }

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

wafwerar's avatar
wafwerar 已提交
1193
  if (taosMulModeMkDir(tsLogDir, 0777) != 0) {
1194 1195 1196 1197 1198
    uError("failed to create dir:%s since %s", tsLogDir, terrstr());
    cfgCleanup(pCfg);
    return -1;
  }

S
Shengliang Guan 已提交
1199
  if (taosInitLog(logname, logFileNum) != 0) {
1200
    uError("failed to init log file since %s", terrstr());
S
Shengliang Guan 已提交
1201 1202
    cfgCleanup(pCfg);
    return -1;
1203 1204
  }

S
Shengliang Guan 已提交
1205 1206 1207 1208
  cfgCleanup(pCfg);
  return 0;
}

1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226
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 已提交
1227 1228 1229 1230
  if (tsCfg != NULL) return 0;
  tsCfg = cfgInit();

  if (tsc) {
S
Shengliang Guan 已提交
1231
    if (taosAddClientCfg(tsCfg) != 0) return -1;
S
Shengliang Guan 已提交
1232
    if (taosAddClientLogCfg(tsCfg) != 0) return -1;
S
Shengliang Guan 已提交
1233
  } else {
S
Shengliang Guan 已提交
1234 1235
    if (taosAddClientCfg(tsCfg) != 0) return -1;
    if (taosAddServerCfg(tsCfg) != 0) return -1;
S
Shengliang Guan 已提交
1236 1237
    if (taosAddClientLogCfg(tsCfg) != 0) return -1;
    if (taosAddServerLogCfg(tsCfg) != 0) return -1;
1238
  }
S
Shengliang Guan 已提交
1239
  taosAddSystemCfg(tsCfg);
1240

wafwerar's avatar
wafwerar 已提交
1241
  if (taosLoadCfg(tsCfg, envCmd, cfgDir, envFile, apolloUrl) != 0) {
S
config  
Shengliang Guan 已提交
1242
    uError("failed to load cfg since %s", terrstr());
S
Shengliang Guan 已提交
1243 1244 1245
    cfgCleanup(tsCfg);
    tsCfg = NULL;
    return -1;
1246 1247
  }

1248
  if (cfgLoadFromArray(tsCfg, pArgs) != 0) {
S
Shengliang Guan 已提交
1249 1250
    uError("failed to load cfg from array since %s", terrstr());
    cfgCleanup(tsCfg);
1251
    tsCfg = NULL;
S
Shengliang Guan 已提交
1252 1253 1254
    return -1;
  }

S
Shengliang Guan 已提交
1255
  if (tsc) {
S
Shengliang Guan 已提交
1256
    if (taosSetClientCfg(tsCfg)) return -1;
S
Shengliang Guan 已提交
1257
  } else {
S
Shengliang Guan 已提交
1258
    if (taosSetClientCfg(tsCfg)) return -1;
wafwerar's avatar
wafwerar 已提交
1259
    if (taosUpdateServerCfg(tsCfg)) return -1;
S
Shengliang Guan 已提交
1260 1261
    if (taosSetServerCfg(tsCfg)) return -1;
    if (taosSetTfsCfg(tsCfg) != 0) return -1;
1262
  }
S
os  
Shengliang Guan 已提交
1263
  taosSetSystemCfg(tsCfg);
1264

S
Shengliang Guan 已提交
1265
  cfgDumpCfg(tsCfg, tsc, false);
1266 1267 1268 1269 1270

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

S
Shengliang Guan 已提交
1271 1272 1273
  return 0;
}

S
config  
Shengliang Guan 已提交
1274 1275 1276 1277 1278 1279 1280
void taosCleanupCfg() {
  if (tsCfg) {
    cfgCleanup(tsCfg);
    tsCfg = NULL;
  }
}

S
Shengliang Guan 已提交
1281
void taosCfgDynamicOptions(const char *option, const char *value) {
S
Shengliang Guan 已提交
1282 1283
  if (strncasecmp(option, "debugFlag", 9) == 0) {
    int32_t flag = atoi(value);
wafwerar's avatar
wafwerar 已提交
1284
    taosSetAllDebugFlag(flag, true);
1285
    return;
S
Shengliang Guan 已提交
1286 1287 1288 1289
  }

  if (strcasecmp(option, "resetlog") == 0) {
    taosResetLog();
1290
    cfgDumpCfg(tsCfg, 0, false);
1291
    return;
S
Shengliang Guan 已提交
1292
  }
1293 1294 1295 1296 1297

  if (strcasecmp(option, "monitor") == 0) {
    int32_t monitor = atoi(value);
    uInfo("monitor set from %d to %d", tsEnableMonitor, monitor);
    tsEnableMonitor = monitor;
1298 1299 1300 1301
    SConfigItem *pItem = cfgGetItem(tsCfg, "monitor");
    if (pItem != NULL) {
      pItem->bval = tsEnableMonitor;
    }
1302 1303 1304 1305
    return;
  }

  const char *options[] = {
1306 1307 1308
      "dDebugFlag",   "vDebugFlag",   "mDebugFlag",   "wDebugFlag",    "sDebugFlag",   "tsdbDebugFlag", "tqDebugFlag",
      "fsDebugFlag",  "udfDebugFlag", "smaDebugFlag", "idxDebugFlag",  "tdbDebugFlag", "tmrDebugFlag",  "uDebugFlag",
      "smaDebugFlag", "rpcDebugFlag", "qDebugFlag",   "metaDebugFlag", "jniDebugFlag",
1309 1310
  };
  int32_t *optionVars[] = {
1311 1312 1313
      &dDebugFlag,   &vDebugFlag,   &mDebugFlag,   &wDebugFlag,    &sDebugFlag,   &tsdbDebugFlag, &tqDebugFlag,
      &fsDebugFlag,  &udfDebugFlag, &smaDebugFlag, &idxDebugFlag,  &tdbDebugFlag, &tmrDebugFlag,  &uDebugFlag,
      &smaDebugFlag, &rpcDebugFlag, &qDebugFlag,   &metaDebugFlag, &jniDebugFlag,
1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324
  };

  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 已提交
1325
    taosSetDebugFlag(optionVars[d], optName, flag, true);
1326
    return;
S
Shengliang Guan 已提交
1327
  }
1328 1329

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

wafwerar's avatar
wafwerar 已提交
1332
void taosSetDebugFlag(int32_t *pFlagPtr, const char *flagName, int32_t flagVal, bool rewrite) {
S
Shengliang Guan 已提交
1333
  SConfigItem *pItem = cfgGetItem(tsCfg, flagName);
wafwerar's avatar
wafwerar 已提交
1334
  if (pItem != NULL && (rewrite || pItem->i32 == 0)) {
S
Shengliang Guan 已提交
1335 1336
    pItem->i32 = flagVal;
  }
1337 1338 1339
  if (pFlagPtr != NULL) {
    *pFlagPtr = flagVal;
  }
S
Shengliang Guan 已提交
1340 1341
}

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

1345 1346 1347
  taosSetDebugFlag(NULL, "debugFlag", flag, rewrite);
  taosSetDebugFlag(NULL, "simDebugFlag", flag, rewrite);
  taosSetDebugFlag(NULL, "tmrDebugFlag", flag, rewrite);
wafwerar's avatar
wafwerar 已提交
1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365
  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 已提交
1366 1367
  uInfo("all debug flag are set to %d", flag);
}