tglobal.c 48.5 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 "tcompare.h"
S
Shengliang Guan 已提交
19
#include "tconfig.h"
H
Haojun Liao 已提交
20
#include "tdatablock.h"
wafwerar's avatar
wafwerar 已提交
21
#include "tgrant.h"
22
#include "tlog.h"
wafwerar's avatar
wafwerar 已提交
23 24

GRANT_CFG_DECLARE;
S
slguan 已提交
25

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

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

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

// multi process
44
int32_t tsMultiProcess = 0;
45 46 47 48 49
int32_t tsMnodeShmSize = TSDB_MAX_MSG_SIZE * 2 + 1024;
int32_t tsVnodeShmSize = TSDB_MAX_MSG_SIZE * 10 + 1024;
int32_t tsQnodeShmSize = TSDB_MAX_MSG_SIZE * 4 + 1024;
int32_t tsSnodeShmSize = TSDB_MAX_MSG_SIZE * 4 + 1024;
int32_t tsBnodeShmSize = TSDB_MAX_MSG_SIZE * 4 + 1024;
50
int32_t tsNumOfShmThreads = 1;
S
Shengliang Guan 已提交
51

S
Shengliang Guan 已提交
52 53 54
// queue & threads
int32_t tsNumOfRpcThreads = 1;
int32_t tsNumOfCommitThreads = 2;
D
dapan1121 已提交
55
int32_t tsNumOfTaskQueueThreads = 4;
D
dapan1121 已提交
56
int32_t tsNumOfMnodeQueryThreads = 4;
D
dapan1121 已提交
57
int32_t tsNumOfMnodeFetchThreads = 1;
S
Shengliang Guan 已提交
58
int32_t tsNumOfMnodeReadThreads = 1;
D
dapan1121 已提交
59
int32_t tsNumOfVnodeQueryThreads = 4;
S
Shengliang Guan 已提交
60
int32_t tsNumOfVnodeStreamThreads = 2;
L
Liu Jicong 已提交
61
int32_t tsNumOfVnodeFetchThreads = 4;
S
Shengliang Guan 已提交
62 63
int32_t tsNumOfVnodeWriteThreads = 2;
int32_t tsNumOfVnodeSyncThreads = 2;
C
Cary Xu 已提交
64
int32_t tsNumOfVnodeRsmaThreads = 2;
D
dapan1121 已提交
65
int32_t tsNumOfQnodeQueryThreads = 4;
66
int32_t tsNumOfQnodeFetchThreads = 4;
S
Shengliang Guan 已提交
67 68
int32_t tsNumOfSnodeSharedThreads = 2;
int32_t tsNumOfSnodeUniqueThreads = 2;
S
Shengliang Guan 已提交
69

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

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

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

X
Xiaoyu Wang 已提交
91 92
// query
int32_t tsQueryPolicy = 1;
C
Cary Xu 已提交
93
int32_t tsQuerySmaOptimize = 0;
X
Xiaoyu Wang 已提交
94

S
Shengliang Guan 已提交
95 96 97 98 99 100 101 102
/*
 * 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 已提交
103
int32_t tsCompressMsgSize = -1;
S
Shengliang Guan 已提交
104

105
/* denote if server needs to compress the retrieved column data before adding to the rpc response message body.
106 107
 * 0: all data are compressed
 * -1: all data are not compressed
108
 * other values: if any retrieved column size is greater than the tsCompressColData, all data will be compressed.
109
 */
110
int32_t tsCompressColData = -1;
111

112 113 114
// count/hyperloglog function always return values in case of all NULL data or Empty data set.
int32_t tsCountAlwaysReturnValue = 1;

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

118
// the maxinum number of distict query result
S
Shengliang Guan 已提交
119
int32_t tsMaxNumOfDistinctResults = 1000 * 10000;
120

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

H
Haojun Liao 已提交
124 125 126 127 128
// 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;
129
int64_t tsQueryBufferSizeBytes = -1;
H
Haojun Liao 已提交
130

S
Shengliang Guan 已提交
131
// tsdb config
Y
yihaoDeng 已提交
132 133 134
// For backward compatibility
bool tsdbForceKeepFile = false;

S
Shengliang Guan 已提交
135 136 137
int32_t  tsDiskCfgNum = 0;
SDiskCfg tsDiskCfg[TFS_MAX_DISKS] = {0};

L
Liu Jicong 已提交
138
// stream scheduler
L
Liu Jicong 已提交
139
bool tsSchedStreamToSnode = true;
L
Liu Jicong 已提交
140

S
Shengliang Guan 已提交
141 142
/*
 * minimum scale for whole system, millisecond by default
143 144 145
 * for TSDB_TIME_PRECISION_MILLI: 60000L
 *     TSDB_TIME_PRECISION_MICRO: 60000000L
 *     TSDB_TIME_PRECISION_NANO:  60000000000L
S
Shengliang Guan 已提交
146
 */
147
int64_t tsTickPerMin[] = {60000L, 60000000L, 60000000000L};
S
Shengliang Guan 已提交
148

S
Shengliang Guan 已提交
149 150 151 152 153 154 155 156 157
// 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
158

S
slzhou 已提交
159
// udf
160
bool tsStartUdfd = true;
S
slzhou 已提交
161

162
// internal
163
int32_t tsTransPullupInterval = 2;
164
int32_t tsMqRebalanceInterval = 2;
wmmhello's avatar
wmmhello 已提交
165
int32_t tsTtlUnit = 86400;
166
int32_t tsTtlPushInterval = 86400;
C
Cary Xu 已提交
167
int32_t tsGrantHBInterval = 60;
168
int32_t tsUptimeInterval = 300;  // seconds
wmmhello's avatar
wmmhello 已提交
169

wafwerar's avatar
wafwerar 已提交
170
#ifndef _STORAGE
dengyihao's avatar
dengyihao 已提交
171
int32_t taosSetTfsCfg(SConfig *pCfg) {
wafwerar's avatar
wafwerar 已提交
172 173 174 175 176 177 178 179 180 181 182 183 184
  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 已提交
185
  return 0;
wafwerar's avatar
wafwerar 已提交
186
}
wafwerar's avatar
wafwerar 已提交
187 188
#else
int32_t taosSetTfsCfg(SConfig *pCfg);
wafwerar's avatar
wafwerar 已提交
189
#endif
S
config  
Shengliang Guan 已提交
190

S
Shengliang Guan 已提交
191 192 193 194
struct SConfig *taosGetCfg() {
  return tsCfg;
}

195 196
static int32_t taosLoadCfg(SConfig *pCfg, const char **envCmd, const char *inputCfgDir, const char *envFile,
                           char *apolloUrl) {
S
Shengliang Guan 已提交
197 198
  char cfgDir[PATH_MAX] = {0};
  char cfgFile[PATH_MAX + 100] = {0};
S
TD-1767  
Shengliang Guan 已提交
199

S
Shengliang Guan 已提交
200
  taosExpandDir(inputCfgDir, cfgDir, PATH_MAX);
201 202 203 204 205
  if (taosIsDir(cfgDir)) {
    snprintf(cfgFile, sizeof(cfgFile), "%s" TD_DIRSEP "taos.cfg", cfgDir);
  } else {
    tstrncpy(cfgFile, cfgDir, sizeof(cfgDir));
  }
S
config  
Shengliang Guan 已提交
206

wafwerar's avatar
wafwerar 已提交
207 208
  if (apolloUrl == NULL || apolloUrl[0] == '\0') cfgGetApollUrl(envCmd, envFile, apolloUrl);

S
Shengliang Guan 已提交
209
  if (cfgLoad(pCfg, CFG_STYPE_APOLLO_URL, apolloUrl) != 0) {
210
    uError("failed to load from apollo url:%s since %s", apolloUrl, terrstr());
S
Shengliang Guan 已提交
211 212 213
    return -1;
  }

214 215 216
  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 已提交
217 218 219
  }

  if (cfgLoad(pCfg, CFG_STYPE_ENV_FILE, envFile) != 0) {
220
    uError("failed to load from env file:%s since %s", envFile, terrstr());
S
Shengliang Guan 已提交
221 222 223 224
    return -1;
  }

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

wafwerar's avatar
wafwerar 已提交
229 230 231 232 233
  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 已提交
234
  return 0;
S
slguan 已提交
235 236
}

S
Shengliang Guan 已提交
237
int32_t taosAddClientLogCfg(SConfig *pCfg) {
S
Shengliang Guan 已提交
238 239
  if (cfgAddDir(pCfg, "configDir", configDir, 1) != 0) return -1;
  if (cfgAddDir(pCfg, "scriptDir", configDir, 1) != 0) return -1;
S
Shengliang Guan 已提交
240 241 242 243 244
  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 已提交
245 246 247
  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 已提交
248 249 250
  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 已提交
251 252
  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 已提交
253
  return 0;
S
Shengliang Guan 已提交
254 255
}

S
Shengliang Guan 已提交
256 257 258 259 260 261 262 263 264
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 已提交
265
  if (cfgAddInt32(pCfg, "udfDebugFlag", udfDebugFlag, 0, 255, 0) != 0) return -1;
266
  if (cfgAddInt32(pCfg, "smaDebugFlag", smaDebugFlag, 0, 255, 0) != 0) return -1;
dengyihao's avatar
dengyihao 已提交
267
  if (cfgAddInt32(pCfg, "idxDebugFlag", idxDebugFlag, 0, 255, 0) != 0) return -1;
M
Minglei Jin 已提交
268
  if (cfgAddInt32(pCfg, "tdbDebugFlag", tdbDebugFlag, 0, 255, 0) != 0) return -1;
S
Shengliang Guan 已提交
269
  if (cfgAddInt32(pCfg, "metaDebugFlag", metaDebugFlag, 0, 255, 0) != 0) return -1;
S
Shengliang Guan 已提交
270
  return 0;
S
Shengliang Guan 已提交
271 272
}

S
Shengliang Guan 已提交
273
static int32_t taosAddClientCfg(SConfig *pCfg) {
S
Shengliang Guan 已提交
274 275
  char    defaultFqdn[TSDB_FQDN_LEN] = {0};
  int32_t defaultServerPort = 6030;
S
Shengliang Guan 已提交
276
  if (taosGetFqdn(defaultFqdn) != 0) return -1;
S
Shengliang Guan 已提交
277

278 279
  if (cfgAddString(pCfg, "firstEp", "", 1) != 0) return -1;
  if (cfgAddString(pCfg, "secondEp", "", 1) != 0) return -1;
S
Shengliang Guan 已提交
280 281 282
  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 已提交
283
  if (cfgAddFloat(pCfg, "minimalTmpDirGB", 1.0f, 0.001f, 10000000, 1) != 0) return -1;
S
Shengliang Guan 已提交
284 285 286
  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;
X
Xiaoyu Wang 已提交
287
  if (cfgAddInt32(pCfg, "queryPolicy", tsQueryPolicy, 1, 3, 1) != 0) return -1;
X
Xiaoyu Wang 已提交
288
  if (cfgAddInt32(pCfg, "querySmaOptimize", tsQuerySmaOptimize, 0, 1, 1) != 0) return -1;
289
  if (cfgAddString(pCfg, "smlChildTableName", "", 1) != 0) return -1;
290
  if (cfgAddString(pCfg, "smlTagName", tsSmlTagName, 1) != 0) return -1;
291
  if (cfgAddBool(pCfg, "smlDataFormat", tsSmlDataFormat, 1) != 0) return -1;
S
Shengliang Guan 已提交
292

D
dapan1121 已提交
293 294 295
  tsNumOfTaskQueueThreads = tsNumOfCores / 2;
  tsNumOfTaskQueueThreads = TMAX(tsNumOfTaskQueueThreads, 4);
  if (cfgAddInt32(pCfg, "numOfTaskQueueThreads", tsNumOfTaskQueueThreads, 4, 1024, 0) != 0) return -1;
S
Shengliang Guan 已提交
296

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

S
Shengliang Guan 已提交
300
static int32_t taosAddSystemCfg(SConfig *pCfg) {
S
os  
Shengliang Guan 已提交
301 302
  SysNameInfo info = taosGetSysNameInfo();

wafwerar's avatar
wafwerar 已提交
303
  if (cfgAddTimezone(pCfg, "timezone", tsTimezoneStr) != 0) return -1;
S
Shengliang Guan 已提交
304 305
  if (cfgAddLocale(pCfg, "locale", tsLocale) != 0) return -1;
  if (cfgAddCharset(pCfg, "charset", tsCharset) != 0) return -1;
306
  if (cfgAddBool(pCfg, "enableCoreFile", 1, 1) != 0) return -1;
S
Shengliang Guan 已提交
307
  if (cfgAddFloat(pCfg, "numOfCores", tsNumOfCores, 0, 100000, 1) != 0) return -1;
S
Shengliang Guan 已提交
308 309
  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 已提交
310 311
  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 已提交
312 313 314 315 316 317 318 319 320 321 322
  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 已提交
323 324
}

S
Shengliang Guan 已提交
325 326 327
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;
328 329 330

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

S
Shengliang Guan 已提交
333 334 335 336
  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 已提交
337
  if (cfgAddInt32(pCfg, "maxNumOfDistinctRes", tsMaxNumOfDistinctResults, 10 * 10000, 10000 * 10000, 0) != 0) return -1;
338
  if (cfgAddInt32(pCfg, "countAlwaysReturnValue", tsCountAlwaysReturnValue, 0, 1, 0) != 0) return -1;
S
Shengliang Guan 已提交
339 340
  if (cfgAddInt32(pCfg, "queryBufferSize", tsQueryBufferSize, -1, 500000000000, 0) != 0) return -1;
  if (cfgAddBool(pCfg, "printAuth", tsPrintAuth, 0) != 0) return -1;
S
Shengliang Guan 已提交
341

342
  if (cfgAddInt32(pCfg, "multiProcess", tsMultiProcess, 0, 2, 0) != 0) return -1;
343 344 345 346 347
  if (cfgAddInt32(pCfg, "mnodeShmSize", tsMnodeShmSize, TSDB_MAX_MSG_SIZE * 2 + 1024, INT32_MAX, 0) != 0) return -1;
  if (cfgAddInt32(pCfg, "vnodeShmSize", tsVnodeShmSize, TSDB_MAX_MSG_SIZE * 2 + 1024, INT32_MAX, 0) != 0) return -1;
  if (cfgAddInt32(pCfg, "qnodeShmSize", tsQnodeShmSize, TSDB_MAX_MSG_SIZE * 2 + 1024, INT32_MAX, 0) != 0) return -1;
  if (cfgAddInt32(pCfg, "snodeShmSize", tsSnodeShmSize, TSDB_MAX_MSG_SIZE * 2 + 1024, INT32_MAX, 0) != 0) return -1;
  if (cfgAddInt32(pCfg, "bnodeShmSize", tsBnodeShmSize, TSDB_MAX_MSG_SIZE * 2 + 1024, INT32_MAX, 0) != 0) return -1;
S
Shengliang Guan 已提交
348
  if (cfgAddInt32(pCfg, "numOfShmThreads", tsNumOfShmThreads, 1, 1024, 0) != 0) return -1;
S
Shengliang Guan 已提交
349 350 351 352 353

  tsNumOfRpcThreads = tsNumOfCores / 2;
  tsNumOfRpcThreads = TRANGE(tsNumOfRpcThreads, 1, 4);
  if (cfgAddInt32(pCfg, "numOfRpcThreads", tsNumOfRpcThreads, 1, 1024, 0) != 0) return -1;

S
Shengliang Guan 已提交
354
  tsNumOfCommitThreads = tsNumOfCores / 2;
S
Shengliang Guan 已提交
355
  tsNumOfCommitThreads = TRANGE(tsNumOfCommitThreads, 2, 4);
S
Shengliang Guan 已提交
356 357 358 359 360 361
  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 已提交
362 363
  tsNumOfVnodeQueryThreads = tsNumOfCores * 2;
  tsNumOfVnodeQueryThreads = TMAX(tsNumOfVnodeQueryThreads, 4);
S
Shengliang Guan 已提交
364
  if (cfgAddInt32(pCfg, "numOfVnodeQueryThreads", tsNumOfVnodeQueryThreads, 4, 1024, 0) != 0) return -1;
S
Shengliang Guan 已提交
365

366
  tsNumOfVnodeStreamThreads = tsNumOfCores / 4;
S
Shengliang Guan 已提交
367
  tsNumOfVnodeStreamThreads = TMAX(tsNumOfVnodeStreamThreads, 4);
S
Shengliang Guan 已提交
368
  if (cfgAddInt32(pCfg, "numOfVnodeStreamThreads", tsNumOfVnodeStreamThreads, 4, 1024, 0) != 0) return -1;
S
Shengliang Guan 已提交
369

370 371
  tsNumOfVnodeFetchThreads = tsNumOfCores / 4;
  tsNumOfVnodeFetchThreads = TMAX(tsNumOfVnodeFetchThreads, 4);
S
Shengliang Guan 已提交
372
  if (cfgAddInt32(pCfg, "numOfVnodeFetchThreads", tsNumOfVnodeFetchThreads, 4, 1024, 0) != 0) return -1;
S
Shengliang Guan 已提交
373 374

  tsNumOfVnodeWriteThreads = tsNumOfCores;
S
Shengliang Guan 已提交
375
  tsNumOfVnodeWriteThreads = TMAX(tsNumOfVnodeWriteThreads, 1);
S
Shengliang Guan 已提交
376 377
  if (cfgAddInt32(pCfg, "numOfVnodeWriteThreads", tsNumOfVnodeWriteThreads, 1, 1024, 0) != 0) return -1;

378 379
  tsNumOfVnodeSyncThreads = tsNumOfCores * 2;
  tsNumOfVnodeSyncThreads = TMAX(tsNumOfVnodeSyncThreads, 16);
S
Shengliang Guan 已提交
380 381
  if (cfgAddInt32(pCfg, "numOfVnodeSyncThreads", tsNumOfVnodeSyncThreads, 1, 1024, 0) != 0) return -1;

C
Cary Xu 已提交
382 383 384 385
  tsNumOfVnodeRsmaThreads = tsNumOfCores;
  tsNumOfVnodeRsmaThreads = TMAX(tsNumOfVnodeRsmaThreads, 4);
  if (cfgAddInt32(pCfg, "numOfVnodeRsmaThreads", tsNumOfVnodeRsmaThreads, 1, 1024, 0) != 0) return -1;

D
dapan1121 已提交
386 387
  tsNumOfQnodeQueryThreads = tsNumOfCores * 2;
  tsNumOfQnodeQueryThreads = TMAX(tsNumOfQnodeQueryThreads, 4);
S
Shengliang Guan 已提交
388 389
  if (cfgAddInt32(pCfg, "numOfQnodeQueryThreads", tsNumOfQnodeQueryThreads, 1, 1024, 0) != 0) return -1;

390 391
  tsNumOfQnodeFetchThreads = tsNumOfCores / 2;
  tsNumOfQnodeFetchThreads = TMAX(tsNumOfQnodeFetchThreads, 4);
S
Shengliang Guan 已提交
392 393
  if (cfgAddInt32(pCfg, "numOfQnodeFetchThreads", tsNumOfQnodeFetchThreads, 1, 1024, 0) != 0) return -1;

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

  tsNumOfSnodeUniqueThreads = tsNumOfCores / 4;
  tsNumOfSnodeUniqueThreads = TRANGE(tsNumOfSnodeUniqueThreads, 2, 4);
S
Shengliang Guan 已提交
400
  if (cfgAddInt32(pCfg, "numOfSnodeUniqueThreads", tsNumOfSnodeUniqueThreads, 2, 1024, 0) != 0) return -1;
S
Shengliang Guan 已提交
401

402
  tsRpcQueueMemoryAllowed = tsTotalMemoryKB * 1024 * 0.1;
wafwerar's avatar
wafwerar 已提交
403
  tsRpcQueueMemoryAllowed = TRANGE(tsRpcQueueMemoryAllowed, TSDB_MAX_MSG_SIZE * 10LL, TSDB_MAX_MSG_SIZE * 10000LL);
404
  if (cfgAddInt64(pCfg, "rpcQueueMemoryAllowed", tsRpcQueueMemoryAllowed, TSDB_MAX_MSG_SIZE * 10L, INT64_MAX, 0) != 0)
dengyihao's avatar
dengyihao 已提交
405
    return -1;
406

S
monitor  
Shengliang Guan 已提交
407
  if (cfgAddBool(pCfg, "monitor", tsEnableMonitor, 0) != 0) return -1;
S
Shengliang Guan 已提交
408
  if (cfgAddInt32(pCfg, "monitorInterval", tsMonitorInterval, 1, 200000, 0) != 0) return -1;
S
monitor  
Shengliang Guan 已提交
409 410
  if (cfgAddString(pCfg, "monitorFqdn", tsMonitorFqdn, 0) != 0) return -1;
  if (cfgAddInt32(pCfg, "monitorPort", tsMonitorPort, 1, 65056, 0) != 0) return -1;
S
monitor  
Shengliang Guan 已提交
411
  if (cfgAddInt32(pCfg, "monitorMaxLogs", tsMonitorMaxLogs, 1, 1000000, 0) != 0) return -1;
S
Shengliang Guan 已提交
412
  if (cfgAddBool(pCfg, "monitorComp", tsMonitorComp, 0) != 0) return -1;
S
monitor  
Shengliang Guan 已提交
413

S
Shengliang Guan 已提交
414 415 416 417 418
  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;

419 420
  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 已提交
421
  if (cfgAddInt32(pCfg, "ttlUnit", tsTtlUnit, 1, 86400 * 365, 1) != 0) return -1;
422
  if (cfgAddInt32(pCfg, "ttlPushInterval", tsTtlPushInterval, 1, 100000, 1) != 0) return -1;
423
  if (cfgAddInt32(pCfg, "uptimeInterval", tsUptimeInterval, 1, 100000, 1) != 0) return -1;
424

425
  if (cfgAddBool(pCfg, "udf", tsStartUdfd, 0) != 0) return -1;
wafwerar's avatar
wafwerar 已提交
426
  GRANT_CFG_ADD;
S
Shengliang Guan 已提交
427
  return 0;
S
Shengliang Guan 已提交
428 429 430
}

static void taosSetClientLogCfg(SConfig *pCfg) {
S
Shengliang Guan 已提交
431
  SConfigItem *pItem = cfgGetItem(pCfg, "logDir");
S
os env  
Shengliang Guan 已提交
432
  tstrncpy(tsLogDir, cfgGetItem(pCfg, "logDir")->str, PATH_MAX);
S
Shengliang Guan 已提交
433
  taosExpandDir(tsLogDir, tsLogDir, PATH_MAX);
wafwerar's avatar
wafwerar 已提交
434
  tsLogSpace.reserved = (int64_t)(((double)cfgGetItem(pCfg, "minimalLogDirGB")->fval) * 1024 * 1024 * 1024);
S
Shengliang Guan 已提交
435 436 437 438
  tsNumOfLogLines = cfgGetItem(pCfg, "numOfLogLines")->i32;
  tsAsyncLog = cfgGetItem(pCfg, "asyncLog")->bval;
  tsLogKeepDays = cfgGetItem(pCfg, "logKeepDays")->i32;
  tmrDebugFlag = cfgGetItem(pCfg, "tmrDebugFlag")->i32;
S
Shengliang Guan 已提交
439
  uDebugFlag = cfgGetItem(pCfg, "uDebugFlag")->i32;
S
Shengliang Guan 已提交
440
  jniDebugFlag = cfgGetItem(pCfg, "jniDebugFlag")->i32;
S
Shengliang Guan 已提交
441 442 443
  rpcDebugFlag = cfgGetItem(pCfg, "rpcDebugFlag")->i32;
  qDebugFlag = cfgGetItem(pCfg, "qDebugFlag")->i32;
  cDebugFlag = cfgGetItem(pCfg, "cDebugFlag")->i32;
S
Shengliang Guan 已提交
444 445 446 447 448 449 450 451 452 453 454
}

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 已提交
455
  udfDebugFlag = cfgGetItem(pCfg, "udfDebugFlag")->i32;
456
  smaDebugFlag = cfgGetItem(pCfg, "smaDebugFlag")->i32;
dengyihao's avatar
dengyihao 已提交
457
  idxDebugFlag = cfgGetItem(pCfg, "idxDebugFlag")->i32;
M
Minglei Jin 已提交
458
  tdbDebugFlag = cfgGetItem(pCfg, "tdbDebugFlag")->i32;
S
Shengliang Guan 已提交
459
  metaDebugFlag = cfgGetItem(pCfg, "metaDebugFlag")->i32;
S
Shengliang Guan 已提交
460 461
}

S
Shengliang Guan 已提交
462
static int32_t taosSetClientCfg(SConfig *pCfg) {
S
monitor  
Shengliang Guan 已提交
463
  tstrncpy(tsLocalFqdn, cfgGetItem(pCfg, "fqdn")->str, TSDB_FQDN_LEN);
S
Shengliang Guan 已提交
464 465
  tsServerPort = (uint16_t)cfgGetItem(pCfg, "serverPort")->i32;
  snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
466

467 468 469
  char defaultFirstEp[TSDB_EP_LEN] = {0};
  snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort);

470 471
  SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp");
  SEp          firstEp = {0};
472
  taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp);
473 474 475 476 477
  snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port);
  cfgSetItem(pCfg, "firstEp", tsFirst, pFirstEpItem->stype);

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

S
Shengliang Guan 已提交
482 483
  tstrncpy(tsTempDir, cfgGetItem(pCfg, "tempDir")->str, PATH_MAX);
  taosExpandDir(tsTempDir, tsTempDir, PATH_MAX);
wafwerar's avatar
wafwerar 已提交
484
  tsTempSpace.reserved = (int64_t)(((double)cfgGetItem(pCfg, "minimalTmpDirGB")->fval) * 1024 * 1024 * 1024);
S
Shengliang Guan 已提交
485
  if (taosMulMkDir(tsTempDir) != 0) {
S
Shengliang Guan 已提交
486 487 488
    uError("failed to create tempDir:%s since %s", tsTempDir, terrstr());
    return -1;
  }
S
Shengliang Guan 已提交
489

490
  tstrncpy(tsSmlChildTableName, cfgGetItem(pCfg, "smlChildTableName")->str, TSDB_TABLE_NAME_LEN);
491
  tstrncpy(tsSmlTagName, cfgGetItem(pCfg, "smlTagName")->str, TSDB_COL_NAME_LEN);
492
  tsSmlDataFormat = cfgGetItem(pCfg, "smlDataFormat")->bval;
493

494
  tsShellActivityTimer = cfgGetItem(pCfg, "shellActivityTimer")->i32;
S
Shengliang Guan 已提交
495 496
  tsCompressMsgSize = cfgGetItem(pCfg, "compressMsgSize")->i32;
  tsCompressColData = cfgGetItem(pCfg, "compressColData")->i32;
S
Shengliang Guan 已提交
497
  tsNumOfTaskQueueThreads = cfgGetItem(pCfg, "numOfTaskQueueThreads")->i32;
X
Xiaoyu Wang 已提交
498
  tsQueryPolicy = cfgGetItem(pCfg, "queryPolicy")->i32;
X
Xiaoyu Wang 已提交
499
  tsQuerySmaOptimize = cfgGetItem(pCfg, "querySmaOptimize")->i32;
S
Shengliang Guan 已提交
500
  return 0;
S
os  
Shengliang Guan 已提交
501
}
S
config  
Shengliang Guan 已提交
502

S
os  
Shengliang Guan 已提交
503
static void taosSetSystemCfg(SConfig *pCfg) {
S
Shengliang Guan 已提交
504 505
  SConfigItem *pItem = cfgGetItem(pCfg, "timezone");
  osSetTimezone(pItem->str);
wafwerar's avatar
wafwerar 已提交
506 507
  uDebug("timezone format changed from %s to %s", pItem->str, tsTimezoneStr);
  cfgSetItem(pCfg, "timezone", tsTimezoneStr, pItem->stype);
S
Shengliang Guan 已提交
508

S
Shengliang Guan 已提交
509 510
  const char *locale = cfgGetItem(pCfg, "locale")->str;
  const char *charset = cfgGetItem(pCfg, "charset")->str;
S
os env  
Shengliang Guan 已提交
511
  taosSetSystemLocale(locale, charset);
wafwerar's avatar
wafwerar 已提交
512
  osSetSystemLocale(locale, charset);
S
Shengliang Guan 已提交
513

S
Shengliang Guan 已提交
514
  bool enableCore = cfgGetItem(pCfg, "enableCoreFile")->bval;
wafwerar's avatar
wafwerar 已提交
515
  taosSetCoreDump(enableCore);
S
config  
Shengliang Guan 已提交
516 517 518

  // todo
  tsVersion = 30000000;
S
Shengliang Guan 已提交
519
}
520

S
Shengliang Guan 已提交
521
static int32_t taosSetServerCfg(SConfig *pCfg) {
wafwerar's avatar
wafwerar 已提交
522
  tsDataSpace.reserved = (int64_t)(((double)cfgGetItem(pCfg, "minimalDataDirGB")->fval) * 1024 * 1024 * 1024);
523
  tsNumOfSupportVnodes = cfgGetItem(pCfg, "supportVnodes")->i32;
S
Shengliang Guan 已提交
524 525 526 527
  tsMaxShellConns = cfgGetItem(pCfg, "maxShellConns")->i32;
  tsStatusInterval = cfgGetItem(pCfg, "statusInterval")->i32;
  tsMinSlidingTime = cfgGetItem(pCfg, "minSlidingTime")->i32;
  tsMinIntervalTime = cfgGetItem(pCfg, "minIntervalTime")->i32;
S
Shengliang Guan 已提交
528
  tsMaxNumOfDistinctResults = cfgGetItem(pCfg, "maxNumOfDistinctRes")->i32;
529
  tsCountAlwaysReturnValue = cfgGetItem(pCfg, "countAlwaysReturnValue")->i32;
S
config  
Shengliang Guan 已提交
530
  tsQueryBufferSize = cfgGetItem(pCfg, "queryBufferSize")->i32;
S
Shengliang Guan 已提交
531
  tsPrintAuth = cfgGetItem(pCfg, "printAuth")->bval;
S
Shengliang Guan 已提交
532

S
Shengliang Guan 已提交
533
  tsMultiProcess = cfgGetItem(pCfg, "multiProcess")->bval;
S
Shengliang Guan 已提交
534 535 536 537
  tsMnodeShmSize = cfgGetItem(pCfg, "mnodeShmSize")->i32;
  tsVnodeShmSize = cfgGetItem(pCfg, "vnodeShmSize")->i32;
  tsQnodeShmSize = cfgGetItem(pCfg, "qnodeShmSize")->i32;
  tsSnodeShmSize = cfgGetItem(pCfg, "snodeShmSize")->i32;
S
Shengliang Guan 已提交
538 539 540 541
  tsBnodeShmSize = cfgGetItem(pCfg, "bnodeShmSize")->i32;

  tsNumOfRpcThreads = cfgGetItem(pCfg, "numOfRpcThreads")->i32;
  tsNumOfCommitThreads = cfgGetItem(pCfg, "numOfCommitThreads")->i32;
S
Shengliang Guan 已提交
542 543
  tsNumOfMnodeReadThreads = cfgGetItem(pCfg, "numOfMnodeReadThreads")->i32;
  tsNumOfVnodeQueryThreads = cfgGetItem(pCfg, "numOfVnodeQueryThreads")->i32;
S
Shengliang Guan 已提交
544
  tsNumOfVnodeStreamThreads = cfgGetItem(pCfg, "numOfVnodeStreamThreads")->i32;
S
Shengliang Guan 已提交
545 546 547
  tsNumOfVnodeFetchThreads = cfgGetItem(pCfg, "numOfVnodeFetchThreads")->i32;
  tsNumOfVnodeWriteThreads = cfgGetItem(pCfg, "numOfVnodeWriteThreads")->i32;
  tsNumOfVnodeSyncThreads = cfgGetItem(pCfg, "numOfVnodeSyncThreads")->i32;
C
Cary Xu 已提交
548
  tsNumOfVnodeRsmaThreads = cfgGetItem(pCfg, "numOfVnodeRsmaThreads")->i32;
S
Shengliang Guan 已提交
549 550
  tsNumOfQnodeQueryThreads = cfgGetItem(pCfg, "numOfQnodeQueryThreads")->i32;
  tsNumOfQnodeFetchThreads = cfgGetItem(pCfg, "numOfQnodeFetchThreads")->i32;
S
Shengliang Guan 已提交
551 552
  tsNumOfSnodeSharedThreads = cfgGetItem(pCfg, "numOfSnodeSharedThreads")->i32;
  tsNumOfSnodeUniqueThreads = cfgGetItem(pCfg, "numOfSnodeUniqueThreads")->i32;
553
  tsRpcQueueMemoryAllowed = cfgGetItem(pCfg, "rpcQueueMemoryAllowed")->i64;
S
Shengliang Guan 已提交
554

S
monitor  
Shengliang Guan 已提交
555 556 557 558
  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 已提交
559
  tsMonitorMaxLogs = cfgGetItem(pCfg, "monitorMaxLogs")->i32;
S
Shengliang Guan 已提交
560
  tsMonitorComp = cfgGetItem(pCfg, "monitorComp")->bval;
S
monitor  
Shengliang Guan 已提交
561

S
Shengliang Guan 已提交
562 563 564 565 566
  tsEnableTelem = cfgGetItem(pCfg, "telemetryReporting")->bval;
  tsTelemInterval = cfgGetItem(pCfg, "telemetryInterval")->i32;
  tstrncpy(tsTelemServer, cfgGetItem(pCfg, "telemetryServer")->str, TSDB_FQDN_LEN);
  tsTelemPort = (uint16_t)cfgGetItem(pCfg, "telemetryPort")->i32;

567 568
  tsTransPullupInterval = cfgGetItem(pCfg, "transPullupInterval")->i32;
  tsMqRebalanceInterval = cfgGetItem(pCfg, "mqRebalanceInterval")->i32;
wmmhello's avatar
wmmhello 已提交
569
  tsTtlUnit = cfgGetItem(pCfg, "ttlUnit")->i32;
wmmhello's avatar
wmmhello 已提交
570
  tsTtlPushInterval = cfgGetItem(pCfg, "ttlPushInterval")->i32;
571
  tsUptimeInterval = cfgGetItem(pCfg, "uptimeInterval")->i32;
572

573
  tsStartUdfd = cfgGetItem(pCfg, "udf")->bval;
S
slzhou 已提交
574

S
config  
Shengliang Guan 已提交
575 576 577
  if (tsQueryBufferSize >= 0) {
    tsQueryBufferSizeBytes = tsQueryBufferSize * 1048576UL;
  }
wafwerar's avatar
wafwerar 已提交
578
  GRANT_CFG_GET;
S
Shengliang Guan 已提交
579
  return 0;
S
Shengliang Guan 已提交
580 581
}

582
void taosLocalCfgForbiddenToChange(char *name, bool *forbidden) {
583 584 585 586 587 588 589 590
  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 已提交
591
  GRANT_CFG_CHECK;
592 593 594 595

  *forbidden = false;
}

L
Liu Jicong 已提交
596
int32_t taosSetCfg(SConfig *pCfg, char *name) {
D
dapan1121 已提交
597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625
  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;
      }
      break;
    }
    case 'b': {
      if (strcasecmp("bnodeShmSize", name) == 0) {
        tsBnodeShmSize = cfgGetItem(pCfg, "bnodeShmSize")->i32;
      }
      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 已提交
626
      } else if (strcasecmp("cDebugFlag", name) == 0) {
D
dapan1121 已提交
627 628 629 630 631
        cDebugFlag = cfgGetItem(pCfg, "cDebugFlag")->i32;
      }
      break;
    }
    case 'd': {
S
Shengliang Guan 已提交
632
      if (strcasecmp("dDebugFlag", name) == 0) {
D
dapan1121 已提交
633 634 635 636 637 638 639
        dDebugFlag = cfgGetItem(pCfg, "dDebugFlag")->i32;
      }
      break;
    }
    case 'e': {
      if (strcasecmp("enableCoreFile", name) == 0) {
        bool enableCore = cfgGetItem(pCfg, "enableCoreFile")->bval;
wafwerar's avatar
wafwerar 已提交
640
        taosSetCoreDump(enableCore);
D
dapan1121 已提交
641 642 643 644 645 646 647 648
      }
      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 已提交
649

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

D
dapan1121 已提交
653 654 655 656 657 658 659 660 661
        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 已提交
662

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

D
dapan1121 已提交
666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721
        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': {
      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;
          }
          break;
        }
        case 'd': {
          if (strcasecmp("mDebugFlag", name) == 0) {
            mDebugFlag = cfgGetItem(pCfg, "mDebugFlag")->i32;
          }
          break;
        }
        case 'i': {
S
Shengliang Guan 已提交
722
          if (strcasecmp("minimalTmpDirGB", name) == 0) {
wafwerar's avatar
wafwerar 已提交
723
            tsTempSpace.reserved = (int64_t)(((double)cfgGetItem(pCfg, "minimalTmpDirGB")->fval) * 1024 * 1024 * 1024);
D
dapan1121 已提交
724
          } else if (strcasecmp("minimalDataDirGB", name) == 0) {
wafwerar's avatar
wafwerar 已提交
725
            tsDataSpace.reserved = (int64_t)(((double)cfgGetItem(pCfg, "minimalDataDirGB")->fval) * 1024 * 1024 * 1024);
D
dapan1121 已提交
726 727 728
          } else if (strcasecmp("minSlidingTime", name) == 0) {
            tsMinSlidingTime = cfgGetItem(pCfg, "minSlidingTime")->i32;
          } else if (strcasecmp("minIntervalTime", name) == 0) {
L
Liu Jicong 已提交
729
            tsMinIntervalTime = cfgGetItem(pCfg, "minIntervalTime")->i32;
D
dapan1121 已提交
730
          } else if (strcasecmp("minimalLogDirGB", name) == 0) {
wafwerar's avatar
wafwerar 已提交
731
            tsLogSpace.reserved = (int64_t)(((double)cfgGetItem(pCfg, "minimalLogDirGB")->fval) * 1024 * 1024 * 1024);
D
dapan1121 已提交
732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765
          }
          break;
        }
        case 'n': {
          if (strcasecmp("mnodeShmSize", name) == 0) {
            tsMnodeShmSize = cfgGetItem(pCfg, "mnodeShmSize")->i32;
          }
          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': {
          if (strcasecmp("multiProcess", name) == 0) {
            tsMultiProcess = cfgGetItem(pCfg, "multiProcess")->bval;
S
Shengliang Guan 已提交
766 767
          } else if (strcasecmp("udfDebugFlag", name) == 0) {
            udfDebugFlag = cfgGetItem(pCfg, "udfDebugFlag")->i32;
D
dapan1121 已提交
768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793
          }
          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;
      } else if (strcasecmp("numOfVnodeFetchThreads", name) == 0) {
        tsNumOfVnodeFetchThreads = cfgGetItem(pCfg, "numOfVnodeFetchThreads")->i32;
      } else if (strcasecmp("numOfVnodeWriteThreads", name) == 0) {
        tsNumOfVnodeWriteThreads = cfgGetItem(pCfg, "numOfVnodeWriteThreads")->i32;
      } else if (strcasecmp("numOfVnodeSyncThreads", name) == 0) {
        tsNumOfVnodeSyncThreads = cfgGetItem(pCfg, "numOfVnodeSyncThreads")->i32;
C
Cary Xu 已提交
794 795
      } else if (strcasecmp("numOfVnodeRsmaThreads", name) == 0) {
        tsNumOfVnodeRsmaThreads = cfgGetItem(pCfg, "numOfVnodeRsmaThreads")->i32;
D
dapan1121 已提交
796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832
      } else if (strcasecmp("numOfQnodeQueryThreads", name) == 0) {
        tsNumOfQnodeQueryThreads = cfgGetItem(pCfg, "numOfQnodeQueryThreads")->i32;
      } else if (strcasecmp("numOfQnodeFetchThreads", name) == 0) {
        tsNumOfQnodeFetchThreads = cfgGetItem(pCfg, "numOfQnodeFetchThreads")->i32;
      } else if (strcasecmp("numOfSnodeSharedThreads", name) == 0) {
        tsNumOfSnodeSharedThreads = cfgGetItem(pCfg, "numOfSnodeSharedThreads")->i32;
      } else if (strcasecmp("numOfSnodeUniqueThreads", name) == 0) {
        tsNumOfSnodeUniqueThreads = cfgGetItem(pCfg, "numOfSnodeUniqueThreads")->i32;
      } 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("qnodeShmSize", name) == 0) {
        tsQnodeShmSize = cfgGetItem(pCfg, "qnodeShmSize")->i32;
      } else if (strcasecmp("qDebugFlag", name) == 0) {
        qDebugFlag = cfgGetItem(pCfg, "qDebugFlag")->i32;
      }
      break;
    }
    case 'r': {
S
Shengliang Guan 已提交
833
      if (strcasecmp("rpcQueueMemoryAllowed", name) == 0) {
D
dapan1121 已提交
834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864
        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;
      } 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("snodeShmSize", name) == 0) {
        tsSnodeShmSize = cfgGetItem(pCfg, "snodeShmSize")->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 已提交
865

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

D
dapan1121 已提交
869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893
        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 已提交
894 895
      } else if (strcasecmp("tdbDebugFlag", name) == 0) {
        tdbDebugFlag = cfgGetItem(pCfg, "tdbDebugFlag")->i32;
D
dapan1121 已提交
896 897 898 899 900 901 902 903 904 905
      } 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 已提交
906 907 908 909
      } else if (strcasecmp("ttlUnit", name) == 0) {
        tsTtlUnit = cfgGetItem(pCfg, "ttlUnit")->i32;
      } else if (strcasecmp("ttlPushInterval", name) == 0) {
        tsTtlPushInterval = cfgGetItem(pCfg, "ttlPushInterval")->i32;
D
dapan1121 已提交
910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941
      } 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': {
      if (strcasecmp("vnodeShmSize", name) == 0) {
        tsVnodeShmSize = cfgGetItem(pCfg, "vnodeShmSize")->i32;
      } else if (strcasecmp("vDebugFlag", name) == 0) {
        vDebugFlag = cfgGetItem(pCfg, "vDebugFlag")->i32;
      }
      break;
    }
    case 'w': {
      if (strcasecmp("wDebugFlag", name) == 0) {
        wDebugFlag = cfgGetItem(pCfg, "wDebugFlag")->i32;
      }
      break;
    }
    default:
L
Liu Jicong 已提交
942
      terrno = TSDB_CODE_CFG_NOT_FOUND;
D
dapan1121 已提交
943 944
      return -1;
  }
L
Liu Jicong 已提交
945

D
dapan1121 已提交
946 947 948
  return 0;
}

949 950
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 已提交
951
  if (tsCfg == NULL) osDefaultInit();
S
Shengliang Guan 已提交
952

S
Shengliang Guan 已提交
953
  SConfig *pCfg = cfgInit();
S
config  
Shengliang Guan 已提交
954
  if (pCfg == NULL) return -1;
S
Shengliang Guan 已提交
955 956

  if (tsc) {
S
Shengliang Guan 已提交
957
    tsLogEmbedded = 0;
S
Shengliang Guan 已提交
958
    if (taosAddClientLogCfg(pCfg) != 0) return -1;
S
Shengliang Guan 已提交
959
  } else {
S
Shengliang Guan 已提交
960
    tsLogEmbedded = 1;
S
Shengliang Guan 已提交
961 962
    if (taosAddClientLogCfg(pCfg) != 0) return -1;
    if (taosAddServerLogCfg(pCfg) != 0) return -1;
S
Shengliang Guan 已提交
963 964
  }

wafwerar's avatar
wafwerar 已提交
965
  if (taosLoadCfg(pCfg, envCmd, cfgDir, envFile, apolloUrl) != 0) {
S
config  
Shengliang Guan 已提交
966
    uError("failed to load cfg since %s", terrstr());
S
Shengliang Guan 已提交
967 968 969 970
    cfgCleanup(pCfg);
    return -1;
  }

971
  if (cfgLoadFromArray(pCfg, pArgs) != 0) {
S
Shengliang Guan 已提交
972 973 974 975 976
    uError("failed to load cfg from array since %s", terrstr());
    cfgCleanup(pCfg);
    return -1;
  }

S
Shengliang Guan 已提交
977 978 979
  if (tsc) {
    taosSetClientLogCfg(pCfg);
  } else {
S
config  
Shengliang Guan 已提交
980
    taosSetClientLogCfg(pCfg);
S
Shengliang Guan 已提交
981 982 983
    taosSetServerLogCfg(pCfg);
  }

S
Shengliang Guan 已提交
984 985
  taosSetAllDebugFlag(cfgGetItem(pCfg, "debugFlag")->i32);

S
Shengliang Guan 已提交
986
  if (taosMulMkDir(tsLogDir) != 0) {
987 988 989 990 991
    uError("failed to create dir:%s since %s", tsLogDir, terrstr());
    cfgCleanup(pCfg);
    return -1;
  }

S
Shengliang Guan 已提交
992
  if (taosInitLog(logname, logFileNum) != 0) {
993
    uError("failed to init log file since %s", terrstr());
S
Shengliang Guan 已提交
994 995
    cfgCleanup(pCfg);
    return -1;
996 997
  }

S
Shengliang Guan 已提交
998 999 1000 1001
  cfgCleanup(pCfg);
  return 0;
}

1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019
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 已提交
1020 1021 1022 1023
  if (tsCfg != NULL) return 0;
  tsCfg = cfgInit();

  if (tsc) {
S
Shengliang Guan 已提交
1024
    if (taosAddClientCfg(tsCfg) != 0) return -1;
S
Shengliang Guan 已提交
1025
    if (taosAddClientLogCfg(tsCfg) != 0) return -1;
S
Shengliang Guan 已提交
1026
  } else {
S
Shengliang Guan 已提交
1027 1028
    if (taosAddClientCfg(tsCfg) != 0) return -1;
    if (taosAddServerCfg(tsCfg) != 0) return -1;
S
Shengliang Guan 已提交
1029 1030
    if (taosAddClientLogCfg(tsCfg) != 0) return -1;
    if (taosAddServerLogCfg(tsCfg) != 0) return -1;
1031
  }
S
Shengliang Guan 已提交
1032
  taosAddSystemCfg(tsCfg);
1033

wafwerar's avatar
wafwerar 已提交
1034
  if (taosLoadCfg(tsCfg, envCmd, cfgDir, envFile, apolloUrl) != 0) {
S
config  
Shengliang Guan 已提交
1035
    uError("failed to load cfg since %s", terrstr());
S
Shengliang Guan 已提交
1036 1037 1038
    cfgCleanup(tsCfg);
    tsCfg = NULL;
    return -1;
1039 1040
  }

1041
  if (cfgLoadFromArray(tsCfg, pArgs) != 0) {
S
Shengliang Guan 已提交
1042 1043 1044 1045 1046
    uError("failed to load cfg from array since %s", terrstr());
    cfgCleanup(tsCfg);
    return -1;
  }

S
Shengliang Guan 已提交
1047
  if (tsc) {
S
Shengliang Guan 已提交
1048
    if (taosSetClientCfg(tsCfg)) return -1;
S
Shengliang Guan 已提交
1049
  } else {
S
Shengliang Guan 已提交
1050 1051 1052
    if (taosSetClientCfg(tsCfg)) return -1;
    if (taosSetServerCfg(tsCfg)) return -1;
    if (taosSetTfsCfg(tsCfg) != 0) return -1;
1053
  }
S
os  
Shengliang Guan 已提交
1054
  taosSetSystemCfg(tsCfg);
1055

S
Shengliang Guan 已提交
1056
  cfgDumpCfg(tsCfg, tsc, false);
1057 1058 1059 1060 1061

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

S
Shengliang Guan 已提交
1062 1063 1064
  return 0;
}

S
config  
Shengliang Guan 已提交
1065 1066 1067 1068 1069 1070 1071
void taosCleanupCfg() {
  if (tsCfg) {
    cfgCleanup(tsCfg);
    tsCfg = NULL;
  }
}

S
Shengliang Guan 已提交
1072
void taosCfgDynamicOptions(const char *option, const char *value) {
S
Shengliang Guan 已提交
1073 1074 1075
  if (strncasecmp(option, "debugFlag", 9) == 0) {
    int32_t flag = atoi(value);
    taosSetAllDebugFlag(flag);
1076
    return;
S
Shengliang Guan 已提交
1077 1078 1079 1080
  }

  if (strcasecmp(option, "resetlog") == 0) {
    taosResetLog();
1081
    cfgDumpCfg(tsCfg, 0, false);
1082
    return;
S
Shengliang Guan 已提交
1083
  }
1084 1085 1086 1087 1088

  if (strcasecmp(option, "monitor") == 0) {
    int32_t monitor = atoi(value);
    uInfo("monitor set from %d to %d", tsEnableMonitor, monitor);
    tsEnableMonitor = monitor;
1089 1090 1091 1092
    SConfigItem *pItem = cfgGetItem(tsCfg, "monitor");
    if (pItem != NULL) {
      pItem->bval = tsEnableMonitor;
    }
1093 1094 1095 1096
    return;
  }

  const char *options[] = {
M
Minglei Jin 已提交
1097 1098
      "dDebugFlag",   "vDebugFlag",  "mDebugFlag",   "wDebugFlag",   "sDebugFlag",   "tsdbDebugFlag",
      "tqDebugFlag",  "fsDebugFlag", "udfDebugFlag", "smaDebugFlag", "idxDebugFlag", "tdbDebugFlag",
1099
      "tmrDebugFlag", "uDebugFlag",  "smaDebugFlag", "rpcDebugFlag", "qDebugFlag",   "metaDebugFlag",
1100 1101
  };
  int32_t *optionVars[] = {
M
Minglei Jin 已提交
1102 1103
      &dDebugFlag,   &vDebugFlag,  &mDebugFlag,   &wDebugFlag,   &sDebugFlag,   &tsdbDebugFlag,
      &tqDebugFlag,  &fsDebugFlag, &udfDebugFlag, &smaDebugFlag, &idxDebugFlag, &tdbDebugFlag,
1104
      &tmrDebugFlag, &uDebugFlag,  &smaDebugFlag, &rpcDebugFlag, &qDebugFlag,   &metaDebugFlag,
1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115
  };

  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;
1116
    taosSetDebugFlag(optionVars[d], optName, flag);
1117
    return;
S
Shengliang Guan 已提交
1118
  }
1119 1120

  uError("failed to cfg dynamic option:%s value:%s", option, value);
L
Liu Jicong 已提交
1121
}
S
Shengliang Guan 已提交
1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149

void taosSetDebugFlag(int32_t *pFlagPtr, const char *flagName, int32_t flagVal) {
  SConfigItem *pItem = cfgGetItem(tsCfg, flagName);
  if (pItem != NULL) {
    pItem->i32 = flagVal;
  }
  *pFlagPtr = flagVal;
}

void taosSetAllDebugFlag(int32_t flag) {
  if (flag <= 0) return;

  taosSetDebugFlag(&uDebugFlag, "uDebugFlag", flag);
  taosSetDebugFlag(&rpcDebugFlag, "rpcDebugFlag", flag);
  taosSetDebugFlag(&jniDebugFlag, "jniDebugFlag", flag);
  taosSetDebugFlag(&qDebugFlag, "qDebugFlag", flag);
  taosSetDebugFlag(&cDebugFlag, "cDebugFlag", flag);
  taosSetDebugFlag(&dDebugFlag, "dDebugFlag", flag);
  taosSetDebugFlag(&vDebugFlag, "vDebugFlag", flag);
  taosSetDebugFlag(&mDebugFlag, "mDebugFlag", flag);
  taosSetDebugFlag(&wDebugFlag, "wDebugFlag", flag);
  taosSetDebugFlag(&sDebugFlag, "sDebugFlag", flag);
  taosSetDebugFlag(&tsdbDebugFlag, "tsdbDebugFlag", flag);
  taosSetDebugFlag(&tqDebugFlag, "tqDebugFlag", flag);
  taosSetDebugFlag(&fsDebugFlag, "fsDebugFlag", flag);
  taosSetDebugFlag(&udfDebugFlag, "udfDebugFlag", flag);
  taosSetDebugFlag(&smaDebugFlag, "smaDebugFlag", flag);
  taosSetDebugFlag(&idxDebugFlag, "idxDebugFlag", flag);
M
Minglei Jin 已提交
1150
  taosSetDebugFlag(&tdbDebugFlag, "tdbDebugFlag", flag);
S
Shengliang Guan 已提交
1151
  taosSetDebugFlag(&metaDebugFlag, "metaDebugFlag", flag);
S
Shengliang Guan 已提交
1152 1153
  uInfo("all debug flag are set to %d", flag);
}