tglobal.c 32.0 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"
S
Shengliang Guan 已提交
21
#include "tlog.h"
S
slguan 已提交
22

S
config  
Shengliang Guan 已提交
23 24
SConfig *tsCfg = NULL;

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

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

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

S
Shengliang Guan 已提交
50 51 52 53
// queue & threads
int32_t tsNumOfRpcThreads = 1;
int32_t tsNumOfCommitThreads = 2;
int32_t tsNumOfTaskQueueThreads = 1;
D
dapan1121 已提交
54 55
int32_t tsNumOfMnodeQueryThreads = 2;
int32_t tsNumOfMnodeFetchThreads = 1;
S
Shengliang Guan 已提交
56 57
int32_t tsNumOfMnodeReadThreads = 1;
int32_t tsNumOfVnodeQueryThreads = 2;
D
dapan1121 已提交
58
int32_t tsNumOfVnodeFetchThreads = 1;
S
Shengliang Guan 已提交
59 60 61
int32_t tsNumOfVnodeWriteThreads = 2;
int32_t tsNumOfVnodeSyncThreads = 2;
int32_t tsNumOfVnodeMergeThreads = 2;
S
Shengliang Guan 已提交
62
int32_t tsNumOfQnodeQueryThreads = 2;
D
dapan1121 已提交
63
int32_t tsNumOfQnodeFetchThreads = 1;
S
Shengliang Guan 已提交
64 65
int32_t tsNumOfSnodeSharedThreads = 2;
int32_t tsNumOfSnodeUniqueThreads = 2;
S
Shengliang Guan 已提交
66

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

S
Shengliang Guan 已提交
75 76 77 78 79 80
// telem
bool     tsEnableTelem = false;
int32_t  tsTelemInterval = 86400;
char     tsTelemServer[TSDB_FQDN_LEN] = "telemetry.taosdata.com";
uint16_t tsTelemPort = 80;

81
// schemaless
82
char tsSmlTagName[TSDB_COL_NAME_LEN] = "_tag_null";
dengyihao's avatar
dengyihao 已提交
83 84 85 86
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)
87

X
Xiaoyu Wang 已提交
88 89
// query
int32_t tsQueryPolicy = 1;
X
Xiaoyu Wang 已提交
90
int32_t tsQuerySmaOptimize = 1;
X
Xiaoyu Wang 已提交
91

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

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

109 110 111 112 113
/*
 * denote if 3.0 query pattern compatible for 2.0
 */
int32_t tsCompatibleModel = 1;

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

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

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

123 124
// 1 us for interval time range, changed accordingly
int32_t tsMinIntervalTime = 1;
S
Shengliang Guan 已提交
125 126 127 128 129 130 131 132

// 20sec, the maximum value of stream computing delay, changed accordingly
int32_t tsMaxStreamComputDelay = 20000;

// 10sec, the first stream computing delay time after system launched successfully, changed accordingly
int32_t tsStreamCompStartDelay = 10000;

// the stream computing delay time after executing failed, change accordingly
S
Shengliang Guan 已提交
133
int32_t tsRetryStreamCompDelay = 10 * 1000;
S
Shengliang Guan 已提交
134 135

// The delayed computing ration. 10% of the whole computing time window by default.
136
float tsStreamComputDelayRatio = 0.1f;
S
Shengliang Guan 已提交
137 138 139

int64_t tsMaxRetentWindow = 24 * 3600L;  // maximum time window tolerance

H
Haojun Liao 已提交
140 141 142 143 144
// 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;
145
int64_t tsQueryBufferSizeBytes = -1;
H
Haojun Liao 已提交
146

H
Haojun Liao 已提交
147
// in retrieve blocking model, the retrieve threads will wait for the completion of the query processing.
S
Shengliang Guan 已提交
148
bool tsRetrieveBlockingModel = false;
149

150
// last_row(*), first(*), last_row(ts, col1, col2) query, the result fields will be the original column name
S
Shengliang Guan 已提交
151
bool tsKeepOriginalColumnName = false;
S
Shengliang Guan 已提交
152

L
Liu Jicong 已提交
153
// kill long query
S
Shengliang Guan 已提交
154
bool tsDeadLockKillQuery = false;
155

S
Shengliang Guan 已提交
156
// tsdb config
Y
yihaoDeng 已提交
157 158 159
// For backward compatibility
bool tsdbForceKeepFile = false;

S
Shengliang Guan 已提交
160 161 162
int32_t  tsDiskCfgNum = 0;
SDiskCfg tsDiskCfg[TFS_MAX_DISKS] = {0};

L
Liu Jicong 已提交
163 164 165
// stream scheduler
bool tsStreamSchedV = true;

S
Shengliang Guan 已提交
166 167
/*
 * minimum scale for whole system, millisecond by default
168 169 170
 * for TSDB_TIME_PRECISION_MILLI: 60000L
 *     TSDB_TIME_PRECISION_MICRO: 60000000L
 *     TSDB_TIME_PRECISION_NANO:  60000000000L
S
Shengliang Guan 已提交
171
 */
172
int64_t tsTickPerMin[] = {60000L, 60000000L, 60000000000L};
S
Shengliang Guan 已提交
173

S
Shengliang Guan 已提交
174 175 176 177 178 179 180 181 182
// 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
183

S
slzhou 已提交
184
// udf
185
bool tsStartUdfd = true;
S
slzhou 已提交
186

187
// internal
188
int32_t tsTransPullupInterval = 2;
189
int32_t tsMqRebalanceInterval = 2;
190

wafwerar's avatar
wafwerar 已提交
191
void taosAddDataDir(int32_t index, char *v1, int32_t level, int32_t primary) {
S
Shengliang Guan 已提交
192 193 194 195 196
  tstrncpy(tsDiskCfg[index].dir, v1, TSDB_FILENAME_LEN);
  tsDiskCfg[index].level = level;
  tsDiskCfg[index].primary = primary;
  uTrace("dataDir:%s, level:%d primary:%d is configured", v1, level, primary);
}
S
Shengliang Guan 已提交
197

S
Shengliang Guan 已提交
198
static int32_t taosSetTfsCfg(SConfig *pCfg) {
S
Shengliang Guan 已提交
199
  SConfigItem *pItem = cfgGetItem(pCfg, "dataDir");
S
Shengliang Guan 已提交
200
  memset(tsDataDir, 0, PATH_MAX);
S
Shengliang Guan 已提交
201 202 203 204 205

  int32_t size = taosArrayGetSize(pItem->array);
  if (size <= 0) {
    tsDiskCfgNum = 1;
    taosAddDataDir(0, pItem->str, 0, 1);
S
Shengliang Guan 已提交
206
    tstrncpy(tsDataDir, pItem->str, PATH_MAX);
S
Shengliang Guan 已提交
207
    if (taosMulMkDir(tsDataDir) != 0) {
S
Shengliang Guan 已提交
208 209 210
      uError("failed to create dataDir:%s since %s", tsDataDir, terrstr());
      return -1;
    }
S
Shengliang Guan 已提交
211 212 213 214 215
  } else {
    tsDiskCfgNum = size < TFS_MAX_DISKS ? size : TFS_MAX_DISKS;
    for (int32_t index = 0; index < tsDiskCfgNum; ++index) {
      SDiskCfg *pCfg = taosArrayGet(pItem->array, index);
      memcpy(&tsDiskCfg[index], pCfg, sizeof(SDiskCfg));
S
Shengliang Guan 已提交
216 217
      if (pCfg->level == 0 && pCfg->primary == 1) {
        tstrncpy(tsDataDir, pCfg->dir, PATH_MAX);
S
Shengliang Guan 已提交
218
        if (taosMulMkDir(tsDataDir) != 0) {
S
Shengliang Guan 已提交
219 220 221
          uError("failed to create dataDir:%s since %s", tsDataDir, terrstr());
          return -1;
        }
S
Shengliang Guan 已提交
222
      }
S
Shengliang Guan 已提交
223
      if (taosMulMkDir(pCfg->dir) != 0) {
S
Shengliang Guan 已提交
224 225 226
        uError("failed to create tfsDir:%s since %s", tsDataDir, terrstr());
        return -1;
      }
S
Shengliang Guan 已提交
227
    }
S
Shengliang Guan 已提交
228
  }
S
Shengliang Guan 已提交
229 230 231 232 233 234 235

  if (tsDataDir[0] == 0) {
    uError("datadir not set");
    return -1;
  }

  return 0;
S
Shengliang Guan 已提交
236
}
S
config  
Shengliang Guan 已提交
237

S
Shengliang Guan 已提交
238 239 240 241
struct SConfig *taosGetCfg() {
  return tsCfg;
}

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

S
Shengliang Guan 已提交
247
  taosExpandDir(inputCfgDir, cfgDir, PATH_MAX);
248 249 250 251 252
  if (taosIsDir(cfgDir)) {
    snprintf(cfgFile, sizeof(cfgFile), "%s" TD_DIRSEP "taos.cfg", cfgDir);
  } else {
    tstrncpy(cfgFile, cfgDir, sizeof(cfgDir));
  }
S
config  
Shengliang Guan 已提交
253

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

S
Shengliang Guan 已提交
256
  if (cfgLoad(pCfg, CFG_STYPE_APOLLO_URL, apolloUrl) != 0) {
257
    uError("failed to load from apollo url:%s since %s", apolloUrl, terrstr());
S
Shengliang Guan 已提交
258 259 260
    return -1;
  }

261 262 263
  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 已提交
264 265 266
  }

  if (cfgLoad(pCfg, CFG_STYPE_ENV_FILE, envFile) != 0) {
267
    uError("failed to load from env file:%s since %s", envFile, terrstr());
S
Shengliang Guan 已提交
268 269 270 271
    return -1;
  }

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

wafwerar's avatar
wafwerar 已提交
276 277 278 279 280
  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 已提交
281
  return 0;
S
slguan 已提交
282 283
}

S
Shengliang Guan 已提交
284
int32_t taosAddClientLogCfg(SConfig *pCfg) {
S
Shengliang Guan 已提交
285 286
  if (cfgAddDir(pCfg, "configDir", configDir, 1) != 0) return -1;
  if (cfgAddDir(pCfg, "scriptDir", configDir, 1) != 0) return -1;
S
Shengliang Guan 已提交
287 288 289 290 291 292 293 294
  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;
  if (cfgAddInt32(pCfg, "cDebugFlag", cDebugFlag, 0, 255, 1) != 0) return -1;
  if (cfgAddInt32(pCfg, "uDebugFlag", uDebugFlag, 0, 255, 1) != 0) return -1;
  if (cfgAddInt32(pCfg, "rpcDebugFlag", rpcDebugFlag, 0, 255, 1) != 0) return -1;
D
dapan1121 已提交
295
  if (cfgAddInt32(pCfg, "qDebugFlag", qDebugFlag, 0, 255, 1) != 0) return -1;
S
Shengliang Guan 已提交
296 297 298 299
  if (cfgAddInt32(pCfg, "tmrDebugFlag", tmrDebugFlag, 0, 255, 1) != 0) return -1;
  if (cfgAddInt32(pCfg, "jniDebugFlag", jniDebugFlag, 0, 255, 1) != 0) return -1;
  if (cfgAddInt32(pCfg, "simDebugFlag", 143, 0, 255, 1) != 0) return -1;
  if (cfgAddInt32(pCfg, "debugFlag", 0, 0, 255, 1) != 0) return -1;
dengyihao's avatar
dengyihao 已提交
300
  if (cfgAddInt32(pCfg, "idxDebugFlag", idxDebugFlag, 0, 255, 1) != 0) return -1;
S
Shengliang Guan 已提交
301
  return 0;
S
Shengliang Guan 已提交
302 303
}

S
Shengliang Guan 已提交
304 305 306 307 308 309 310 311 312 313
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, "qDebugFlag", qDebugFlag, 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
slzhou 已提交
314
  if (cfgAddInt32(pCfg, "fnDebugFlag", fnDebugFlag, 0, 255, 0) != 0) return -1;
315
  if (cfgAddInt32(pCfg, "smaDebugFlag", smaDebugFlag, 0, 255, 0) != 0) return -1;
dengyihao's avatar
dengyihao 已提交
316
  if (cfgAddInt32(pCfg, "idxDebugFlag", idxDebugFlag, 0, 255, 0) != 0) return -1;
S
Shengliang Guan 已提交
317
  return 0;
S
Shengliang Guan 已提交
318 319
}

S
Shengliang Guan 已提交
320
static int32_t taosAddClientCfg(SConfig *pCfg) {
S
Shengliang Guan 已提交
321 322
  char    defaultFqdn[TSDB_FQDN_LEN] = {0};
  int32_t defaultServerPort = 6030;
S
Shengliang Guan 已提交
323
  if (taosGetFqdn(defaultFqdn) != 0) return -1;
S
Shengliang Guan 已提交
324

325 326
  if (cfgAddString(pCfg, "firstEp", "", 1) != 0) return -1;
  if (cfgAddString(pCfg, "secondEp", "", 1) != 0) return -1;
S
Shengliang Guan 已提交
327 328 329 330 331 332 333 334
  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;
  if (cfgAddFloat(pCfg, "minimalTempDirGB", 1.0f, 0.001f, 10000000, 1) != 0) return -1;
  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;
  if (cfgAddBool(pCfg, "keepColumnName", tsKeepOriginalColumnName, 1) != 0) return -1;
X
Xiaoyu Wang 已提交
335
  if (cfgAddInt32(pCfg, "queryPolicy", tsQueryPolicy, 1, 3, 1) != 0) return -1;
X
Xiaoyu Wang 已提交
336
  if (cfgAddInt32(pCfg, "querySmaOptimize", tsQuerySmaOptimize, 0, 1, 1) != 0) return -1;
337
  if (cfgAddString(pCfg, "smlChildTableName", "", 1) != 0) return -1;
338
  if (cfgAddString(pCfg, "smlTagName", tsSmlTagName, 1) != 0) return -1;
339
  if (cfgAddBool(pCfg, "smlDataFormat", tsSmlDataFormat, 1) != 0) return -1;
S
Shengliang Guan 已提交
340 341 342 343 344

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

S
Shengliang Guan 已提交
345
  return 0;
S
os  
Shengliang Guan 已提交
346 347
}

S
Shengliang Guan 已提交
348
static int32_t taosAddSystemCfg(SConfig *pCfg) {
S
os  
Shengliang Guan 已提交
349 350
  SysNameInfo info = taosGetSysNameInfo();

wafwerar's avatar
wafwerar 已提交
351
  if (cfgAddTimezone(pCfg, "timezone", tsTimezoneStr) != 0) return -1;
S
Shengliang Guan 已提交
352 353
  if (cfgAddLocale(pCfg, "locale", tsLocale) != 0) return -1;
  if (cfgAddCharset(pCfg, "charset", tsCharset) != 0) return -1;
354
  if (cfgAddBool(pCfg, "enableCoreFile", 1, 1) != 0) return -1;
S
Shengliang Guan 已提交
355
  if (cfgAddFloat(pCfg, "numOfCores", tsNumOfCores, 0, 100000, 1) != 0) return -1;
S
Shengliang Guan 已提交
356 357
  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 已提交
358 359
  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 已提交
360 361 362 363 364 365 366 367 368 369 370
  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 已提交
371 372
}

S
Shengliang Guan 已提交
373 374 375
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;
376
  if (cfgAddInt32(pCfg, "supportVnodes", tsNumOfSupportVnodes, 0, 4096, 0) != 0) return -1;
S
Shengliang Guan 已提交
377 378 379 380
  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 已提交
381
  if (cfgAddInt32(pCfg, "maxNumOfDistinctRes", tsMaxNumOfDistinctResults, 10 * 10000, 10000 * 10000, 0) != 0) return -1;
382
  if (cfgAddInt32(pCfg, "countAlwaysReturnValue", tsCountAlwaysReturnValue, 0, 1, 0) != 0) return -1;
S
Shengliang Guan 已提交
383 384 385 386 387 388 389 390 391
  if (cfgAddInt32(pCfg, "maxStreamCompDelay", tsMaxStreamComputDelay, 10, 1000000000, 0) != 0) return -1;
  if (cfgAddInt32(pCfg, "maxFirstStreamCompDelay", tsStreamCompStartDelay, 1000, 1000000000, 0) != 0) return -1;
  if (cfgAddInt32(pCfg, "retryStreamCompDelay", tsRetryStreamCompDelay, 10, 1000000000, 0) != 0) return -1;
  if (cfgAddFloat(pCfg, "streamCompDelayRatio", tsStreamComputDelayRatio, 0.1, 0.9, 0) != 0) return -1;
  if (cfgAddInt32(pCfg, "queryBufferSize", tsQueryBufferSize, -1, 500000000000, 0) != 0) return -1;
  if (cfgAddBool(pCfg, "retrieveBlockingModel", tsRetrieveBlockingModel, 0) != 0) return -1;
  if (cfgAddBool(pCfg, "printAuth", tsPrintAuth, 0) != 0) return -1;
  if (cfgAddBool(pCfg, "slaveQuery", tsEnableSlaveQuery, 0) != 0) return -1;
  if (cfgAddBool(pCfg, "deadLockKillQuery", tsDeadLockKillQuery, 0) != 0) return -1;
S
Shengliang Guan 已提交
392

393
  if (cfgAddInt32(pCfg, "multiProcess", tsMultiProcess, 0, 2, 0) != 0) return -1;
S
Shengliang Guan 已提交
394 395 396 397 398
  if (cfgAddInt32(pCfg, "mnodeShmSize", tsMnodeShmSize, TSDB_MAX_WAL_SIZE * 2 + 1024, INT32_MAX, 0) != 0) return -1;
  if (cfgAddInt32(pCfg, "vnodeShmSize", tsVnodeShmSize, TSDB_MAX_WAL_SIZE * 2 + 1024, INT32_MAX, 0) != 0) return -1;
  if (cfgAddInt32(pCfg, "qnodeShmSize", tsQnodeShmSize, TSDB_MAX_WAL_SIZE * 2 + 1024, INT32_MAX, 0) != 0) return -1;
  if (cfgAddInt32(pCfg, "snodeShmSize", tsSnodeShmSize, TSDB_MAX_WAL_SIZE * 2 + 1024, INT32_MAX, 0) != 0) return -1;
  if (cfgAddInt32(pCfg, "bnodeShmSize", tsBnodeShmSize, TSDB_MAX_WAL_SIZE * 2 + 1024, INT32_MAX, 0) != 0) return -1;
399
  if (cfgAddInt32(pCfg, "mumOfShmThreads", tsNumOfShmThreads, 1, 1024, 0) != 0) return -1;
S
Shengliang Guan 已提交
400 401 402 403 404

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

S
Shengliang Guan 已提交
405
  tsNumOfCommitThreads = tsNumOfCores / 2;
S
Shengliang Guan 已提交
406
  tsNumOfCommitThreads = TRANGE(tsNumOfCommitThreads, 2, 4);
S
Shengliang Guan 已提交
407 408 409 410 411 412 413 414 415 416 417
  if (cfgAddInt32(pCfg, "numOfCommitThreads", tsNumOfCommitThreads, 1, 1024, 0) != 0) return -1;

  tsNumOfMnodeQueryThreads = tsNumOfCores / 8;
  tsNumOfMnodeQueryThreads = TRANGE(tsNumOfMnodeQueryThreads, 1, 4);
  if (cfgAddInt32(pCfg, "numOfMnodeQueryThreads", tsNumOfMnodeQueryThreads, 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;

  tsNumOfVnodeQueryThreads = tsNumOfCores / 2;
S
Shengliang Guan 已提交
418
  tsNumOfVnodeQueryThreads = TMAX(tsNumOfVnodeQueryThreads, 1);
S
Shengliang Guan 已提交
419 420
  if (cfgAddInt32(pCfg, "numOfVnodeQueryThreads", tsNumOfVnodeQueryThreads, 1, 1024, 0) != 0) return -1;

D
dapan1121 已提交
421
  tsNumOfVnodeFetchThreads = TRANGE(tsNumOfVnodeFetchThreads, 1, 1);
S
Shengliang Guan 已提交
422 423 424
  if (cfgAddInt32(pCfg, "numOfVnodeFetchThreads", tsNumOfVnodeFetchThreads, 1, 1024, 0) != 0) return -1;

  tsNumOfVnodeWriteThreads = tsNumOfCores;
S
Shengliang Guan 已提交
425
  tsNumOfVnodeWriteThreads = TMAX(tsNumOfVnodeWriteThreads, 1);
S
Shengliang Guan 已提交
426 427 428
  if (cfgAddInt32(pCfg, "numOfVnodeWriteThreads", tsNumOfVnodeWriteThreads, 1, 1024, 0) != 0) return -1;

  tsNumOfVnodeSyncThreads = tsNumOfCores / 2;
S
Shengliang Guan 已提交
429
  tsNumOfVnodeSyncThreads = TMAX(tsNumOfVnodeSyncThreads, 1);
S
Shengliang Guan 已提交
430 431 432 433 434
  if (cfgAddInt32(pCfg, "numOfVnodeSyncThreads", tsNumOfVnodeSyncThreads, 1, 1024, 0) != 0) return -1;

  tsNumOfVnodeMergeThreads = tsNumOfCores / 8;
  tsNumOfVnodeMergeThreads = TRANGE(tsNumOfVnodeMergeThreads, 1, 1);
  if (cfgAddInt32(pCfg, "numOfVnodeMergeThreads", tsNumOfVnodeMergeThreads, 1, 1024, 0) != 0) return -1;
S
monitor  
Shengliang Guan 已提交
435

S
Shengliang Guan 已提交
436
  tsNumOfQnodeQueryThreads = tsNumOfCores / 2;
S
Shengliang Guan 已提交
437
  tsNumOfQnodeQueryThreads = TMAX(tsNumOfQnodeQueryThreads, 1);
S
Shengliang Guan 已提交
438 439
  if (cfgAddInt32(pCfg, "numOfQnodeQueryThreads", tsNumOfQnodeQueryThreads, 1, 1024, 0) != 0) return -1;

D
dapan1121 已提交
440
  tsNumOfQnodeFetchThreads = TRANGE(tsNumOfQnodeFetchThreads, 1, 1);
S
Shengliang Guan 已提交
441 442
  if (cfgAddInt32(pCfg, "numOfQnodeFetchThreads", tsNumOfQnodeFetchThreads, 1, 1024, 0) != 0) return -1;

S
Shengliang Guan 已提交
443 444 445 446 447 448 449 450
  tsNumOfSnodeSharedThreads = tsNumOfCores / 4;
  tsNumOfSnodeSharedThreads = TRANGE(tsNumOfSnodeSharedThreads, 2, 4);
  if (cfgAddInt32(pCfg, "numOfSnodeSharedThreads", tsNumOfSnodeSharedThreads, 1, 1024, 0) != 0) return -1;

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

451 452
  tsRpcQueueMemoryAllowed = tsTotalMemoryKB * 1024 * 0.1;
  tsRpcQueueMemoryAllowed = TRANGE(tsRpcQueueMemoryAllowed, TSDB_MAX_WAL_SIZE * 10L, TSDB_MAX_WAL_SIZE * 10000L);
dengyihao's avatar
dengyihao 已提交
453 454
  if (cfgAddInt64(pCfg, "rpcQueueMemoryAllowed", tsRpcQueueMemoryAllowed, TSDB_MAX_WAL_SIZE * 10L, INT64_MAX, 0) != 0)
    return -1;
455

S
monitor  
Shengliang Guan 已提交
456
  if (cfgAddBool(pCfg, "monitor", tsEnableMonitor, 0) != 0) return -1;
S
Shengliang Guan 已提交
457
  if (cfgAddInt32(pCfg, "monitorInterval", tsMonitorInterval, 1, 200000, 0) != 0) return -1;
S
monitor  
Shengliang Guan 已提交
458 459
  if (cfgAddString(pCfg, "monitorFqdn", tsMonitorFqdn, 0) != 0) return -1;
  if (cfgAddInt32(pCfg, "monitorPort", tsMonitorPort, 1, 65056, 0) != 0) return -1;
S
monitor  
Shengliang Guan 已提交
460
  if (cfgAddInt32(pCfg, "monitorMaxLogs", tsMonitorMaxLogs, 1, 1000000, 0) != 0) return -1;
S
Shengliang Guan 已提交
461
  if (cfgAddBool(pCfg, "monitorComp", tsMonitorComp, 0) != 0) return -1;
S
monitor  
Shengliang Guan 已提交
462

S
Shengliang Guan 已提交
463 464 465 466 467
  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;

468 469 470
  if (cfgAddInt32(pCfg, "transPullupInterval", tsTransPullupInterval, 1, 10000, 1) != 0) return -1;
  if (cfgAddInt32(pCfg, "mqRebalanceInterval", tsMqRebalanceInterval, 1, 10000, 1) != 0) return -1;

471
  if (cfgAddBool(pCfg, "udf", tsStartUdfd, 0) != 0) return -1;
S
Shengliang Guan 已提交
472
  return 0;
S
Shengliang Guan 已提交
473 474 475
}

static void taosSetClientLogCfg(SConfig *pCfg) {
S
Shengliang Guan 已提交
476
  SConfigItem *pItem = cfgGetItem(pCfg, "logDir");
S
os env  
Shengliang Guan 已提交
477
  tstrncpy(tsLogDir, cfgGetItem(pCfg, "logDir")->str, PATH_MAX);
S
Shengliang Guan 已提交
478
  taosExpandDir(tsLogDir, tsLogDir, PATH_MAX);
S
os env  
Shengliang Guan 已提交
479
  tsLogSpace.reserved = cfgGetItem(pCfg, "minimalLogDirGB")->fval;
S
Shengliang Guan 已提交
480 481 482 483 484
  tsNumOfLogLines = cfgGetItem(pCfg, "numOfLogLines")->i32;
  tsAsyncLog = cfgGetItem(pCfg, "asyncLog")->bval;
  tsLogKeepDays = cfgGetItem(pCfg, "logKeepDays")->i32;
  cDebugFlag = cfgGetItem(pCfg, "cDebugFlag")->i32;
  uDebugFlag = cfgGetItem(pCfg, "uDebugFlag")->i32;
D
dapan1121 已提交
485
  qDebugFlag = cfgGetItem(pCfg, "qDebugFlag")->i32;
S
Shengliang Guan 已提交
486 487 488
  rpcDebugFlag = cfgGetItem(pCfg, "rpcDebugFlag")->i32;
  tmrDebugFlag = cfgGetItem(pCfg, "tmrDebugFlag")->i32;
  jniDebugFlag = cfgGetItem(pCfg, "jniDebugFlag")->i32;
dengyihao's avatar
dengyihao 已提交
489
  idxDebugFlag = cfgGetItem(pCfg, "idxDebugFlag")->i32;
S
Shengliang Guan 已提交
490 491 492 493 494 495 496 497 498 499 500 501
}

static void taosSetServerLogCfg(SConfig *pCfg) {
  dDebugFlag = cfgGetItem(pCfg, "dDebugFlag")->i32;
  vDebugFlag = cfgGetItem(pCfg, "vDebugFlag")->i32;
  mDebugFlag = cfgGetItem(pCfg, "mDebugFlag")->i32;
  qDebugFlag = cfgGetItem(pCfg, "qDebugFlag")->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
slzhou 已提交
502
  fnDebugFlag = cfgGetItem(pCfg, "fnDebugFlag")->i32;
503
  smaDebugFlag = cfgGetItem(pCfg, "smaDebugFlag")->i32;
dengyihao's avatar
dengyihao 已提交
504
  idxDebugFlag = cfgGetItem(pCfg, "idxDebugFlag")->i32;
S
Shengliang Guan 已提交
505 506
}

S
Shengliang Guan 已提交
507
static int32_t taosSetClientCfg(SConfig *pCfg) {
S
monitor  
Shengliang Guan 已提交
508
  tstrncpy(tsLocalFqdn, cfgGetItem(pCfg, "fqdn")->str, TSDB_FQDN_LEN);
S
Shengliang Guan 已提交
509 510
  tsServerPort = (uint16_t)cfgGetItem(pCfg, "serverPort")->i32;
  snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
511

512 513 514
  char defaultFirstEp[TSDB_EP_LEN] = {0};
  snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort);

515 516
  SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp");
  SEp          firstEp = {0};
517
  taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp);
518 519 520 521 522
  snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port);
  cfgSetItem(pCfg, "firstEp", tsFirst, pFirstEpItem->stype);

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

S
Shengliang Guan 已提交
527 528
  tstrncpy(tsTempDir, cfgGetItem(pCfg, "tempDir")->str, PATH_MAX);
  taosExpandDir(tsTempDir, tsTempDir, PATH_MAX);
S
os env  
Shengliang Guan 已提交
529
  tsTempSpace.reserved = cfgGetItem(pCfg, "minimalTempDirGB")->fval;
S
Shengliang Guan 已提交
530
  if (taosMulMkDir(tsTempDir) != 0) {
S
Shengliang Guan 已提交
531 532 533
    uError("failed to create tempDir:%s since %s", tsTempDir, terrstr());
    return -1;
  }
S
Shengliang Guan 已提交
534

535
  tstrncpy(tsSmlChildTableName, cfgGetItem(pCfg, "smlChildTableName")->str, TSDB_TABLE_NAME_LEN);
536
  tstrncpy(tsSmlTagName, cfgGetItem(pCfg, "smlTagName")->str, TSDB_COL_NAME_LEN);
537
  tsSmlDataFormat = cfgGetItem(pCfg, "smlDataFormat")->bval;
538

539
  tsShellActivityTimer = cfgGetItem(pCfg, "shellActivityTimer")->i32;
S
Shengliang Guan 已提交
540 541 542
  tsCompressMsgSize = cfgGetItem(pCfg, "compressMsgSize")->i32;
  tsCompressColData = cfgGetItem(pCfg, "compressColData")->i32;
  tsKeepOriginalColumnName = cfgGetItem(pCfg, "keepColumnName")->bval;
S
Shengliang Guan 已提交
543
  tsNumOfTaskQueueThreads = cfgGetItem(pCfg, "numOfTaskQueueThreads")->i32;
X
Xiaoyu Wang 已提交
544
  tsQueryPolicy = cfgGetItem(pCfg, "queryPolicy")->i32;
X
Xiaoyu Wang 已提交
545
  tsQuerySmaOptimize = cfgGetItem(pCfg, "querySmaOptimize")->i32;
S
Shengliang Guan 已提交
546
  return 0;
S
os  
Shengliang Guan 已提交
547
}
S
config  
Shengliang Guan 已提交
548

S
os  
Shengliang Guan 已提交
549
static void taosSetSystemCfg(SConfig *pCfg) {
S
Shengliang Guan 已提交
550 551
  SConfigItem *pItem = cfgGetItem(pCfg, "timezone");
  osSetTimezone(pItem->str);
wafwerar's avatar
wafwerar 已提交
552 553
  uDebug("timezone format changed from %s to %s", pItem->str, tsTimezoneStr);
  cfgSetItem(pCfg, "timezone", tsTimezoneStr, pItem->stype);
S
Shengliang Guan 已提交
554

S
Shengliang Guan 已提交
555 556
  const char *locale = cfgGetItem(pCfg, "locale")->str;
  const char *charset = cfgGetItem(pCfg, "charset")->str;
S
os env  
Shengliang Guan 已提交
557
  taosSetSystemLocale(locale, charset);
wafwerar's avatar
wafwerar 已提交
558
  osSetSystemLocale(locale, charset);
S
Shengliang Guan 已提交
559

S
Shengliang Guan 已提交
560
  bool enableCore = cfgGetItem(pCfg, "enableCoreFile")->bval;
S
os env  
Shengliang Guan 已提交
561
  taosSetConsoleEcho(enableCore);
S
config  
Shengliang Guan 已提交
562 563 564

  // todo
  tsVersion = 30000000;
S
Shengliang Guan 已提交
565
}
566

S
Shengliang Guan 已提交
567 568
static int32_t taosSetServerCfg(SConfig *pCfg) {
  tsDataSpace.reserved = cfgGetItem(pCfg, "minimalDataDirGB")->fval;
569
  tsNumOfSupportVnodes = cfgGetItem(pCfg, "supportVnodes")->i32;
S
Shengliang Guan 已提交
570 571 572 573
  tsMaxShellConns = cfgGetItem(pCfg, "maxShellConns")->i32;
  tsStatusInterval = cfgGetItem(pCfg, "statusInterval")->i32;
  tsMinSlidingTime = cfgGetItem(pCfg, "minSlidingTime")->i32;
  tsMinIntervalTime = cfgGetItem(pCfg, "minIntervalTime")->i32;
S
Shengliang Guan 已提交
574
  tsMaxNumOfDistinctResults = cfgGetItem(pCfg, "maxNumOfDistinctRes")->i32;
575
  tsCountAlwaysReturnValue = cfgGetItem(pCfg, "countAlwaysReturnValue")->i32;
S
Shengliang Guan 已提交
576 577 578 579
  tsMaxStreamComputDelay = cfgGetItem(pCfg, "maxStreamCompDelay")->i32;
  tsStreamCompStartDelay = cfgGetItem(pCfg, "maxFirstStreamCompDelay")->i32;
  tsRetryStreamCompDelay = cfgGetItem(pCfg, "retryStreamCompDelay")->i32;
  tsStreamComputDelayRatio = cfgGetItem(pCfg, "streamCompDelayRatio")->fval;
S
config  
Shengliang Guan 已提交
580
  tsQueryBufferSize = cfgGetItem(pCfg, "queryBufferSize")->i32;
S
Shengliang Guan 已提交
581 582 583
  tsRetrieveBlockingModel = cfgGetItem(pCfg, "retrieveBlockingModel")->bval;
  tsPrintAuth = cfgGetItem(pCfg, "printAuth")->bval;
  tsEnableSlaveQuery = cfgGetItem(pCfg, "slaveQuery")->bval;
584
  tsDeadLockKillQuery = cfgGetItem(pCfg, "deadLockKillQuery")->i32;
S
Shengliang Guan 已提交
585

S
Shengliang Guan 已提交
586
  tsMultiProcess = cfgGetItem(pCfg, "multiProcess")->bval;
S
Shengliang Guan 已提交
587 588 589 590
  tsMnodeShmSize = cfgGetItem(pCfg, "mnodeShmSize")->i32;
  tsVnodeShmSize = cfgGetItem(pCfg, "vnodeShmSize")->i32;
  tsQnodeShmSize = cfgGetItem(pCfg, "qnodeShmSize")->i32;
  tsSnodeShmSize = cfgGetItem(pCfg, "snodeShmSize")->i32;
S
Shengliang Guan 已提交
591 592 593 594
  tsBnodeShmSize = cfgGetItem(pCfg, "bnodeShmSize")->i32;

  tsNumOfRpcThreads = cfgGetItem(pCfg, "numOfRpcThreads")->i32;
  tsNumOfCommitThreads = cfgGetItem(pCfg, "numOfCommitThreads")->i32;
S
Shengliang Guan 已提交
595 596 597 598 599 600 601
  tsNumOfMnodeQueryThreads = cfgGetItem(pCfg, "numOfMnodeQueryThreads")->i32;
  tsNumOfMnodeReadThreads = cfgGetItem(pCfg, "numOfMnodeReadThreads")->i32;
  tsNumOfVnodeQueryThreads = cfgGetItem(pCfg, "numOfVnodeQueryThreads")->i32;
  tsNumOfVnodeFetchThreads = cfgGetItem(pCfg, "numOfVnodeFetchThreads")->i32;
  tsNumOfVnodeWriteThreads = cfgGetItem(pCfg, "numOfVnodeWriteThreads")->i32;
  tsNumOfVnodeSyncThreads = cfgGetItem(pCfg, "numOfVnodeSyncThreads")->i32;
  tsNumOfVnodeMergeThreads = cfgGetItem(pCfg, "numOfVnodeMergeThreads")->i32;
S
Shengliang Guan 已提交
602 603
  tsNumOfQnodeQueryThreads = cfgGetItem(pCfg, "numOfQnodeQueryThreads")->i32;
  tsNumOfQnodeFetchThreads = cfgGetItem(pCfg, "numOfQnodeFetchThreads")->i32;
S
Shengliang Guan 已提交
604 605
  tsNumOfSnodeSharedThreads = cfgGetItem(pCfg, "numOfSnodeSharedThreads")->i32;
  tsNumOfSnodeUniqueThreads = cfgGetItem(pCfg, "numOfSnodeUniqueThreads")->i32;
606
  tsRpcQueueMemoryAllowed = cfgGetItem(pCfg, "rpcQueueMemoryAllowed")->i64;
S
Shengliang Guan 已提交
607

S
monitor  
Shengliang Guan 已提交
608 609 610 611
  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 已提交
612
  tsMonitorMaxLogs = cfgGetItem(pCfg, "monitorMaxLogs")->i32;
S
Shengliang Guan 已提交
613
  tsMonitorComp = cfgGetItem(pCfg, "monitorComp")->bval;
S
monitor  
Shengliang Guan 已提交
614

S
Shengliang Guan 已提交
615 616 617 618 619
  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;

620 621 622
  tsTransPullupInterval = cfgGetItem(pCfg, "transPullupInterval")->i32;
  tsMqRebalanceInterval = cfgGetItem(pCfg, "mqRebalanceInterval")->i32;

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

S
config  
Shengliang Guan 已提交
625 626 627
  if (tsQueryBufferSize >= 0) {
    tsQueryBufferSizeBytes = tsQueryBufferSize * 1048576UL;
  }
S
Shengliang Guan 已提交
628 629

  return 0;
S
Shengliang Guan 已提交
630 631
}

632 633
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 已提交
634
  osDefaultInit();
S
Shengliang Guan 已提交
635

S
Shengliang Guan 已提交
636
  SConfig *pCfg = cfgInit();
S
config  
Shengliang Guan 已提交
637
  if (pCfg == NULL) return -1;
S
Shengliang Guan 已提交
638 639

  if (tsc) {
S
Shengliang Guan 已提交
640
    tsLogEmbedded = 0;
S
Shengliang Guan 已提交
641
    if (taosAddClientLogCfg(pCfg) != 0) return -1;
S
Shengliang Guan 已提交
642
  } else {
S
Shengliang Guan 已提交
643
    tsLogEmbedded = 1;
S
Shengliang Guan 已提交
644 645
    if (taosAddClientLogCfg(pCfg) != 0) return -1;
    if (taosAddServerLogCfg(pCfg) != 0) return -1;
S
Shengliang Guan 已提交
646 647
  }

wafwerar's avatar
wafwerar 已提交
648
  if (taosLoadCfg(pCfg, envCmd, cfgDir, envFile, apolloUrl) != 0) {
S
config  
Shengliang Guan 已提交
649
    uError("failed to load cfg since %s", terrstr());
S
Shengliang Guan 已提交
650 651 652 653
    cfgCleanup(pCfg);
    return -1;
  }

654
  if (cfgLoadFromArray(pCfg, pArgs) != 0) {
S
Shengliang Guan 已提交
655 656 657 658 659
    uError("failed to load cfg from array since %s", terrstr());
    cfgCleanup(pCfg);
    return -1;
  }

S
Shengliang Guan 已提交
660 661 662
  if (tsc) {
    taosSetClientLogCfg(pCfg);
  } else {
S
config  
Shengliang Guan 已提交
663
    taosSetClientLogCfg(pCfg);
S
Shengliang Guan 已提交
664 665 666
    taosSetServerLogCfg(pCfg);
  }

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

S
Shengliang Guan 已提交
669
  if (taosMulMkDir(tsLogDir) != 0) {
670 671 672 673 674
    uError("failed to create dir:%s since %s", tsLogDir, terrstr());
    cfgCleanup(pCfg);
    return -1;
  }

S
Shengliang Guan 已提交
675
  if (taosInitLog(logname, logFileNum) != 0) {
676
    uError("failed to init log file since %s", terrstr());
S
Shengliang Guan 已提交
677 678
    cfgCleanup(pCfg);
    return -1;
679 680
  }

S
Shengliang Guan 已提交
681 682 683 684
  cfgCleanup(pCfg);
  return 0;
}

685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702
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 已提交
703 704 705 706
  if (tsCfg != NULL) return 0;
  tsCfg = cfgInit();

  if (tsc) {
S
Shengliang Guan 已提交
707
    if (taosAddClientCfg(tsCfg) != 0) return -1;
S
Shengliang Guan 已提交
708
    if (taosAddClientLogCfg(tsCfg) != 0) return -1;
S
Shengliang Guan 已提交
709
  } else {
S
Shengliang Guan 已提交
710 711
    if (taosAddClientCfg(tsCfg) != 0) return -1;
    if (taosAddServerCfg(tsCfg) != 0) return -1;
S
Shengliang Guan 已提交
712 713
    if (taosAddClientLogCfg(tsCfg) != 0) return -1;
    if (taosAddServerLogCfg(tsCfg) != 0) return -1;
714
  }
S
Shengliang Guan 已提交
715
  taosAddSystemCfg(tsCfg);
716

wafwerar's avatar
wafwerar 已提交
717
  if (taosLoadCfg(tsCfg, envCmd, cfgDir, envFile, apolloUrl) != 0) {
S
config  
Shengliang Guan 已提交
718
    uError("failed to load cfg since %s", terrstr());
S
Shengliang Guan 已提交
719 720 721
    cfgCleanup(tsCfg);
    tsCfg = NULL;
    return -1;
722 723
  }

724
  if (cfgLoadFromArray(tsCfg, pArgs) != 0) {
S
Shengliang Guan 已提交
725 726 727 728 729
    uError("failed to load cfg from array since %s", terrstr());
    cfgCleanup(tsCfg);
    return -1;
  }

S
Shengliang Guan 已提交
730
  if (tsc) {
S
Shengliang Guan 已提交
731
    if (taosSetClientCfg(tsCfg)) return -1;
S
Shengliang Guan 已提交
732
  } else {
S
Shengliang Guan 已提交
733 734 735
    if (taosSetClientCfg(tsCfg)) return -1;
    if (taosSetServerCfg(tsCfg)) return -1;
    if (taosSetTfsCfg(tsCfg) != 0) return -1;
736
  }
S
os  
Shengliang Guan 已提交
737
  taosSetSystemCfg(tsCfg);
738

S
Shengliang Guan 已提交
739
  cfgDumpCfg(tsCfg, tsc, false);
740 741 742 743 744

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

S
Shengliang Guan 已提交
745 746 747
  return 0;
}

S
config  
Shengliang Guan 已提交
748 749 750 751 752 753 754
void taosCleanupCfg() {
  if (tsCfg) {
    cfgCleanup(tsCfg);
    tsCfg = NULL;
  }
}

S
Shengliang Guan 已提交
755 756 757 758 759 760 761 762
void taosCfgDynamicOptions(const char *option, const char *value) {
  if (strcasecmp(option, "debugFlag") == 0) {
    int32_t debugFlag = atoi(value);
    taosSetAllDebugFlag(debugFlag);
  }

  if (strcasecmp(option, "resetlog") == 0) {
    taosResetLog();
763
    cfgDumpCfg(tsCfg, 0, false);
S
Shengliang Guan 已提交
764
  }
L
Liu Jicong 已提交
765
}