merge develop branch
This commit is contained in:
commit
b2f17cb511
21
.travis.yml
21
.travis.yml
|
@ -26,10 +26,6 @@ matrix:
|
||||||
- python3-setuptools
|
- python3-setuptools
|
||||||
- valgrind
|
- valgrind
|
||||||
|
|
||||||
before_install:
|
|
||||||
- sudo apt update -y -qq
|
|
||||||
- sudo apt install -y net-tools python-pip python-setuptools python3-pip python3-setuptools valgrind
|
|
||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
- cd ${TRAVIS_BUILD_DIR}
|
- cd ${TRAVIS_BUILD_DIR}
|
||||||
- mkdir debug
|
- mkdir debug
|
||||||
|
@ -44,7 +40,7 @@ matrix:
|
||||||
case $TRAVIS_OS_NAME in
|
case $TRAVIS_OS_NAME in
|
||||||
linux)
|
linux)
|
||||||
cd ${TRAVIS_BUILD_DIR}/debug
|
cd ${TRAVIS_BUILD_DIR}/debug
|
||||||
sudo make install || travis_terminate $?
|
make install || travis_terminate $?
|
||||||
|
|
||||||
pip install --user ${TRAVIS_BUILD_DIR}/src/connector/python/linux/python2/
|
pip install --user ${TRAVIS_BUILD_DIR}/src/connector/python/linux/python2/
|
||||||
pip3 install --user ${TRAVIS_BUILD_DIR}/src/connector/python/linux/python3/
|
pip3 install --user ${TRAVIS_BUILD_DIR}/src/connector/python/linux/python3/
|
||||||
|
@ -63,11 +59,14 @@ matrix:
|
||||||
GREEN_UNDERLINE='\033[4;32m'
|
GREEN_UNDERLINE='\033[4;32m'
|
||||||
NC='\033[0m'
|
NC='\033[0m'
|
||||||
|
|
||||||
|
tail -10 mem-error-out.txt
|
||||||
|
defiMemError=`grep -m 1 'definitely lost' mem-error-out.txt | awk '{print $7}'`
|
||||||
memError=`grep -m 1 'ERROR SUMMARY' mem-error-out.txt | awk '{print $4}'`
|
memError=`grep -m 1 'ERROR SUMMARY' mem-error-out.txt | awk '{print $4}'`
|
||||||
|
|
||||||
if [ -n "$memError" ]; then
|
if [ -n "$memError" ]; then
|
||||||
if [ "$memError" -gt 23 ]; then
|
if [ "$memError" -gt 16 ] && [ "$defiMemError" -gt 0 ]; then
|
||||||
echo -e "${RED} ## Memory errors number valgrind reports is $memError. More than our threshold! ## ${NC} "
|
echo -e "${RED} ## Memory errors number valgrind reports is $memError.\
|
||||||
|
Definitely lost is $defiMemError. More than our threshold! ## ${NC}"
|
||||||
travis_terminate $memError
|
travis_terminate $memError
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
@ -131,10 +130,6 @@ matrix:
|
||||||
- python3-setuptools
|
- python3-setuptools
|
||||||
- lcov
|
- lcov
|
||||||
|
|
||||||
before_install:
|
|
||||||
- sudo apt update -y -qq
|
|
||||||
- sudo apt install -y net-tools python-pip python-setuptools python3-pip python3-setuptools lcov
|
|
||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
- cd ${TRAVIS_BUILD_DIR}
|
- cd ${TRAVIS_BUILD_DIR}
|
||||||
- mkdir debug
|
- mkdir debug
|
||||||
|
@ -149,7 +144,7 @@ matrix:
|
||||||
case $TRAVIS_OS_NAME in
|
case $TRAVIS_OS_NAME in
|
||||||
linux)
|
linux)
|
||||||
cd ${TRAVIS_BUILD_DIR}/debug
|
cd ${TRAVIS_BUILD_DIR}/debug
|
||||||
sudo make install || travis_terminate $?
|
make install || travis_terminate $?
|
||||||
|
|
||||||
pip install --user ${TRAVIS_BUILD_DIR}/src/connector/python/linux/python2/
|
pip install --user ${TRAVIS_BUILD_DIR}/src/connector/python/linux/python2/
|
||||||
pip3 install --user ${TRAVIS_BUILD_DIR}/src/connector/python/linux/python3/
|
pip3 install --user ${TRAVIS_BUILD_DIR}/src/connector/python/linux/python3/
|
||||||
|
@ -162,7 +157,7 @@ matrix:
|
||||||
travis_terminate $?
|
travis_terminate $?
|
||||||
fi
|
fi
|
||||||
|
|
||||||
sudo pkill taosd
|
pkill taosd
|
||||||
sleep 1
|
sleep 1
|
||||||
|
|
||||||
cd ${TRAVIS_BUILD_DIR}
|
cd ${TRAVIS_BUILD_DIR}
|
||||||
|
|
|
@ -43,7 +43,7 @@ lib_files="${build_dir}/lib/libtaos.so.${version}"
|
||||||
header_files="${code_dir}/inc/taos.h ${code_dir}/inc/taoserror.h"
|
header_files="${code_dir}/inc/taos.h ${code_dir}/inc/taoserror.h"
|
||||||
cfg_dir="${top_dir}/packaging/cfg"
|
cfg_dir="${top_dir}/packaging/cfg"
|
||||||
install_files="${script_dir}/install.sh"
|
install_files="${script_dir}/install.sh"
|
||||||
nginx_dir="${code_dir}/../../enterprise/src/modules/web"
|
nginx_dir="${code_dir}/../../enterprise/src/plugins/web"
|
||||||
|
|
||||||
# Init file
|
# Init file
|
||||||
#init_dir=${script_dir}/deb
|
#init_dir=${script_dir}/deb
|
||||||
|
|
|
@ -15,4 +15,4 @@ ADD_SUBDIRECTORY(vnode)
|
||||||
ADD_SUBDIRECTORY(tsdb)
|
ADD_SUBDIRECTORY(tsdb)
|
||||||
ADD_SUBDIRECTORY(wal)
|
ADD_SUBDIRECTORY(wal)
|
||||||
ADD_SUBDIRECTORY(dnode)
|
ADD_SUBDIRECTORY(dnode)
|
||||||
#ADD_SUBDIRECTORY(connector/jdbc)
|
ADD_SUBDIRECTORY(connector/jdbc)
|
||||||
|
|
|
@ -281,7 +281,7 @@ JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_executeQueryImp(J
|
||||||
|
|
||||||
int code = taos_query(tscon, dst);
|
int code = taos_query(tscon, dst);
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
jniError("jobj:%p, conn:%p, code:%d, msg:%s", jobj, tscon, code, taos_errstr(tscon));
|
jniError("jobj:%p, conn:%p, code:%s, msg:%s", jobj, tscon, tstrerror(code), taos_errstr(tscon));
|
||||||
free(dst);
|
free(dst);
|
||||||
return JNI_TDENGINE_ERROR;
|
return JNI_TDENGINE_ERROR;
|
||||||
} else {
|
} else {
|
||||||
|
@ -290,9 +290,9 @@ JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_executeQueryImp(J
|
||||||
|
|
||||||
if (pSql->cmd.command == TSDB_SQL_INSERT) {
|
if (pSql->cmd.command == TSDB_SQL_INSERT) {
|
||||||
affectRows = taos_affected_rows(tscon);
|
affectRows = taos_affected_rows(tscon);
|
||||||
jniTrace("jobj:%p, conn:%p, code:%d, affect rows:%d", jobj, tscon, code, affectRows);
|
jniTrace("jobj:%p, conn:%p, code:%s, affect rows:%d", jobj, tscon, tstrerror(code), affectRows);
|
||||||
} else {
|
} else {
|
||||||
jniTrace("jobj:%p, conn:%p, code:%d", jobj, tscon, code);
|
jniTrace("jobj:%p, conn:%p, code:%s", jobj, tscon, tstrerror(code));
|
||||||
}
|
}
|
||||||
|
|
||||||
free(dst);
|
free(dst);
|
||||||
|
|
|
@ -163,11 +163,13 @@ void tscProcessActivityTimer(void *handle, void *tmrId) {
|
||||||
tscGetQueryInfoDetailSafely(&pSql->cmd, 0, &pQueryInfo);
|
tscGetQueryInfoDetailSafely(&pSql->cmd, 0, &pQueryInfo);
|
||||||
pQueryInfo->command = TSDB_SQL_HB;
|
pQueryInfo->command = TSDB_SQL_HB;
|
||||||
|
|
||||||
|
pSql->cmd.command = TSDB_SQL_HB;
|
||||||
if (TSDB_CODE_SUCCESS != tscAllocPayload(&(pSql->cmd), TSDB_DEFAULT_PAYLOAD_SIZE)) {
|
if (TSDB_CODE_SUCCESS != tscAllocPayload(&(pSql->cmd), TSDB_DEFAULT_PAYLOAD_SIZE)) {
|
||||||
tfree(pSql);
|
tfree(pSql);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pSql->cmd.command = TSDB_SQL_HB;
|
||||||
pSql->param = pObj;
|
pSql->param = pObj;
|
||||||
pSql->pTscObj = pObj;
|
pSql->pTscObj = pObj;
|
||||||
pSql->signature = pSql;
|
pSql->signature = pSql;
|
||||||
|
|
|
@ -39,7 +39,6 @@ void * tscTmr;
|
||||||
void * tscQhandle;
|
void * tscQhandle;
|
||||||
void * tscCheckDiskUsageTmr;
|
void * tscCheckDiskUsageTmr;
|
||||||
int tsInsertHeadSize;
|
int tsInsertHeadSize;
|
||||||
char tsLastUser[TSDB_USER_LEN + 1];
|
|
||||||
|
|
||||||
int tscNumOfThreads;
|
int tscNumOfThreads;
|
||||||
|
|
||||||
|
@ -64,7 +63,6 @@ int32_t tscInitRpc(const char *user, const char *secret, void** pMgmtConn) {
|
||||||
rpcInit.label = "TSC-vnode";
|
rpcInit.label = "TSC-vnode";
|
||||||
rpcInit.numOfThreads = tscNumOfThreads;
|
rpcInit.numOfThreads = tscNumOfThreads;
|
||||||
rpcInit.cfp = tscProcessMsgFromServer;
|
rpcInit.cfp = tscProcessMsgFromServer;
|
||||||
rpcInit.ufp = tscUpdateIpSet;
|
|
||||||
rpcInit.sessions = tsMaxVnodeConnections;
|
rpcInit.sessions = tsMaxVnodeConnections;
|
||||||
rpcInit.connType = TAOS_CONN_CLIENT;
|
rpcInit.connType = TAOS_CONN_CLIENT;
|
||||||
rpcInit.user = (char*)user;
|
rpcInit.user = (char*)user;
|
||||||
|
@ -79,13 +77,6 @@ int32_t tscInitRpc(const char *user, const char *secret, void** pMgmtConn) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// not stop service, switch users
|
|
||||||
if (strcmp(tsLastUser, user) != 0 && *pMgmtConn != NULL) {
|
|
||||||
tscTrace("switch user from %s to %s", user, tsLastUser);
|
|
||||||
rpcClose(*pMgmtConn);
|
|
||||||
*pMgmtConn = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (*pMgmtConn == NULL) {
|
if (*pMgmtConn == NULL) {
|
||||||
memset(&rpcInit, 0, sizeof(rpcInit));
|
memset(&rpcInit, 0, sizeof(rpcInit));
|
||||||
rpcInit.localIp = tsLocalIp;
|
rpcInit.localIp = tsLocalIp;
|
||||||
|
@ -93,13 +84,14 @@ int32_t tscInitRpc(const char *user, const char *secret, void** pMgmtConn) {
|
||||||
rpcInit.label = "TSC-mgmt";
|
rpcInit.label = "TSC-mgmt";
|
||||||
rpcInit.numOfThreads = 1;
|
rpcInit.numOfThreads = 1;
|
||||||
rpcInit.cfp = tscProcessMsgFromServer;
|
rpcInit.cfp = tscProcessMsgFromServer;
|
||||||
|
rpcInit.ufp = tscUpdateIpSet;
|
||||||
rpcInit.sessions = tsMaxMgmtConnections;
|
rpcInit.sessions = tsMaxMgmtConnections;
|
||||||
rpcInit.connType = TAOS_CONN_CLIENT;
|
rpcInit.connType = TAOS_CONN_CLIENT;
|
||||||
rpcInit.idleTime = 2000;
|
rpcInit.idleTime = 2000;
|
||||||
rpcInit.user = (char*)user;
|
rpcInit.user = (char*)user;
|
||||||
rpcInit.ckey = "key";
|
rpcInit.ckey = "key";
|
||||||
|
rpcInit.spi = 1;
|
||||||
rpcInit.secret = secretEncrypt;
|
rpcInit.secret = secretEncrypt;
|
||||||
strcpy(tsLastUser, user);
|
|
||||||
|
|
||||||
*pMgmtConn = rpcOpen(&rpcInit);
|
*pMgmtConn = rpcOpen(&rpcInit);
|
||||||
if (*pMgmtConn == NULL) {
|
if (*pMgmtConn == NULL) {
|
||||||
|
|
|
@ -48,11 +48,9 @@ extern int32_t tsEnableCoreFile;
|
||||||
extern int32_t tsTotalMemoryMB;
|
extern int32_t tsTotalMemoryMB;
|
||||||
extern int32_t tsVersion;
|
extern int32_t tsVersion;
|
||||||
|
|
||||||
extern int tscEmbedded;
|
extern int32_t tscEmbedded;
|
||||||
|
|
||||||
extern int64_t tsMsPerDay[2];
|
extern int64_t tsMsPerDay[2];
|
||||||
|
|
||||||
|
|
||||||
extern char tsMasterIp[];
|
extern char tsMasterIp[];
|
||||||
extern char tsSecondIp[];
|
extern char tsSecondIp[];
|
||||||
extern uint16_t tsMnodeDnodePort;
|
extern uint16_t tsMnodeDnodePort;
|
||||||
|
@ -61,72 +59,65 @@ extern uint16_t tsDnodeShellPort;
|
||||||
extern uint16_t tsDnodeMnodePort;
|
extern uint16_t tsDnodeMnodePort;
|
||||||
extern uint16_t tsSyncPort;
|
extern uint16_t tsSyncPort;
|
||||||
|
|
||||||
extern int tsStatusInterval;
|
extern int32_t tsStatusInterval;
|
||||||
extern int tsShellActivityTimer;
|
extern int32_t tsShellActivityTimer;
|
||||||
extern int tsVnodePeerHBTimer;
|
extern int32_t tsVnodePeerHBTimer;
|
||||||
extern int tsMgmtPeerHBTimer;
|
extern int32_t tsMgmtPeerHBTimer;
|
||||||
extern int tsMeterMetaKeepTimer;
|
extern int32_t tsMeterMetaKeepTimer;
|
||||||
extern int tsMetricMetaKeepTimer;
|
extern int32_t tsMetricMetaKeepTimer;
|
||||||
|
|
||||||
extern float tsNumOfThreadsPerCore;
|
extern float tsNumOfThreadsPerCore;
|
||||||
extern float tsRatioOfQueryThreads;
|
extern float tsRatioOfQueryThreads;
|
||||||
extern char tsPublicIp[];
|
extern char tsPublicIp[];
|
||||||
extern char tsPrivateIp[];
|
extern char tsPrivateIp[];
|
||||||
extern short tsNumOfVnodesPerCore;
|
extern int16_t tsNumOfVnodesPerCore;
|
||||||
extern short tsNumOfTotalVnodes;
|
extern int16_t tsNumOfTotalVnodes;
|
||||||
extern short tsCheckHeaderFile;
|
|
||||||
extern uint32_t tsPublicIpInt;
|
extern uint32_t tsPublicIpInt;
|
||||||
extern short tsAffectedRowsMod;
|
|
||||||
|
|
||||||
extern int tsSessionsPerVnode;
|
extern int32_t tsMaxCacheSize;
|
||||||
extern int tsAverageCacheBlocks;
|
extern int32_t tsSessionsPerVnode;
|
||||||
extern int tsCacheBlockSize;
|
extern int16_t tsDaysPerFile;
|
||||||
|
extern int32_t tsDaysToKeep;
|
||||||
|
extern int32_t tsRowsInFileBlock;
|
||||||
|
extern int16_t tsCommitTime; // seconds
|
||||||
|
extern int32_t tsTimePrecision;
|
||||||
|
extern int16_t tsCompression;
|
||||||
|
extern int16_t tsCommitLog;
|
||||||
|
extern int32_t tsReplications;
|
||||||
|
|
||||||
extern int tsRowsInFileBlock;
|
extern int16_t tsAffectedRowsMod;
|
||||||
extern float tsFileBlockMinPercent;
|
extern int32_t tsNumOfMPeers;
|
||||||
|
extern int32_t tsMaxShellConns;
|
||||||
extern short tsNumOfBlocksPerMeter;
|
extern int32_t tsMaxTables;
|
||||||
extern short tsCommitTime; // seconds
|
|
||||||
extern short tsCommitLog;
|
|
||||||
extern short tsAsyncLog;
|
|
||||||
extern short tsCompression;
|
|
||||||
extern short tsDaysPerFile;
|
|
||||||
extern int tsDaysToKeep;
|
|
||||||
extern int tsReplications;
|
|
||||||
|
|
||||||
extern int tsNumOfMPeers;
|
|
||||||
extern int tsMaxShellConns;
|
|
||||||
extern int tsMaxTables;
|
|
||||||
|
|
||||||
extern char tsLocalIp[];
|
extern char tsLocalIp[];
|
||||||
extern char tsDefaultDB[];
|
extern char tsDefaultDB[];
|
||||||
extern char tsDefaultUser[];
|
extern char tsDefaultUser[];
|
||||||
extern char tsDefaultPass[];
|
extern char tsDefaultPass[];
|
||||||
extern int tsMaxMeterConnections;
|
extern int32_t tsMaxMeterConnections;
|
||||||
extern int tsMaxVnodeConnections;
|
extern int32_t tsMaxVnodeConnections;
|
||||||
extern int tsMaxMgmtConnections;
|
extern int32_t tsMaxMgmtConnections;
|
||||||
|
|
||||||
extern int tsBalanceMonitorInterval;
|
extern int32_t tsBalanceMonitorInterval;
|
||||||
extern int tsBalanceStartInterval;
|
extern int32_t tsBalanceStartInterval;
|
||||||
extern int tsBalancePolicy;
|
extern int32_t tsOfflineThreshold;
|
||||||
extern int tsOfflineThreshold;
|
extern int32_t tsMgmtEqualVnodeNum;
|
||||||
extern int tsMgmtEqualVnodeNum;
|
|
||||||
|
|
||||||
extern int tsEnableHttpModule;
|
extern int32_t tsEnableHttpModule;
|
||||||
extern int tsEnableMonitorModule;
|
extern int32_t tsEnableMonitorModule;
|
||||||
extern int tsRestRowLimit;
|
|
||||||
extern int tsCompressMsgSize;
|
extern int32_t tsRestRowLimit;
|
||||||
extern int tsMaxSQLStringLen;
|
extern int32_t tsMaxSQLStringLen;
|
||||||
extern int tsMaxNumOfOrderedResults;
|
extern int32_t tsCompressMsgSize;
|
||||||
|
extern int32_t tsMaxNumOfOrderedResults;
|
||||||
|
|
||||||
extern char tsSocketType[4];
|
extern char tsSocketType[4];
|
||||||
|
|
||||||
extern int tsTimePrecision;
|
extern int32_t tsMinSlidingTime;
|
||||||
extern int tsMinSlidingTime;
|
extern int32_t tsMinIntervalTime;
|
||||||
extern int tsMinIntervalTime;
|
extern int32_t tsMaxStreamComputDelay;
|
||||||
extern int tsMaxStreamComputDelay;
|
extern int32_t tsStreamCompStartDelay;
|
||||||
extern int tsStreamCompStartDelay;
|
extern int32_t tsStreamCompRetryDelay;
|
||||||
extern int tsStreamCompRetryDelay;
|
|
||||||
extern float tsStreamComputDelayRatio; // the delayed computing ration of the whole time window
|
extern float tsStreamComputDelayRatio; // the delayed computing ration of the whole time window
|
||||||
|
|
||||||
extern int tsProjectExecInterval;
|
extern int tsProjectExecInterval;
|
||||||
|
@ -134,21 +125,22 @@ extern int64_t tsMaxRetentWindow;
|
||||||
|
|
||||||
extern char tsHttpIp[];
|
extern char tsHttpIp[];
|
||||||
extern uint16_t tsHttpPort;
|
extern uint16_t tsHttpPort;
|
||||||
extern int tsHttpCacheSessions;
|
extern int32_t tsHttpCacheSessions;
|
||||||
extern int tsHttpSessionExpire;
|
extern int32_t tsHttpSessionExpire;
|
||||||
extern int tsHttpMaxThreads;
|
extern int32_t tsHttpMaxThreads;
|
||||||
extern int tsHttpEnableCompress;
|
extern int32_t tsHttpEnableCompress;
|
||||||
extern int tsHttpEnableRecordSql;
|
extern int32_t tsHttpEnableRecordSql;
|
||||||
extern int tsTelegrafUseFieldNum;
|
extern int32_t tsTelegrafUseFieldNum;
|
||||||
|
|
||||||
extern int tsTscEnableRecordSql;
|
extern int32_t tsTscEnableRecordSql;
|
||||||
extern int tsAnyIp;
|
extern int32_t tsAnyIp;
|
||||||
|
|
||||||
extern char tsMonitorDbName[];
|
extern char tsMonitorDbName[];
|
||||||
extern char tsInternalPass[];
|
extern char tsInternalPass[];
|
||||||
extern int tsMonitorInterval;
|
extern int32_t tsMonitorInterval;
|
||||||
|
|
||||||
extern int tsNumOfLogLines;
|
extern int32_t tsAsyncLog;
|
||||||
|
extern int32_t tsNumOfLogLines;
|
||||||
extern int32_t ddebugFlag;
|
extern int32_t ddebugFlag;
|
||||||
extern int32_t mdebugFlag;
|
extern int32_t mdebugFlag;
|
||||||
extern int32_t cdebugFlag;
|
extern int32_t cdebugFlag;
|
||||||
|
|
|
@ -74,8 +74,8 @@ int32_t tsVnodePeerHBTimer = 1; // second
|
||||||
int32_t tsMgmtPeerHBTimer = 1; // second
|
int32_t tsMgmtPeerHBTimer = 1; // second
|
||||||
int32_t tsMeterMetaKeepTimer = 7200; // second
|
int32_t tsMeterMetaKeepTimer = 7200; // second
|
||||||
int32_t tsMetricMetaKeepTimer = 600; // second
|
int32_t tsMetricMetaKeepTimer = 600; // second
|
||||||
int tsRpcTimer = 300;
|
int32_t tsRpcTimer = 300;
|
||||||
int tsRpcMaxTime = 600; // seconds;
|
int32_t tsRpcMaxTime = 600; // seconds;
|
||||||
|
|
||||||
float tsNumOfThreadsPerCore = 1.0;
|
float tsNumOfThreadsPerCore = 1.0;
|
||||||
float tsRatioOfQueryThreads = 0.5;
|
float tsRatioOfQueryThreads = 0.5;
|
||||||
|
@ -83,7 +83,6 @@ char tsPublicIp[TSDB_IPv4ADDR_LEN] = {0};
|
||||||
char tsPrivateIp[TSDB_IPv4ADDR_LEN] = {0};
|
char tsPrivateIp[TSDB_IPv4ADDR_LEN] = {0};
|
||||||
int16_t tsNumOfVnodesPerCore = 8;
|
int16_t tsNumOfVnodesPerCore = 8;
|
||||||
int16_t tsNumOfTotalVnodes = TSDB_INVALID_VNODE_NUM;
|
int16_t tsNumOfTotalVnodes = TSDB_INVALID_VNODE_NUM;
|
||||||
int16_t tsCheckHeaderFile = 0;
|
|
||||||
|
|
||||||
#ifdef _TD_ARM_32_
|
#ifdef _TD_ARM_32_
|
||||||
int32_t tsSessionsPerVnode = 100;
|
int32_t tsSessionsPerVnode = 100;
|
||||||
|
@ -91,26 +90,22 @@ int32_t tsSessionsPerVnode = 100;
|
||||||
int32_t tsSessionsPerVnode = 1000;
|
int32_t tsSessionsPerVnode = 1000;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int32_t tsCacheBlockSize = 16384; // 256 columns
|
int32_t tsMaxCacheSize = 64; //64M
|
||||||
int32_t tsAverageCacheBlocks = TSDB_DEFAULT_AVG_BLOCKS;
|
int16_t tsDaysPerFile = 10;
|
||||||
|
int32_t tsDaysToKeep = 3650;
|
||||||
|
int32_t tsRowsInFileBlock = 4096;
|
||||||
|
int16_t tsCommitTime = 3600; // seconds
|
||||||
|
int32_t tsTimePrecision = TSDB_TIME_PRECISION_MILLI;
|
||||||
|
int16_t tsCompression = TSDB_MAX_COMPRESSION_LEVEL;
|
||||||
|
int16_t tsCommitLog = 1;
|
||||||
|
int32_t tsReplications = TSDB_REPLICA_MIN_NUM;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Change the meaning of affected rows:
|
* Change the meaning of affected rows:
|
||||||
* 0: affected rows not include those duplicate records
|
* 0: affected rows not include those duplicate records
|
||||||
* 1: affected rows include those duplicate records
|
* 1: affected rows include those duplicate records
|
||||||
*/
|
*/
|
||||||
int16_t tsAffectedRowsMod = 0;
|
int16_t tsAffectedRowsMod = 0;
|
||||||
|
|
||||||
int32_t tsRowsInFileBlock = 4096;
|
|
||||||
float tsFileBlockMinPercent = 0.05;
|
|
||||||
|
|
||||||
int16_t tsNumOfBlocksPerMeter = 100;
|
|
||||||
int16_t tsCommitTime = 3600; // seconds
|
|
||||||
int16_t tsCommitLog = 1;
|
|
||||||
int16_t tsCompression = TSDB_MAX_COMPRESSION_LEVEL;
|
|
||||||
int16_t tsDaysPerFile = 10;
|
|
||||||
int32_t tsDaysToKeep = 3650;
|
|
||||||
int32_t tsReplications = TSDB_REPLICA_MIN_NUM;
|
|
||||||
|
|
||||||
int32_t tsNumOfMPeers = 3;
|
int32_t tsNumOfMPeers = 3;
|
||||||
int32_t tsMaxShellConns = 2000;
|
int32_t tsMaxShellConns = 2000;
|
||||||
int32_t tsMaxTables = 100000;
|
int32_t tsMaxTables = 100000;
|
||||||
|
@ -125,15 +120,16 @@ int32_t tsMaxVnodeConnections = 10000;
|
||||||
|
|
||||||
int32_t tsBalanceMonitorInterval = 2; // seconds
|
int32_t tsBalanceMonitorInterval = 2; // seconds
|
||||||
int32_t tsBalanceStartInterval = 300; // seconds
|
int32_t tsBalanceStartInterval = 300; // seconds
|
||||||
int32_t tsBalancePolicy = 0; // 1-use sys.montor
|
|
||||||
int32_t tsOfflineThreshold = 864000; // seconds 10days
|
int32_t tsOfflineThreshold = 864000; // seconds 10days
|
||||||
int32_t tsMgmtEqualVnodeNum = 4;
|
int32_t tsMgmtEqualVnodeNum = 4;
|
||||||
|
|
||||||
int32_t tsEnableHttpModule = 1;
|
int32_t tsEnableHttpModule = 1;
|
||||||
int32_t tsEnableMonitorModule = 0;
|
int32_t tsEnableMonitorModule = 0;
|
||||||
|
|
||||||
int32_t tsRestRowLimit = 10240;
|
int32_t tsRestRowLimit = 10240;
|
||||||
int32_t tsMaxSQLStringLen = TSDB_MAX_SQL_LEN;
|
int32_t tsMaxSQLStringLen = TSDB_MAX_SQL_LEN;
|
||||||
|
|
||||||
|
int32_t tsNumOfLogLines = 10000000;
|
||||||
int32_t mdebugFlag = 135;
|
int32_t mdebugFlag = 135;
|
||||||
int32_t sdbDebugFlag = 135;
|
int32_t sdbDebugFlag = 135;
|
||||||
int32_t ddebugFlag = 131;
|
int32_t ddebugFlag = 131;
|
||||||
|
@ -146,7 +142,6 @@ int32_t qdebugFlag = 131;
|
||||||
int32_t rpcDebugFlag = 131;
|
int32_t rpcDebugFlag = 131;
|
||||||
int32_t uDebugFlag = 131;
|
int32_t uDebugFlag = 131;
|
||||||
int32_t debugFlag = 131;
|
int32_t debugFlag = 131;
|
||||||
int tsNumOfLogLines = 10000000;
|
|
||||||
|
|
||||||
// the maximum number of results for projection query on super table that are returned from
|
// the maximum number of results for projection query on super table that are returned from
|
||||||
// one virtual node, to order according to timestamp
|
// one virtual node, to order according to timestamp
|
||||||
|
@ -165,9 +160,6 @@ int32_t tsCompressMsgSize = -1;
|
||||||
// use UDP by default[option: udp, tcp]
|
// use UDP by default[option: udp, tcp]
|
||||||
char tsSocketType[4] = "udp";
|
char tsSocketType[4] = "udp";
|
||||||
|
|
||||||
// time precision, millisecond by default
|
|
||||||
int32_t tsTimePrecision = TSDB_TIME_PRECISION_MILLI;
|
|
||||||
|
|
||||||
// 10 ms for sliding time, the value will changed in case of time precision changed
|
// 10 ms for sliding time, the value will changed in case of time precision changed
|
||||||
int32_t tsMinSlidingTime = 10;
|
int32_t tsMinSlidingTime = 10;
|
||||||
|
|
||||||
|
@ -747,11 +739,11 @@ static void doInitGlobalConfig() {
|
||||||
taosInitConfigOption(cfg);
|
taosInitConfigOption(cfg);
|
||||||
|
|
||||||
cfg.option = "cache";
|
cfg.option = "cache";
|
||||||
cfg.ptr = &tsCacheBlockSize;
|
cfg.ptr = &tsMaxCacheSize;
|
||||||
cfg.valType = TAOS_CFG_VTYPE_INT32;
|
cfg.valType = TAOS_CFG_VTYPE_INT32;
|
||||||
cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_SHOW;
|
cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_SHOW;
|
||||||
cfg.minValue = 100;
|
cfg.minValue = 1;
|
||||||
cfg.maxValue = 1048576;
|
cfg.maxValue = 100000;
|
||||||
cfg.ptrLength = 0;
|
cfg.ptrLength = 0;
|
||||||
cfg.unitType = TAOS_CFG_UTYPE_BYTE;
|
cfg.unitType = TAOS_CFG_UTYPE_BYTE;
|
||||||
taosInitConfigOption(cfg);
|
taosInitConfigOption(cfg);
|
||||||
|
@ -766,36 +758,6 @@ static void doInitGlobalConfig() {
|
||||||
cfg.unitType = TAOS_CFG_UTYPE_NONE;
|
cfg.unitType = TAOS_CFG_UTYPE_NONE;
|
||||||
taosInitConfigOption(cfg);
|
taosInitConfigOption(cfg);
|
||||||
|
|
||||||
cfg.option = "fileBlockMinPercent";
|
|
||||||
cfg.ptr = &tsFileBlockMinPercent;
|
|
||||||
cfg.valType = TAOS_CFG_VTYPE_FLOAT;
|
|
||||||
cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG;
|
|
||||||
cfg.minValue = 0;
|
|
||||||
cfg.maxValue = 1.0;
|
|
||||||
cfg.ptrLength = 0;
|
|
||||||
cfg.unitType = TAOS_CFG_UTYPE_NONE;
|
|
||||||
taosInitConfigOption(cfg);
|
|
||||||
|
|
||||||
cfg.option = "ablocks";
|
|
||||||
cfg.ptr = &tsAverageCacheBlocks;
|
|
||||||
cfg.valType = TAOS_CFG_VTYPE_INT32;
|
|
||||||
cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_SHOW;
|
|
||||||
cfg.minValue = TSDB_MIN_AVG_BLOCKS;
|
|
||||||
cfg.maxValue = TSDB_MAX_AVG_BLOCKS;
|
|
||||||
cfg.ptrLength = 0;
|
|
||||||
cfg.unitType = TAOS_CFG_UTYPE_NONE;
|
|
||||||
taosInitConfigOption(cfg);
|
|
||||||
|
|
||||||
cfg.option = "tblocks";
|
|
||||||
cfg.ptr = &tsNumOfBlocksPerMeter;
|
|
||||||
cfg.valType = TAOS_CFG_VTYPE_INT16;
|
|
||||||
cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_SHOW;
|
|
||||||
cfg.minValue = 32;
|
|
||||||
cfg.maxValue = 4096;
|
|
||||||
cfg.ptrLength = 0;
|
|
||||||
cfg.unitType = TAOS_CFG_UTYPE_NONE;
|
|
||||||
taosInitConfigOption(cfg);
|
|
||||||
|
|
||||||
// login configs
|
// login configs
|
||||||
cfg.option = "defaultDB";
|
cfg.option = "defaultDB";
|
||||||
cfg.ptr = tsDefaultDB;
|
cfg.ptr = tsDefaultDB;
|
||||||
|
|
|
@ -316,6 +316,9 @@ class CTaosInterface(object):
|
||||||
blocks = [None] * len(fields)
|
blocks = [None] * len(fields)
|
||||||
for i in range(len(fields)):
|
for i in range(len(fields)):
|
||||||
data = ctypes.cast(pblock, ctypes.POINTER(ctypes.c_void_p))[i]
|
data = ctypes.cast(pblock, ctypes.POINTER(ctypes.c_void_p))[i]
|
||||||
|
if data == None:
|
||||||
|
blocks[i] = [None] * num_of_rows
|
||||||
|
continue
|
||||||
|
|
||||||
if fields[i]['type'] not in _CONVERT_FUNC:
|
if fields[i]['type'] not in _CONVERT_FUNC:
|
||||||
raise DatabaseError("Invalid data type returned from database")
|
raise DatabaseError("Invalid data type returned from database")
|
||||||
|
|
|
@ -316,6 +316,9 @@ class CTaosInterface(object):
|
||||||
blocks = [None] * len(fields)
|
blocks = [None] * len(fields)
|
||||||
for i in range(len(fields)):
|
for i in range(len(fields)):
|
||||||
data = ctypes.cast(pblock, ctypes.POINTER(ctypes.c_void_p))[i]
|
data = ctypes.cast(pblock, ctypes.POINTER(ctypes.c_void_p))[i]
|
||||||
|
if data == None:
|
||||||
|
blocks[i] = [None] * num_of_rows
|
||||||
|
continue
|
||||||
|
|
||||||
if fields[i]['type'] not in _CONVERT_FUNC:
|
if fields[i]['type'] not in _CONVERT_FUNC:
|
||||||
raise DatabaseError("Invalid data type returned from database")
|
raise DatabaseError("Invalid data type returned from database")
|
||||||
|
|
|
@ -316,6 +316,9 @@ class CTaosInterface(object):
|
||||||
blocks = [None] * len(fields)
|
blocks = [None] * len(fields)
|
||||||
for i in range(len(fields)):
|
for i in range(len(fields)):
|
||||||
data = ctypes.cast(pblock, ctypes.POINTER(ctypes.c_void_p))[i]
|
data = ctypes.cast(pblock, ctypes.POINTER(ctypes.c_void_p))[i]
|
||||||
|
if data == None:
|
||||||
|
blocks[i] = [None] * num_of_rows
|
||||||
|
continue
|
||||||
|
|
||||||
if fields[i]['type'] not in _CONVERT_FUNC:
|
if fields[i]['type'] not in _CONVERT_FUNC:
|
||||||
raise DatabaseError("Invalid data type returned from database")
|
raise DatabaseError("Invalid data type returned from database")
|
||||||
|
|
|
@ -316,6 +316,9 @@ class CTaosInterface(object):
|
||||||
blocks = [None] * len(fields)
|
blocks = [None] * len(fields)
|
||||||
for i in range(len(fields)):
|
for i in range(len(fields)):
|
||||||
data = ctypes.cast(pblock, ctypes.POINTER(ctypes.c_void_p))[i]
|
data = ctypes.cast(pblock, ctypes.POINTER(ctypes.c_void_p))[i]
|
||||||
|
if data == None:
|
||||||
|
blocks[i] = [None] * num_of_rows
|
||||||
|
continue
|
||||||
|
|
||||||
if fields[i]['type'] not in _CONVERT_FUNC:
|
if fields[i]['type'] not in _CONVERT_FUNC:
|
||||||
raise DatabaseError("Invalid data type returned from database")
|
raise DatabaseError("Invalid data type returned from database")
|
||||||
|
|
|
@ -39,10 +39,6 @@ extern int32_t ddebugFlag;
|
||||||
#define dPrint(...) \
|
#define dPrint(...) \
|
||||||
{ taosPrintLog("DND ", 255, __VA_ARGS__); }
|
{ taosPrintLog("DND ", 255, __VA_ARGS__); }
|
||||||
|
|
||||||
#define dLError(...) taosLogError(__VA_ARGS__) dError(__VA_ARGS__)
|
|
||||||
#define dLWarn(...) taosLogWarn(__VA_ARGS__) dWarn(__VA_ARGS__)
|
|
||||||
#define dLPrint(...) taosLogPrint(__VA_ARGS__) dPrint(__VA_ARGS__)
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -59,6 +59,19 @@ void dnodeUpdateIpSet(void *ahandle, SRpcIpSet *pIpSet) {
|
||||||
tsMnodeIpSet = *pIpSet;
|
tsMnodeIpSet = *pIpSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void dnodeGetMnodeIpSet(void *ipSetRaw, bool usePublicIp) {
|
||||||
|
SRpcIpSet *ipSet = ipSetRaw;
|
||||||
|
ipSet->numOfIps = tsMnodeInfos.nodeNum;
|
||||||
|
ipSet->inUse = tsMnodeInfos.inUse;
|
||||||
|
for (int32_t i = 0; i < tsMnodeInfos.nodeNum; ++i) {
|
||||||
|
if (usePublicIp) {
|
||||||
|
ipSet->ip[i] = tsMnodeInfos.nodeInfos[i].nodeIp;
|
||||||
|
} else {
|
||||||
|
ipSet->ip[i] = tsMnodeInfos.nodeInfos[i].nodeIp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int32_t dnodeInitMClient() {
|
int32_t dnodeInitMClient() {
|
||||||
dnodeReadDnodeCfg();
|
dnodeReadDnodeCfg();
|
||||||
tsRebootTime = taosGetTimestampSec();
|
tsRebootTime = taosGetTimestampSec();
|
||||||
|
@ -138,7 +151,9 @@ static void dnodeProcessRspFromMnode(SRpcMsg *pMsg) {
|
||||||
if (tsDnodeProcessMgmtRspFp[pMsg->msgType]) {
|
if (tsDnodeProcessMgmtRspFp[pMsg->msgType]) {
|
||||||
(*tsDnodeProcessMgmtRspFp[pMsg->msgType])(pMsg);
|
(*tsDnodeProcessMgmtRspFp[pMsg->msgType])(pMsg);
|
||||||
} else {
|
} else {
|
||||||
dError("%s is not processed in mnode rpc client", taosMsg[pMsg->msgType]);
|
dError("%s is not processed in dnode mclient", taosMsg[pMsg->msgType]);
|
||||||
|
SRpcMsg rpcRsp = {.pCont = 0, .contLen = 0, .code = TSDB_CODE_OPS_NOT_SUPPORT, .handle = pMsg->handle};
|
||||||
|
rpcSendResponse(&rpcRsp);
|
||||||
}
|
}
|
||||||
|
|
||||||
rpcFreeCont(pMsg->pCont);
|
rpcFreeCont(pMsg->pCont);
|
||||||
|
|
|
@ -88,7 +88,7 @@ static void dnodeProcessMsgFromMnode(SRpcMsg *pMsg) {
|
||||||
if (dnodeProcessMgmtMsgFp[pMsg->msgType]) {
|
if (dnodeProcessMgmtMsgFp[pMsg->msgType]) {
|
||||||
(*dnodeProcessMgmtMsgFp[pMsg->msgType])(pMsg);
|
(*dnodeProcessMgmtMsgFp[pMsg->msgType])(pMsg);
|
||||||
} else {
|
} else {
|
||||||
dError("%s is not processed in mserver", taosMsg[pMsg->msgType]);
|
dError("%s is not processed in dnode mserver", taosMsg[pMsg->msgType]);
|
||||||
rspMsg.code = TSDB_CODE_MSG_NOT_PROCESSED;
|
rspMsg.code = TSDB_CODE_MSG_NOT_PROCESSED;
|
||||||
rpcSendResponse(&rspMsg);
|
rpcSendResponse(&rspMsg);
|
||||||
rpcFreeCont(pMsg->pCont);
|
rpcFreeCont(pMsg->pCont);
|
||||||
|
|
|
@ -90,7 +90,7 @@ void dnodeCleanUpModules() {
|
||||||
int32_t dnodeInitModules() {
|
int32_t dnodeInitModules() {
|
||||||
dnodeAllocModules();
|
dnodeAllocModules();
|
||||||
|
|
||||||
for (int32_t module = 0; module < TSDB_MOD_MAX; ++module) {
|
for (EModuleType module = 0; module < TSDB_MOD_MAX; ++module) {
|
||||||
if (tsModule[module].initFp) {
|
if (tsModule[module].initFp) {
|
||||||
if ((*tsModule[module].initFp)() != 0) {
|
if ((*tsModule[module].initFp)() != 0) {
|
||||||
dError("failed to init module:%s", tsModule[module].name);
|
dError("failed to init module:%s", tsModule[module].name);
|
||||||
|
@ -103,7 +103,7 @@ int32_t dnodeInitModules() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void dnodeStartModules() {
|
void dnodeStartModules() {
|
||||||
for (int32_t module = 1; module < TSDB_MOD_MAX; ++module) {
|
for (EModuleType module = 1; module < TSDB_MOD_MAX; ++module) {
|
||||||
if (tsModule[module].enable && tsModule[module].startFp) {
|
if (tsModule[module].enable && tsModule[module].startFp) {
|
||||||
if ((*tsModule[module].startFp)() != 0) {
|
if ((*tsModule[module].startFp)() != 0) {
|
||||||
dError("failed to start module:%s", tsModule[module].name);
|
dError("failed to start module:%s", tsModule[module].name);
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include "taosmsg.h"
|
#include "taosmsg.h"
|
||||||
#include "trpc.h"
|
#include "trpc.h"
|
||||||
#include "tglobal.h"
|
#include "tglobal.h"
|
||||||
|
#include "http.h"
|
||||||
#include "dnode.h"
|
#include "dnode.h"
|
||||||
#include "dnodeLog.h"
|
#include "dnodeLog.h"
|
||||||
#include "dnodeRead.h"
|
#include "dnodeRead.h"
|
||||||
|
@ -29,7 +30,7 @@
|
||||||
static void (*dnodeProcessShellMsgFp[TSDB_MSG_TYPE_MAX])(SRpcMsg *);
|
static void (*dnodeProcessShellMsgFp[TSDB_MSG_TYPE_MAX])(SRpcMsg *);
|
||||||
static void dnodeProcessMsgFromShell(SRpcMsg *pMsg);
|
static void dnodeProcessMsgFromShell(SRpcMsg *pMsg);
|
||||||
static int dnodeRetrieveUserAuthInfo(char *user, char *spi, char *encrypt, char *secret, char *ckey);
|
static int dnodeRetrieveUserAuthInfo(char *user, char *spi, char *encrypt, char *secret, char *ckey);
|
||||||
static void *tsDnodeShellRpc = NULL;
|
static void * tsDnodeShellRpc = NULL;
|
||||||
static int32_t tsDnodeQueryReqNum = 0;
|
static int32_t tsDnodeQueryReqNum = 0;
|
||||||
static int32_t tsDnodeSubmitReqNum = 0;
|
static int32_t tsDnodeSubmitReqNum = 0;
|
||||||
|
|
||||||
|
@ -110,7 +111,7 @@ static int dnodeRetrieveUserAuthInfo(char *user, char *spi, char *encrypt, char
|
||||||
SDnodeStatisInfo dnodeGetStatisInfo() {
|
SDnodeStatisInfo dnodeGetStatisInfo() {
|
||||||
SDnodeStatisInfo info = {0};
|
SDnodeStatisInfo info = {0};
|
||||||
if (dnodeGetRunStatus() == TSDB_DNODE_RUN_STATUS_RUNING) {
|
if (dnodeGetRunStatus() == TSDB_DNODE_RUN_STATUS_RUNING) {
|
||||||
//info.httpReqNum = httpGetReqCount();
|
info.httpReqNum = httpGetReqCount();
|
||||||
info.queryReqNum = atomic_exchange_32(&tsDnodeQueryReqNum, 0);
|
info.queryReqNum = atomic_exchange_32(&tsDnodeQueryReqNum, 0);
|
||||||
info.submitReqNum = atomic_exchange_32(&tsDnodeSubmitReqNum, 0);
|
info.submitReqNum = atomic_exchange_32(&tsDnodeSubmitReqNum, 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,6 +43,7 @@ void dnodeSendRpcWriteRsp(void *pVnode, void *param, int32_t code);
|
||||||
|
|
||||||
bool dnodeIsFirstDeploy();
|
bool dnodeIsFirstDeploy();
|
||||||
uint32_t dnodeGetMnodeMasteIp();
|
uint32_t dnodeGetMnodeMasteIp();
|
||||||
|
void dnodeGetMnodeIpSet(void *ipSet, bool usePublicIp);
|
||||||
void * dnodeGetMnodeInfos();
|
void * dnodeGetMnodeInfos();
|
||||||
int32_t dnodeGetDnodeId();
|
int32_t dnodeGetDnodeId();
|
||||||
|
|
||||||
|
|
|
@ -22,10 +22,38 @@ extern "C" {
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char * acctId;
|
||||||
|
int64_t currentPointsPerSecond;
|
||||||
|
int64_t maxPointsPerSecond;
|
||||||
|
int64_t totalTimeSeries;
|
||||||
|
int64_t maxTimeSeries;
|
||||||
|
int64_t totalStorage;
|
||||||
|
int64_t maxStorage;
|
||||||
|
int64_t totalQueryTime;
|
||||||
|
int64_t maxQueryTime;
|
||||||
|
int64_t totalInbound;
|
||||||
|
int64_t maxInbound;
|
||||||
|
int64_t totalOutbound;
|
||||||
|
int64_t maxOutbound;
|
||||||
|
int64_t totalDbs;
|
||||||
|
int64_t maxDbs;
|
||||||
|
int64_t totalUsers;
|
||||||
|
int64_t maxUsers;
|
||||||
|
int64_t totalStreams;
|
||||||
|
int64_t maxStreams;
|
||||||
|
int64_t totalConns;
|
||||||
|
int64_t maxConns;
|
||||||
|
int8_t accessState;
|
||||||
|
} SAcctMonitorObj;
|
||||||
|
|
||||||
int32_t monitorInitSystem();
|
int32_t monitorInitSystem();
|
||||||
int32_t monitorStartSystem();
|
int32_t monitorStartSystem();
|
||||||
void monitorStopSystem();
|
void monitorStopSystem();
|
||||||
void monitorCleanUpSystem();
|
void monitorCleanUpSystem();
|
||||||
|
void monitorSaveAcctLog(SAcctMonitorObj *pMonObj);
|
||||||
|
void monitorSaveLog(int32_t level, const char *const format, ...);
|
||||||
|
void monitorExecuteSQL(char *sql);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -218,9 +218,6 @@ void tsDataSwap(void *pLeft, void *pRight, int32_t type, int32_t size);
|
||||||
#define TSDB_MAX_MGMT_IPS (TSDB_MAX_MPEERS+1)
|
#define TSDB_MAX_MGMT_IPS (TSDB_MAX_MPEERS+1)
|
||||||
|
|
||||||
#define TSDB_REPLICA_MIN_NUM 1
|
#define TSDB_REPLICA_MIN_NUM 1
|
||||||
/*
|
|
||||||
* this is defined in CMakeList.txt
|
|
||||||
*/
|
|
||||||
#define TSDB_REPLICA_MAX_NUM 3
|
#define TSDB_REPLICA_MAX_NUM 3
|
||||||
|
|
||||||
#define TSDB_TBNAME_COLUMN_INDEX (-1)
|
#define TSDB_TBNAME_COLUMN_INDEX (-1)
|
||||||
|
@ -242,8 +239,8 @@ void tsDataSwap(void *pLeft, void *pRight, int32_t type, int32_t size);
|
||||||
#define TSDB_MIN_ROWS_IN_FILEBLOCK 200
|
#define TSDB_MIN_ROWS_IN_FILEBLOCK 200
|
||||||
#define TSDB_MAX_ROWS_IN_FILEBLOCK 500000
|
#define TSDB_MAX_ROWS_IN_FILEBLOCK 500000
|
||||||
|
|
||||||
#define TSDB_MIN_CACHE_BLOCK_SIZE 100
|
#define TSDB_MIN_CACHE_BLOCK_SIZE 1
|
||||||
#define TSDB_MAX_CACHE_BLOCK_SIZE 104857600
|
#define TSDB_MAX_CACHE_BLOCK_SIZE 1000000
|
||||||
|
|
||||||
#define TSDB_MIN_CACHE_BLOCKS 100
|
#define TSDB_MIN_CACHE_BLOCKS 100
|
||||||
#define TSDB_MAX_CACHE_BLOCKS 409600
|
#define TSDB_MAX_CACHE_BLOCKS 409600
|
||||||
|
|
|
@ -99,71 +99,71 @@ TAOS_DEFINE_ERROR(TSDB_CODE_NOT_ACTIVE_TABLE, 0, 205, "not active tabl
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_TABLE_ID_MISMATCH, 0, 206, "table id mismatch")
|
TAOS_DEFINE_ERROR(TSDB_CODE_TABLE_ID_MISMATCH, 0, 206, "table id mismatch")
|
||||||
|
|
||||||
// dnode & mnode
|
// dnode & mnode
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_NO_ENOUGH_DNODES, 0, 300, "no enough dnodes")
|
TAOS_DEFINE_ERROR(TSDB_CODE_NO_ENOUGH_DNODES, 0, 250, "no enough dnodes")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_DNODE_ALREADY_EXIST, 0, 301, "dnode already exist")
|
TAOS_DEFINE_ERROR(TSDB_CODE_DNODE_ALREADY_EXIST, 0, 251, "dnode already exist")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_DNODE_NOT_EXIST, 0, 302, "dnode not exist")
|
TAOS_DEFINE_ERROR(TSDB_CODE_DNODE_NOT_EXIST, 0, 252, "dnode not exist")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_NO_MASTER, 0, 303, "no master")
|
TAOS_DEFINE_ERROR(TSDB_CODE_NO_MASTER, 0, 253, "no master")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_NO_REMOVE_MASTER, 0, 304, "no remove master")
|
TAOS_DEFINE_ERROR(TSDB_CODE_NO_REMOVE_MASTER, 0, 254, "no remove master")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_QUERY_ID, 0, 305, "invalid query id")
|
TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_QUERY_ID, 0, 255, "invalid query id")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_STREAM_ID, 0, 306, "invalid stream id")
|
TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_STREAM_ID, 0, 256, "invalid stream id")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_CONNECTION, 0, 307, "invalid connection")
|
TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_CONNECTION, 0, 257, "invalid connection")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_SDB_ERROR, 0, 308, "sdb error")
|
TAOS_DEFINE_ERROR(TSDB_CODE_SDB_ERROR, 0, 258, "sdb error")
|
||||||
|
|
||||||
// acct
|
// acct
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_ACCT_ALREADY_EXIST, 0, 400, "accounts already exist")
|
TAOS_DEFINE_ERROR(TSDB_CODE_ACCT_ALREADY_EXIST, 0, 300, "accounts already exist")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_ACCT, 0, 401, "invalid account")
|
TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_ACCT, 0, 301, "invalid account")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_ACCT_PARAMETER, 0, 402, "invalid account parameter")
|
TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_ACCT_PARAMETER, 0, 302, "invalid account parameter")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_TOO_MANY_ACCTS, 0, 403, "too many accounts")
|
TAOS_DEFINE_ERROR(TSDB_CODE_TOO_MANY_ACCTS, 0, 303, "too many accounts")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_TOO_MANY_USERS, 0, 404, "too many users")
|
TAOS_DEFINE_ERROR(TSDB_CODE_TOO_MANY_USERS, 0, 304, "too many users")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_TOO_MANY_TABLES, 0, 405, "too many tables")
|
TAOS_DEFINE_ERROR(TSDB_CODE_TOO_MANY_TABLES, 0, 305, "too many tables")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_TOO_MANY_DATABASES, 0, 406, "too many databases")
|
TAOS_DEFINE_ERROR(TSDB_CODE_TOO_MANY_DATABASES, 0, 306, "too many databases")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_TOO_MANY_TIME_SERIES, 0, 407, "not enough time series")
|
TAOS_DEFINE_ERROR(TSDB_CODE_TOO_MANY_TIME_SERIES, 0, 307, "not enough time series")
|
||||||
|
|
||||||
// grant
|
// grant
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_AUTH_FAILURE, 0, 400, "auth failure")
|
TAOS_DEFINE_ERROR(TSDB_CODE_AUTH_FAILURE, 0, 350, "auth failure")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_NO_RIGHTS, 0, 401, "no rights")
|
TAOS_DEFINE_ERROR(TSDB_CODE_NO_RIGHTS, 0, 351, "no rights")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_NO_WRITE_ACCESS, 0, 402, "no write access")
|
TAOS_DEFINE_ERROR(TSDB_CODE_NO_WRITE_ACCESS, 0, 352, "no write access")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_NO_READ_ACCESS, 0, 403, "no read access")
|
TAOS_DEFINE_ERROR(TSDB_CODE_NO_READ_ACCESS, 0, 353, "no read access")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_EXPIRED, 0, 404, "grant expired")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_EXPIRED, 0, 354, "grant expired")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_DNODE_LIMITED, 0, 405, "grant dnode limited")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_DNODE_LIMITED, 0, 355, "grant dnode limited")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_ACCT_LIMITED, 0, 406, "grant account limited")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_ACCT_LIMITED, 0, 356, "grant account limited")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_TIMESERIES_LIMITED, 0, 407, "grant timeseries limited")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_TIMESERIES_LIMITED, 0, 357, "grant timeseries limited")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_DB_LIMITED, 0, 408, "grant db limited")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_DB_LIMITED, 0, 358, "grant db limited")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_USER_LIMITED, 0, 409, "grant user limited")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_USER_LIMITED, 0, 359, "grant user limited")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_CONN_LIMITED, 0, 410, "grant conn limited")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_CONN_LIMITED, 0, 360, "grant conn limited")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_STREAM_LIMITED, 0, 411, "grant stream limited")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_STREAM_LIMITED, 0, 361, "grant stream limited")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_SPEED_LIMITED, 0, 412, "grant speed limited")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_SPEED_LIMITED, 0, 362, "grant speed limited")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_STORAGE_LIMITED, 0, 413, "grant storage limited")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_STORAGE_LIMITED, 0, 363, "grant storage limited")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_QUERYTIME_LIMITED, 0, 414, "grant query time limited")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_QUERYTIME_LIMITED, 0, 364, "grant query time limited")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_CPU_LIMITED, 0, 415, "grant cpu limited")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_CPU_LIMITED, 0, 365, "grant cpu limited")
|
||||||
|
|
||||||
// server
|
// server
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_VGROUP_ID, 0, 500, "invalid vgroup id")
|
TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_VGROUP_ID, 0, 400, "invalid vgroup id")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_VNODE_ID, 0, 501, "invalid vnode id")
|
TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_VNODE_ID, 0, 401, "invalid vnode id")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_NOT_ACTIVE_VNODE, 0, 502, "not active vnode")
|
TAOS_DEFINE_ERROR(TSDB_CODE_NOT_ACTIVE_VNODE, 0, 402, "not active vnode")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_VG_INIT_FAILED, 0, 503, "vg init failed")
|
TAOS_DEFINE_ERROR(TSDB_CODE_VG_INIT_FAILED, 0, 403, "vg init failed")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_SERV_NO_DISKSPACE, 0, 504, "server no diskspace")
|
TAOS_DEFINE_ERROR(TSDB_CODE_SERV_NO_DISKSPACE, 0, 404, "server no diskspace")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_SERV_OUT_OF_MEMORY, 0, 505, "server out of memory")
|
TAOS_DEFINE_ERROR(TSDB_CODE_SERV_OUT_OF_MEMORY, 0, 405, "server out of memory")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_NO_DISK_PERMISSIONS, 0, 506, "no disk permissions")
|
TAOS_DEFINE_ERROR(TSDB_CODE_NO_DISK_PERMISSIONS, 0, 406, "no disk permissions")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_FILE_CORRUPTED, 0, 507, "file corrupted")
|
TAOS_DEFINE_ERROR(TSDB_CODE_FILE_CORRUPTED, 0, 407, "file corrupted")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_MEMORY_CORRUPTED, 0, 508, "memory corrupted")
|
TAOS_DEFINE_ERROR(TSDB_CODE_MEMORY_CORRUPTED, 0, 408, "memory corrupted")
|
||||||
|
|
||||||
// client
|
// client
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_CLIENT_VERSION, 0, 601, "invalid client version")
|
TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_CLIENT_VERSION, 0, 451, "invalid client version")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_CLI_OUT_OF_MEMORY, 0, 602, "client out of memory")
|
TAOS_DEFINE_ERROR(TSDB_CODE_CLI_OUT_OF_MEMORY, 0, 452, "client out of memory")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_CLI_NO_DISKSPACE, 0, 603, "client no disk space")
|
TAOS_DEFINE_ERROR(TSDB_CODE_CLI_NO_DISKSPACE, 0, 453, "client no disk space")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_TIME_STAMP, 0, 604, "invalid timestamp")
|
TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_TIME_STAMP, 0, 454, "invalid timestamp")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_SQL, 0, 605, "invalid sql")
|
TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_SQL, 0, 455, "invalid sql")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_QUERY_CACHE_ERASED, 0, 606, "query cache erased")
|
TAOS_DEFINE_ERROR(TSDB_CODE_QUERY_CACHE_ERASED, 0, 456, "query cache erased")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_QUERY_MSG, 0, 607, "invalid query message") // failed to validate the sql expression msg by vnode
|
TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_QUERY_MSG, 0, 457, "invalid query message") // failed to validate the sql expression msg by vnode
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_SORTED_RES_TOO_MANY, 0, 608, "sorted res too many") // too many result for ordered super table projection query
|
TAOS_DEFINE_ERROR(TSDB_CODE_SORTED_RES_TOO_MANY, 0, 458, "sorted res too many") // too many result for ordered super table projection query
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_QHANDLE, 0, 609, "invalid handle")
|
TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_QHANDLE, 0, 459, "invalid handle")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_QUERY_CANCELLED, 0, 610, "query cancelled")
|
TAOS_DEFINE_ERROR(TSDB_CODE_QUERY_CANCELLED, 0, 460, "query cancelled")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_IE, 0, 611, "invalid ie")
|
TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_IE, 0, 461, "invalid ie")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_VALUE, 0, 612, "invalid value")
|
TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_VALUE, 0, 462, "invalid value")
|
||||||
|
|
||||||
// others
|
// others
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_FILE_FORMAT, 0, 700, "invalid file format")
|
TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_FILE_FORMAT, 0, 500, "invalid file format")
|
||||||
|
|
||||||
|
|
||||||
#ifdef TAOS_ERROR_C
|
#ifdef TAOS_ERROR_C
|
||||||
|
|
|
@ -510,7 +510,6 @@ typedef struct {
|
||||||
int64_t pointsWritten;
|
int64_t pointsWritten;
|
||||||
uint8_t status;
|
uint8_t status;
|
||||||
uint8_t role;
|
uint8_t role;
|
||||||
uint8_t accessState;
|
|
||||||
uint8_t replica;
|
uint8_t replica;
|
||||||
uint8_t reserved[5];
|
uint8_t reserved[5];
|
||||||
} SVnodeLoad;
|
} SVnodeLoad;
|
||||||
|
|
|
@ -2,5 +2,5 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
|
||||||
PROJECT(TDengine)
|
PROJECT(TDengine)
|
||||||
|
|
||||||
ADD_SUBDIRECTORY(shell)
|
ADD_SUBDIRECTORY(shell)
|
||||||
#ADD_SUBDIRECTORY(taosdemo)
|
ADD_SUBDIRECTORY(taosdemo)
|
||||||
#ADD_SUBDIRECTORY(taosdump)
|
ADD_SUBDIRECTORY(taosdump)
|
||||||
|
|
|
@ -2,6 +2,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
|
||||||
PROJECT(TDengine)
|
PROJECT(TDengine)
|
||||||
|
|
||||||
INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/inc)
|
INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/inc)
|
||||||
|
INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/common/inc)
|
||||||
INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/client/inc)
|
INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/client/inc)
|
||||||
INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/util/inc)
|
INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/util/inc)
|
||||||
INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/query/inc)
|
INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/query/inc)
|
||||||
|
|
|
@ -30,7 +30,6 @@
|
||||||
|
|
||||||
#include "taos.h"
|
#include "taos.h"
|
||||||
#include "taosmsg.h"
|
#include "taosmsg.h"
|
||||||
#include "tglobal.h"
|
|
||||||
#include "tsclient.h"
|
#include "tsclient.h"
|
||||||
#include "taosdef.h"
|
#include "taosdef.h"
|
||||||
#include "tutil.h"
|
#include "tutil.h"
|
||||||
|
@ -360,7 +359,7 @@ int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
void taosFreeDbInfos() {
|
void taosFreeDbInfos() {
|
||||||
if (dbInfos == NULL) return;
|
if (dbInfos == NULL) return;
|
||||||
for (int i = 0; i < tsMaxDbs; i++) tfree(dbInfos[i]);
|
for (int i = 0; i < TSDB_MAX_DBS; i++) tfree(dbInfos[i]);
|
||||||
tfree(dbInfos);
|
tfree(dbInfos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -440,7 +439,7 @@ int taosDumpOut(struct arguments *arguments) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
dbInfos = (SDbInfo **)calloc(tsMaxDbs, sizeof(SDbInfo *));
|
dbInfos = (SDbInfo **)calloc(TSDB_MAX_DBS, sizeof(SDbInfo *));
|
||||||
if (dbInfos == NULL) {
|
if (dbInfos == NULL) {
|
||||||
fprintf(stderr, "failed to allocate memory\n");
|
fprintf(stderr, "failed to allocate memory\n");
|
||||||
goto _exit_failure;
|
goto _exit_failure;
|
||||||
|
|
|
@ -29,32 +29,6 @@ struct SAcctObj;
|
||||||
struct SUserObj;
|
struct SUserObj;
|
||||||
struct SMnodeObj;
|
struct SMnodeObj;
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
char acct[TSDB_USER_LEN];
|
|
||||||
char db[TSDB_DB_NAME_LEN];
|
|
||||||
uint32_t vgId;
|
|
||||||
int32_t maxSessions;
|
|
||||||
int32_t cacheBlockSize;
|
|
||||||
union {
|
|
||||||
int32_t totalBlocks;
|
|
||||||
float fraction;
|
|
||||||
} cacheNumOfBlocks;
|
|
||||||
int32_t daysPerFile;
|
|
||||||
int32_t daysToKeep1;
|
|
||||||
int32_t daysToKeep2;
|
|
||||||
int32_t daysToKeep;
|
|
||||||
int32_t commitTime;
|
|
||||||
int32_t rowsInFileBlock;
|
|
||||||
int16_t blocksPerTable;
|
|
||||||
int8_t compression;
|
|
||||||
int8_t commitLog;
|
|
||||||
int8_t replications;
|
|
||||||
int8_t repStrategy;
|
|
||||||
int8_t loadLatest; // load into mem or not
|
|
||||||
uint8_t precision; // time resolution
|
|
||||||
int8_t reserved[16];
|
|
||||||
} SDbCfg;
|
|
||||||
|
|
||||||
typedef struct SDnodeObj {
|
typedef struct SDnodeObj {
|
||||||
int32_t dnodeId;
|
int32_t dnodeId;
|
||||||
uint32_t privateIp;
|
uint32_t privateIp;
|
||||||
|
@ -168,12 +142,30 @@ typedef struct SVgObj {
|
||||||
SChildTableObj **tableList;
|
SChildTableObj **tableList;
|
||||||
} SVgObj;
|
} SVgObj;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int64_t maxCacheSize;
|
||||||
|
int32_t maxTables;
|
||||||
|
int32_t daysPerFile;
|
||||||
|
int32_t daysToKeep;
|
||||||
|
int32_t daysToKeep1;
|
||||||
|
int32_t daysToKeep2;
|
||||||
|
int32_t minRowsPerFileBlock; // minimum rows per file block
|
||||||
|
int32_t maxRowsPerFileBlock; // maximum rows per file block
|
||||||
|
int32_t commitTime;
|
||||||
|
int8_t precision;
|
||||||
|
int8_t compression;
|
||||||
|
int8_t commitLog;
|
||||||
|
int8_t replications;
|
||||||
|
int8_t reserved[16];
|
||||||
|
} SDbCfg;
|
||||||
|
|
||||||
typedef struct SDbObj {
|
typedef struct SDbObj {
|
||||||
char name[TSDB_DB_NAME_LEN + 1];
|
char name[TSDB_DB_NAME_LEN + 1];
|
||||||
int8_t status;
|
char acct[TSDB_USER_LEN + 1];
|
||||||
int64_t createdTime;
|
int64_t createdTime;
|
||||||
SDbCfg cfg;
|
SDbCfg cfg;
|
||||||
int8_t reserved[15];
|
int8_t status;
|
||||||
|
int8_t reserved[14];
|
||||||
int8_t updateEnd[1];
|
int8_t updateEnd[1];
|
||||||
int32_t refCount;
|
int32_t refCount;
|
||||||
int32_t numOfVgroups;
|
int32_t numOfVgroups;
|
||||||
|
|
|
@ -21,6 +21,7 @@ extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "tlog.h"
|
#include "tlog.h"
|
||||||
|
#include "monitor.h"
|
||||||
|
|
||||||
extern int32_t mdebugFlag;
|
extern int32_t mdebugFlag;
|
||||||
extern int32_t sdbDebugFlag;
|
extern int32_t sdbDebugFlag;
|
||||||
|
@ -41,9 +42,9 @@ extern int32_t sdbDebugFlag;
|
||||||
#define mPrint(...) \
|
#define mPrint(...) \
|
||||||
{ taosPrintLog("MND ", 255, __VA_ARGS__); }
|
{ taosPrintLog("MND ", 255, __VA_ARGS__); }
|
||||||
|
|
||||||
#define mLError(...) mError(__VA_ARGS__)
|
#define mLError(...) monitorSaveLog(2, __VA_ARGS__); mError(__VA_ARGS__)
|
||||||
#define mLWarn(...) mWarn(__VA_ARGS__)
|
#define mLWarn(...) monitorSaveLog(1, __VA_ARGS__); mWarn(__VA_ARGS__)
|
||||||
#define mLPrint(...) mPrint(__VA_ARGS__)
|
#define mLPrint(...) monitorSaveLog(0, __VA_ARGS__); mPrint(__VA_ARGS__)
|
||||||
|
|
||||||
#define sdbError(...) \
|
#define sdbError(...) \
|
||||||
if (sdbDebugFlag & DEBUG_ERROR) { \
|
if (sdbDebugFlag & DEBUG_ERROR) { \
|
||||||
|
@ -60,9 +61,9 @@ extern int32_t sdbDebugFlag;
|
||||||
#define sdbPrint(...) \
|
#define sdbPrint(...) \
|
||||||
{ taosPrintLog("MND-SDB ", 255, __VA_ARGS__); }
|
{ taosPrintLog("MND-SDB ", 255, __VA_ARGS__); }
|
||||||
|
|
||||||
#define sdbLError(...) sdbError(__VA_ARGS__)
|
#define sdbLError(...) monitorSaveLog(2, __VA_ARGS__); sdbError(__VA_ARGS__)
|
||||||
#define sdbLWarn(...) sdbWarn(__VA_ARGS__)
|
#define sdbLWarn(...) monitorSaveLog(1, __VA_ARGS__); sdbWarn(__VA_ARGS__)
|
||||||
#define sdbLPrint(...) sdbPrint(__VA_ARGS__)
|
#define sdbLPrint(...) monitorSaveLog(0, __VA_ARGS__); sdbPrint(__VA_ARGS__)
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,7 +79,9 @@ static void mgmtProcessRspFromDnode(SRpcMsg *rpcMsg) {
|
||||||
if (mgmtProcessDnodeRspFp[rpcMsg->msgType]) {
|
if (mgmtProcessDnodeRspFp[rpcMsg->msgType]) {
|
||||||
(*mgmtProcessDnodeRspFp[rpcMsg->msgType])(rpcMsg);
|
(*mgmtProcessDnodeRspFp[rpcMsg->msgType])(rpcMsg);
|
||||||
} else {
|
} else {
|
||||||
mError("%s is not processed in dclient", taosMsg[rpcMsg->msgType]);
|
mError("%s is not processed in mgmt dclient", taosMsg[rpcMsg->msgType]);
|
||||||
|
SRpcMsg rpcRsp = {.pCont = 0, .contLen = 0, .code = TSDB_CODE_OPS_NOT_SUPPORT, .handle = rpcMsg->handle};
|
||||||
|
rpcSendResponse(&rpcRsp);
|
||||||
}
|
}
|
||||||
|
|
||||||
rpcFreeCont(rpcMsg->pCont);
|
rpcFreeCont(rpcMsg->pCont);
|
||||||
|
|
|
@ -108,8 +108,12 @@ static void mgmtProcessMsgFromDnode(SRpcMsg *rpcMsg) {
|
||||||
bool usePublicIp = false;
|
bool usePublicIp = false;
|
||||||
|
|
||||||
SRpcIpSet ipSet = {0};
|
SRpcIpSet ipSet = {0};
|
||||||
mgmtGetMnodeIpSet(&ipSet, usePublicIp);
|
ipSet.port = tsMnodeDnodePort;
|
||||||
mTrace("conn from dnode ip:%s redirect msg", taosIpStr(connInfo.clientIp));
|
dnodeGetMnodeIpSet(&ipSet, usePublicIp);
|
||||||
|
mTrace("conn from dnode ip:%s user:%s redirect msg, inUse:%d", taosIpStr(connInfo.clientIp), connInfo.user, ipSet.inUse);
|
||||||
|
for (int32_t i = 0; i < ipSet.numOfIps; ++i) {
|
||||||
|
mTrace("index:%d ip:%s", i, taosIpStr(ipSet.ip[i]));
|
||||||
|
}
|
||||||
rpcSendRedirectRsp(rpcMsg->handle, &ipSet);
|
rpcSendRedirectRsp(rpcMsg->handle, &ipSet);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -119,7 +123,8 @@ static void mgmtProcessMsgFromDnode(SRpcMsg *rpcMsg) {
|
||||||
memcpy(pMsg, rpcMsg, sizeof(SRpcMsg));
|
memcpy(pMsg, rpcMsg, sizeof(SRpcMsg));
|
||||||
mgmtAddToDServerQueue(pMsg);
|
mgmtAddToDServerQueue(pMsg);
|
||||||
} else {
|
} else {
|
||||||
mError("%s is not processed in dserver", taosMsg[rpcMsg->msgType]);
|
mError("%s is not processed in mgmt dserver", taosMsg[rpcMsg->msgType]);
|
||||||
|
mgmtSendSimpleResp(rpcMsg->handle, TSDB_CODE_MSG_NOT_PROCESSED);
|
||||||
rpcFreeCont(rpcMsg->pCont);
|
rpcFreeCont(rpcMsg->pCont);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,7 +54,7 @@ static int32_t mgmtDbActionDestroy(SSdbOper *pOper) {
|
||||||
|
|
||||||
static int32_t mgmtDbActionInsert(SSdbOper *pOper) {
|
static int32_t mgmtDbActionInsert(SSdbOper *pOper) {
|
||||||
SDbObj *pDb = pOper->pObj;
|
SDbObj *pDb = pOper->pObj;
|
||||||
SAcctObj *pAcct = mgmtGetAcct(pDb->cfg.acct);
|
SAcctObj *pAcct = mgmtGetAcct(pDb->acct);
|
||||||
|
|
||||||
pDb->pHead = NULL;
|
pDb->pHead = NULL;
|
||||||
pDb->pTail = NULL;
|
pDb->pTail = NULL;
|
||||||
|
@ -67,7 +67,7 @@ static int32_t mgmtDbActionInsert(SSdbOper *pOper) {
|
||||||
mgmtDecAcctRef(pAcct);
|
mgmtDecAcctRef(pAcct);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
mError("db:%s, acct:%s info not exist in sdb", pDb->name, pDb->cfg.acct);
|
mError("db:%s, acct:%s info not exist in sdb", pDb->name, pDb->acct);
|
||||||
return TSDB_CODE_INVALID_ACCT;
|
return TSDB_CODE_INVALID_ACCT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ static int32_t mgmtDbActionInsert(SSdbOper *pOper) {
|
||||||
|
|
||||||
static int32_t mgmtDbActionDelete(SSdbOper *pOper) {
|
static int32_t mgmtDbActionDelete(SSdbOper *pOper) {
|
||||||
SDbObj *pDb = pOper->pObj;
|
SDbObj *pDb = pOper->pObj;
|
||||||
SAcctObj *pAcct = mgmtGetAcct(pDb->cfg.acct);
|
SAcctObj *pAcct = mgmtGetAcct(pDb->acct);
|
||||||
|
|
||||||
mgmtDropDbFromAcct(pAcct, pDb);
|
mgmtDropDbFromAcct(pAcct, pDb);
|
||||||
mgmtDropAllChildTables(pDb);
|
mgmtDropAllChildTables(pDb);
|
||||||
|
@ -176,132 +176,108 @@ SDbObj *mgmtGetDbByTableId(char *tableId) {
|
||||||
return (SDbObj *)sdbGetRow(tsDbSdb, db);
|
return (SDbObj *)sdbGetRow(tsDbSdb, db);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t mgmtCheckDBParams(SCMCreateDbMsg *pCreate) {
|
static int32_t mgmtCheckDbCfg(SDbCfg *pCfg) {
|
||||||
if (pCreate->commitLog < 0 || pCreate->commitLog > 2) {
|
if (pCfg->maxCacheSize < TSDB_MIN_CACHE_BLOCK_SIZE || pCfg->maxCacheSize > TSDB_MAX_CACHE_BLOCK_SIZE) {
|
||||||
mError("invalid db option commitLog: %d, only 0-2 allowed", pCreate->commitLog);
|
mError("invalid db option maxCacheSize:%d valid range: [%d, %d]", pCfg->maxCacheSize, TSDB_MIN_CACHE_BLOCK_SIZE,
|
||||||
return TSDB_CODE_INVALID_OPTION;
|
TSDB_MAX_CACHE_BLOCK_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pCreate->replications < TSDB_REPLICA_MIN_NUM || pCreate->replications > TSDB_REPLICA_MAX_NUM) {
|
if (pCfg->maxTables < TSDB_MIN_TABLES_PER_VNODE || pCfg->maxTables > TSDB_MAX_TABLES_PER_VNODE) {
|
||||||
mError("invalid db option replications: %d valid range: [%d, %d]", pCreate->replications, TSDB_REPLICA_MIN_NUM,
|
mError("invalid db option maxTables:%d valid range: [%d, %d]", pCfg->maxTables, TSDB_MIN_TABLES_PER_VNODE,
|
||||||
TSDB_REPLICA_MAX_NUM);
|
|
||||||
return TSDB_CODE_INVALID_OPTION;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pCreate->daysPerFile < TSDB_FILE_MIN_PARTITION_RANGE || pCreate->daysPerFile > TSDB_FILE_MAX_PARTITION_RANGE) {
|
|
||||||
mError("invalid db option daysPerFile: %d valid range: [%d, %d]", pCreate->daysPerFile, TSDB_FILE_MIN_PARTITION_RANGE,
|
|
||||||
TSDB_FILE_MAX_PARTITION_RANGE);
|
|
||||||
return TSDB_CODE_INVALID_OPTION;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pCreate->daysToKeep1 > pCreate->daysToKeep2 || pCreate->daysToKeep2 > pCreate->daysToKeep) {
|
|
||||||
mError("invalid db option daystokeep1: %d, daystokeep2: %d, daystokeep: %d", pCreate->daysToKeep1,
|
|
||||||
pCreate->daysToKeep2, pCreate->daysToKeep);
|
|
||||||
return TSDB_CODE_INVALID_OPTION;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pCreate->daysToKeep1 < TSDB_FILE_MIN_PARTITION_RANGE || pCreate->daysToKeep1 < pCreate->daysPerFile) {
|
|
||||||
mError("invalid db option daystokeep: %d", pCreate->daysToKeep);
|
|
||||||
return TSDB_CODE_INVALID_OPTION;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pCreate->rowsInFileBlock < TSDB_MIN_ROWS_IN_FILEBLOCK || pCreate->rowsInFileBlock > TSDB_MAX_ROWS_IN_FILEBLOCK) {
|
|
||||||
mError("invalid db option rowsInFileBlock: %d valid range: [%d, %d]", pCreate->rowsInFileBlock,
|
|
||||||
TSDB_MIN_ROWS_IN_FILEBLOCK, TSDB_MAX_ROWS_IN_FILEBLOCK);
|
|
||||||
return TSDB_CODE_INVALID_OPTION;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pCreate->cacheBlockSize < TSDB_MIN_CACHE_BLOCK_SIZE || pCreate->cacheBlockSize > TSDB_MAX_CACHE_BLOCK_SIZE) {
|
|
||||||
mError("invalid db option cacheBlockSize: %d valid range: [%d, %d]", pCreate->cacheBlockSize,
|
|
||||||
TSDB_MIN_CACHE_BLOCK_SIZE, TSDB_MAX_CACHE_BLOCK_SIZE);
|
|
||||||
return TSDB_CODE_INVALID_OPTION;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pCreate->maxSessions < TSDB_MIN_TABLES_PER_VNODE || pCreate->maxSessions > TSDB_MAX_TABLES_PER_VNODE) {
|
|
||||||
mError("invalid db option maxSessions: %d valid range: [%d, %d]", pCreate->maxSessions, TSDB_MIN_TABLES_PER_VNODE,
|
|
||||||
TSDB_MAX_TABLES_PER_VNODE);
|
TSDB_MAX_TABLES_PER_VNODE);
|
||||||
return TSDB_CODE_INVALID_OPTION;
|
return TSDB_CODE_INVALID_OPTION;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pCreate->precision != TSDB_TIME_PRECISION_MILLI && pCreate->precision != TSDB_TIME_PRECISION_MICRO) {
|
if (pCfg->daysPerFile < TSDB_FILE_MIN_PARTITION_RANGE || pCfg->daysPerFile > TSDB_FILE_MAX_PARTITION_RANGE) {
|
||||||
mError("invalid db option timePrecision: %d valid value: [%d, %d]", pCreate->precision, TSDB_TIME_PRECISION_MILLI,
|
mError("invalid db option daysPerFile:%d valid range: [%d, %d]", pCfg->daysPerFile, TSDB_FILE_MIN_PARTITION_RANGE,
|
||||||
TSDB_TIME_PRECISION_MICRO);
|
TSDB_FILE_MAX_PARTITION_RANGE);
|
||||||
return TSDB_CODE_INVALID_OPTION;
|
return TSDB_CODE_INVALID_OPTION;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pCreate->cacheNumOfBlocks.fraction < TSDB_MIN_AVG_BLOCKS || pCreate->cacheNumOfBlocks.fraction > TSDB_MAX_AVG_BLOCKS) {
|
if (pCfg->daysToKeep1 < TSDB_FILE_MIN_PARTITION_RANGE || pCfg->daysToKeep1 < pCfg->daysPerFile) {
|
||||||
mError("invalid db option ablocks: %f valid value: [%d, %d]", pCreate->cacheNumOfBlocks.fraction, 0, TSDB_MAX_AVG_BLOCKS);
|
mError("invalid db option daystokeep:%d", pCfg->daysToKeep);
|
||||||
return TSDB_CODE_INVALID_OPTION;
|
return TSDB_CODE_INVALID_OPTION;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pCreate->commitTime < TSDB_MIN_COMMIT_TIME_INTERVAL || pCreate->commitTime > TSDB_MAX_COMMIT_TIME_INTERVAL) {
|
if (pCfg->daysToKeep2 > pCfg->daysToKeep || pCfg->daysToKeep2 < pCfg->daysToKeep1) {
|
||||||
mError("invalid db option commitTime: %d valid range: [%d, %d]", pCreate->commitTime, TSDB_MIN_COMMIT_TIME_INTERVAL,
|
mError("invalid db option daystokeep1:%d, daystokeep2:%d, daystokeep:%d", pCfg->daysToKeep1,
|
||||||
|
pCfg->daysToKeep2, pCfg->daysToKeep);
|
||||||
|
return TSDB_CODE_INVALID_OPTION;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pCfg->minRowsPerFileBlock < TSDB_MIN_ROWS_IN_FILEBLOCK || pCfg->minRowsPerFileBlock > TSDB_MAX_ROWS_IN_FILEBLOCK) {
|
||||||
|
mError("invalid db option minRowsPerFileBlock:%d valid range: [%d, %d]", pCfg->minRowsPerFileBlock,
|
||||||
|
TSDB_MIN_ROWS_IN_FILEBLOCK, TSDB_MAX_ROWS_IN_FILEBLOCK);
|
||||||
|
return TSDB_CODE_INVALID_OPTION;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pCfg->maxRowsPerFileBlock < TSDB_MIN_ROWS_IN_FILEBLOCK || pCfg->maxRowsPerFileBlock > TSDB_MAX_ROWS_IN_FILEBLOCK) {
|
||||||
|
mError("invalid db option maxRowsPerFileBlock:%d valid range: [%d, %d]", pCfg->maxRowsPerFileBlock,
|
||||||
|
TSDB_MIN_ROWS_IN_FILEBLOCK, TSDB_MAX_ROWS_IN_FILEBLOCK);
|
||||||
|
return TSDB_CODE_INVALID_OPTION;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pCfg->maxRowsPerFileBlock < pCfg->minRowsPerFileBlock) {
|
||||||
|
mError("invalid db option minRowsPerFileBlock:%d maxRowsPerFileBlock:%d", pCfg->minRowsPerFileBlock,
|
||||||
|
pCfg->maxRowsPerFileBlock);
|
||||||
|
return TSDB_CODE_INVALID_OPTION;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pCfg->commitTime < TSDB_MIN_COMMIT_TIME_INTERVAL || pCfg->commitTime > TSDB_MAX_COMMIT_TIME_INTERVAL) {
|
||||||
|
mError("invalid db option commitTime:%d valid range: [%d, %d]", pCfg->commitTime, TSDB_MIN_COMMIT_TIME_INTERVAL,
|
||||||
TSDB_MAX_COMMIT_TIME_INTERVAL);
|
TSDB_MAX_COMMIT_TIME_INTERVAL);
|
||||||
return TSDB_CODE_INVALID_OPTION;
|
return TSDB_CODE_INVALID_OPTION;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pCreate->compression < TSDB_MIN_COMPRESSION_LEVEL || pCreate->compression > TSDB_MAX_COMPRESSION_LEVEL) {
|
if (pCfg->precision != TSDB_TIME_PRECISION_MILLI && pCfg->precision != TSDB_TIME_PRECISION_MICRO) {
|
||||||
mError("invalid db option compression: %d valid range: [%d, %d]", pCreate->compression, TSDB_MIN_COMPRESSION_LEVEL,
|
mError("invalid db option timePrecision:%d valid value: [%d, %d]", pCfg->precision, TSDB_TIME_PRECISION_MILLI,
|
||||||
|
TSDB_TIME_PRECISION_MICRO);
|
||||||
|
return TSDB_CODE_INVALID_OPTION;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pCfg->compression < TSDB_MIN_COMPRESSION_LEVEL || pCfg->compression > TSDB_MAX_COMPRESSION_LEVEL) {
|
||||||
|
mError("invalid db option compression:%d valid range: [%d, %d]", pCfg->compression, TSDB_MIN_COMPRESSION_LEVEL,
|
||||||
TSDB_MAX_COMPRESSION_LEVEL);
|
TSDB_MAX_COMPRESSION_LEVEL);
|
||||||
return TSDB_CODE_INVALID_OPTION;
|
return TSDB_CODE_INVALID_OPTION;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pCfg->commitLog < 0 || pCfg->commitLog > 2) {
|
||||||
|
mError("invalid db option commitLog:%d, only 0-2 allowed", pCfg->commitLog);
|
||||||
|
return TSDB_CODE_INVALID_OPTION;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pCfg->replications < TSDB_REPLICA_MIN_NUM || pCfg->replications > TSDB_REPLICA_MAX_NUM) {
|
||||||
|
mError("invalid db option replications:%d valid range: [%d, %d]", pCfg->replications, TSDB_REPLICA_MIN_NUM,
|
||||||
|
TSDB_REPLICA_MAX_NUM);
|
||||||
|
return TSDB_CODE_INVALID_OPTION;
|
||||||
|
}
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t mgmtCheckDbParams(SCMCreateDbMsg *pCreate) {
|
static void mgmtSetDefaultDbCfg(SDbCfg *pCfg) {
|
||||||
// assign default parameters
|
if (pCfg->maxCacheSize < 0) pCfg->maxCacheSize = tsMaxCacheSize;
|
||||||
if (pCreate->maxSessions < 0) pCreate->maxSessions = tsSessionsPerVnode;
|
if (pCfg->maxTables < 0) pCfg->maxTables = tsSessionsPerVnode;
|
||||||
if (pCreate->cacheBlockSize < 0) pCreate->cacheBlockSize = tsCacheBlockSize;
|
if (pCfg->daysPerFile < 0) pCfg->daysPerFile = tsDaysPerFile;
|
||||||
if (pCreate->daysPerFile < 0) pCreate->daysPerFile = tsDaysPerFile;
|
if (pCfg->daysToKeep < 0) pCfg->daysToKeep = tsDaysToKeep;
|
||||||
if (pCreate->daysToKeep < 0) pCreate->daysToKeep = tsDaysToKeep;
|
if (pCfg->daysToKeep1 < 0) pCfg->daysToKeep1 = pCfg->daysToKeep;
|
||||||
if (pCreate->daysToKeep1 < 0) pCreate->daysToKeep1 = pCreate->daysToKeep;
|
if (pCfg->daysToKeep2 < 0) pCfg->daysToKeep2 = pCfg->daysToKeep;
|
||||||
if (pCreate->daysToKeep2 < 0) pCreate->daysToKeep2 = pCreate->daysToKeep;
|
if (pCfg->minRowsPerFileBlock < 0) pCfg->minRowsPerFileBlock = tsRowsInFileBlock;
|
||||||
if (pCreate->commitTime < 0) pCreate->commitTime = tsCommitTime;
|
if (pCfg->maxRowsPerFileBlock < 0) pCfg->maxRowsPerFileBlock = pCfg->minRowsPerFileBlock * 2;
|
||||||
if (pCreate->compression < 0) pCreate->compression = tsCompression;
|
if (pCfg->commitTime < 0) pCfg->commitTime = tsCommitTime;
|
||||||
if (pCreate->commitLog < 0) pCreate->commitLog = tsCommitLog;
|
if (pCfg->precision < 0) pCfg->precision = tsTimePrecision;
|
||||||
if (pCreate->replications < 0) pCreate->replications = tsReplications; //
|
if (pCfg->compression < 0) pCfg->compression = tsCompression;
|
||||||
if (pCreate->rowsInFileBlock < 0) pCreate->rowsInFileBlock = tsRowsInFileBlock; //
|
if (pCfg->commitLog < 0) pCfg->commitLog = tsCommitLog;
|
||||||
if (pCreate->cacheNumOfBlocks.fraction < 0) pCreate->cacheNumOfBlocks.fraction = tsAverageCacheBlocks; //
|
if (pCfg->replications < 0) pCfg->replications = tsReplications;
|
||||||
|
|
||||||
if (mgmtCheckDBParams(pCreate) != TSDB_CODE_SUCCESS) {
|
|
||||||
return TSDB_CODE_INVALID_OPTION;
|
|
||||||
}
|
|
||||||
|
|
||||||
pCreate->cacheNumOfBlocks.totalBlocks = (int32_t)(pCreate->cacheNumOfBlocks.fraction * pCreate->maxSessions);
|
|
||||||
|
|
||||||
if (pCreate->cacheNumOfBlocks.totalBlocks > TSDB_MAX_CACHE_BLOCKS) {
|
|
||||||
mTrace("invalid db option cacheNumOfBlocks: %d valid range: [%d, %d]", pCreate->cacheNumOfBlocks.totalBlocks,
|
|
||||||
TSDB_MIN_CACHE_BLOCKS, TSDB_MAX_CACHE_BLOCKS);
|
|
||||||
return TSDB_CODE_INVALID_OPTION;
|
|
||||||
}
|
|
||||||
|
|
||||||
// calculate the blocks per table
|
|
||||||
if (pCreate->blocksPerTable < 0) {
|
|
||||||
pCreate->blocksPerTable = pCreate->cacheNumOfBlocks.totalBlocks / 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pCreate->blocksPerTable > pCreate->cacheNumOfBlocks.totalBlocks * 3 / 4) {
|
|
||||||
pCreate->blocksPerTable = pCreate->cacheNumOfBlocks.totalBlocks * 3 / 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pCreate->blocksPerTable < TSDB_MIN_AVG_BLOCKS) {
|
|
||||||
pCreate->blocksPerTable = TSDB_MIN_AVG_BLOCKS;
|
|
||||||
}
|
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t mgmtCreateDb(SAcctObj *pAcct, SCMCreateDbMsg *pCreate) {
|
static int32_t mgmtCreateDb(SAcctObj *pAcct, SCMCreateDbMsg *pCreate) {
|
||||||
int32_t code = acctCheck(pAcct, ACCT_GRANT_DB);
|
int32_t code = acctCheck(pAcct, ACCT_GRANT_DB);
|
||||||
if (code != 0) {
|
if (code != 0) return code;
|
||||||
return code;
|
|
||||||
}
|
|
||||||
|
|
||||||
SDbObj *pDb = mgmtGetDb(pCreate->db);
|
SDbObj *pDb = mgmtGetDb(pCreate->db);
|
||||||
if (pDb != NULL) {
|
if (pDb != NULL) {
|
||||||
mgmtDecDbRef(pDb);
|
mgmtDecDbRef(pDb);
|
||||||
|
|
||||||
if (pCreate->ignoreExist) {
|
if (pCreate->ignoreExist) {
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
} else {
|
} else {
|
||||||
|
@ -309,45 +285,36 @@ static int32_t mgmtCreateDb(SAcctObj *pAcct, SCMCreateDbMsg *pCreate) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
code = mgmtCheckDbParams(pCreate);
|
|
||||||
if (code != TSDB_CODE_SUCCESS) return code;
|
|
||||||
|
|
||||||
assert(pCreate->daysToKeep1 <= pCreate->daysToKeep2 && pCreate->daysToKeep2 <= pCreate->daysToKeep);
|
|
||||||
|
|
||||||
code = grantCheck(TSDB_GRANT_DB);
|
code = grantCheck(TSDB_GRANT_DB);
|
||||||
if (code != 0) {
|
if (code != 0) return code;
|
||||||
return code;
|
|
||||||
}
|
|
||||||
|
|
||||||
pDb = calloc(1, sizeof(SDbObj));
|
pDb = calloc(1, sizeof(SDbObj));
|
||||||
|
|
||||||
strncpy(pDb->name, pCreate->db, TSDB_DB_NAME_LEN);
|
strncpy(pDb->name, pCreate->db, TSDB_DB_NAME_LEN);
|
||||||
strncpy(pCreate->acct, pAcct->user, TSDB_USER_LEN);
|
strncpy(pDb->acct, pAcct->user, TSDB_USER_LEN);
|
||||||
|
|
||||||
pDb->createdTime = taosGetTimestampMs();
|
pDb->createdTime = taosGetTimestampMs();
|
||||||
|
|
||||||
pDb->cfg = (SDbCfg) {
|
pDb->cfg = (SDbCfg) {
|
||||||
.vgId = pCreate->vgId,
|
.maxCacheSize = 64,//(int64_t)pCreate->cacheBlockSize * pCreate->cacheNumOfBlocks.totalBlocks,
|
||||||
.precision = pCreate->precision,
|
.maxTables = pCreate->maxSessions,
|
||||||
.maxSessions = pCreate->maxSessions,
|
|
||||||
.cacheNumOfBlocks.totalBlocks = pCreate->cacheNumOfBlocks.totalBlocks,
|
|
||||||
.rowsInFileBlock = pCreate->rowsInFileBlock,
|
|
||||||
.commitLog = pCreate->commitLog,
|
|
||||||
.replications = pCreate->replications,
|
|
||||||
.daysPerFile = pCreate->daysPerFile,
|
.daysPerFile = pCreate->daysPerFile,
|
||||||
.cacheBlockSize = pCreate->cacheBlockSize,
|
|
||||||
.commitTime = pCreate->commitTime,
|
|
||||||
.blocksPerTable = pCreate->blocksPerTable,
|
|
||||||
.compression = pCreate->compression,
|
|
||||||
.daysToKeep = pCreate->daysToKeep,
|
.daysToKeep = pCreate->daysToKeep,
|
||||||
.daysToKeep1 = pCreate->daysToKeep1,
|
.daysToKeep1 = pCreate->daysToKeep1,
|
||||||
.daysToKeep2 = pCreate->daysToKeep2,
|
.daysToKeep2 = pCreate->daysToKeep2,
|
||||||
.loadLatest = pCreate->loadLatest,
|
.minRowsPerFileBlock = pCreate->rowsInFileBlock * 1,
|
||||||
.repStrategy = pCreate->repStrategy,
|
.maxRowsPerFileBlock = pCreate->rowsInFileBlock * 2,
|
||||||
|
.commitTime = pCreate->commitTime,
|
||||||
|
.precision = pCreate->precision,
|
||||||
|
.compression = pCreate->compression,
|
||||||
|
.commitLog = pCreate->commitLog,
|
||||||
|
.replications = pCreate->replications
|
||||||
};
|
};
|
||||||
|
|
||||||
strncpy(pDb->cfg.db, pCreate->db, TSDB_DB_NAME_LEN);
|
mgmtSetDefaultDbCfg(&pDb->cfg);
|
||||||
strncpy(pDb->cfg.acct, pCreate->acct, TSDB_USER_LEN);
|
|
||||||
|
code = mgmtCheckDbCfg(&pDb->cfg);
|
||||||
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
|
tfree(pDb);
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
SSdbOper oper = {
|
SSdbOper oper = {
|
||||||
.type = SDB_OPER_GLOBAL,
|
.type = SDB_OPER_GLOBAL,
|
||||||
|
@ -498,19 +465,7 @@ static int32_t mgmtGetDbMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pConn)
|
||||||
|
|
||||||
pShow->bytes[cols] = 4;
|
pShow->bytes[cols] = 4;
|
||||||
pSchema[cols].type = TSDB_DATA_TYPE_INT;
|
pSchema[cols].type = TSDB_DATA_TYPE_INT;
|
||||||
strcpy(pSchema[cols].name, "cache(b)");
|
strcpy(pSchema[cols].name, "cache(Mb)");
|
||||||
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
|
||||||
cols++;
|
|
||||||
|
|
||||||
pShow->bytes[cols] = 4;
|
|
||||||
pSchema[cols].type = TSDB_DATA_TYPE_FLOAT;
|
|
||||||
strcpy(pSchema[cols].name, "ablocks");
|
|
||||||
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
|
||||||
cols++;
|
|
||||||
|
|
||||||
pShow->bytes[cols] = 2;
|
|
||||||
pSchema[cols].type = TSDB_DATA_TYPE_SMALLINT;
|
|
||||||
strcpy(pSchema[cols].name, "tblocks");
|
|
||||||
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
||||||
cols++;
|
cols++;
|
||||||
|
|
||||||
|
@ -625,27 +580,15 @@ static int32_t mgmtRetrieveDbs(SShowObj *pShow, char *data, int32_t rows, void *
|
||||||
if (strcmp(pUser->user, "root") == 0) {
|
if (strcmp(pUser->user, "root") == 0) {
|
||||||
#endif
|
#endif
|
||||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||||
*(int32_t *)pWrite = pDb->cfg.maxSessions; // table num can be created should minus 1
|
*(int32_t *)pWrite = pDb->cfg.maxTables; // table num can be created should minus 1
|
||||||
cols++;
|
cols++;
|
||||||
|
|
||||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||||
*(int32_t *)pWrite = pDb->cfg.rowsInFileBlock;
|
*(int32_t *)pWrite = pDb->cfg.minRowsPerFileBlock;
|
||||||
cols++;
|
cols++;
|
||||||
|
|
||||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||||
*(int32_t *)pWrite = pDb->cfg.cacheBlockSize;
|
*(int32_t *)pWrite = pDb->cfg.maxCacheSize;
|
||||||
cols++;
|
|
||||||
|
|
||||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
|
||||||
#ifdef _TD_ARM_32_
|
|
||||||
*(int32_t *)pWrite = (pDb->cfg.cacheNumOfBlocks.totalBlocks * 1.0 / (pDb->cfg.maxSessions));
|
|
||||||
#else
|
|
||||||
*(float *)pWrite = (pDb->cfg.cacheNumOfBlocks.totalBlocks * 1.0 / (pDb->cfg.maxSessions));
|
|
||||||
#endif
|
|
||||||
cols++;
|
|
||||||
|
|
||||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
|
||||||
*(int16_t *)pWrite = pDb->cfg.blocksPerTable;
|
|
||||||
cols++;
|
cols++;
|
||||||
|
|
||||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||||
|
@ -747,7 +690,7 @@ static void mgmtProcessCreateDbMsg(SQueuedMsg *pMsg) {
|
||||||
static SDbCfg mgmtGetAlterDbOption(SDbObj *pDb, SCMAlterDbMsg *pAlter) {
|
static SDbCfg mgmtGetAlterDbOption(SDbObj *pDb, SCMAlterDbMsg *pAlter) {
|
||||||
SDbCfg newCfg = pDb->cfg;
|
SDbCfg newCfg = pDb->cfg;
|
||||||
int32_t daysToKeep = htonl(pAlter->daysToKeep);
|
int32_t daysToKeep = htonl(pAlter->daysToKeep);
|
||||||
int32_t maxSessions = htonl(pAlter->maxSessions);
|
int32_t maxTables = htonl(pAlter->maxSessions);
|
||||||
int8_t replications = pAlter->replications;
|
int8_t replications = pAlter->replications;
|
||||||
|
|
||||||
terrno = TSDB_CODE_SUCCESS;
|
terrno = TSDB_CODE_SUCCESS;
|
||||||
|
@ -755,25 +698,28 @@ static SDbCfg mgmtGetAlterDbOption(SDbObj *pDb, SCMAlterDbMsg *pAlter) {
|
||||||
if (daysToKeep > 0 && daysToKeep != pDb->cfg.daysToKeep) {
|
if (daysToKeep > 0 && daysToKeep != pDb->cfg.daysToKeep) {
|
||||||
mTrace("db:%s, daysToKeep:%d change to %d", pDb->name, pDb->cfg.daysToKeep, daysToKeep);
|
mTrace("db:%s, daysToKeep:%d change to %d", pDb->name, pDb->cfg.daysToKeep, daysToKeep);
|
||||||
newCfg.daysToKeep = daysToKeep;
|
newCfg.daysToKeep = daysToKeep;
|
||||||
} else if (replications > 0 && replications != pDb->cfg.replications) {
|
}
|
||||||
|
|
||||||
|
if (replications > 0 && replications != pDb->cfg.replications) {
|
||||||
mTrace("db:%s, replica:%d change to %d", pDb->name, pDb->cfg.replications, replications);
|
mTrace("db:%s, replica:%d change to %d", pDb->name, pDb->cfg.replications, replications);
|
||||||
if (replications < TSDB_REPLICA_MIN_NUM || replications > TSDB_REPLICA_MAX_NUM) {
|
if (replications < TSDB_REPLICA_MIN_NUM || replications > TSDB_REPLICA_MAX_NUM) {
|
||||||
mError("invalid db option replica: %d valid range: %d--%d", replications, TSDB_REPLICA_MIN_NUM, TSDB_REPLICA_MAX_NUM);
|
mError("invalid db option replica: %d valid range: %d--%d", replications, TSDB_REPLICA_MIN_NUM, TSDB_REPLICA_MAX_NUM);
|
||||||
terrno = TSDB_CODE_INVALID_OPTION;
|
terrno = TSDB_CODE_INVALID_OPTION;
|
||||||
}
|
}
|
||||||
newCfg.replications = replications;
|
newCfg.replications = replications;
|
||||||
} else if (maxSessions > 0 && maxSessions != pDb->cfg.maxSessions) {
|
}
|
||||||
mTrace("db:%s, tables:%d change to %d", pDb->name, pDb->cfg.maxSessions, maxSessions);
|
|
||||||
if (maxSessions < TSDB_MIN_TABLES_PER_VNODE || maxSessions > TSDB_MAX_TABLES_PER_VNODE) {
|
if (maxTables > 0 && maxTables != pDb->cfg.maxTables) {
|
||||||
mError("invalid db option tables: %d valid range: %d--%d", maxSessions, TSDB_MIN_TABLES_PER_VNODE, TSDB_MAX_TABLES_PER_VNODE);
|
mTrace("db:%s, tables:%d change to %d", pDb->name, pDb->cfg.maxTables, maxTables);
|
||||||
|
if (maxTables < TSDB_MIN_TABLES_PER_VNODE || maxTables > TSDB_MAX_TABLES_PER_VNODE) {
|
||||||
|
mError("invalid db option tables: %d valid range: %d--%d", maxTables, TSDB_MIN_TABLES_PER_VNODE, TSDB_MAX_TABLES_PER_VNODE);
|
||||||
terrno = TSDB_CODE_INVALID_OPTION;
|
terrno = TSDB_CODE_INVALID_OPTION;
|
||||||
}
|
}
|
||||||
if (maxSessions < pDb->cfg.maxSessions) {
|
if (maxTables < pDb->cfg.maxTables) {
|
||||||
mError("invalid db option tables: %d should larger than original:%d", maxSessions, pDb->cfg.maxSessions);
|
mError("invalid db option tables: %d should larger than original:%d", maxTables, pDb->cfg.maxTables);
|
||||||
terrno = TSDB_CODE_INVALID_OPTION;
|
terrno = TSDB_CODE_INVALID_OPTION;
|
||||||
}
|
}
|
||||||
newCfg.maxSessions = maxSessions;
|
newCfg.maxTables = maxTables;
|
||||||
} else {
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return newCfg;
|
return newCfg;
|
||||||
|
@ -913,6 +859,8 @@ void mgmtDropAllDbs(SAcctObj *pAcct) {
|
||||||
SDbObj *pDb = NULL;
|
SDbObj *pDb = NULL;
|
||||||
void * pNode = NULL;
|
void * pNode = NULL;
|
||||||
|
|
||||||
|
mPrint("acct:%s, all dbs will be dropped from sdb", pAcct->user);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
pNode = sdbFetchRow(tsDbSdb, pNode, (void **)&pDb);
|
pNode = sdbFetchRow(tsDbSdb, pNode, (void **)&pDb);
|
||||||
if (pDb == NULL) break;
|
if (pDb == NULL) break;
|
||||||
|
@ -931,5 +879,5 @@ void mgmtDropAllDbs(SAcctObj *pAcct) {
|
||||||
mgmtDecDbRef(pDb);
|
mgmtDecDbRef(pDb);
|
||||||
}
|
}
|
||||||
|
|
||||||
mTrace("acct:%s, all dbs is is dropped from sdb", pAcct->user, numOfDbs);
|
mPrint("acct:%s, all dbs:%d is dropped from sdb", pAcct->user, numOfDbs);
|
||||||
}
|
}
|
||||||
|
|
|
@ -260,7 +260,7 @@ void mgmtProcessCfgDnodeMsg(SQueuedMsg *pMsg) {
|
||||||
}
|
}
|
||||||
uint32_t dnodeIp = inet_addr(pCmCfgDnode->ip);
|
uint32_t dnodeIp = inet_addr(pCmCfgDnode->ip);
|
||||||
|
|
||||||
if (strcmp(pMsg->pUser->pAcct->user, "root") != 0) {
|
if (strcmp(pMsg->pUser->user, "root") != 0) {
|
||||||
rpcRsp.code = TSDB_CODE_NO_RIGHTS;
|
rpcRsp.code = TSDB_CODE_NO_RIGHTS;
|
||||||
} else {
|
} else {
|
||||||
SRpcIpSet ipSet = mgmtGetIpSetFromIp(dnodeIp);
|
SRpcIpSet ipSet = mgmtGetIpSetFromIp(dnodeIp);
|
||||||
|
@ -469,7 +469,7 @@ static void mgmtProcessCreateDnodeMsg(SQueuedMsg *pMsg) {
|
||||||
|
|
||||||
SCMCreateDnodeMsg *pCreate = pMsg->pCont;
|
SCMCreateDnodeMsg *pCreate = pMsg->pCont;
|
||||||
|
|
||||||
if (strcmp(pMsg->pUser->pAcct->user, "root") != 0) {
|
if (strcmp(pMsg->pUser->user, "root") != 0) {
|
||||||
rpcRsp.code = TSDB_CODE_NO_RIGHTS;
|
rpcRsp.code = TSDB_CODE_NO_RIGHTS;
|
||||||
} else {
|
} else {
|
||||||
uint32_t ip = inet_addr(pCreate->ip);
|
uint32_t ip = inet_addr(pCreate->ip);
|
||||||
|
@ -489,7 +489,7 @@ static void mgmtProcessDropDnodeMsg(SQueuedMsg *pMsg) {
|
||||||
SRpcMsg rpcRsp = {.handle = pMsg->thandle, .pCont = NULL, .contLen = 0, .code = 0, .msgType = 0};
|
SRpcMsg rpcRsp = {.handle = pMsg->thandle, .pCont = NULL, .contLen = 0, .code = 0, .msgType = 0};
|
||||||
|
|
||||||
SCMDropDnodeMsg *pDrop = pMsg->pCont;
|
SCMDropDnodeMsg *pDrop = pMsg->pCont;
|
||||||
if (strcmp(pMsg->pUser->pAcct->user, "root") != 0) {
|
if (strcmp(pMsg->pUser->user, "root") != 0) {
|
||||||
rpcRsp.code = TSDB_CODE_NO_RIGHTS;
|
rpcRsp.code = TSDB_CODE_NO_RIGHTS;
|
||||||
} else {
|
} else {
|
||||||
uint32_t ip = inet_addr(pDrop->ip);
|
uint32_t ip = inet_addr(pDrop->ip);
|
||||||
|
|
|
@ -400,6 +400,8 @@ static int32_t sdbInsertHash(SSdbTable *pTable, SSdbOper *pOper) {
|
||||||
|
|
||||||
if (pTable->keyType == SDB_KEY_AUTO) {
|
if (pTable->keyType == SDB_KEY_AUTO) {
|
||||||
pTable->autoIndex = MAX(pTable->autoIndex, *((uint32_t *)pOper->pObj));
|
pTable->autoIndex = MAX(pTable->autoIndex, *((uint32_t *)pOper->pObj));
|
||||||
|
} else {
|
||||||
|
pTable->autoIndex++;
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_mutex_unlock(&pTable->mutex);
|
pthread_mutex_unlock(&pTable->mutex);
|
||||||
|
|
|
@ -151,8 +151,13 @@ static void mgmtProcessMsgFromShell(SRpcMsg *rpcMsg) {
|
||||||
bool usePublicIp = (connInfo.serverIp == tsPublicIpInt);
|
bool usePublicIp = (connInfo.serverIp == tsPublicIpInt);
|
||||||
|
|
||||||
SRpcIpSet ipSet = {0};
|
SRpcIpSet ipSet = {0};
|
||||||
mgmtGetMnodeIpSet(&ipSet, usePublicIp);
|
ipSet.port = tsMnodeShellPort;
|
||||||
mTrace("conn from ip:%s user:%s redirect msg", taosIpStr(connInfo.clientIp), connInfo.user);
|
dnodeGetMnodeIpSet(&ipSet, usePublicIp);
|
||||||
|
mTrace("conn from shell ip:%s user:%s redirect msg, inUse:%d", taosIpStr(connInfo.clientIp), connInfo.user, ipSet.inUse);
|
||||||
|
for (int32_t i = 0; i < ipSet.numOfIps; ++i) {
|
||||||
|
mTrace("index:%d ip:%s", i, taosIpStr(ipSet.ip[i]));
|
||||||
|
}
|
||||||
|
|
||||||
rpcSendRedirectRsp(rpcMsg->handle, &ipSet);
|
rpcSendRedirectRsp(rpcMsg->handle, &ipSet);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -359,7 +364,7 @@ static void mgmtProcessHeartBeatMsg(SQueuedMsg *pMsg) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static int mgmtShellRetriveAuth(char *user, char *spi, char *encrypt, char *secret, char *ckey) {
|
static int mgmtShellRetriveAuth(char *user, char *spi, char *encrypt, char *secret, char *ckey) {
|
||||||
*spi = 0;
|
*spi = 1;
|
||||||
*encrypt = 0;
|
*encrypt = 0;
|
||||||
*ckey = 0;
|
*ckey = 0;
|
||||||
|
|
||||||
|
@ -429,9 +434,9 @@ static void mgmtProcessConnectMsg(SQueuedMsg *pMsg) {
|
||||||
connect_over:
|
connect_over:
|
||||||
rpcRsp.code = code;
|
rpcRsp.code = code;
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
mLError("user:%s login from %s, code:%d", connInfo.user, taosIpStr(connInfo.clientIp), code);
|
mLError("user:%s login from %s, result:%s", connInfo.user, taosIpStr(connInfo.clientIp), tstrerror(code));
|
||||||
} else {
|
} else {
|
||||||
mLPrint("user:%s login from %s, code:%d", connInfo.user, taosIpStr(connInfo.clientIp), code);
|
mLPrint("user:%s login from %s, result:%s", connInfo.user, taosIpStr(connInfo.clientIp), tstrerror(code));
|
||||||
rpcRsp.pCont = pConnectRsp;
|
rpcRsp.pCont = pConnectRsp;
|
||||||
rpcRsp.contLen = sizeof(SCMConnectRsp);
|
rpcRsp.contLen = sizeof(SCMConnectRsp);
|
||||||
}
|
}
|
||||||
|
@ -488,7 +493,7 @@ static bool mgmtCheckMsgReadOnly(SQueuedMsg *pMsg) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mgmtProcessUnSupportMsg(SRpcMsg *rpcMsg) {
|
static void mgmtProcessUnSupportMsg(SRpcMsg *rpcMsg) {
|
||||||
mError("%s is not processed in shell", taosMsg[rpcMsg->msgType]);
|
mError("%s is not processed in mnode shell", taosMsg[rpcMsg->msgType]);
|
||||||
SRpcMsg rpcRsp = {
|
SRpcMsg rpcRsp = {
|
||||||
.msgType = 0,
|
.msgType = 0,
|
||||||
.pCont = 0,
|
.pCont = 0,
|
||||||
|
|
|
@ -106,9 +106,9 @@ static int32_t mgmtChildTableActionInsert(SSdbOper *pOper) {
|
||||||
}
|
}
|
||||||
mgmtDecDbRef(pDb);
|
mgmtDecDbRef(pDb);
|
||||||
|
|
||||||
SAcctObj *pAcct = mgmtGetAcct(pDb->cfg.acct);
|
SAcctObj *pAcct = mgmtGetAcct(pDb->acct);
|
||||||
if (pAcct == NULL) {
|
if (pAcct == NULL) {
|
||||||
mError("ctable:%s, acct:%s not exists", pTable->info.tableId, pDb->cfg.acct);
|
mError("ctable:%s, acct:%s not exists", pTable->info.tableId, pDb->acct);
|
||||||
return TSDB_CODE_INVALID_ACCT;
|
return TSDB_CODE_INVALID_ACCT;
|
||||||
}
|
}
|
||||||
mgmtDecAcctRef(pAcct);
|
mgmtDecAcctRef(pAcct);
|
||||||
|
@ -148,9 +148,9 @@ static int32_t mgmtChildTableActionDelete(SSdbOper *pOper) {
|
||||||
}
|
}
|
||||||
mgmtDecDbRef(pDb);
|
mgmtDecDbRef(pDb);
|
||||||
|
|
||||||
SAcctObj *pAcct = mgmtGetAcct(pDb->cfg.acct);
|
SAcctObj *pAcct = mgmtGetAcct(pDb->acct);
|
||||||
if (pAcct == NULL) {
|
if (pAcct == NULL) {
|
||||||
mError("ctable:%s, acct:%s not exists", pTable->info.tableId, pDb->cfg.acct);
|
mError("ctable:%s, acct:%s not exists", pTable->info.tableId, pDb->acct);
|
||||||
return TSDB_CODE_INVALID_ACCT;
|
return TSDB_CODE_INVALID_ACCT;
|
||||||
}
|
}
|
||||||
mgmtDecAcctRef(pAcct);
|
mgmtDecAcctRef(pAcct);
|
||||||
|
@ -929,7 +929,7 @@ static int32_t mgmtAddSuperTableColumn(SDbObj *pDb, SSuperTableObj *pStable, SSc
|
||||||
pStable->numOfColumns += ncols;
|
pStable->numOfColumns += ncols;
|
||||||
pStable->sversion++;
|
pStable->sversion++;
|
||||||
|
|
||||||
SAcctObj *pAcct = mgmtGetAcct(pDb->cfg.acct);
|
SAcctObj *pAcct = mgmtGetAcct(pDb->acct);
|
||||||
if (pAcct != NULL) {
|
if (pAcct != NULL) {
|
||||||
pAcct->acctInfo.numOfTimeSeries += (ncols * pStable->numOfTables);
|
pAcct->acctInfo.numOfTimeSeries += (ncols * pStable->numOfTables);
|
||||||
mgmtDecAcctRef(pAcct);
|
mgmtDecAcctRef(pAcct);
|
||||||
|
@ -966,7 +966,7 @@ static int32_t mgmtDropSuperTableColumn(SDbObj *pDb, SSuperTableObj *pStable, ch
|
||||||
int32_t schemaSize = sizeof(SSchema) * (pStable->numOfTags + pStable->numOfColumns);
|
int32_t schemaSize = sizeof(SSchema) * (pStable->numOfTags + pStable->numOfColumns);
|
||||||
pStable->schema = realloc(pStable->schema, schemaSize);
|
pStable->schema = realloc(pStable->schema, schemaSize);
|
||||||
|
|
||||||
SAcctObj *pAcct = mgmtGetAcct(pDb->cfg.acct);
|
SAcctObj *pAcct = mgmtGetAcct(pDb->acct);
|
||||||
if (pAcct != NULL) {
|
if (pAcct != NULL) {
|
||||||
pAcct->acctInfo.numOfTimeSeries -= pStable->numOfTables;
|
pAcct->acctInfo.numOfTimeSeries -= pStable->numOfTables;
|
||||||
mgmtDecAcctRef(pAcct);
|
mgmtDecAcctRef(pAcct);
|
||||||
|
@ -1112,12 +1112,11 @@ void mgmtDropAllSuperTables(SDbObj *pDropDb) {
|
||||||
int32_t dbNameLen = strlen(pDropDb->name);
|
int32_t dbNameLen = strlen(pDropDb->name);
|
||||||
SSuperTableObj *pTable = NULL;
|
SSuperTableObj *pTable = NULL;
|
||||||
|
|
||||||
|
mPrint("db:%s, all super tables will be dropped from sdb", pDropDb->name);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
mgmtDecTableRef(pTable);
|
|
||||||
pNode = sdbFetchRow(tsSuperTableSdb, pNode, (void **)&pTable);
|
pNode = sdbFetchRow(tsSuperTableSdb, pNode, (void **)&pTable);
|
||||||
if (pTable == NULL) {
|
if (pTable == NULL) break;
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strncmp(pDropDb->name, pTable->info.tableId, dbNameLen) == 0) {
|
if (strncmp(pDropDb->name, pTable->info.tableId, dbNameLen) == 0) {
|
||||||
SSdbOper oper = {
|
SSdbOper oper = {
|
||||||
|
@ -1128,10 +1127,12 @@ void mgmtDropAllSuperTables(SDbObj *pDropDb) {
|
||||||
sdbDeleteRow(&oper);
|
sdbDeleteRow(&oper);
|
||||||
pNode = pLastNode;
|
pNode = pLastNode;
|
||||||
numOfTables ++;
|
numOfTables ++;
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mgmtDecTableRef(pTable);
|
||||||
}
|
}
|
||||||
mTrace("db:%s, all super tables:%d is dropped from sdb", pDropDb->name, numOfTables);
|
|
||||||
|
mPrint("db:%s, all super tables:%d is dropped from sdb", pDropDb->name, numOfTables);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t mgmtSetSchemaFromSuperTable(SSchema *pSchema, SSuperTableObj *pTable) {
|
static int32_t mgmtSetSchemaFromSuperTable(SSchema *pSchema, SSuperTableObj *pTable) {
|
||||||
|
@ -1217,7 +1218,7 @@ static void mgmtProcessSuperTableVgroupMsg(SQueuedMsg *pMsg) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mgmtProcessDropSuperTableRsp(SRpcMsg *rpcMsg) {
|
static void mgmtProcessDropSuperTableRsp(SRpcMsg *rpcMsg) {
|
||||||
mTrace("drop stable rsp received, handle:%p code:%d", rpcMsg->handle, rpcMsg->code);
|
mTrace("drop stable rsp received, handle:%p code:%s", rpcMsg->handle, tstrerror(rpcMsg->code));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void *mgmtBuildCreateChildTableMsg(SCMCreateTableMsg *pMsg, SChildTableObj *pTable) {
|
static void *mgmtBuildCreateChildTableMsg(SCMCreateTableMsg *pMsg, SChildTableObj *pTable) {
|
||||||
|
@ -1241,7 +1242,7 @@ static void *mgmtBuildCreateChildTableMsg(SCMCreateTableMsg *pMsg, SChildTableOb
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(pCreate->tableId, pTable->info.tableId, TSDB_TABLE_ID_LEN);
|
mgmtExtractTableName(pTable->info.tableId, pCreate->tableId);
|
||||||
pCreate->contLen = htonl(contLen);
|
pCreate->contLen = htonl(contLen);
|
||||||
pCreate->vgId = htonl(pTable->vgId);
|
pCreate->vgId = htonl(pTable->vgId);
|
||||||
pCreate->tableType = pTable->info.type;
|
pCreate->tableType = pTable->info.type;
|
||||||
|
@ -1251,7 +1252,7 @@ static void *mgmtBuildCreateChildTableMsg(SCMCreateTableMsg *pMsg, SChildTableOb
|
||||||
pCreate->uid = htobe64(pTable->uid);
|
pCreate->uid = htobe64(pTable->uid);
|
||||||
|
|
||||||
if (pTable->info.type == TSDB_CHILD_TABLE) {
|
if (pTable->info.type == TSDB_CHILD_TABLE) {
|
||||||
memcpy(pCreate->superTableId, pTable->superTable->info.tableId, TSDB_TABLE_ID_LEN + 1);
|
mgmtExtractTableName(pTable->superTable->info.tableId, pCreate->superTableId);
|
||||||
pCreate->numOfColumns = htons(pTable->superTable->numOfColumns);
|
pCreate->numOfColumns = htons(pTable->superTable->numOfColumns);
|
||||||
pCreate->numOfTags = htons(pTable->superTable->numOfTags);
|
pCreate->numOfTags = htons(pTable->superTable->numOfTags);
|
||||||
pCreate->sversion = htonl(pTable->superTable->sversion);
|
pCreate->sversion = htonl(pTable->superTable->sversion);
|
||||||
|
@ -1504,7 +1505,7 @@ static int32_t mgmtAddNormalTableColumn(SDbObj *pDb, SChildTableObj *pTable, SSc
|
||||||
pTable->numOfColumns += ncols;
|
pTable->numOfColumns += ncols;
|
||||||
pTable->sversion++;
|
pTable->sversion++;
|
||||||
|
|
||||||
SAcctObj *pAcct = mgmtGetAcct(pDb->cfg.acct);
|
SAcctObj *pAcct = mgmtGetAcct(pDb->acct);
|
||||||
if (pAcct != NULL) {
|
if (pAcct != NULL) {
|
||||||
pAcct->acctInfo.numOfTimeSeries += ncols;
|
pAcct->acctInfo.numOfTimeSeries += ncols;
|
||||||
mgmtDecAcctRef(pAcct);
|
mgmtDecAcctRef(pAcct);
|
||||||
|
@ -1538,7 +1539,7 @@ static int32_t mgmtDropNormalTableColumn(SDbObj *pDb, SChildTableObj *pTable, ch
|
||||||
pTable->numOfColumns--;
|
pTable->numOfColumns--;
|
||||||
pTable->sversion++;
|
pTable->sversion++;
|
||||||
|
|
||||||
SAcctObj *pAcct = mgmtGetAcct(pDb->cfg.acct);
|
SAcctObj *pAcct = mgmtGetAcct(pDb->acct);
|
||||||
if (pAcct != NULL) {
|
if (pAcct != NULL) {
|
||||||
pAcct->acctInfo.numOfTimeSeries--;
|
pAcct->acctInfo.numOfTimeSeries--;
|
||||||
mgmtDecAcctRef(pAcct);
|
mgmtDecAcctRef(pAcct);
|
||||||
|
@ -1681,12 +1682,11 @@ void mgmtDropAllChildTables(SDbObj *pDropDb) {
|
||||||
int32_t dbNameLen = strlen(pDropDb->name);
|
int32_t dbNameLen = strlen(pDropDb->name);
|
||||||
SChildTableObj *pTable = NULL;
|
SChildTableObj *pTable = NULL;
|
||||||
|
|
||||||
|
mPrint("db:%s, all child tables will be dropped from sdb", pDropDb->name);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
mgmtDecTableRef(pTable);
|
|
||||||
pNode = sdbFetchRow(tsChildTableSdb, pNode, (void **)&pTable);
|
pNode = sdbFetchRow(tsChildTableSdb, pNode, (void **)&pTable);
|
||||||
if (pTable == NULL) {
|
if (pTable == NULL) break;
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strncmp(pDropDb->name, pTable->info.tableId, dbNameLen) == 0) {
|
if (strncmp(pDropDb->name, pTable->info.tableId, dbNameLen) == 0) {
|
||||||
SSdbOper oper = {
|
SSdbOper oper = {
|
||||||
|
@ -1697,11 +1697,11 @@ void mgmtDropAllChildTables(SDbObj *pDropDb) {
|
||||||
sdbDeleteRow(&oper);
|
sdbDeleteRow(&oper);
|
||||||
pNode = pLastNode;
|
pNode = pLastNode;
|
||||||
numOfTables++;
|
numOfTables++;
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
mgmtDecTableRef(pTable);
|
||||||
}
|
}
|
||||||
|
|
||||||
mTrace("db:%s, all child tables:%d is dropped from sdb", pDropDb->name, numOfTables);
|
mPrint("db:%s, all child tables:%d is dropped from sdb", pDropDb->name, numOfTables);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mgmtDropAllChildTablesInStable(SSuperTableObj *pStable) {
|
static void mgmtDropAllChildTablesInStable(SSuperTableObj *pStable) {
|
||||||
|
@ -1710,12 +1710,11 @@ static void mgmtDropAllChildTablesInStable(SSuperTableObj *pStable) {
|
||||||
int32_t numOfTables = 0;
|
int32_t numOfTables = 0;
|
||||||
SChildTableObj *pTable = NULL;
|
SChildTableObj *pTable = NULL;
|
||||||
|
|
||||||
|
mPrint("stable:%s, all child tables will dropped from sdb", pStable->info.tableId, numOfTables);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
mgmtDecTableRef(pTable);
|
|
||||||
pNode = sdbFetchRow(tsChildTableSdb, pNode, (void **)&pTable);
|
pNode = sdbFetchRow(tsChildTableSdb, pNode, (void **)&pTable);
|
||||||
if (pTable == NULL) {
|
if (pTable == NULL) break;
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pTable->superTable == pStable) {
|
if (pTable->superTable == pStable) {
|
||||||
SSdbOper oper = {
|
SSdbOper oper = {
|
||||||
|
@ -1726,11 +1725,12 @@ static void mgmtDropAllChildTablesInStable(SSuperTableObj *pStable) {
|
||||||
sdbDeleteRow(&oper);
|
sdbDeleteRow(&oper);
|
||||||
pNode = pLastNode;
|
pNode = pLastNode;
|
||||||
numOfTables++;
|
numOfTables++;
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mTrace("stable:%s, all child tables:%d is dropped from sdb", pStable->info.tableId, numOfTables);
|
mgmtDecTableRef(pTable);
|
||||||
|
}
|
||||||
|
|
||||||
|
mPrint("stable:%s, all child tables:%d is dropped from sdb", pStable->info.tableId, numOfTables);
|
||||||
}
|
}
|
||||||
|
|
||||||
static SChildTableObj* mgmtGetTableByPos(uint32_t dnodeId, int32_t vnode, int32_t sid) {
|
static SChildTableObj* mgmtGetTableByPos(uint32_t dnodeId, int32_t vnode, int32_t sid) {
|
||||||
|
@ -1876,7 +1876,7 @@ static void mgmtProcessCreateChildTableRsp(SRpcMsg *rpcMsg) {
|
||||||
|
|
||||||
// not implemented yet
|
// not implemented yet
|
||||||
static void mgmtProcessAlterTableRsp(SRpcMsg *rpcMsg) {
|
static void mgmtProcessAlterTableRsp(SRpcMsg *rpcMsg) {
|
||||||
mTrace("alter table rsp received, handle:%p code:%d", rpcMsg->handle, rpcMsg->code);
|
mTrace("alter table rsp received, handle:%p code:%s", rpcMsg->handle, tstrerror(rpcMsg->code));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mgmtProcessMultiTableMetaMsg(SQueuedMsg *pMsg) {
|
static void mgmtProcessMultiTableMetaMsg(SQueuedMsg *pMsg) {
|
||||||
|
|
|
@ -353,6 +353,7 @@ static void mgmtProcessCreateUserMsg(SQueuedMsg *pMsg) {
|
||||||
mLPrint("user:%s, is created by %s", pCreate->user, pOperUser->user);
|
mLPrint("user:%s, is created by %s", pCreate->user, pOperUser->user);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
mError("user:%s, no rights to create user", pOperUser->user);
|
||||||
code = TSDB_CODE_NO_RIGHTS;
|
code = TSDB_CODE_NO_RIGHTS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -398,6 +399,7 @@ static void mgmtProcessAlterUserMsg(SQueuedMsg *pMsg) {
|
||||||
code = mgmtUpdateUser(pUser);
|
code = mgmtUpdateUser(pUser);
|
||||||
mLPrint("user:%s, password is altered by %s, result:%s", pUser->user, pOperUser->user, tstrerror(code));
|
mLPrint("user:%s, password is altered by %s, result:%s", pUser->user, pOperUser->user, tstrerror(code));
|
||||||
} else {
|
} else {
|
||||||
|
mError("user:%s, no rights to ater user", pOperUser->user);
|
||||||
code = TSDB_CODE_NO_RIGHTS;
|
code = TSDB_CODE_NO_RIGHTS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -440,11 +442,13 @@ static void mgmtProcessAlterUserMsg(SQueuedMsg *pMsg) {
|
||||||
code = mgmtUpdateUser(pUser);
|
code = mgmtUpdateUser(pUser);
|
||||||
mLPrint("user:%s, privilege is altered by %s, result:%s", pUser->user, pOperUser->user, tstrerror(code));
|
mLPrint("user:%s, privilege is altered by %s, result:%s", pUser->user, pOperUser->user, tstrerror(code));
|
||||||
} else {
|
} else {
|
||||||
|
mError("user:%s, no rights to ater user", pOperUser->user);
|
||||||
code = TSDB_CODE_NO_RIGHTS;
|
code = TSDB_CODE_NO_RIGHTS;
|
||||||
}
|
}
|
||||||
|
|
||||||
mgmtSendSimpleResp(pMsg->thandle, code);
|
mgmtSendSimpleResp(pMsg->thandle, code);
|
||||||
} else {
|
} else {
|
||||||
|
mError("user:%s, no rights to ater user", pOperUser->user);
|
||||||
mgmtSendSimpleResp(pMsg->thandle, TSDB_CODE_NO_RIGHTS);
|
mgmtSendSimpleResp(pMsg->thandle, TSDB_CODE_NO_RIGHTS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -71,14 +71,14 @@ static int32_t mgmtVgroupActionInsert(SSdbOper *pOper) {
|
||||||
pVgroup->prev = NULL;
|
pVgroup->prev = NULL;
|
||||||
pVgroup->next = NULL;
|
pVgroup->next = NULL;
|
||||||
|
|
||||||
int32_t size = sizeof(SChildTableObj *) * pDb->cfg.maxSessions;
|
int32_t size = sizeof(SChildTableObj *) * pDb->cfg.maxTables;
|
||||||
pVgroup->tableList = calloc(pDb->cfg.maxSessions, sizeof(SChildTableObj *));
|
pVgroup->tableList = calloc(pDb->cfg.maxTables, sizeof(SChildTableObj *));
|
||||||
if (pVgroup->tableList == NULL) {
|
if (pVgroup->tableList == NULL) {
|
||||||
mError("vgroup:%d, failed to malloc(size:%d) for the tableList of vgroups", pVgroup->vgId, size);
|
mError("vgroup:%d, failed to malloc(size:%d) for the tableList of vgroups", pVgroup->vgId, size);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
pVgroup->idPool = taosInitIdPool(pDb->cfg.maxSessions);
|
pVgroup->idPool = taosInitIdPool(pDb->cfg.maxTables);
|
||||||
if (pVgroup->idPool == NULL) {
|
if (pVgroup->idPool == NULL) {
|
||||||
mError("vgroup:%d, failed to taosInitIdPool for vgroups", pVgroup->vgId);
|
mError("vgroup:%d, failed to taosInitIdPool for vgroups", pVgroup->vgId);
|
||||||
tfree(pVgroup->tableList);
|
tfree(pVgroup->tableList);
|
||||||
|
@ -146,15 +146,15 @@ static int32_t mgmtVgroupActionUpdate(SSdbOper *pOper) {
|
||||||
int32_t oldTables = taosIdPoolMaxSize(pVgroup->idPool);
|
int32_t oldTables = taosIdPoolMaxSize(pVgroup->idPool);
|
||||||
SDbObj *pDb = pVgroup->pDb;
|
SDbObj *pDb = pVgroup->pDb;
|
||||||
if (pDb != NULL) {
|
if (pDb != NULL) {
|
||||||
if (pDb->cfg.maxSessions != oldTables) {
|
if (pDb->cfg.maxTables != oldTables) {
|
||||||
mPrint("vgroup:%d tables change from %d to %d", pVgroup->vgId, oldTables, pDb->cfg.maxSessions);
|
mPrint("vgroup:%d tables change from %d to %d", pVgroup->vgId, oldTables, pDb->cfg.maxTables);
|
||||||
taosUpdateIdPool(pVgroup->idPool, pDb->cfg.maxSessions);
|
taosUpdateIdPool(pVgroup->idPool, pDb->cfg.maxTables);
|
||||||
int32_t size = sizeof(SChildTableObj *) * pDb->cfg.maxSessions;
|
int32_t size = sizeof(SChildTableObj *) * pDb->cfg.maxTables;
|
||||||
pVgroup->tableList = (SChildTableObj **)realloc(pVgroup->tableList, size);
|
pVgroup->tableList = (SChildTableObj **)realloc(pVgroup->tableList, size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mTrace("vgroup:%d, is updated, tables:%d numOfVnode:%d", pVgroup->vgId, pDb->cfg.maxSessions, pVgroup->numOfVnodes);
|
mTrace("vgroup:%d, is updated, tables:%d numOfVnode:%d", pVgroup->vgId, pDb->cfg.maxTables, pVgroup->numOfVnodes);
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -511,7 +511,7 @@ void mgmtAddTableIntoVgroup(SVgObj *pVgroup, SChildTableObj *pTable) {
|
||||||
pVgroup->numOfTables++;
|
pVgroup->numOfTables++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pVgroup->numOfTables >= pVgroup->pDb->cfg.maxSessions)
|
if (pVgroup->numOfTables >= pVgroup->pDb->cfg.maxTables)
|
||||||
mgmtAddVgroupIntoDbTail(pVgroup);
|
mgmtAddVgroupIntoDbTail(pVgroup);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -522,7 +522,7 @@ void mgmtRemoveTableFromVgroup(SVgObj *pVgroup, SChildTableObj *pTable) {
|
||||||
pVgroup->numOfTables--;
|
pVgroup->numOfTables--;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pVgroup->numOfTables >= pVgroup->pDb->cfg.maxSessions)
|
if (pVgroup->numOfTables >= pVgroup->pDb->cfg.maxTables)
|
||||||
mgmtAddVgroupIntoDbTail(pVgroup);
|
mgmtAddVgroupIntoDbTail(pVgroup);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -535,16 +535,16 @@ SMDCreateVnodeMsg *mgmtBuildCreateVnodeMsg(SVgObj *pVgroup) {
|
||||||
|
|
||||||
SMDVnodeCfg *pCfg = &pVnode->cfg;
|
SMDVnodeCfg *pCfg = &pVnode->cfg;
|
||||||
pCfg->vgId = htonl(pVgroup->vgId);
|
pCfg->vgId = htonl(pVgroup->vgId);
|
||||||
pCfg->maxTables = htonl(pDb->cfg.maxSessions);
|
pCfg->maxTables = htonl(pDb->cfg.maxTables);
|
||||||
pCfg->maxCacheSize = htobe64((int64_t)pDb->cfg.cacheBlockSize * pDb->cfg.cacheNumOfBlocks.totalBlocks);
|
pCfg->maxCacheSize = htobe64(pDb->cfg.maxCacheSize);
|
||||||
pCfg->maxCacheSize = htobe64(-1);
|
pCfg->maxCacheSize = htobe64(-1); //TODO
|
||||||
pCfg->minRowsPerFileBlock = htonl(-1);
|
pCfg->minRowsPerFileBlock = htonl(-1); //TODO
|
||||||
pCfg->maxRowsPerFileBlock = htonl(-1);
|
pCfg->maxRowsPerFileBlock = htonl(-1); //TODO
|
||||||
pCfg->daysPerFile = htonl(pDb->cfg.daysPerFile);
|
pCfg->daysPerFile = htonl(pDb->cfg.daysPerFile);
|
||||||
pCfg->daysToKeep1 = htonl(pDb->cfg.daysToKeep1);
|
pCfg->daysToKeep1 = htonl(pDb->cfg.daysToKeep1);
|
||||||
pCfg->daysToKeep2 = htonl(pDb->cfg.daysToKeep2);
|
pCfg->daysToKeep2 = htonl(pDb->cfg.daysToKeep2);
|
||||||
pCfg->daysToKeep = htonl(pDb->cfg.daysToKeep);
|
pCfg->daysToKeep = htonl(pDb->cfg.daysToKeep);
|
||||||
pCfg->daysToKeep = htonl(-1);
|
pCfg->daysToKeep = htonl(-1); //TODO
|
||||||
pCfg->commitTime = htonl(pDb->cfg.commitTime);
|
pCfg->commitTime = htonl(pDb->cfg.commitTime);
|
||||||
pCfg->precision = pDb->cfg.precision;
|
pCfg->precision = pDb->cfg.precision;
|
||||||
pCfg->compression = pDb->cfg.compression;
|
pCfg->compression = pDb->cfg.compression;
|
||||||
|
@ -744,12 +744,13 @@ static void mgmtProcessVnodeCfgMsg(SRpcMsg *rpcMsg) {
|
||||||
void mgmtDropAllVgroups(SDbObj *pDropDb) {
|
void mgmtDropAllVgroups(SDbObj *pDropDb) {
|
||||||
void *pNode = NULL;
|
void *pNode = NULL;
|
||||||
void *pLastNode = NULL;
|
void *pLastNode = NULL;
|
||||||
int32_t numOfTables = 0;
|
int32_t numOfVgroups = 0;
|
||||||
int32_t dbNameLen = strlen(pDropDb->name);
|
int32_t dbNameLen = strlen(pDropDb->name);
|
||||||
SVgObj *pVgroup = NULL;
|
SVgObj *pVgroup = NULL;
|
||||||
|
|
||||||
|
mPrint("db:%s, all vgroups will be dropped from sdb", pDropDb->name);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
mgmtDecVgroupRef(pVgroup);
|
|
||||||
pNode = sdbFetchRow(tsVgroupSdb, pNode, (void **)&pVgroup);
|
pNode = sdbFetchRow(tsVgroupSdb, pNode, (void **)&pVgroup);
|
||||||
if (pVgroup == NULL) break;
|
if (pVgroup == NULL) break;
|
||||||
|
|
||||||
|
@ -761,12 +762,14 @@ void mgmtDropAllVgroups(SDbObj *pDropDb) {
|
||||||
};
|
};
|
||||||
sdbDeleteRow(&oper);
|
sdbDeleteRow(&oper);
|
||||||
pNode = pLastNode;
|
pNode = pLastNode;
|
||||||
numOfTables++;
|
numOfVgroups++;
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mTrace("db:%s, all vgroups is dropped from sdb", pDropDb->name, numOfTables);
|
mgmtSendDropVgroupMsg(pVgroup, NULL);
|
||||||
|
mgmtDecVgroupRef(pVgroup);
|
||||||
|
}
|
||||||
|
|
||||||
|
mPrint("db:%s, all vgroups:%d is dropped from sdb", pDropDb->name, numOfVgroups);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mgmtAlterVgroup(SVgObj *pVgroup, void *ahandle) {
|
void mgmtAlterVgroup(SVgObj *pVgroup, void *ahandle) {
|
||||||
|
|
|
@ -39,9 +39,4 @@ extern int32_t httpDebugFlag;
|
||||||
#define httpPrint(...) \
|
#define httpPrint(...) \
|
||||||
{ taosPrintLog("HTP ", 255, __VA_ARGS__); }
|
{ taosPrintLog("HTP ", 255, __VA_ARGS__); }
|
||||||
|
|
||||||
#define httpLError(...) taosLogError(__VA_ARGS__) httpError(__VA_ARGS__)
|
|
||||||
#define httpLWarn(...) taosLogWarn(__VA_ARGS__) httpWarn(__VA_ARGS__)
|
|
||||||
#define httpLPrint(...) taosLogPrint(__VA_ARGS__) httpPrint(__VA_ARGS__)
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -13,11 +13,13 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "gcHandle.h"
|
#define _DEFAULT_SOURCE
|
||||||
|
#include "os.h"
|
||||||
#include "cJSON.h"
|
#include "cJSON.h"
|
||||||
|
#include "httpLog.h"
|
||||||
|
#include "gcHandle.h"
|
||||||
#include "gcJson.h"
|
#include "gcJson.h"
|
||||||
#include "taosdef.h"
|
#include "taosdef.h"
|
||||||
#include "httpLog.h"
|
|
||||||
|
|
||||||
static HttpDecodeMethod gcDecodeMethod = {"grafana", gcProcessRequest};
|
static HttpDecodeMethod gcDecodeMethod = {"grafana", gcProcessRequest};
|
||||||
static HttpEncodeMethod gcHeartBeatMethod = {NULL, gcSendHeartBeatResp, NULL, NULL, NULL, NULL, NULL, NULL};
|
static HttpEncodeMethod gcHeartBeatMethod = {NULL, gcSendHeartBeatResp, NULL, NULL, NULL, NULL, NULL, NULL};
|
||||||
|
|
|
@ -13,10 +13,8 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdint.h>
|
#define _DEFAULT_SOURCE
|
||||||
#include <string.h>
|
#include "os.h"
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#include "gcHandle.h"
|
#include "gcHandle.h"
|
||||||
#include "gcJson.h"
|
#include "gcJson.h"
|
||||||
#include "httpJson.h"
|
#include "httpJson.h"
|
||||||
|
|
|
@ -13,12 +13,14 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define _DEFAULT_SOURCE
|
||||||
#include "os.h"
|
#include "os.h"
|
||||||
|
#include "tkey.h"
|
||||||
#include "tutil.h"
|
#include "tutil.h"
|
||||||
#include "http.h"
|
#include "http.h"
|
||||||
#include "httpLog.h"
|
#include "httpLog.h"
|
||||||
#include "httpHandle.h"
|
#include "httpHandle.h"
|
||||||
#include "tkey.h"
|
|
||||||
#define KEY_DES_4 4971256377704625728L
|
#define KEY_DES_4 4971256377704625728L
|
||||||
|
|
||||||
bool httpParseBasicAuthToken(HttpContext *pContext, char *token, int len) {
|
bool httpParseBasicAuthToken(HttpContext *pContext, char *token, int len) {
|
||||||
|
|
|
@ -13,6 +13,9 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define _DEFAULT_SOURCE
|
||||||
|
|
||||||
|
|
||||||
char* httpMsg[] = {
|
char* httpMsg[] = {
|
||||||
"success", // 0
|
"success", // 0
|
||||||
"http server is not online", // 1
|
"http server is not online", // 1
|
||||||
|
|
|
@ -13,21 +13,18 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <arpa/inet.h>
|
#define _DEFAULT_SOURCE
|
||||||
#include <stdint.h>
|
#include "os.h"
|
||||||
#include <string.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#include "http.h"
|
|
||||||
#include "httpCode.h"
|
|
||||||
#include "httpHandle.h"
|
|
||||||
#include "httpResp.h"
|
|
||||||
#include "shash.h"
|
|
||||||
#include "taos.h"
|
#include "taos.h"
|
||||||
#include "tglobal.h"
|
#include "tglobal.h"
|
||||||
#include "tsocket.h"
|
#include "tsocket.h"
|
||||||
#include "ttimer.h"
|
#include "ttimer.h"
|
||||||
|
#include "shash.h"
|
||||||
|
#include "http.h"
|
||||||
#include "httpLog.h"
|
#include "httpLog.h"
|
||||||
|
#include "httpCode.h"
|
||||||
|
#include "httpHandle.h"
|
||||||
|
#include "httpResp.h"
|
||||||
|
|
||||||
void httpToLowerUrl(char* url) {
|
void httpToLowerUrl(char* url) {
|
||||||
/*ignore case */
|
/*ignore case */
|
||||||
|
|
|
@ -13,20 +13,15 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <netinet/in.h>
|
#define _DEFAULT_SOURCE
|
||||||
#include <stdio.h>
|
#include "os.h"
|
||||||
#include <stdlib.h>
|
#include "taosmsg.h"
|
||||||
#include <string.h>
|
#include "taoserror.h"
|
||||||
#include <unistd.h>
|
|
||||||
#include <errno.h>
|
|
||||||
|
|
||||||
#include "http.h"
|
#include "http.h"
|
||||||
|
#include "httpLog.h"
|
||||||
#include "httpCode.h"
|
#include "httpCode.h"
|
||||||
#include "httpJson.h"
|
#include "httpJson.h"
|
||||||
#include "httpResp.h"
|
#include "httpResp.h"
|
||||||
#include "taosmsg.h"
|
|
||||||
#include "httpLog.h"
|
|
||||||
#include "taoserror.h"
|
|
||||||
|
|
||||||
#define MAX_NUM_STR_SZ 25
|
#define MAX_NUM_STR_SZ 25
|
||||||
|
|
||||||
|
|
|
@ -13,14 +13,14 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "httpResp.h"
|
#define _DEFAULT_SOURCE
|
||||||
#include <stdio.h>
|
#include "os.h"
|
||||||
#include <string.h>
|
#include "taoserror.h"
|
||||||
#include "httpCode.h"
|
|
||||||
#include "httpJson.h"
|
|
||||||
#include "taosmsg.h"
|
#include "taosmsg.h"
|
||||||
#include "httpLog.h"
|
#include "httpLog.h"
|
||||||
#include "taoserror.h"
|
#include "httpResp.h"
|
||||||
|
#include "httpCode.h"
|
||||||
|
#include "httpJson.h"
|
||||||
|
|
||||||
const char *httpKeepAliveStr[] = {"", "Connection: Keep-Alive\r\n", "Connection: Close\r\n"};
|
const char *httpKeepAliveStr[] = {"", "Connection: Keep-Alive\r\n", "Connection: Close\r\n"};
|
||||||
|
|
||||||
|
@ -44,9 +44,8 @@ const char *httpRespTemplate[] = {
|
||||||
"%s 200 OK\r\nAccess-Control-Allow-Origin:*\r\n%sAccess-Control-Allow-Methods:POST, GET, OPTIONS, DELETE, PUT\r\nAccess-Control-Allow-Headers:Accept, Content-Type\r\nContent-Type: application/json;charset=utf-8\r\nContent-Length: %d\r\n\r\n"
|
"%s 200 OK\r\nAccess-Control-Allow-Origin:*\r\n%sAccess-Control-Allow-Methods:POST, GET, OPTIONS, DELETE, PUT\r\nAccess-Control-Allow-Headers:Accept, Content-Type\r\nContent-Type: application/json;charset=utf-8\r\nContent-Length: %d\r\n\r\n"
|
||||||
};
|
};
|
||||||
|
|
||||||
void httpSendErrorRespImp(HttpContext *pContext, int httpCode, char *httpCodeStr, int errNo, char *desc) {
|
static void httpSendErrorRespImp(HttpContext *pContext, int httpCode, char *httpCodeStr, int errNo, char *desc) {
|
||||||
httpError("context:%p, fd:%d, ip:%s, code:%d, error:%d:%s", pContext, pContext->fd, pContext->ipstr, httpCode, errNo,
|
httpError("context:%p, fd:%d, ip:%s, code:%d, error:%s", pContext, pContext->fd, pContext->ipstr, httpCode, desc);
|
||||||
desc);
|
|
||||||
|
|
||||||
char head[512] = {0};
|
char head[512] = {0};
|
||||||
char body[512] = {0};
|
char body[512] = {0};
|
||||||
|
@ -184,7 +183,7 @@ void httpSendErrorResp(HttpContext *pContext, int errNo) { httpSendErrorRespWith
|
||||||
|
|
||||||
void httpSendTaosdErrorResp(HttpContext *pContext, int errCode) {
|
void httpSendTaosdErrorResp(HttpContext *pContext, int errCode) {
|
||||||
int httpCode = 400;
|
int httpCode = 400;
|
||||||
httpSendErrorRespImp(pContext, httpCode, "Bad Request", errCode, (char*)tstrerror(errCode));
|
httpSendErrorRespImp(pContext, httpCode, "Bad Request", 1000, (char*)tstrerror(errCode));
|
||||||
}
|
}
|
||||||
|
|
||||||
void httpSendTaosdInvalidSqlErrorResp(HttpContext *pContext, char* errMsg) {
|
void httpSendTaosdInvalidSqlErrorResp(HttpContext *pContext, char* errMsg) {
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define _DEFAULT_SOURCE
|
||||||
#include "os.h"
|
#include "os.h"
|
||||||
#include "taosmsg.h"
|
#include "taosmsg.h"
|
||||||
#include "tsocket.h"
|
#include "tsocket.h"
|
||||||
|
|
|
@ -13,20 +13,18 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <string.h>
|
#define _DEFAULT_SOURCE
|
||||||
#include <time.h>
|
#include "os.h"
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#include "http.h"
|
|
||||||
#include "httpCode.h"
|
|
||||||
#include "httpHandle.h"
|
|
||||||
#include "httpResp.h"
|
|
||||||
|
|
||||||
#include "shash.h"
|
#include "shash.h"
|
||||||
#include "taos.h"
|
#include "taos.h"
|
||||||
#include "ttime.h"
|
#include "ttime.h"
|
||||||
#include "ttimer.h"
|
#include "ttimer.h"
|
||||||
|
#include "http.h"
|
||||||
#include "httpLog.h"
|
#include "httpLog.h"
|
||||||
|
#include "httpCode.h"
|
||||||
|
#include "httpHandle.h"
|
||||||
|
#include "httpResp.h"
|
||||||
|
|
||||||
|
|
||||||
void httpAccessSession(HttpContext *pContext) {
|
void httpAccessSession(HttpContext *pContext) {
|
||||||
HttpServer *server = pContext->pThread->pServer;
|
HttpServer *server = pContext->pThread->pServer;
|
||||||
|
|
|
@ -13,15 +13,16 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define _DEFAULT_SOURCE
|
||||||
#include "os.h"
|
#include "os.h"
|
||||||
|
#include "tnote.h"
|
||||||
|
#include "taos.h"
|
||||||
|
#include "tsclient.h"
|
||||||
#include "http.h"
|
#include "http.h"
|
||||||
|
#include "httpLog.h"
|
||||||
#include "httpCode.h"
|
#include "httpCode.h"
|
||||||
#include "httpHandle.h"
|
#include "httpHandle.h"
|
||||||
#include "httpResp.h"
|
#include "httpResp.h"
|
||||||
#include "taos.h"
|
|
||||||
#include "tsclient.h"
|
|
||||||
#include "tnote.h"
|
|
||||||
#include "httpLog.h"
|
|
||||||
|
|
||||||
void *taos_connect_a(char *ip, char *user, char *pass, char *db, uint16_t port, void (*fp)(void *, TAOS_RES *, int),
|
void *taos_connect_a(char *ip, char *user, char *pass, char *db, uint16_t port, void (*fp)(void *, TAOS_RES *, int),
|
||||||
void *param, void **taos);
|
void *param, void **taos);
|
||||||
|
@ -55,8 +56,8 @@ void httpProcessMultiSqlRetrieveCallBack(void *param, TAOS_RES *result, int numO
|
||||||
pContext, pContext->fd, pContext->ipstr, pContext->user, multiCmds->pos, numOfRows, sql);
|
pContext, pContext->fd, pContext->ipstr, pContext->user, multiCmds->pos, numOfRows, sql);
|
||||||
|
|
||||||
if (numOfRows < 0) {
|
if (numOfRows < 0) {
|
||||||
httpError("context:%p, fd:%d, ip:%s, user:%s, process pos:%d, retrieve failed code:%d, sql:%s",
|
httpError("context:%p, fd:%d, ip:%s, user:%s, process pos:%d, retrieve failed code:%s, sql:%s",
|
||||||
pContext, pContext->fd, pContext->ipstr, pContext->user, multiCmds->pos, -numOfRows, sql);
|
pContext, pContext->fd, pContext->ipstr, pContext->user, multiCmds->pos, tstrerror(numOfRows), sql);
|
||||||
} else {
|
} else {
|
||||||
taos_free_result(result);
|
taos_free_result(result);
|
||||||
}
|
}
|
||||||
|
@ -79,21 +80,21 @@ void httpProcessMultiSqlCallBack(void *param, TAOS_RES *result, int code) {
|
||||||
HttpSqlCmd *singleCmd = multiCmds->cmds + multiCmds->pos;
|
HttpSqlCmd *singleCmd = multiCmds->cmds + multiCmds->pos;
|
||||||
char * sql = httpGetCmdsString(pContext, singleCmd->sql);
|
char * sql = httpGetCmdsString(pContext, singleCmd->sql);
|
||||||
|
|
||||||
if (-code == TSDB_CODE_ACTION_IN_PROGRESS) {
|
if (code == TSDB_CODE_ACTION_IN_PROGRESS) {
|
||||||
httpWarn("context:%p, fd:%d, ip:%s, user:%s, process pos:%d, code:%d:inprogress, sql:%s",
|
httpWarn("context:%p, fd:%d, ip:%s, user:%s, process pos:%d, code:%s:inprogress, sql:%s",
|
||||||
pContext, pContext->fd, pContext->ipstr, pContext->user, multiCmds->pos, -code, sql);
|
pContext, pContext->fd, pContext->ipstr, pContext->user, multiCmds->pos, tstrerror(code), sql);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (code < 0) {
|
if (code < 0) {
|
||||||
if (encode->checkFinishedFp != NULL && !encode->checkFinishedFp(pContext, singleCmd, code >= 0 ? 0 : -code)) {
|
if (encode->checkFinishedFp != NULL && !encode->checkFinishedFp(pContext, singleCmd, code >= 0 ? 0 : code)) {
|
||||||
singleCmd->code = -code;
|
singleCmd->code = code;
|
||||||
httpTrace("context:%p, fd:%d, ip:%s, user:%s, process pos jump to:%d, last code:%d, last sql:%s",
|
httpTrace("context:%p, fd:%d, ip:%s, user:%s, process pos jump to:%d, last code:%s, last sql:%s",
|
||||||
pContext, pContext->fd, pContext->ipstr, pContext->user, multiCmds->pos + 1, -code, sql);
|
pContext, pContext->fd, pContext->ipstr, pContext->user, multiCmds->pos + 1, tstrerror(code), sql);
|
||||||
} else {
|
} else {
|
||||||
singleCmd->code = -code;
|
singleCmd->code = code;
|
||||||
httpError("context:%p, fd:%d, ip:%s, user:%s, process pos:%d, error code:%d, sql:%s",
|
httpError("context:%p, fd:%d, ip:%s, user:%s, process pos:%d, error code:%s, sql:%s",
|
||||||
pContext, pContext->fd, pContext->ipstr, pContext->user, multiCmds->pos, -code, sql);
|
pContext, pContext->fd, pContext->ipstr, pContext->user, multiCmds->pos, tstrerror(code), sql);
|
||||||
|
|
||||||
if (singleCmd->cmdReturnType == HTTP_CMD_RETURN_TYPE_WITH_RETURN) {
|
if (singleCmd->cmdReturnType == HTTP_CMD_RETURN_TYPE_WITH_RETURN) {
|
||||||
if (encode->startJsonFp) (encode->startJsonFp)(pContext, singleCmd, result);
|
if (encode->startJsonFp) (encode->startJsonFp)(pContext, singleCmd, result);
|
||||||
|
@ -209,8 +210,8 @@ void httpProcessSingleSqlRetrieveCallBack(void *param, TAOS_RES *result, int num
|
||||||
pContext->user, numOfRows);
|
pContext->user, numOfRows);
|
||||||
|
|
||||||
if (numOfRows < 0) {
|
if (numOfRows < 0) {
|
||||||
httpError("context:%p, fd:%d, ip:%s, user:%s, retrieve failed, code:%d", pContext, pContext->fd, pContext->ipstr,
|
httpError("context:%p, fd:%d, ip:%s, user:%s, retrieve failed, code:%s", pContext, pContext->fd, pContext->ipstr,
|
||||||
pContext->user, -numOfRows);
|
pContext->user, tstrerror(numOfRows));
|
||||||
} else {
|
} else {
|
||||||
taos_free_result(result);
|
taos_free_result(result);
|
||||||
}
|
}
|
||||||
|
@ -229,22 +230,22 @@ void httpProcessSingleSqlCallBack(void *param, TAOS_RES *result, int code) {
|
||||||
|
|
||||||
HttpEncodeMethod *encode = pContext->encodeMethod;
|
HttpEncodeMethod *encode = pContext->encodeMethod;
|
||||||
|
|
||||||
if (-code == TSDB_CODE_ACTION_IN_PROGRESS) {
|
if (code == TSDB_CODE_ACTION_IN_PROGRESS) {
|
||||||
httpError("context:%p, fd:%d, ip:%s, user:%s, query error, taos:%p, code:%d:inprogress, sqlObj:%p",
|
httpError("context:%p, fd:%d, ip:%s, user:%s, query error, taos:%p, code:%s:inprogress, sqlObj:%p",
|
||||||
pContext, pContext->fd, pContext->ipstr, pContext->user, pContext->session->taos, -code, (SSqlObj *)result);
|
pContext, pContext->fd, pContext->ipstr, pContext->user, pContext->session->taos, tstrerror(code), (SSqlObj *)result);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (code < 0) {
|
if (code < 0) {
|
||||||
SSqlObj *pObj = (SSqlObj *)result;
|
SSqlObj *pObj = (SSqlObj *)result;
|
||||||
if (-code == TSDB_CODE_INVALID_SQL) {
|
if (code == TSDB_CODE_INVALID_SQL) {
|
||||||
httpError("context:%p, fd:%d, ip:%s, user:%s, query error, taos:%p, code:%d:invalidsql, sqlObj:%p, error:%s",
|
httpError("context:%p, fd:%d, ip:%s, user:%s, query error, taos:%p, code:%s:invalidsql, sqlObj:%p, error:%s",
|
||||||
pContext, pContext->fd, pContext->ipstr, pContext->user, pContext->session->taos, -code, pObj, pObj->cmd.payload);
|
pContext, pContext->fd, pContext->ipstr, pContext->user, pContext->session->taos, tstrerror(code), pObj, pObj->cmd.payload);
|
||||||
httpSendTaosdInvalidSqlErrorResp(pContext, pObj->cmd.payload);
|
httpSendTaosdInvalidSqlErrorResp(pContext, pObj->cmd.payload);
|
||||||
} else {
|
} else {
|
||||||
httpError("context:%p, fd:%d, ip:%s, user:%s, query error, taos:%p, code:%d, sqlObj:%p",
|
httpError("context:%p, fd:%d, ip:%s, user:%s, query error, taos:%p, code:%s, sqlObj:%p",
|
||||||
pContext, pContext->fd, pContext->ipstr, pContext->user, pContext->session->taos, -code, pObj);
|
pContext, pContext->fd, pContext->ipstr, pContext->user, pContext->session->taos, tstrerror(code), pObj);
|
||||||
httpSendTaosdErrorResp(pContext, -code);
|
httpSendTaosdErrorResp(pContext, code);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -349,9 +350,9 @@ void httpProcessRequestCb(void *param, TAOS_RES *result, int code) {
|
||||||
if (pContext == NULL || pContext->signature != pContext) return;
|
if (pContext == NULL || pContext->signature != pContext) return;
|
||||||
|
|
||||||
if (code < 0) {
|
if (code < 0) {
|
||||||
httpError("context:%p, fd:%d, ip:%s, user:%s, login error, code:%d", pContext, pContext->fd, pContext->ipstr,
|
httpError("context:%p, fd:%d, ip:%s, user:%s, login error, code:%s", pContext, pContext->fd, pContext->ipstr,
|
||||||
pContext->user, -code);
|
pContext->user, tstrerror(code));
|
||||||
httpSendTaosdErrorResp(pContext, -code);
|
httpSendTaosdErrorResp(pContext, code);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,17 +15,17 @@
|
||||||
|
|
||||||
#define _DEFAULT_SOURCE
|
#define _DEFAULT_SOURCE
|
||||||
#include "os.h"
|
#include "os.h"
|
||||||
|
#include "shash.h"
|
||||||
|
#include "taos.h"
|
||||||
|
#include "tglobal.h"
|
||||||
|
#include "tsocket.h"
|
||||||
|
#include "ttimer.h"
|
||||||
#include "tadmin.h"
|
#include "tadmin.h"
|
||||||
#include "http.h"
|
#include "http.h"
|
||||||
#include "httpCode.h"
|
#include "httpCode.h"
|
||||||
#include "httpHandle.h"
|
#include "httpHandle.h"
|
||||||
#include "httpResp.h"
|
#include "httpResp.h"
|
||||||
#include "httpLog.h"
|
#include "httpLog.h"
|
||||||
#include "shash.h"
|
|
||||||
#include "taos.h"
|
|
||||||
#include "tglobal.h"
|
|
||||||
#include "tsocket.h"
|
|
||||||
#include "ttimer.h"
|
|
||||||
#include "gcHandle.h"
|
#include "gcHandle.h"
|
||||||
#include "httpHandle.h"
|
#include "httpHandle.h"
|
||||||
#include "restHandle.h"
|
#include "restHandle.h"
|
||||||
|
|
|
@ -13,15 +13,16 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define _DEFAULT_SOURCE
|
||||||
#include "os.h"
|
#include "os.h"
|
||||||
#include "tmd5.h"
|
#include "tmd5.h"
|
||||||
|
#include "shash.h"
|
||||||
|
#include "taos.h"
|
||||||
#include "http.h"
|
#include "http.h"
|
||||||
|
#include "httpLog.h"
|
||||||
#include "httpCode.h"
|
#include "httpCode.h"
|
||||||
#include "httpHandle.h"
|
#include "httpHandle.h"
|
||||||
#include "httpResp.h"
|
#include "httpResp.h"
|
||||||
#include "shash.h"
|
|
||||||
#include "taos.h"
|
|
||||||
#include "httpLog.h"
|
|
||||||
|
|
||||||
bool httpCheckUsedbSql(char *sql) {
|
bool httpCheckUsedbSql(char *sql) {
|
||||||
if (strstr(sql, "use ") != NULL) {
|
if (strstr(sql, "use ") != NULL) {
|
||||||
|
|
|
@ -13,9 +13,11 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define _DEFAULT_SOURCE
|
||||||
|
#include "os.h"
|
||||||
|
#include "httpLog.h"
|
||||||
#include "restHandle.h"
|
#include "restHandle.h"
|
||||||
#include "restJson.h"
|
#include "restJson.h"
|
||||||
#include "httpLog.h"
|
|
||||||
|
|
||||||
static HttpDecodeMethod restDecodeMethod = {"rest", restProcessRequest};
|
static HttpDecodeMethod restDecodeMethod = {"rest", restProcessRequest};
|
||||||
static HttpDecodeMethod restDecodeMethod2 = {"restful", restProcessRequest};
|
static HttpDecodeMethod restDecodeMethod2 = {"restful", restProcessRequest};
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define _DEFAULT_SOURCE
|
||||||
#include "os.h"
|
#include "os.h"
|
||||||
#include "tglobal.h"
|
#include "tglobal.h"
|
||||||
#include "httpLog.h"
|
#include "httpLog.h"
|
||||||
|
|
|
@ -13,14 +13,15 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define _DEFAULT_SOURCE
|
||||||
#include "os.h"
|
#include "os.h"
|
||||||
#include "tgHandle.h"
|
|
||||||
#include "shash.h"
|
|
||||||
#include "taosmsg.h"
|
|
||||||
#include "tgJson.h"
|
|
||||||
#include "taosdef.h"
|
|
||||||
#include "httpLog.h"
|
|
||||||
#include "tglobal.h"
|
#include "tglobal.h"
|
||||||
|
#include "shash.h"
|
||||||
|
#include "taosdef.h"
|
||||||
|
#include "taosmsg.h"
|
||||||
|
#include "tgHandle.h"
|
||||||
|
#include "tgJson.h"
|
||||||
|
#include "httpLog.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* taos.telegraf.cfg formats like
|
* taos.telegraf.cfg formats like
|
||||||
|
|
|
@ -13,13 +13,14 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define _DEFAULT_SOURCE
|
||||||
#include "os.h"
|
#include "os.h"
|
||||||
|
#include "taosmsg.h"
|
||||||
|
#include "httpLog.h"
|
||||||
#include "httpJson.h"
|
#include "httpJson.h"
|
||||||
#include "httpResp.h"
|
#include "httpResp.h"
|
||||||
#include "taosmsg.h"
|
|
||||||
#include "tgHandle.h"
|
#include "tgHandle.h"
|
||||||
#include "tgJson.h"
|
#include "tgJson.h"
|
||||||
#include "httpLog.h"
|
|
||||||
|
|
||||||
void tgInitQueryJson(HttpContext *pContext) {
|
void tgInitQueryJson(HttpContext *pContext) {
|
||||||
JsonBuf *jsonBuf = httpMallocJsonBuf(pContext);
|
JsonBuf *jsonBuf = httpMallocJsonBuf(pContext);
|
||||||
|
@ -97,8 +98,8 @@ void tgBuildSqlAffectRowsJson(HttpContext *pContext, HttpSqlCmd *cmd, int affect
|
||||||
|
|
||||||
bool tgCheckFinished(struct HttpContext *pContext, HttpSqlCmd *cmd, int code) {
|
bool tgCheckFinished(struct HttpContext *pContext, HttpSqlCmd *cmd, int code) {
|
||||||
HttpSqlCmds *multiCmds = pContext->multiCmds;
|
HttpSqlCmds *multiCmds = pContext->multiCmds;
|
||||||
httpTrace("context:%p, fd:%d, ip:%s, check telegraf command, code:%d, state:%d, type:%d, rettype:%d, tags:%d",
|
httpTrace("context:%p, fd:%d, ip:%s, check telegraf command, code:%s, state:%d, type:%d, rettype:%d, tags:%d",
|
||||||
pContext, pContext->fd, pContext->ipstr, code, cmd->cmdState, cmd->cmdType, cmd->cmdReturnType, cmd->tagNum);
|
pContext, pContext->fd, pContext->ipstr, tstrerror(code), cmd->cmdState, cmd->cmdType, cmd->cmdReturnType, cmd->tagNum);
|
||||||
|
|
||||||
if (cmd->cmdType == HTTP_CMD_TYPE_INSERT) {
|
if (cmd->cmdType == HTTP_CMD_TYPE_INSERT) {
|
||||||
if (cmd->cmdState == HTTP_CMD_STATE_NOT_RUN_YET) {
|
if (cmd->cmdState == HTTP_CMD_STATE_NOT_RUN_YET) {
|
||||||
|
@ -124,11 +125,11 @@ bool tgCheckFinished(struct HttpContext *pContext, HttpSqlCmd *cmd, int code) {
|
||||||
}
|
}
|
||||||
} else if (cmd->cmdType == HTTP_CMD_TYPE_CREATE_DB) {
|
} else if (cmd->cmdType == HTTP_CMD_TYPE_CREATE_DB) {
|
||||||
cmd->cmdState = HTTP_CMD_STATE_RUN_FINISHED;
|
cmd->cmdState = HTTP_CMD_STATE_RUN_FINISHED;
|
||||||
httpTrace("context:%p, fd:%d, ip:%s, code:%d, create database failed", pContext, pContext->fd, pContext->ipstr,
|
httpTrace("context:%p, fd:%d, ip:%s, code:%s, create database failed", pContext, pContext->fd, pContext->ipstr,
|
||||||
code);
|
tstrerror(code));
|
||||||
} else if (cmd->cmdType == HTTP_CMD_TYPE_CREATE_STBALE) {
|
} else if (cmd->cmdType == HTTP_CMD_TYPE_CREATE_STBALE) {
|
||||||
cmd->cmdState = HTTP_CMD_STATE_RUN_FINISHED;
|
cmd->cmdState = HTTP_CMD_STATE_RUN_FINISHED;
|
||||||
httpTrace("context:%p, fd:%d, ip:%s, code:%d, create stable failed", pContext, pContext->fd, pContext->ipstr, code);
|
httpTrace("context:%p, fd:%d, ip:%s, code:%s, create stable failed", pContext, pContext->fd, pContext->ipstr, tstrerror(code));
|
||||||
} else {
|
} else {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -137,8 +138,8 @@ bool tgCheckFinished(struct HttpContext *pContext, HttpSqlCmd *cmd, int code) {
|
||||||
|
|
||||||
void tgSetNextCmd(struct HttpContext *pContext, HttpSqlCmd *cmd, int code) {
|
void tgSetNextCmd(struct HttpContext *pContext, HttpSqlCmd *cmd, int code) {
|
||||||
HttpSqlCmds *multiCmds = pContext->multiCmds;
|
HttpSqlCmds *multiCmds = pContext->multiCmds;
|
||||||
httpTrace("context:%p, fd:%d, ip:%s, get telegraf next command, pos:%d, code:%d, state:%d, type:%d, rettype:%d, tags:%d",
|
httpTrace("context:%p, fd:%d, ip:%s, get telegraf next command, pos:%d, code:%s, state:%d, type:%d, rettype:%d, tags:%d",
|
||||||
pContext, pContext->fd, pContext->ipstr, multiCmds->pos, code, cmd->cmdState, cmd->cmdType,
|
pContext, pContext->fd, pContext->ipstr, multiCmds->pos, tstrerror(code), cmd->cmdState, cmd->cmdType,
|
||||||
cmd->cmdReturnType, cmd->tagNum);
|
cmd->cmdReturnType, cmd->tagNum);
|
||||||
|
|
||||||
if (cmd->cmdType == HTTP_CMD_TYPE_INSERT) {
|
if (cmd->cmdType == HTTP_CMD_TYPE_INSERT) {
|
||||||
|
|
|
@ -1,42 +0,0 @@
|
||||||
/*
|
|
||||||
* 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/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef TDENGINE_MONITOR_SYSTEM_H
|
|
||||||
#define TDENGINE_MONITOR_SYSTEM_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
int32_t monitorInitSystem();
|
|
||||||
int32_t monitorStartSystem();
|
|
||||||
void monitorStopSystem();
|
|
||||||
void monitorCleanUpSystem();
|
|
||||||
void monitorSaveAcctLog(char *acctId, int64_t currentPointsPerSecond, int64_t maxPointsPerSecond,
|
|
||||||
int64_t totalTimeSeries, int64_t maxTimeSeries, int64_t totalStorage, int64_t maxStorage,
|
|
||||||
int64_t totalQueryTime, int64_t maxQueryTime, int64_t totalInbound, int64_t maxInbound,
|
|
||||||
int64_t totalOutbound, int64_t maxOutbound, int64_t totalDbs, int64_t maxDbs,
|
|
||||||
int64_t totalUsers, int64_t maxUsers, int64_t totalStreams, int64_t maxStreams,
|
|
||||||
int64_t totalConns, int64_t maxConns, int8_t accessState);
|
|
||||||
void monitorSaveLog(int level, const char *const format, ...);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -0,0 +1,431 @@
|
||||||
|
/*
|
||||||
|
* 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
|
||||||
|
#include "os.h"
|
||||||
|
#include "taosdef.h"
|
||||||
|
#include "taoserror.h"
|
||||||
|
#include "tlog.h"
|
||||||
|
#include "ttime.h"
|
||||||
|
#include "ttimer.h"
|
||||||
|
#include "tutil.h"
|
||||||
|
#include "tsystem.h"
|
||||||
|
#include "tscUtil.h"
|
||||||
|
#include "tsclient.h"
|
||||||
|
#include "dnode.h"
|
||||||
|
#include "monitor.h"
|
||||||
|
|
||||||
|
#define monitorError(...) \
|
||||||
|
if (monitorDebugFlag & DEBUG_ERROR) { \
|
||||||
|
taosPrintLog("ERROR MON ", 255, __VA_ARGS__); \
|
||||||
|
}
|
||||||
|
#define monitorWarn(...) \
|
||||||
|
if (monitorDebugFlag & DEBUG_WARN) { \
|
||||||
|
taosPrintLog("WARN MON ", monitorDebugFlag, __VA_ARGS__); \
|
||||||
|
}
|
||||||
|
#define monitorTrace(...) \
|
||||||
|
if (monitorDebugFlag & DEBUG_TRACE) { \
|
||||||
|
taosPrintLog("MON ", monitorDebugFlag, __VA_ARGS__); \
|
||||||
|
}
|
||||||
|
#define monitorPrint(...) \
|
||||||
|
{ taosPrintLog("MON ", 255, __VA_ARGS__); }
|
||||||
|
|
||||||
|
#define SQL_LENGTH 1024
|
||||||
|
#define LOG_LEN_STR 80
|
||||||
|
#define IP_LEN_STR 15
|
||||||
|
#define CHECK_INTERVAL 1000
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
MONITOR_CMD_CREATE_DB,
|
||||||
|
MONITOR_CMD_CREATE_TB_LOG,
|
||||||
|
MONITOR_CMD_CREATE_MT_DN,
|
||||||
|
MONITOR_CMD_CREATE_MT_ACCT,
|
||||||
|
MONITOR_CMD_CREATE_TB_DN,
|
||||||
|
MONITOR_CMD_CREATE_TB_ACCT_ROOT,
|
||||||
|
MONITOR_CMD_CREATE_TB_SLOWQUERY,
|
||||||
|
MONITOR_CMD_MAX
|
||||||
|
} EMonitorCommand;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
MONITOR_STATE_UN_INIT,
|
||||||
|
MONITOR_STATE_INITIALIZING,
|
||||||
|
MONITOR_STATE_INITIALIZED,
|
||||||
|
MONITOR_STATE_STOPPED
|
||||||
|
} EMonitorState;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
void * conn;
|
||||||
|
void * timer;
|
||||||
|
char privateIpStr[TSDB_IPv4ADDR_LEN];
|
||||||
|
int8_t cmdIndex;
|
||||||
|
int8_t state;
|
||||||
|
char sql[SQL_LENGTH];
|
||||||
|
void * initTimer;
|
||||||
|
void * diskTimer;
|
||||||
|
} SMonitorConn;
|
||||||
|
|
||||||
|
static SMonitorConn tsMonitorConn;
|
||||||
|
static void monitorInitConn(void *para, void *unused);
|
||||||
|
static void monitorInitConnCb(void *param, TAOS_RES *result, int32_t code);
|
||||||
|
static void monitorInitDatabase();
|
||||||
|
static void monitorInitDatabaseCb(void *param, TAOS_RES *result, int32_t code);
|
||||||
|
static void monitorStartTimer();
|
||||||
|
static void monitorSaveSystemInfo();
|
||||||
|
|
||||||
|
static void monitorCheckDiskUsage(void *para, void *unused) {
|
||||||
|
taosGetDisk();
|
||||||
|
taosTmrReset(monitorCheckDiskUsage, CHECK_INTERVAL, NULL, tscTmr, &tsMonitorConn.diskTimer);
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t monitorInitSystem() {
|
||||||
|
taos_init();
|
||||||
|
taosTmrReset(monitorCheckDiskUsage, CHECK_INTERVAL, NULL, tscTmr, &tsMonitorConn.diskTimer);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t monitorStartSystem() {
|
||||||
|
monitorPrint("start monitor module");
|
||||||
|
monitorInitSystem();
|
||||||
|
taosTmrReset(monitorInitConn, 10, NULL, tscTmr, &tsMonitorConn.initTimer);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void monitorStartSystemRetry() {
|
||||||
|
if (tsMonitorConn.initTimer != NULL) {
|
||||||
|
taosTmrReset(monitorInitConn, 3000, NULL, tscTmr, &tsMonitorConn.initTimer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void monitorInitConn(void *para, void *unused) {
|
||||||
|
monitorPrint("starting to initialize monitor service ..");
|
||||||
|
tsMonitorConn.state = MONITOR_STATE_INITIALIZING;
|
||||||
|
|
||||||
|
if (tsMonitorConn.privateIpStr[0] == 0) {
|
||||||
|
strcpy(tsMonitorConn.privateIpStr, tsPrivateIp);
|
||||||
|
for (int32_t i = 0; i < TSDB_IPv4ADDR_LEN; ++i) {
|
||||||
|
if (tsMonitorConn.privateIpStr[i] == '.') {
|
||||||
|
tsMonitorConn.privateIpStr[i] = '_';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tsMonitorConn.conn == NULL) {
|
||||||
|
taos_connect_a(NULL, "monitor", tsInternalPass, "", 0, monitorInitConnCb, &tsMonitorConn, &(tsMonitorConn.conn));
|
||||||
|
} else {
|
||||||
|
monitorInitDatabase();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void monitorInitConnCb(void *param, TAOS_RES *result, int32_t code) {
|
||||||
|
if (code < 0) {
|
||||||
|
monitorError("monitor:%p, connect to database failed, reason:%s", tsMonitorConn.conn, tstrerror(code));
|
||||||
|
taos_close(tsMonitorConn.conn);
|
||||||
|
tsMonitorConn.conn = NULL;
|
||||||
|
tsMonitorConn.state = MONITOR_STATE_UN_INIT;
|
||||||
|
monitorStartSystemRetry();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
monitorTrace("monitor:%p, connect to database success, reason:%s", tsMonitorConn.conn, tstrerror(code));
|
||||||
|
monitorInitDatabase();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void dnodeBuildMonitorSql(char *sql, int32_t cmd) {
|
||||||
|
memset(sql, 0, SQL_LENGTH);
|
||||||
|
|
||||||
|
if (cmd == MONITOR_CMD_CREATE_DB) {
|
||||||
|
snprintf(sql, SQL_LENGTH,
|
||||||
|
"create database if not exists %s replica 1 days 10 keep 30 rows 1024 cache 2048 "
|
||||||
|
"ablocks 2 tblocks 32 tables 32 precision 'us'",
|
||||||
|
tsMonitorDbName);
|
||||||
|
} else if (cmd == MONITOR_CMD_CREATE_MT_DN) {
|
||||||
|
snprintf(sql, SQL_LENGTH,
|
||||||
|
"create table if not exists %s.dn(ts timestamp"
|
||||||
|
", cpu_taosd float, cpu_system float, cpu_cores int"
|
||||||
|
", mem_taosd float, mem_system float, mem_total int"
|
||||||
|
", disk_used float, disk_total int"
|
||||||
|
", band_speed float"
|
||||||
|
", io_read float, io_write float"
|
||||||
|
", req_http int, req_select int, req_insert int"
|
||||||
|
") tags (ipaddr binary(%d))",
|
||||||
|
tsMonitorDbName, IP_LEN_STR + 1);
|
||||||
|
} else if (cmd == MONITOR_CMD_CREATE_TB_DN) {
|
||||||
|
snprintf(sql, SQL_LENGTH, "create table if not exists %s.dn_%s using %s.dn tags('%s')", tsMonitorDbName,
|
||||||
|
tsMonitorConn.privateIpStr, tsMonitorDbName, tsPrivateIp);
|
||||||
|
} else if (cmd == MONITOR_CMD_CREATE_MT_ACCT) {
|
||||||
|
snprintf(sql, SQL_LENGTH,
|
||||||
|
"create table if not exists %s.acct(ts timestamp "
|
||||||
|
", currentPointsPerSecond bigint, maxPointsPerSecond bigint"
|
||||||
|
", totalTimeSeries bigint, maxTimeSeries bigint"
|
||||||
|
", totalStorage bigint, maxStorage bigint"
|
||||||
|
", totalQueryTime bigint, maxQueryTime bigint"
|
||||||
|
", totalInbound bigint, maxInbound bigint"
|
||||||
|
", totalOutbound bigint, maxOutbound bigint"
|
||||||
|
", totalDbs smallint, maxDbs smallint"
|
||||||
|
", totalUsers smallint, maxUsers smallint"
|
||||||
|
", totalStreams smallint, maxStreams smallint"
|
||||||
|
", totalConns smallint, maxConns smallint"
|
||||||
|
", accessState smallint"
|
||||||
|
") tags (acctId binary(%d))",
|
||||||
|
tsMonitorDbName, TSDB_USER_LEN + 1);
|
||||||
|
} else if (cmd == MONITOR_CMD_CREATE_TB_ACCT_ROOT) {
|
||||||
|
snprintf(sql, SQL_LENGTH, "create table if not exists %s.acct_%s using %s.acct tags('%s')", tsMonitorDbName, "root",
|
||||||
|
tsMonitorDbName, "root");
|
||||||
|
} else if (cmd == MONITOR_CMD_CREATE_TB_SLOWQUERY) {
|
||||||
|
snprintf(sql, SQL_LENGTH,
|
||||||
|
"create table if not exists %s.slowquery(ts timestamp, username "
|
||||||
|
"binary(%d), created_time timestamp, time bigint, sql binary(%d))",
|
||||||
|
tsMonitorDbName, TSDB_TABLE_ID_LEN, TSDB_SHOW_SQL_LEN);
|
||||||
|
} else if (cmd == MONITOR_CMD_CREATE_TB_LOG) {
|
||||||
|
snprintf(sql, SQL_LENGTH,
|
||||||
|
"create table if not exists %s.log(ts timestamp, level tinyint, "
|
||||||
|
"content binary(%d), ipaddr binary(%d))",
|
||||||
|
tsMonitorDbName, LOG_LEN_STR, IP_LEN_STR);
|
||||||
|
}
|
||||||
|
|
||||||
|
sql[SQL_LENGTH] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void monitorInitDatabase() {
|
||||||
|
if (tsMonitorConn.cmdIndex < MONITOR_CMD_MAX) {
|
||||||
|
dnodeBuildMonitorSql(tsMonitorConn.sql, tsMonitorConn.cmdIndex);
|
||||||
|
taos_query_a(tsMonitorConn.conn, tsMonitorConn.sql, monitorInitDatabaseCb, NULL);
|
||||||
|
} else {
|
||||||
|
tsMonitorConn.state = MONITOR_STATE_INITIALIZED;
|
||||||
|
monitorPrint("monitor service init success");
|
||||||
|
|
||||||
|
monitorStartTimer();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void monitorInitDatabaseCb(void *param, TAOS_RES *result, int32_t code) {
|
||||||
|
if (-code == TSDB_CODE_TABLE_ALREADY_EXIST || -code == TSDB_CODE_DB_ALREADY_EXIST || code >= 0) {
|
||||||
|
monitorTrace("monitor:%p, sql success, reason:%d, %s", tsMonitorConn.conn, tstrerror(code), tsMonitorConn.sql);
|
||||||
|
if (tsMonitorConn.cmdIndex == MONITOR_CMD_CREATE_TB_LOG) {
|
||||||
|
monitorPrint("dnode:%s is started", tsPrivateIp);
|
||||||
|
}
|
||||||
|
tsMonitorConn.cmdIndex++;
|
||||||
|
monitorInitDatabase();
|
||||||
|
} else {
|
||||||
|
monitorError("monitor:%p, sql failed, reason:%s, %s", tsMonitorConn.conn, tstrerror(code), tsMonitorConn.sql);
|
||||||
|
tsMonitorConn.state = MONITOR_STATE_UN_INIT;
|
||||||
|
monitorStartSystemRetry();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void monitorStopSystem() {
|
||||||
|
monitorPrint("monitor module is stopped");
|
||||||
|
tsMonitorConn.state = MONITOR_STATE_STOPPED;
|
||||||
|
if (tsMonitorConn.initTimer != NULL) {
|
||||||
|
taosTmrStopA(&(tsMonitorConn.initTimer));
|
||||||
|
}
|
||||||
|
if (tsMonitorConn.timer != NULL) {
|
||||||
|
taosTmrStopA(&(tsMonitorConn.timer));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void monitorCleanUpSystem() {
|
||||||
|
monitorStopSystem();
|
||||||
|
monitorPrint("monitor module cleanup");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void monitorStartTimer() {
|
||||||
|
taosTmrReset(monitorSaveSystemInfo, tsMonitorInterval * 1000, NULL, tscTmr, &tsMonitorConn.timer);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void dnodeMontiorInsertAcctCallback(void *param, TAOS_RES *result, int32_t code) {
|
||||||
|
if (code < 0) {
|
||||||
|
monitorError("monitor:%p, save account info failed, code:%s", tsMonitorConn.conn, tstrerror(code));
|
||||||
|
} else if (code == 0) {
|
||||||
|
monitorError("monitor:%p, save account info failed, affect rows:%d", tsMonitorConn.conn, code);
|
||||||
|
} else {
|
||||||
|
monitorTrace("monitor:%p, save account info success, code:%s", tsMonitorConn.conn, tstrerror(code));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void dnodeMontiorInsertSysCallback(void *param, TAOS_RES *result, int32_t code) {
|
||||||
|
if (code < 0) {
|
||||||
|
monitorError("monitor:%p, save system info failed, code:%s %s", tsMonitorConn.conn, tstrerror(code), tsMonitorConn.sql);
|
||||||
|
} else if (code == 0) {
|
||||||
|
monitorError("monitor:%p, save system info failed, affect rows:%d %s", tsMonitorConn.conn, code, tsMonitorConn.sql);
|
||||||
|
} else {
|
||||||
|
monitorTrace("monitor:%p, save system info success, code:%s %s", tsMonitorConn.conn, tstrerror(code), tsMonitorConn.sql);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void dnodeMontiorInsertLogCallback(void *param, TAOS_RES *result, int32_t code) {
|
||||||
|
if (code < 0) {
|
||||||
|
monitorError("monitor:%p, save log failed, code:%s", tsMonitorConn.conn, tstrerror(code));
|
||||||
|
} else if (code == 0) {
|
||||||
|
monitorError("monitor:%p, save log failed, affect rows:%d", tsMonitorConn.conn, code);
|
||||||
|
} else {
|
||||||
|
monitorTrace("monitor:%p, save log info success, code:%s", tsMonitorConn.conn, tstrerror(code));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// unit is MB
|
||||||
|
static int32_t monitorBuildMemorySql(char *sql) {
|
||||||
|
float sysMemoryUsedMB = 0;
|
||||||
|
bool suc = taosGetSysMemory(&sysMemoryUsedMB);
|
||||||
|
if (!suc) {
|
||||||
|
monitorError("monitor:%p, get sys memory info failed.", tsMonitorConn.conn);
|
||||||
|
}
|
||||||
|
|
||||||
|
float procMemoryUsedMB = 0;
|
||||||
|
suc = taosGetProcMemory(&procMemoryUsedMB);
|
||||||
|
if (!suc) {
|
||||||
|
monitorError("monitor:%p, get proc memory info failed.", tsMonitorConn.conn);
|
||||||
|
}
|
||||||
|
|
||||||
|
return sprintf(sql, ", %f, %f, %d", procMemoryUsedMB, sysMemoryUsedMB, tsTotalMemoryMB);
|
||||||
|
}
|
||||||
|
|
||||||
|
// unit is %
|
||||||
|
static int32_t monitorBuildCpuSql(char *sql) {
|
||||||
|
float sysCpuUsage = 0, procCpuUsage = 0;
|
||||||
|
bool suc = taosGetCpuUsage(&sysCpuUsage, &procCpuUsage);
|
||||||
|
if (!suc) {
|
||||||
|
monitorError("monitor:%p, get cpu usage failed.", tsMonitorConn.conn);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sysCpuUsage <= procCpuUsage) {
|
||||||
|
sysCpuUsage = procCpuUsage + (float)0.1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return sprintf(sql, ", %f, %f, %d", procCpuUsage, sysCpuUsage, tsNumOfCores);
|
||||||
|
}
|
||||||
|
|
||||||
|
// unit is GB
|
||||||
|
static int32_t monitorBuildDiskSql(char *sql) {
|
||||||
|
return sprintf(sql, ", %f, %d", (tsTotalDataDirGB - tsAvailDataDirGB), (int32_t)tsTotalDataDirGB);
|
||||||
|
}
|
||||||
|
|
||||||
|
// unit is Kb
|
||||||
|
static int32_t monitorBuildBandSql(char *sql) {
|
||||||
|
float bandSpeedKb = 0;
|
||||||
|
bool suc = taosGetBandSpeed(&bandSpeedKb);
|
||||||
|
if (!suc) {
|
||||||
|
monitorError("monitor:%p, get bandwidth speed failed.", tsMonitorConn.conn);
|
||||||
|
}
|
||||||
|
|
||||||
|
return sprintf(sql, ", %f", bandSpeedKb);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int32_t monitorBuildReqSql(char *sql) {
|
||||||
|
SDnodeStatisInfo info = dnodeGetStatisInfo();
|
||||||
|
return sprintf(sql, ", %d, %d, %d)", info.httpReqNum, info.queryReqNum, info.submitReqNum);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int32_t monitorBuildIoSql(char *sql) {
|
||||||
|
float readKB = 0, writeKB = 0;
|
||||||
|
bool suc = taosGetProcIO(&readKB, &writeKB);
|
||||||
|
if (!suc) {
|
||||||
|
monitorError("monitor:%p, get io info failed.", tsMonitorConn.conn);
|
||||||
|
}
|
||||||
|
|
||||||
|
return sprintf(sql, ", %f, %f", readKB, writeKB);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void monitorSaveSystemInfo() {
|
||||||
|
if (tsMonitorConn.state != MONITOR_STATE_INITIALIZED) {
|
||||||
|
monitorStartTimer();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int64_t ts = taosGetTimestampUs();
|
||||||
|
char * sql = tsMonitorConn.sql;
|
||||||
|
int32_t pos = snprintf(sql, SQL_LENGTH, "insert into %s.dn_%s values(%" PRId64, tsMonitorDbName, tsMonitorConn.privateIpStr, ts);
|
||||||
|
|
||||||
|
pos += monitorBuildCpuSql(sql + pos);
|
||||||
|
pos += monitorBuildMemorySql(sql + pos);
|
||||||
|
pos += monitorBuildDiskSql(sql + pos);
|
||||||
|
pos += monitorBuildBandSql(sql + pos);
|
||||||
|
pos += monitorBuildIoSql(sql + pos);
|
||||||
|
pos += monitorBuildReqSql(sql + pos);
|
||||||
|
|
||||||
|
monitorTrace("monitor:%p, save system info, sql:%s", tsMonitorConn.conn, sql);
|
||||||
|
taos_query_a(tsMonitorConn.conn, sql, dnodeMontiorInsertSysCallback, "log");
|
||||||
|
|
||||||
|
if (tsMonitorConn.timer != NULL && tsMonitorConn.state != MONITOR_STATE_STOPPED) {
|
||||||
|
monitorStartTimer();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void monitorSaveAcctLog(SAcctMonitorObj *pMon) {
|
||||||
|
if (tsMonitorConn.state != MONITOR_STATE_INITIALIZED) return;
|
||||||
|
|
||||||
|
char sql[1024] = {0};
|
||||||
|
sprintf(sql,
|
||||||
|
"insert into %s.acct_%s using %s.acct tags('%s') values(now"
|
||||||
|
", %" PRId64 ", %" PRId64
|
||||||
|
", %" PRId64 ", %" PRId64
|
||||||
|
", %" PRId64 ", %" PRId64
|
||||||
|
", %" PRId64 ", %" PRId64
|
||||||
|
", %" PRId64 ", %" PRId64
|
||||||
|
", %" PRId64 ", %" PRId64
|
||||||
|
", %" PRId64 ", %" PRId64
|
||||||
|
", %" PRId64 ", %" PRId64
|
||||||
|
", %" PRId64 ", %" PRId64
|
||||||
|
", %" PRId64 ", %" PRId64
|
||||||
|
", %d)",
|
||||||
|
tsMonitorDbName, pMon->acctId, tsMonitorDbName, pMon->acctId,
|
||||||
|
pMon->currentPointsPerSecond, pMon->maxPointsPerSecond,
|
||||||
|
pMon->totalTimeSeries, pMon->maxTimeSeries,
|
||||||
|
pMon->totalStorage, pMon->maxStorage,
|
||||||
|
pMon->totalQueryTime, pMon->maxQueryTime,
|
||||||
|
pMon->totalInbound, pMon->maxInbound,
|
||||||
|
pMon->totalOutbound, pMon->maxOutbound,
|
||||||
|
pMon->totalDbs, pMon->maxDbs,
|
||||||
|
pMon->totalUsers, pMon->maxUsers,
|
||||||
|
pMon->totalStreams, pMon->maxStreams,
|
||||||
|
pMon->totalConns, pMon->maxConns,
|
||||||
|
pMon->accessState);
|
||||||
|
|
||||||
|
monitorTrace("monitor:%p, save account info, sql %s", tsMonitorConn.conn, sql);
|
||||||
|
taos_query_a(tsMonitorConn.conn, sql, dnodeMontiorInsertAcctCallback, "account");
|
||||||
|
}
|
||||||
|
|
||||||
|
void monitorSaveLog(int32_t level, const char *const format, ...) {
|
||||||
|
if (tsMonitorConn.state != MONITOR_STATE_INITIALIZED) return;
|
||||||
|
|
||||||
|
va_list argpointer;
|
||||||
|
char sql[SQL_LENGTH] = {0};
|
||||||
|
int32_t max_length = SQL_LENGTH - 30;
|
||||||
|
|
||||||
|
if (tsMonitorConn.state != MONITOR_STATE_INITIALIZED) return;
|
||||||
|
|
||||||
|
int32_t len = snprintf(sql, (size_t)max_length, "import into %s.log values(%" PRId64 ", %d,'", tsMonitorDbName,
|
||||||
|
taosGetTimestampUs(), level);
|
||||||
|
|
||||||
|
va_start(argpointer, format);
|
||||||
|
len += vsnprintf(sql + len, (size_t)(max_length - len), format, argpointer);
|
||||||
|
va_end(argpointer);
|
||||||
|
if (len > max_length) len = max_length;
|
||||||
|
|
||||||
|
len += sprintf(sql + len, "', '%s')", tsPrivateIp);
|
||||||
|
sql[len++] = 0;
|
||||||
|
|
||||||
|
monitorTrace("monitor:%p, save log, sql: %s", tsMonitorConn.conn, sql);
|
||||||
|
taos_query_a(tsMonitorConn.conn, sql, dnodeMontiorInsertLogCallback, "log");
|
||||||
|
}
|
||||||
|
|
||||||
|
void monitorExecuteSQL(char *sql) {
|
||||||
|
if (tsMonitorConn.state != MONITOR_STATE_INITIALIZED) return;
|
||||||
|
|
||||||
|
monitorTrace("monitor:%p, execute sql: %s", tsMonitorConn.conn, sql);
|
||||||
|
|
||||||
|
// bug while insert binary
|
||||||
|
// taos_query_a(tsMonitorConn.conn, sql, NULL, NULL);
|
||||||
|
}
|
|
@ -1,461 +0,0 @@
|
||||||
/*
|
|
||||||
* 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
|
|
||||||
#include "os.h"
|
|
||||||
#include "tlog.h"
|
|
||||||
#include "monitor.h"
|
|
||||||
#include "dnode.h"
|
|
||||||
#include "tsclient.h"
|
|
||||||
#include "taosdef.h"
|
|
||||||
#include "tsystem.h"
|
|
||||||
#include "ttime.h"
|
|
||||||
#include "ttimer.h"
|
|
||||||
#include "tutil.h"
|
|
||||||
#include "monitorSystem.h"
|
|
||||||
|
|
||||||
#define monitorError(...) \
|
|
||||||
if (monitorDebugFlag & DEBUG_ERROR) { \
|
|
||||||
taosPrintLog("ERROR MON ", 255, __VA_ARGS__); \
|
|
||||||
}
|
|
||||||
#define monitorWarn(...) \
|
|
||||||
if (monitorDebugFlag & DEBUG_WARN) { \
|
|
||||||
taosPrintLog("WARN MON ", monitorDebugFlag, __VA_ARGS__); \
|
|
||||||
}
|
|
||||||
#define monitorTrace(...) \
|
|
||||||
if (monitorDebugFlag & DEBUG_TRACE) { \
|
|
||||||
taosPrintLog("MON ", monitorDebugFlag, __VA_ARGS__); \
|
|
||||||
}
|
|
||||||
#define monitorPrint(...) \
|
|
||||||
{ taosPrintLog("MON ", 255, __VA_ARGS__); }
|
|
||||||
|
|
||||||
#define monitorLError(...) monitorError(__VA_ARGS__)
|
|
||||||
#define monitorLWarn(...) monitorWarn(__VA_ARGS__)
|
|
||||||
#define monitorLPrint(...) monitorPrint(__VA_ARGS__)
|
|
||||||
|
|
||||||
#define SQL_LENGTH 1024
|
|
||||||
#define LOG_LEN_STR 80
|
|
||||||
#define IP_LEN_STR 15
|
|
||||||
#define CHECK_INTERVAL 1000
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
MONITOR_CMD_CREATE_DB,
|
|
||||||
MONITOR_CMD_CREATE_TB_LOG,
|
|
||||||
MONITOR_CMD_CREATE_MT_DN,
|
|
||||||
MONITOR_CMD_CREATE_MT_ACCT,
|
|
||||||
MONITOR_CMD_CREATE_TB_DN,
|
|
||||||
MONITOR_CMD_CREATE_TB_ACCT_ROOT,
|
|
||||||
MONITOR_CMD_CREATE_TB_SLOWQUERY,
|
|
||||||
MONITOR_CMD_MAX
|
|
||||||
} MonitorCommand;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
MONITOR_STATE_UN_INIT,
|
|
||||||
MONITOR_STATE_INITIALIZING,
|
|
||||||
MONITOR_STATE_INITIALIZED,
|
|
||||||
MONITOR_STATE_STOPPED
|
|
||||||
} MonitorState;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
void * conn;
|
|
||||||
void * timer;
|
|
||||||
char privateIpStr[TSDB_IPv4ADDR_LEN];
|
|
||||||
int8_t cmdIndex;
|
|
||||||
int8_t state;
|
|
||||||
char sql[SQL_LENGTH];
|
|
||||||
void * initTimer;
|
|
||||||
void * diskTimer;
|
|
||||||
} MonitorConn;
|
|
||||||
|
|
||||||
MonitorConn *monitor = NULL;
|
|
||||||
|
|
||||||
TAOS *taos_connect_a(char *ip, char *user, char *pass, char *db, uint16_t port, void (*fp)(void *, TAOS_RES *, int),
|
|
||||||
void *param, void **taos);
|
|
||||||
void monitorInitConn(void *para, void *unused);
|
|
||||||
void monitorInitConnCb(void *param, TAOS_RES *result, int code);
|
|
||||||
void monitorInitDatabase();
|
|
||||||
void monitorInitDatabaseCb(void *param, TAOS_RES *result, int code);
|
|
||||||
void monitorStartTimer();
|
|
||||||
void monitorSaveSystemInfo();
|
|
||||||
void monitorSaveLog(int level, const char *const format, ...);
|
|
||||||
void monitorSaveAcctLog(char *acctId, int64_t currentPointsPerSecond, int64_t maxPointsPerSecond,
|
|
||||||
int64_t totalTimeSeries, int64_t maxTimeSeries, int64_t totalStorage, int64_t maxStorage,
|
|
||||||
int64_t totalQueryTime, int64_t maxQueryTime, int64_t totalInbound, int64_t maxInbound,
|
|
||||||
int64_t totalOutbound, int64_t maxOutbound, int64_t totalDbs, int64_t maxDbs,
|
|
||||||
int64_t totalUsers, int64_t maxUsers, int64_t totalStreams, int64_t maxStreams,
|
|
||||||
int64_t totalConns, int64_t maxConns, int8_t accessState);
|
|
||||||
void (*mnodeCountRequestFp)(SDnodeStatisInfo *info) = NULL;
|
|
||||||
void monitorExecuteSQL(char *sql);
|
|
||||||
|
|
||||||
void monitorCheckDiskUsage(void *para, void *unused) {
|
|
||||||
taosGetDisk();
|
|
||||||
taosTmrReset(monitorCheckDiskUsage, CHECK_INTERVAL, NULL, tscTmr, &monitor->diskTimer);
|
|
||||||
}
|
|
||||||
|
|
||||||
int monitorInitSystem() {
|
|
||||||
monitor = (MonitorConn *)malloc(sizeof(MonitorConn));
|
|
||||||
memset(monitor, 0, sizeof(MonitorConn));
|
|
||||||
taosTmrReset(monitorCheckDiskUsage, CHECK_INTERVAL, NULL, tscTmr, &monitor->diskTimer);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int monitorStartSystem() {
|
|
||||||
if (monitor == NULL) {
|
|
||||||
monitorInitSystem();
|
|
||||||
}
|
|
||||||
taosTmrReset(monitorInitConn, 10, NULL, tscTmr, &monitor->initTimer);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void monitorStartSystemRetry() {
|
|
||||||
if (monitor->initTimer != NULL) {
|
|
||||||
taosTmrReset(monitorInitConn, 3000, NULL, tscTmr, &monitor->initTimer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void monitorInitConn(void *para, void *unused) {
|
|
||||||
monitorPrint("starting to initialize monitor service ..");
|
|
||||||
monitor->state = MONITOR_STATE_INITIALIZING;
|
|
||||||
|
|
||||||
if (monitor->privateIpStr[0] == 0) {
|
|
||||||
strcpy(monitor->privateIpStr, tsPrivateIp);
|
|
||||||
for (int i = 0; i < TSDB_IPv4ADDR_LEN; ++i) {
|
|
||||||
if (monitor->privateIpStr[i] == '.') {
|
|
||||||
monitor->privateIpStr[i] = '_';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (monitor->conn == NULL) {
|
|
||||||
taos_connect_a(NULL, "monitor", tsInternalPass, "", 0, monitorInitConnCb, monitor, &(monitor->conn));
|
|
||||||
} else {
|
|
||||||
monitorInitDatabase();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void monitorInitConnCb(void *param, TAOS_RES *result, int code) {
|
|
||||||
if (code < 0) {
|
|
||||||
monitorError("monitor:%p, connect to database failed, code:%d", monitor->conn, code);
|
|
||||||
taos_close(monitor->conn);
|
|
||||||
monitor->conn = NULL;
|
|
||||||
monitor->state = MONITOR_STATE_UN_INIT;
|
|
||||||
monitorStartSystemRetry();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
monitorTrace("monitor:%p, connect to database success, code:%d", monitor->conn, code);
|
|
||||||
monitorInitDatabase();
|
|
||||||
}
|
|
||||||
|
|
||||||
void dnodeBuildMonitorSql(char *sql, int cmd) {
|
|
||||||
memset(sql, 0, SQL_LENGTH);
|
|
||||||
|
|
||||||
if (cmd == MONITOR_CMD_CREATE_DB) {
|
|
||||||
snprintf(sql, SQL_LENGTH,
|
|
||||||
"create database if not exists %s replica 1 days 10 keep 30 rows 1024 cache 2048 "
|
|
||||||
"ablocks 2 tblocks 32 tables 32 precision 'us'",
|
|
||||||
tsMonitorDbName);
|
|
||||||
} else if (cmd == MONITOR_CMD_CREATE_MT_DN) {
|
|
||||||
snprintf(sql, SQL_LENGTH,
|
|
||||||
"create table if not exists %s.dn(ts timestamp"
|
|
||||||
", cpu_taosd float, cpu_system float, cpu_cores int"
|
|
||||||
", mem_taosd float, mem_system float, mem_total int"
|
|
||||||
", disk_used float, disk_total int"
|
|
||||||
", band_speed float"
|
|
||||||
", io_read float, io_write float"
|
|
||||||
", req_http int, req_select int, req_insert int"
|
|
||||||
") tags (ipaddr binary(%d))",
|
|
||||||
tsMonitorDbName, IP_LEN_STR + 1);
|
|
||||||
} else if (cmd == MONITOR_CMD_CREATE_TB_DN) {
|
|
||||||
snprintf(sql, SQL_LENGTH, "create table if not exists %s.dn_%s using %s.dn tags('%s')", tsMonitorDbName,
|
|
||||||
monitor->privateIpStr, tsMonitorDbName, tsPrivateIp);
|
|
||||||
} else if (cmd == MONITOR_CMD_CREATE_MT_ACCT) {
|
|
||||||
snprintf(sql, SQL_LENGTH,
|
|
||||||
"create table if not exists %s.acct(ts timestamp "
|
|
||||||
", currentPointsPerSecond bigint, maxPointsPerSecond bigint"
|
|
||||||
", totalTimeSeries bigint, maxTimeSeries bigint"
|
|
||||||
", totalStorage bigint, maxStorage bigint"
|
|
||||||
", totalQueryTime bigint, maxQueryTime bigint"
|
|
||||||
", totalInbound bigint, maxInbound bigint"
|
|
||||||
", totalOutbound bigint, maxOutbound bigint"
|
|
||||||
", totalDbs smallint, maxDbs smallint"
|
|
||||||
", totalUsers smallint, maxUsers smallint"
|
|
||||||
", totalStreams smallint, maxStreams smallint"
|
|
||||||
", totalConns smallint, maxConns smallint"
|
|
||||||
", accessState smallint"
|
|
||||||
") tags (acctId binary(%d))",
|
|
||||||
tsMonitorDbName, TSDB_USER_LEN + 1);
|
|
||||||
} else if (cmd == MONITOR_CMD_CREATE_TB_ACCT_ROOT) {
|
|
||||||
snprintf(sql, SQL_LENGTH, "create table if not exists %s.acct_%s using %s.acct tags('%s')", tsMonitorDbName, "root",
|
|
||||||
tsMonitorDbName, "root");
|
|
||||||
} else if (cmd == MONITOR_CMD_CREATE_TB_SLOWQUERY) {
|
|
||||||
snprintf(sql, SQL_LENGTH,
|
|
||||||
"create table if not exists %s.slowquery(ts timestamp, username "
|
|
||||||
"binary(%d), created_time timestamp, time bigint, sql binary(%d))",
|
|
||||||
tsMonitorDbName, TSDB_TABLE_ID_LEN, TSDB_SHOW_SQL_LEN);
|
|
||||||
} else if (cmd == MONITOR_CMD_CREATE_TB_LOG) {
|
|
||||||
snprintf(sql, SQL_LENGTH,
|
|
||||||
"create table if not exists %s.log(ts timestamp, level tinyint, "
|
|
||||||
"content binary(%d), ipaddr binary(%d))",
|
|
||||||
tsMonitorDbName, LOG_LEN_STR, IP_LEN_STR);
|
|
||||||
}
|
|
||||||
|
|
||||||
sql[SQL_LENGTH] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void monitorInitDatabase() {
|
|
||||||
if (monitor->cmdIndex < MONITOR_CMD_MAX) {
|
|
||||||
dnodeBuildMonitorSql(monitor->sql, monitor->cmdIndex);
|
|
||||||
taos_query_a(monitor->conn, monitor->sql, monitorInitDatabaseCb, NULL);
|
|
||||||
} else {
|
|
||||||
monitor->state = MONITOR_STATE_INITIALIZED;
|
|
||||||
monitorPrint("monitor service init success");
|
|
||||||
|
|
||||||
monitorStartTimer();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void monitorInitDatabaseCb(void *param, TAOS_RES *result, int code) {
|
|
||||||
if (-code == TSDB_CODE_TABLE_ALREADY_EXIST || -code == TSDB_CODE_DB_ALREADY_EXIST || code >= 0) {
|
|
||||||
monitorTrace("monitor:%p, sql success, code:%d, %s", monitor->conn, code, monitor->sql);
|
|
||||||
if (monitor->cmdIndex == MONITOR_CMD_CREATE_TB_LOG) {
|
|
||||||
monitorLPrint("dnode:%s is started", tsPrivateIp);
|
|
||||||
}
|
|
||||||
monitor->cmdIndex++;
|
|
||||||
monitorInitDatabase();
|
|
||||||
} else {
|
|
||||||
monitorError("monitor:%p, sql failed, code:%d, %s", monitor->conn, code, monitor->sql);
|
|
||||||
monitor->state = MONITOR_STATE_UN_INIT;
|
|
||||||
monitorStartSystemRetry();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void monitorStopSystem() {
|
|
||||||
if (monitor == NULL) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
monitorLPrint("dnode:%s monitor module is stopped", tsPrivateIp);
|
|
||||||
monitor->state = MONITOR_STATE_STOPPED;
|
|
||||||
// taosLogFp = NULL;
|
|
||||||
if (monitor->initTimer != NULL) {
|
|
||||||
taosTmrStopA(&(monitor->initTimer));
|
|
||||||
}
|
|
||||||
if (monitor->timer != NULL) {
|
|
||||||
taosTmrStopA(&(monitor->timer));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void monitorCleanUpSystem() {
|
|
||||||
monitorPrint("monitor service cleanup");
|
|
||||||
monitorStopSystem();
|
|
||||||
}
|
|
||||||
|
|
||||||
void monitorStartTimer() {
|
|
||||||
taosTmrReset(monitorSaveSystemInfo, tsMonitorInterval * 1000, NULL, tscTmr, &monitor->timer);
|
|
||||||
}
|
|
||||||
|
|
||||||
void dnodeMontiorInsertAcctCallback(void *param, TAOS_RES *result, int code) {
|
|
||||||
if (code < 0) {
|
|
||||||
monitorError("monitor:%p, save account info failed, code:%d", monitor->conn, code);
|
|
||||||
} else if (code == 0) {
|
|
||||||
monitorError("monitor:%p, save account info failed, affect rows:%d", monitor->conn, code);
|
|
||||||
} else {
|
|
||||||
monitorTrace("monitor:%p, save account info success, code:%d", monitor->conn, code);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void dnodeMontiorInsertSysCallback(void *param, TAOS_RES *result, int code) {
|
|
||||||
if (code < 0) {
|
|
||||||
monitorError("monitor:%p, save system info failed, code:%d %s", monitor->conn, code, monitor->sql);
|
|
||||||
} else if (code == 0) {
|
|
||||||
monitorError("monitor:%p, save system info failed, affect rows:%d %s", monitor->conn, code, monitor->sql);
|
|
||||||
} else {
|
|
||||||
monitorTrace("monitor:%p, save system info success, code:%d %s", monitor->conn, code, monitor->sql);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void dnodeMontiorInsertLogCallback(void *param, TAOS_RES *result, int code) {
|
|
||||||
if (code < 0) {
|
|
||||||
monitorError("monitor:%p, save log failed, code:%d", monitor->conn, code);
|
|
||||||
} else if (code == 0) {
|
|
||||||
monitorError("monitor:%p, save log failed, affect rows:%d", monitor->conn, code);
|
|
||||||
} else {
|
|
||||||
monitorTrace("monitor:%p, save log info success, code:%d", monitor->conn, code);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// unit is MB
|
|
||||||
int monitorBuildMemorySql(char *sql) {
|
|
||||||
float sysMemoryUsedMB = 0;
|
|
||||||
bool suc = taosGetSysMemory(&sysMemoryUsedMB);
|
|
||||||
if (!suc) {
|
|
||||||
monitorError("monitor:%p, get sys memory info failed.", monitor->conn);
|
|
||||||
}
|
|
||||||
|
|
||||||
float procMemoryUsedMB = 0;
|
|
||||||
suc = taosGetProcMemory(&procMemoryUsedMB);
|
|
||||||
if (!suc) {
|
|
||||||
monitorError("monitor:%p, get proc memory info failed.", monitor->conn);
|
|
||||||
}
|
|
||||||
|
|
||||||
return sprintf(sql, ", %f, %f, %d", procMemoryUsedMB, sysMemoryUsedMB, tsTotalMemoryMB);
|
|
||||||
}
|
|
||||||
|
|
||||||
// unit is %
|
|
||||||
int monitorBuildCpuSql(char *sql) {
|
|
||||||
float sysCpuUsage = 0, procCpuUsage = 0;
|
|
||||||
bool suc = taosGetCpuUsage(&sysCpuUsage, &procCpuUsage);
|
|
||||||
if (!suc) {
|
|
||||||
monitorError("monitor:%p, get cpu usage failed.", monitor->conn);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sysCpuUsage <= procCpuUsage) {
|
|
||||||
sysCpuUsage = procCpuUsage + (float)0.1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return sprintf(sql, ", %f, %f, %d", procCpuUsage, sysCpuUsage, tsNumOfCores);
|
|
||||||
}
|
|
||||||
|
|
||||||
// unit is GB
|
|
||||||
int monitorBuildDiskSql(char *sql) {
|
|
||||||
return sprintf(sql, ", %f, %d", (tsTotalDataDirGB - tsAvailDataDirGB), (int32_t)tsTotalDataDirGB);
|
|
||||||
}
|
|
||||||
|
|
||||||
// unit is Kb
|
|
||||||
int monitorBuildBandSql(char *sql) {
|
|
||||||
float bandSpeedKb = 0;
|
|
||||||
bool suc = taosGetBandSpeed(&bandSpeedKb);
|
|
||||||
if (!suc) {
|
|
||||||
monitorError("monitor:%p, get bandwidth speed failed.", monitor->conn);
|
|
||||||
}
|
|
||||||
|
|
||||||
return sprintf(sql, ", %f", bandSpeedKb);
|
|
||||||
}
|
|
||||||
|
|
||||||
int monitorBuildReqSql(char *sql) {
|
|
||||||
SDnodeStatisInfo info;
|
|
||||||
info.httpReqNum = info.submitReqNum = info.queryReqNum = 0;
|
|
||||||
(*mnodeCountRequestFp)(&info);
|
|
||||||
|
|
||||||
return sprintf(sql, ", %d, %d, %d)", info.httpReqNum, info.queryReqNum, info.submitReqNum);
|
|
||||||
}
|
|
||||||
|
|
||||||
int monitorBuildIoSql(char *sql) {
|
|
||||||
float readKB = 0, writeKB = 0;
|
|
||||||
bool suc = taosGetProcIO(&readKB, &writeKB);
|
|
||||||
if (!suc) {
|
|
||||||
monitorError("monitor:%p, get io info failed.", monitor->conn);
|
|
||||||
}
|
|
||||||
|
|
||||||
return sprintf(sql, ", %f, %f", readKB, writeKB);
|
|
||||||
}
|
|
||||||
|
|
||||||
void monitorSaveSystemInfo() {
|
|
||||||
if (monitor->state != MONITOR_STATE_INITIALIZED) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mnodeCountRequestFp == NULL) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int64_t ts = taosGetTimestampUs();
|
|
||||||
char * sql = monitor->sql;
|
|
||||||
int pos = snprintf(sql, SQL_LENGTH, "insert into %s.dn_%s values(%" PRId64, tsMonitorDbName, monitor->privateIpStr, ts);
|
|
||||||
|
|
||||||
pos += monitorBuildCpuSql(sql + pos);
|
|
||||||
pos += monitorBuildMemorySql(sql + pos);
|
|
||||||
pos += monitorBuildDiskSql(sql + pos);
|
|
||||||
pos += monitorBuildBandSql(sql + pos);
|
|
||||||
pos += monitorBuildIoSql(sql + pos);
|
|
||||||
pos += monitorBuildReqSql(sql + pos);
|
|
||||||
|
|
||||||
monitorTrace("monitor:%p, save system info, sql:%s", monitor->conn, sql);
|
|
||||||
taos_query_a(monitor->conn, sql, dnodeMontiorInsertSysCallback, "log");
|
|
||||||
|
|
||||||
if (monitor->timer != NULL && monitor->state != MONITOR_STATE_STOPPED) {
|
|
||||||
monitorStartTimer();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void monitorSaveAcctLog(char *acctId, int64_t currentPointsPerSecond, int64_t maxPointsPerSecond,
|
|
||||||
int64_t totalTimeSeries, int64_t maxTimeSeries, int64_t totalStorage, int64_t maxStorage,
|
|
||||||
int64_t totalQueryTime, int64_t maxQueryTime, int64_t totalInbound, int64_t maxInbound,
|
|
||||||
int64_t totalOutbound, int64_t maxOutbound, int64_t totalDbs, int64_t maxDbs,
|
|
||||||
int64_t totalUsers, int64_t maxUsers, int64_t totalStreams, int64_t maxStreams,
|
|
||||||
int64_t totalConns, int64_t maxConns, int8_t accessState) {
|
|
||||||
if (monitor == NULL) return;
|
|
||||||
if (monitor->state != MONITOR_STATE_INITIALIZED) return;
|
|
||||||
|
|
||||||
char sql[1024] = {0};
|
|
||||||
sprintf(sql,
|
|
||||||
"insert into %s.acct_%s using %s.acct tags('%s') values(now"
|
|
||||||
", %" PRId64 ", %" PRId64
|
|
||||||
", %" PRId64 ", %" PRId64
|
|
||||||
", %" PRId64 ", %" PRId64
|
|
||||||
", %" PRId64 ", %" PRId64
|
|
||||||
", %" PRId64 ", %" PRId64
|
|
||||||
", %" PRId64 ", %" PRId64
|
|
||||||
", %" PRId64 ", %" PRId64
|
|
||||||
", %" PRId64 ", %" PRId64
|
|
||||||
", %" PRId64 ", %" PRId64
|
|
||||||
", %" PRId64 ", %" PRId64
|
|
||||||
", %d)",
|
|
||||||
tsMonitorDbName, acctId, tsMonitorDbName, acctId,
|
|
||||||
currentPointsPerSecond, maxPointsPerSecond,
|
|
||||||
totalTimeSeries, maxTimeSeries,
|
|
||||||
totalStorage, maxStorage,
|
|
||||||
totalQueryTime, maxQueryTime,
|
|
||||||
totalInbound, maxInbound,
|
|
||||||
totalOutbound, maxOutbound,
|
|
||||||
totalDbs, maxDbs,
|
|
||||||
totalUsers, maxUsers,
|
|
||||||
totalStreams, maxStreams,
|
|
||||||
totalConns, maxConns,
|
|
||||||
accessState);
|
|
||||||
|
|
||||||
monitorTrace("monitor:%p, save account info, sql %s", monitor->conn, sql);
|
|
||||||
taos_query_a(monitor->conn, sql, dnodeMontiorInsertAcctCallback, "account");
|
|
||||||
}
|
|
||||||
|
|
||||||
void monitorSaveLog(int level, const char *const format, ...) {
|
|
||||||
va_list argpointer;
|
|
||||||
char sql[SQL_LENGTH] = {0};
|
|
||||||
int max_length = SQL_LENGTH - 30;
|
|
||||||
|
|
||||||
if (monitor->state != MONITOR_STATE_INITIALIZED) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int len = snprintf(sql, (size_t)max_length, "import into %s.log values(%" PRId64 ", %d,'", tsMonitorDbName,
|
|
||||||
taosGetTimestampUs(), level);
|
|
||||||
|
|
||||||
va_start(argpointer, format);
|
|
||||||
len += vsnprintf(sql + len, (size_t)(max_length - len), format, argpointer);
|
|
||||||
va_end(argpointer);
|
|
||||||
if (len > max_length) len = max_length;
|
|
||||||
|
|
||||||
len += sprintf(sql + len, "', '%s')", tsPrivateIp);
|
|
||||||
sql[len++] = 0;
|
|
||||||
|
|
||||||
monitorTrace("monitor:%p, save log, sql: %s", monitor->conn, sql);
|
|
||||||
taos_query_a(monitor->conn, sql, dnodeMontiorInsertLogCallback, "log");
|
|
||||||
}
|
|
||||||
|
|
||||||
void monitorExecuteSQL(char *sql) {
|
|
||||||
monitorTrace("monitor:%p, execute sql: %s", monitor->conn, sql);
|
|
||||||
taos_query_a(monitor->conn, sql, NULL, NULL);
|
|
||||||
}
|
|
|
@ -245,7 +245,7 @@ typedef struct {
|
||||||
int32_t len;
|
int32_t len;
|
||||||
int32_t offset;
|
int32_t offset;
|
||||||
int32_t hasLast : 1;
|
int32_t hasLast : 1;
|
||||||
int32_t numOfSuperBlocks : 31;
|
int32_t numOfBlocks : 31;
|
||||||
int32_t checksum;
|
int32_t checksum;
|
||||||
TSKEY maxKey;
|
TSKEY maxKey;
|
||||||
} SCompIdx; /* sizeof(SCompIdx) = 24 */
|
} SCompIdx; /* sizeof(SCompIdx) = 24 */
|
||||||
|
|
|
@ -322,12 +322,12 @@ int tsdbWriteDataBlock(SRWHelper *pHelper, SDataCols *pDataCols) {
|
||||||
|
|
||||||
if (tsdbWriteBlockToFile(pHelper, pWFile, pDataCols, rowsToWrite, &compBlock, isLast, true) < 0) goto _err;
|
if (tsdbWriteBlockToFile(pHelper, pWFile, pDataCols, rowsToWrite, &compBlock, isLast, true) < 0) goto _err;
|
||||||
|
|
||||||
if (tsdbInsertSuperBlock(pHelper, &compBlock, pIdx->numOfSuperBlocks) < 0) goto _err;
|
if (tsdbInsertSuperBlock(pHelper, &compBlock, pIdx->numOfBlocks) < 0) goto _err;
|
||||||
} else { // (Has old data) AND ((has last block) OR (key overlap)), need to merge the block
|
} else { // (Has old data) AND ((has last block) OR (key overlap)), need to merge the block
|
||||||
SCompBlock *pCompBlock = taosbsearch((void *)(&keyFirst), (void *)(pHelper->pCompInfo->blocks),
|
SCompBlock *pCompBlock = taosbsearch((void *)(&keyFirst), (void *)(pHelper->pCompInfo->blocks),
|
||||||
pIdx->numOfSuperBlocks, sizeof(SCompBlock), compareKeyBlock, TD_GE);
|
pIdx->numOfBlocks, sizeof(SCompBlock), compareKeyBlock, TD_GE);
|
||||||
|
|
||||||
int blkIdx = (pCompBlock == NULL) ? (pIdx->numOfSuperBlocks - 1) : (pCompBlock - pHelper->pCompInfo->blocks);
|
int blkIdx = (pCompBlock == NULL) ? (pIdx->numOfBlocks - 1) : (pCompBlock - pHelper->pCompInfo->blocks);
|
||||||
|
|
||||||
if (pCompBlock == NULL) { // No key overlap, must has last block, just merge with the last block
|
if (pCompBlock == NULL) { // No key overlap, must has last block, just merge with the last block
|
||||||
ASSERT(pIdx->hasLast && pHelper->pCompInfo->blocks[pIdx->numOfSuperBlocks - 1].last);
|
ASSERT(pIdx->hasLast && pHelper->pCompInfo->blocks[pIdx->numOfSuperBlocks - 1].last);
|
||||||
|
@ -362,18 +362,18 @@ int tsdbMoveLastBlockIfNeccessary(SRWHelper *pHelper) {
|
||||||
if ((pHelper->files.nLastF.fd > 0) && (pHelper->hasOldLastBlock)) {
|
if ((pHelper->files.nLastF.fd > 0) && (pHelper->hasOldLastBlock)) {
|
||||||
if (tsdbLoadCompInfo(pHelper, NULL) < 0) return -1;
|
if (tsdbLoadCompInfo(pHelper, NULL) < 0) return -1;
|
||||||
|
|
||||||
SCompBlock *pCompBlock = pHelper->pCompInfo->blocks + pIdx->numOfSuperBlocks - 1;
|
SCompBlock *pCompBlock = pHelper->pCompInfo->blocks + pIdx->numOfBlocks - 1;
|
||||||
ASSERT(pCompBlock->last);
|
ASSERT(pCompBlock->last);
|
||||||
|
|
||||||
if (pCompBlock->numOfSubBlocks > 1) {
|
if (pCompBlock->numOfSubBlocks > 1) {
|
||||||
if (tsdbLoadBlockData(pHelper, blockAtIdx(pHelper, pIdx->numOfSuperBlocks - 1), NULL) < 0) return -1;
|
if (tsdbLoadBlockData(pHelper, blockAtIdx(pHelper, pIdx->numOfBlocks - 1), NULL) < 0) return -1;
|
||||||
ASSERT(pHelper->pDataCols[0]->numOfPoints > 0 &&
|
ASSERT(pHelper->pDataCols[0]->numOfPoints > 0 &&
|
||||||
pHelper->pDataCols[0]->numOfPoints < pHelper->config.minRowsPerFileBlock);
|
pHelper->pDataCols[0]->numOfPoints < pHelper->config.minRowsPerFileBlock);
|
||||||
if (tsdbWriteBlockToFile(pHelper, &(pHelper->files.nLastF), pHelper->pDataCols[0],
|
if (tsdbWriteBlockToFile(pHelper, &(pHelper->files.nLastF), pHelper->pDataCols[0],
|
||||||
pHelper->pDataCols[0]->numOfPoints, &compBlock, true, true) < 0)
|
pHelper->pDataCols[0]->numOfPoints, &compBlock, true, true) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (tsdbUpdateSuperBlock(pHelper, &compBlock, pIdx->numOfSuperBlocks - 1) < 0) return -1;
|
if (tsdbUpdateSuperBlock(pHelper, &compBlock, pIdx->numOfBlocks - 1) < 0) return -1;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if (lseek(pHelper->files.lastF.fd, pCompBlock->offset, SEEK_SET) < 0) return -1;
|
if (lseek(pHelper->files.lastF.fd, pCompBlock->offset, SEEK_SET) < 0) return -1;
|
||||||
|
@ -827,7 +827,7 @@ static int tsdbMergeDataWithBlock(SRWHelper *pHelper, int blkIdx, SDataCols *pDa
|
||||||
ASSERT(keyFirst <= blockAtIdx(pHelper, blkIdx)->keyLast);
|
ASSERT(keyFirst <= blockAtIdx(pHelper, blkIdx)->keyLast);
|
||||||
|
|
||||||
TSKEY keyLimit =
|
TSKEY keyLimit =
|
||||||
(blkIdx == pIdx->numOfSuperBlocks - 1) ? INT64_MAX : pHelper->pCompInfo->blocks[blkIdx + 1].keyFirst - 1;
|
(blkIdx == pIdx->numOfBlocks - 1) ? INT64_MAX : pHelper->pCompInfo->blocks[blkIdx + 1].keyFirst - 1;
|
||||||
|
|
||||||
// rows1: number of rows must merge in this block
|
// rows1: number of rows must merge in this block
|
||||||
int rows1 = tsdbGetRowsInRange(pDataCols, blockAtIdx(pHelper, blkIdx)->keyFirst, blockAtIdx(pHelper, blkIdx)->keyLast);
|
int rows1 = tsdbGetRowsInRange(pDataCols, blockAtIdx(pHelper, blkIdx)->keyFirst, blockAtIdx(pHelper, blkIdx)->keyLast);
|
||||||
|
@ -969,7 +969,7 @@ static int tsdbInsertSuperBlock(SRWHelper *pHelper, SCompBlock *pCompBlock, int
|
||||||
if (tsdbAdjustInfoSizeIfNeeded(pHelper, pIdx->len + sizeof(SCompInfo)) < 0) goto _err;
|
if (tsdbAdjustInfoSizeIfNeeded(pHelper, pIdx->len + sizeof(SCompInfo)) < 0) goto _err;
|
||||||
|
|
||||||
// Change the offset
|
// Change the offset
|
||||||
for (int i = 0; i < pIdx->numOfSuperBlocks; i++) {
|
for (int i = 0; i < pIdx->numOfBlocks; i++) {
|
||||||
SCompBlock *pTCompBlock = &pHelper->pCompInfo->blocks[i];
|
SCompBlock *pTCompBlock = &pHelper->pCompInfo->blocks[i];
|
||||||
if (pTCompBlock->numOfSubBlocks > 1) pTCompBlock->offset += sizeof(SCompBlock);
|
if (pTCompBlock->numOfSubBlocks > 1) pTCompBlock->offset += sizeof(SCompBlock);
|
||||||
}
|
}
|
||||||
|
@ -984,13 +984,13 @@ static int tsdbInsertSuperBlock(SRWHelper *pHelper, SCompBlock *pCompBlock, int
|
||||||
}
|
}
|
||||||
pHelper->pCompInfo->blocks[blkIdx] = *pCompBlock;
|
pHelper->pCompInfo->blocks[blkIdx] = *pCompBlock;
|
||||||
|
|
||||||
pIdx->numOfSuperBlocks++;
|
pIdx->numOfBlocks++;
|
||||||
pIdx->len += sizeof(SCompBlock);
|
pIdx->len += sizeof(SCompBlock);
|
||||||
ASSERT(pIdx->len <= tsizeof(pHelper->pCompInfo));
|
ASSERT(pIdx->len <= tsizeof(pHelper->pCompInfo));
|
||||||
pIdx->maxKey = pHelper->pCompInfo->blocks[pIdx->numOfSuperBlocks - 1].keyLast;
|
pIdx->maxKey = pHelper->pCompInfo->blocks[pIdx->numOfBlocks - 1].keyLast;
|
||||||
pIdx->hasLast = pHelper->pCompInfo->blocks[pIdx->numOfSuperBlocks - 1].last;
|
pIdx->hasLast = pHelper->pCompInfo->blocks[pIdx->numOfBlocks - 1].last;
|
||||||
|
|
||||||
if (pIdx->numOfSuperBlocks > 1) {
|
if (pIdx->numOfBlocks > 1) {
|
||||||
ASSERT(pHelper->pCompInfo->blocks[0].keyLast < pHelper->pCompInfo->blocks[1].keyFirst);
|
ASSERT(pHelper->pCompInfo->blocks[0].keyLast < pHelper->pCompInfo->blocks[1].keyFirst);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1022,7 +1022,7 @@ static int tsdbAddSubBlock(SRWHelper *pHelper, SCompBlock *pCompBlock, int blkId
|
||||||
memmove((void *)((char *)(pHelper->pCompInfo) + pSCompBlock->offset + pSCompBlock->len + sizeof(SCompBlock)),
|
memmove((void *)((char *)(pHelper->pCompInfo) + pSCompBlock->offset + pSCompBlock->len + sizeof(SCompBlock)),
|
||||||
(void *)((char *)(pHelper->pCompInfo) + pSCompBlock->offset + pSCompBlock->len), tsize);
|
(void *)((char *)(pHelper->pCompInfo) + pSCompBlock->offset + pSCompBlock->len), tsize);
|
||||||
|
|
||||||
for (int i = blkIdx + 1; i < pIdx->numOfSuperBlocks; i++) {
|
for (int i = blkIdx + 1; i < pIdx->numOfBlocks; i++) {
|
||||||
SCompBlock *pTCompBlock = &pHelper->pCompInfo->blocks[i];
|
SCompBlock *pTCompBlock = &pHelper->pCompInfo->blocks[i];
|
||||||
if (pTCompBlock->numOfSubBlocks > 1) pTCompBlock->offset += sizeof(SCompBlock);
|
if (pTCompBlock->numOfSubBlocks > 1) pTCompBlock->offset += sizeof(SCompBlock);
|
||||||
}
|
}
|
||||||
|
@ -1040,7 +1040,7 @@ static int tsdbAddSubBlock(SRWHelper *pHelper, SCompBlock *pCompBlock, int blkId
|
||||||
pIdx->len += sizeof(SCompBlock);
|
pIdx->len += sizeof(SCompBlock);
|
||||||
} else { // Need to create two sub-blocks
|
} else { // Need to create two sub-blocks
|
||||||
void *ptr = NULL;
|
void *ptr = NULL;
|
||||||
for (int i = blkIdx + 1; i < pIdx->numOfSuperBlocks; i++) {
|
for (int i = blkIdx + 1; i < pIdx->numOfBlocks; i++) {
|
||||||
SCompBlock *pTCompBlock = pHelper->pCompInfo->blocks + i;
|
SCompBlock *pTCompBlock = pHelper->pCompInfo->blocks + i;
|
||||||
if (pTCompBlock->numOfSubBlocks > 1) {
|
if (pTCompBlock->numOfSubBlocks > 1) {
|
||||||
ptr = (void *)((char *)(pHelper->pCompInfo) + pTCompBlock->offset + pTCompBlock->len);
|
ptr = (void *)((char *)(pHelper->pCompInfo) + pTCompBlock->offset + pTCompBlock->len);
|
||||||
|
@ -1053,7 +1053,7 @@ static int tsdbAddSubBlock(SRWHelper *pHelper, SCompBlock *pCompBlock, int blkId
|
||||||
size_t tsize = pIdx->len - ((char *)ptr - (char *)(pHelper->pCompInfo));
|
size_t tsize = pIdx->len - ((char *)ptr - (char *)(pHelper->pCompInfo));
|
||||||
if (tsize > 0) {
|
if (tsize > 0) {
|
||||||
memmove((void *)((char *)ptr + sizeof(SCompBlock) * 2), ptr, tsize);
|
memmove((void *)((char *)ptr + sizeof(SCompBlock) * 2), ptr, tsize);
|
||||||
for (int i = blkIdx + 1; i < pIdx->numOfSuperBlocks; i++) {
|
for (int i = blkIdx + 1; i < pIdx->numOfBlocks; i++) {
|
||||||
SCompBlock *pTCompBlock = pHelper->pCompInfo->blocks + i;
|
SCompBlock *pTCompBlock = pHelper->pCompInfo->blocks + i;
|
||||||
if (pTCompBlock->numOfSubBlocks > 1) pTCompBlock->offset += (sizeof(SCompBlock) * 2);
|
if (pTCompBlock->numOfSubBlocks > 1) pTCompBlock->offset += (sizeof(SCompBlock) * 2);
|
||||||
}
|
}
|
||||||
|
@ -1074,8 +1074,8 @@ static int tsdbAddSubBlock(SRWHelper *pHelper, SCompBlock *pCompBlock, int blkId
|
||||||
pIdx->len += (sizeof(SCompBlock) * 2);
|
pIdx->len += (sizeof(SCompBlock) * 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
pIdx->maxKey = pHelper->pCompInfo->blocks[pIdx->numOfSuperBlocks - 1].keyLast;
|
pIdx->maxKey = pHelper->pCompInfo->blocks[pIdx->numOfBlocks - 1].keyLast;
|
||||||
pIdx->hasLast = pHelper->pCompInfo->blocks[pIdx->numOfSuperBlocks - 1].last;
|
pIdx->hasLast = pHelper->pCompInfo->blocks[pIdx->numOfBlocks - 1].last;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -1102,7 +1102,7 @@ static int tsdbUpdateSuperBlock(SRWHelper *pHelper, SCompBlock *pCompBlock, int
|
||||||
(void *)((char *)(pHelper->pCompInfo) + pSCompBlock->offset + pSCompBlock->len), tsize);
|
(void *)((char *)(pHelper->pCompInfo) + pSCompBlock->offset + pSCompBlock->len), tsize);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = blkIdx + 1; i < pIdx->numOfSuperBlocks; i++) {
|
for (int i = blkIdx + 1; i < pIdx->numOfBlocks; i++) {
|
||||||
SCompBlock *pTCompBlock = &pHelper->pCompInfo->blocks[i];
|
SCompBlock *pTCompBlock = &pHelper->pCompInfo->blocks[i];
|
||||||
if (pTCompBlock->numOfSubBlocks > 1) pTCompBlock->offset -= (sizeof(SCompBlock) * pSCompBlock->numOfSubBlocks);
|
if (pTCompBlock->numOfSubBlocks > 1) pTCompBlock->offset -= (sizeof(SCompBlock) * pSCompBlock->numOfSubBlocks);
|
||||||
}
|
}
|
||||||
|
@ -1112,8 +1112,8 @@ static int tsdbUpdateSuperBlock(SRWHelper *pHelper, SCompBlock *pCompBlock, int
|
||||||
|
|
||||||
*pSCompBlock = *pCompBlock;
|
*pSCompBlock = *pCompBlock;
|
||||||
|
|
||||||
pIdx->maxKey = pHelper->pCompInfo->blocks[pIdx->numOfSuperBlocks - 1].keyLast;
|
pIdx->maxKey = pHelper->pCompInfo->blocks[pIdx->numOfBlocks - 1].keyLast;
|
||||||
pIdx->hasLast = pHelper->pCompInfo->blocks[pIdx->numOfSuperBlocks - 1].last;
|
pIdx->hasLast = pHelper->pCompInfo->blocks[pIdx->numOfBlocks - 1].last;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -301,7 +301,7 @@ static int32_t getFileCompInfo(STsdbQueryHandle* pQueryHandle, int32_t* numOfBlo
|
||||||
STableCheckInfo* pCheckInfo = taosArrayGet(pQueryHandle->pTableCheckInfo, i);
|
STableCheckInfo* pCheckInfo = taosArrayGet(pQueryHandle->pTableCheckInfo, i);
|
||||||
|
|
||||||
SCompIdx* compIndex = &pQueryHandle->rhelper.pCompIdx[pCheckInfo->tableId.tid];
|
SCompIdx* compIndex = &pQueryHandle->rhelper.pCompIdx[pCheckInfo->tableId.tid];
|
||||||
if (compIndex->len == 0 || compIndex->numOfSuperBlocks == 0) { // no data block in this file, try next file
|
if (compIndex->len == 0 || compIndex->numOfBlocks == 0) { // no data block in this file, try next file
|
||||||
continue;//no data blocks in the file belongs to pCheckInfo->pTable
|
continue;//no data blocks in the file belongs to pCheckInfo->pTable
|
||||||
} else {
|
} else {
|
||||||
if (pCheckInfo->compSize < compIndex->len) {
|
if (pCheckInfo->compSize < compIndex->len) {
|
||||||
|
@ -327,7 +327,7 @@ static int32_t getFileCompInfo(STsdbQueryHandle* pQueryHandle, int32_t* numOfBlo
|
||||||
TSKEY e = MAX(pCheckInfo->lastKey, pQueryHandle->window.ekey);
|
TSKEY e = MAX(pCheckInfo->lastKey, pQueryHandle->window.ekey);
|
||||||
|
|
||||||
// discard the unqualified data block based on the query time window
|
// discard the unqualified data block based on the query time window
|
||||||
int32_t start = binarySearchForBlockImpl(pCompInfo->blocks, compIndex->numOfSuperBlocks, s, TSDB_ORDER_ASC);
|
int32_t start = binarySearchForBlockImpl(pCompInfo->blocks, compIndex->numOfBlocks, s, TSDB_ORDER_ASC);
|
||||||
int32_t end = start;
|
int32_t end = start;
|
||||||
|
|
||||||
if (s > pCompInfo->blocks[start].keyLast) {
|
if (s > pCompInfo->blocks[start].keyLast) {
|
||||||
|
@ -335,7 +335,7 @@ static int32_t getFileCompInfo(STsdbQueryHandle* pQueryHandle, int32_t* numOfBlo
|
||||||
}
|
}
|
||||||
|
|
||||||
// todo speedup the procedure of located end block
|
// todo speedup the procedure of located end block
|
||||||
while (end < compIndex->numOfSuperBlocks && (pCompInfo->blocks[end].keyFirst <= e)) {
|
while (end < compIndex->numOfBlocks && (pCompInfo->blocks[end].keyFirst <= e)) {
|
||||||
end += 1;
|
end += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -39,10 +39,6 @@ extern int32_t ddebugFlag;
|
||||||
#define dPrint(...) \
|
#define dPrint(...) \
|
||||||
{ taosPrintLog("DND ", 255, __VA_ARGS__); }
|
{ taosPrintLog("DND ", 255, __VA_ARGS__); }
|
||||||
|
|
||||||
#define dLError(...) taosLogError(__VA_ARGS__) dError(__VA_ARGS__)
|
|
||||||
#define dLWarn(...) taosLogWarn(__VA_ARGS__) dWarn(__VA_ARGS__)
|
|
||||||
#define dLPrint(...) taosLogPrint(__VA_ARGS__) dPrint(__VA_ARGS__)
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -332,6 +332,9 @@ static void vnodeBuildVloadMsg(char *pNode, void * param) {
|
||||||
|
|
||||||
SVnodeLoad *pLoad = &pStatus->load[pStatus->openVnodes++];
|
SVnodeLoad *pLoad = &pStatus->load[pStatus->openVnodes++];
|
||||||
pLoad->vgId = htonl(pVnode->vgId);
|
pLoad->vgId = htonl(pVnode->vgId);
|
||||||
|
pLoad->totalStorage = htobe64(pLoad->totalStorage);
|
||||||
|
pLoad->compStorage = htobe64(pLoad->compStorage);
|
||||||
|
pLoad->pointsWritten = htobe64(pLoad->pointsWritten);
|
||||||
pLoad->status = pVnode->status;
|
pLoad->status = pVnode->status;
|
||||||
pLoad->role = pVnode->role;
|
pLoad->role = pVnode->role;
|
||||||
pLoad->replica = pVnode->syncCfg.replica;
|
pLoad->replica = pVnode->syncCfg.replica;
|
||||||
|
|
|
@ -118,7 +118,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-databind</artifactId>
|
<artifactId>jackson-databind</artifactId>
|
||||||
<version>2.9.10.3</version>
|
<version>2.9.10.4</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|
|
@ -77,8 +77,8 @@ if $system_content != @{"status":"succ","code":0,"desc":"jIlItaLFFIPa8qdtNZmtONr
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
system_content curl 127.0.0.1:6020/rest/login/u2/abcd_1234
|
system_content curl 127.0.0.1:6020/rest/login/u2/aabcd_1234
|
||||||
print curl 127.0.0.1:6020/rest/login/u2/abcd_1234 -----> $system_content
|
print curl 127.0.0.1:6020/rest/login/u2/abcd_1234 -----> $system_content
|
||||||
if $system_content != @{"status":"succ","code":0,"desc":"AZH3lNvWZiLa8qdtNZmtONryp201ma04QExCHYkbFFQB/46k1gwnPNryp201ma04"}@ then
|
if $system_content != @{"status":"error","code":1000,"desc":"auth failure"}@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
system sh/stop_dnodes.sh
|
system sh/stop_dnodes.sh
|
||||||
|
|
||||||
sleep 5000
|
#sleep 5000
|
||||||
|
|
||||||
system sh/ip.sh -i 1 -s up
|
system sh/ip.sh -i 1 -s up
|
||||||
system sh/deploy.sh -n dnode1 -m 192.168.0.1 -i 192.168.0.1
|
system sh/deploy.sh -n dnode1 -m 192.168.0.1 -i 192.168.0.1
|
||||||
system sh/cfg.sh -n dnode1 -c clog -v 0
|
system sh/cfg.sh -n dnode1 -c clog -v 0
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
|
||||||
sleep 3000
|
#sleep 3000
|
||||||
sql connect
|
sql connect
|
||||||
|
|
||||||
print ============================ dnode1 start
|
print ============================ dnode1 start
|
||||||
|
@ -41,19 +41,19 @@ endi
|
||||||
|
|
||||||
system_content curl 192.168.0.1:6020/rest/login/root/123
|
system_content curl 192.168.0.1:6020/rest/login/root/123
|
||||||
print 5-> $system_content
|
print 5-> $system_content
|
||||||
if $system_content != @{"status":"error","code":10,"desc":"authentication failure"}@ then
|
if $system_content != @{"status":"error","code":1000,"desc":"auth failure"}@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
system_content curl 192.168.0.1:6020/rest/login/root/123/1/1/3
|
system_content curl 192.168.0.1:6020/rest/login/root/123/1/1/3
|
||||||
print 6-> $system_content
|
print 6-> $system_content
|
||||||
if $system_content != @{"status":"error","code":10,"desc":"authentication failure"}@ then
|
if $system_content != @{"status":"error","code":1000,"desc":"auth failure"}@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d 'show databases' 192.168.0.1:6020/rest/login/root/1
|
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d 'show databases' 192.168.0.1:6020/rest/login/root/1
|
||||||
print 7-> $system_content
|
print 7-> $system_content
|
||||||
if $system_content != @{"status":"error","code":10,"desc":"authentication failure"}@ then
|
if $system_content != @{"status":"error","code":1000,"desc":"auth failure"}@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
run general/http/grafana.sim
|
|
||||||
run general/http/restful.sim
|
run general/http/restful.sim
|
||||||
run general/http/restful_full.sim
|
run general/http/restful_full.sim
|
||||||
run general/http/telegraf.sim
|
run general/http/telegraf.sim
|
||||||
run general/http/prepare.sim
|
run general/http/prepare.sim
|
||||||
run general/http/grafana_bug.sim
|
run general/http/grafana_bug.sim
|
||||||
#run general/http/opentsdb.sim
|
run general/http/grafana.sim
|
||||||
|
|
|
@ -93,10 +93,10 @@ echo "privateIp $NODE_IP" >> $TAOS_CFG
|
||||||
echo "dDebugFlag 199" >> $TAOS_CFG
|
echo "dDebugFlag 199" >> $TAOS_CFG
|
||||||
echo "mDebugFlag 199" >> $TAOS_CFG
|
echo "mDebugFlag 199" >> $TAOS_CFG
|
||||||
echo "sdbDebugFlag 199" >> $TAOS_CFG
|
echo "sdbDebugFlag 199" >> $TAOS_CFG
|
||||||
echo "rpcDebugFlag 135" >> $TAOS_CFG
|
echo "rpcDebugFlag 131" >> $TAOS_CFG
|
||||||
echo "tmrDebugFlag 131" >> $TAOS_CFG
|
echo "tmrDebugFlag 131" >> $TAOS_CFG
|
||||||
echo "cDebugFlag 135" >> $TAOS_CFG
|
echo "cDebugFlag 135" >> $TAOS_CFG
|
||||||
echo "httpDebugFlag 131" >> $TAOS_CFG
|
echo "httpDebugFlag 135" >> $TAOS_CFG
|
||||||
echo "monitorDebugFlag 131" >> $TAOS_CFG
|
echo "monitorDebugFlag 131" >> $TAOS_CFG
|
||||||
echo "udebugFlag 131" >> $TAOS_CFG
|
echo "udebugFlag 131" >> $TAOS_CFG
|
||||||
echo "jnidebugFlag 131" >> $TAOS_CFG
|
echo "jnidebugFlag 131" >> $TAOS_CFG
|
||||||
|
|
|
@ -59,10 +59,17 @@ endi
|
||||||
sql drop account oroot
|
sql drop account oroot
|
||||||
|
|
||||||
print ============= step4
|
print ============= step4
|
||||||
sleep 2000
|
$x = 0
|
||||||
sql show dnodes
|
show4:
|
||||||
if $data02 != 0 then
|
$x = $x + 1
|
||||||
|
sleep 2000
|
||||||
|
if $x == 10 then
|
||||||
return -1
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql show dnodes
|
||||||
|
if $data03 != 0 then
|
||||||
|
goto show4
|
||||||
endi
|
endi
|
||||||
|
|
||||||
print ============= step5
|
print ============= step5
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
system sh/stop_dnodes.sh
|
system sh/stop_dnodes.sh
|
||||||
system sh/deploy.sh -n dnode1 -m 192.168.0.1 -i 192.168.0.1
|
system sh/deploy.sh -n dnode1 -m 192.168.0.1 -i 192.168.0.1
|
||||||
system sh/exec_up_up.sh -n dnode1 -s start
|
system sh/exec_up.sh -n dnode1 -s start
|
||||||
sql connect
|
sql connect
|
||||||
|
|
||||||
print =============== show accounts
|
print =============== show accounts
|
||||||
|
|
|
@ -1,36 +0,0 @@
|
||||||
system sh/stop_dnodes.sh
|
|
||||||
|
|
||||||
system sh/ip.sh -i 1 -s up
|
|
||||||
system sh/deploy.sh -n dnode1 -m 192.168.0.1 -i 192.168.0.1
|
|
||||||
system sh/cfg.sh -n dnode1 -c monitor -v 0
|
|
||||||
|
|
||||||
print ========== step1
|
|
||||||
system sh/cfg.sh -n dnode1 -c monitor -v 1
|
|
||||||
system sh/cfg.sh -n dnode1 -c monitorInterval -v 1
|
|
||||||
system sh/exec_up.sh -n dnode1 -s start
|
|
||||||
|
|
||||||
sql connect
|
|
||||||
sleep 3000
|
|
||||||
|
|
||||||
print ========== step2
|
|
||||||
sql drop database log -x step21
|
|
||||||
return -1
|
|
||||||
step21:
|
|
||||||
sql drop table log.cpu -x step22
|
|
||||||
return -1
|
|
||||||
step22:
|
|
||||||
sql drop user log -x step23
|
|
||||||
return -1
|
|
||||||
step23:
|
|
||||||
|
|
||||||
print ========== step3
|
|
||||||
|
|
||||||
sleep 3000
|
|
||||||
sql select * from log.dn
|
|
||||||
if $rows == 0 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
system sh/stop_dnodes.sh
|
system sh/stop_dnodes.sh
|
||||||
system sh/deploy.sh -n dnode1 -m 192.168.0.1 -i 192.168.0.1
|
system sh/deploy.sh -n dnode1 -m 192.168.0.1 -i 192.168.0.1
|
||||||
system sh/exec_up_up.sh -n dnode1 -s start
|
system sh/exec_up.sh -n dnode1 -s start
|
||||||
sql connect
|
sql connect
|
||||||
|
|
||||||
print =============== show accounts
|
print =============== show accounts
|
||||||
|
|
|
@ -6,4 +6,7 @@ run unique/account/pass_len.sim
|
||||||
run unique/account/user_create.sim
|
run unique/account/user_create.sim
|
||||||
run unique/account/user_len.sim
|
run unique/account/user_len.sim
|
||||||
run unique/account/authority.sim
|
run unique/account/authority.sim
|
||||||
|
run unique/account/basic.sim
|
||||||
|
run unique/account/paras.sim
|
||||||
|
run unique/account/usage.sim
|
||||||
run unique/account/monitor.sim
|
run unique/account/monitor.sim
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
system sh/stop_dnodes.sh
|
system sh/stop_dnodes.sh
|
||||||
system sh/deploy.sh -n dnode1 -m 192.168.0.1 -i 192.168.0.1
|
system sh/deploy.sh -n dnode1 -m 192.168.0.1 -i 192.168.0.1
|
||||||
system sh/exec_up_up.sh -n dnode1 -s start
|
system sh/exec_up.sh -n dnode1 -s start
|
||||||
sql connect
|
sql connect
|
||||||
|
|
||||||
print =============== show accounts
|
print =============== show accounts
|
||||||
|
|
|
@ -1 +1,2 @@
|
||||||
run unique/http/admin.sim
|
run unique/http/admin.sim
|
||||||
|
#run general/http/opentsdb.sim
|
|
@ -116,7 +116,7 @@ sleep 8000
|
||||||
|
|
||||||
sql show mnodes
|
sql show mnodes
|
||||||
$dnode1Role = $data3_1
|
$dnode1Role = $data3_1
|
||||||
$dnode2Role = $data3_2
|
$dnode2Role = $data3_4
|
||||||
$dnode3Role = $data3_3
|
$dnode3Role = $data3_3
|
||||||
print 192.168.0.1 ==> $dnode1Role
|
print 192.168.0.1 ==> $dnode1Role
|
||||||
print 192.168.0.2 ==> $dnode2Role
|
print 192.168.0.2 ==> $dnode2Role
|
||||||
|
@ -138,13 +138,13 @@ sleep 10000
|
||||||
|
|
||||||
sql show mnodes
|
sql show mnodes
|
||||||
$dnode1Role = $data3_1
|
$dnode1Role = $data3_1
|
||||||
$dnode2Role = $data3_2
|
$dnode2Role = $data3_4
|
||||||
$dnode3Role = $data3_3
|
$dnode3Role = $data3_3
|
||||||
print 192.168.0.1 ==> $dnode1Role
|
print 192.168.0.1 ==> $dnode1Role
|
||||||
print 192.168.0.2 ==> $dnode2Role
|
print 192.168.0.2 ==> $dnode2Role
|
||||||
print 192.168.0.3 ==> $dnode3Role
|
print 192.168.0.3 ==> $dnode3Role
|
||||||
|
|
||||||
if $dnode1Role != undecided then
|
if $dnode1Role != offline then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
#if $dnode2Role != master then
|
#if $dnode2Role != master then
|
||||||
|
|
|
@ -183,7 +183,7 @@ endi
|
||||||
|
|
||||||
print ============== step7
|
print ============== step7
|
||||||
system sh/exec_up.sh -n dnode1 -s stop
|
system sh/exec_up.sh -n dnode1 -s stop
|
||||||
sleep 10000
|
sleep 4000
|
||||||
|
|
||||||
sql show mnodes
|
sql show mnodes
|
||||||
$dnode1Role = $data3_1
|
$dnode1Role = $data3_1
|
||||||
|
@ -195,7 +195,7 @@ print 192.168.0.2 ==> $dnode2Role
|
||||||
print 192.168.0.3 ==> $dnode3Role
|
print 192.168.0.3 ==> $dnode3Role
|
||||||
print 192.168.0.4 ==> $dnode4Role
|
print 192.168.0.4 ==> $dnode4Role
|
||||||
|
|
||||||
if $dnode1Role != undecided then
|
if $dnode1Role != offline then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
@ -205,7 +205,7 @@ sleep 8000
|
||||||
|
|
||||||
sql show mnodes
|
sql show mnodes
|
||||||
$dnode1Role = $data3_1
|
$dnode1Role = $data3_1
|
||||||
$dnode2Role = $data3_2
|
$dnode2Role = $data3_5
|
||||||
$dnode3Role = $data3_3
|
$dnode3Role = $data3_3
|
||||||
$dnode4Role = $data3_4
|
$dnode4Role = $data3_4
|
||||||
print 192.168.0.1 ==> $dnode1Role
|
print 192.168.0.1 ==> $dnode1Role
|
||||||
|
|
Loading…
Reference in New Issue