From 2a7cd7ee64043b861bf372c8a801f88eed41c83f Mon Sep 17 00:00:00 2001 From: hzcheng Date: Sun, 3 May 2020 15:51:59 +0800 Subject: [PATCH 01/11] Add log to TSDB --- src/tsdb/inc/tsdbMain.h | 18 ++++++++++++++++++ src/tsdb/src/tsdbMain.c | 2 ++ 2 files changed, 20 insertions(+) diff --git a/src/tsdb/inc/tsdbMain.h b/src/tsdb/inc/tsdbMain.h index fb77975d25..39808ab02f 100644 --- a/src/tsdb/inc/tsdbMain.h +++ b/src/tsdb/inc/tsdbMain.h @@ -20,11 +20,29 @@ #include "tsdb.h" #include "tskiplist.h" #include "tutil.h" +#include "tlog.h" #ifdef __cplusplus extern "C" { #endif +extern int tsdbDebugFlag; + +#define tsdbError(...) \ + if (tsdbDebugFlag & DEBUG_ERROR) { \ + taosPrintLog("ERROR TSDB ", tsdbDebugFlag, __VA_ARGS__); \ + } +#define tsdbWarn(...) \ + if (tsdbDebugFlag & DEBUG_WARN) { \ + taosPrintLog("WARN TSDB ", tsdbDebugFlag, __VA_ARGS__); \ + } +#define tsdbTrace(...) \ + if (tsdbDebugFlag & DEBUG_TRACE) { \ + taosPrintLog("TSDB ", tsdbDebugFlag, __VA_ARGS__); \ + } +#define tsdbPrint(...) \ + { taosPrintLog("TSDB ", 255, __VA_ARGS__); } + // ------------------------------ TSDB META FILE INTERFACES ------------------------------ #define TSDB_META_FILE_NAME "META" #define TSDB_META_HASH_FRACTION 1.1 diff --git a/src/tsdb/src/tsdbMain.c b/src/tsdb/src/tsdbMain.c index fcfbcc9014..b1ef3d2d9c 100644 --- a/src/tsdb/src/tsdbMain.c +++ b/src/tsdb/src/tsdbMain.c @@ -7,6 +7,8 @@ #include "tscompression.h" #include "tchecksum.h" +int tsdbDebugFlag = 135; + #define TSDB_DEFAULT_PRECISION TSDB_PRECISION_MILLI // default precision #define IS_VALID_PRECISION(precision) (((precision) >= TSDB_PRECISION_MILLI) && ((precision) <= TSDB_PRECISION_NANO)) #define TSDB_DEFAULT_COMPRESSION TWO_STAGE_COMP From 26e0475808c41c749f82ca19a4bf6d556513dffc Mon Sep 17 00:00:00 2001 From: hzcheng Date: Sun, 3 May 2020 16:48:46 +0800 Subject: [PATCH 02/11] Fix TSDB commit invalid read error --- src/common/inc/tdataformat.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/inc/tdataformat.h b/src/common/inc/tdataformat.h index 489635420a..d655bdcfe3 100644 --- a/src/common/inc/tdataformat.h +++ b/src/common/inc/tdataformat.h @@ -174,7 +174,7 @@ typedef struct { #define keyCol(pCols) (&((pCols)->cols[0])) // Key column #define dataColsKeyAt(pCols, idx) ((TSKEY *)(keyCol(pCols)->pData))[(idx)] #define dataColsKeyFirst(pCols) dataColsKeyAt(pCols, 0) -#define dataColsKeyLast(pCols) dataColsKeyAt(pCols, (pCols)->numOfPoints - 1) +#define dataColsKeyLast(pCols) ((pCols->numOfPoints == 0) ? 0 : dataColsKeyAt(pCols, (pCols)->numOfPoints - 1)) SDataCols *tdNewDataCols(int maxRowSize, int maxCols, int maxRows); void tdResetDataCols(SDataCols *pCols); From 2b4fb9c9dee0f3ae65ff19ac3c959479522b4f7e Mon Sep 17 00:00:00 2001 From: jtao1735 Date: Sun, 3 May 2020 13:52:25 +0000 Subject: [PATCH 03/11] if resposne is received, and no corresponding connection there, it shall return an error --- src/rpc/src/rpcMain.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/rpc/src/rpcMain.c b/src/rpc/src/rpcMain.c index ddda8bfa0b..820720f4c2 100644 --- a/src/rpc/src/rpcMain.c +++ b/src/rpc/src/rpcMain.c @@ -648,7 +648,13 @@ static SRpcConn *rpcGetConnObj(SRpcInfo *pRpc, int sid, SRecvInfo *pRecv) { if (pConn->user[0] == 0) pConn = NULL; } - if (pConn == NULL) pConn = rpcAllocateServerConn(pRpc, pRecv); + if (pConn == NULL) { + if (pRpc->connType == TAOS_CONN_SERVER) { + pConn = rpcAllocateServerConn(pRpc, pRecv); + } else { + terrno = TSDB_CODE_UNEXPECTED_RESPONSE; + } + } if (pConn) { if (pConn->linkUid != pHead->linkUid) { @@ -1140,7 +1146,7 @@ static void rpcProcessRetryTimer(void *param, void *tmrId) { pConn->retry++; if (pConn->retry < 4) { - tTrace("%s %p, re-send msg:%s to %s:%hud", pRpc->label, pConn, + tTrace("%s %p, re-send msg:%s to %s:%hu", pRpc->label, pConn, taosMsg[pConn->outType], pConn->peerFqdn, pConn->peerPort); rpcSendMsgToPeer(pConn, pConn->pReqMsg, pConn->reqMsgLen); taosTmrReset(rpcProcessRetryTimer, tsRpcTimer, pConn, pRpc->tmrCtrl, &pConn->pTimer); From a2f6d85c9d10edcfbe180c962d649563b622fe1a Mon Sep 17 00:00:00 2001 From: slguan Date: Sun, 3 May 2020 23:57:11 +0800 Subject: [PATCH 04/11] add scripts --- src/common/inc/tglobal.h | 3 +- src/common/src/tglobal.c | 7 +- tests/script/unique/dnode/balance1.sim | 13 +-- tests/script/unique/dnode/balance3.sim | 15 +-- tests/script/unique/dnode/balancex.sim | 62 +++++------- tests/script/unique/dnode/monitor_bug.sim | 9 -- tests/script/unique/dnode/offline1.sim | 51 +++++----- tests/script/unique/dnode/offline2.sim | 60 ++++++------ tests/script/unique/dnode/remove1.sim | 55 ++++------- tests/script/unique/dnode/remove2.sim | 43 +++----- tests/script/unique/dnode/testSuite.sim | 10 +- tests/script/unique/dnode/vnode_clean.sim | 98 ++++++++----------- .../unique/metrics/balance_replica1.sim | 6 +- .../script/unique/stream/metrics_balance.sim | 6 +- tests/script/unique/stream/table_balance.sim | 6 +- tests/script/unique/stream/table_move.sim | 13 +-- 16 files changed, 183 insertions(+), 274 deletions(-) diff --git a/src/common/inc/tglobal.h b/src/common/inc/tglobal.h index 7642475f70..dd0dd230fd 100644 --- a/src/common/inc/tglobal.h +++ b/src/common/inc/tglobal.h @@ -102,8 +102,7 @@ extern int32_t tsMaxMeterConnections; extern int32_t tsMaxVnodeConnections; extern int32_t tsMaxMgmtConnections; -extern int32_t tsBalanceMonitorInterval; -extern int32_t tsBalanceStartInterval; +extern int32_t tsBalanceInterval; extern int32_t tsOfflineThreshold; extern int32_t tsMgmtEqualVnodeNum; diff --git a/src/common/src/tglobal.c b/src/common/src/tglobal.c index eb81070f6d..70b55b9d92 100644 --- a/src/common/src/tglobal.c +++ b/src/common/src/tglobal.c @@ -119,9 +119,8 @@ int32_t tsMaxMeterConnections = 10000; int32_t tsMaxMgmtConnections = 2000; int32_t tsMaxVnodeConnections = 10000; -int32_t tsBalanceMonitorInterval = 2; // seconds -int32_t tsBalanceStartInterval = 300; // seconds -int32_t tsOfflineThreshold = 864000; // seconds 10days +int32_t tsBalanceInterval = 300; // seconds +int32_t tsOfflineThreshold = 86400*100; // seconds 10days int32_t tsMgmtEqualVnodeNum = 4; int32_t tsEnableHttpModule = 1; @@ -406,7 +405,7 @@ static void doInitGlobalConfig() { taosInitConfigOption(cfg); cfg.option = "balanceInterval"; - cfg.ptr = &tsBalanceStartInterval; + cfg.ptr = &tsBalanceInterval; cfg.valType = TAOS_CFG_VTYPE_INT32; cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_SHOW; cfg.minValue = 1; diff --git a/tests/script/unique/dnode/balance1.sim b/tests/script/unique/dnode/balance1.sim index 33de448c37..72286aad90 100644 --- a/tests/script/unique/dnode/balance1.sim +++ b/tests/script/unique/dnode/balance1.sim @@ -5,15 +5,10 @@ system sh/deploy.sh -n dnode2 -i 2 system sh/deploy.sh -n dnode3 -i 3 system sh/deploy.sh -n dnode4 -i 4 -system sh/cfg.sh -n dnode1 -c balanceMonitorInterval -v 1 -system sh/cfg.sh -n dnode2 -c balanceMonitorInterval -v 1 -system sh/cfg.sh -n dnode3 -c balanceMonitorInterval -v 1 -system sh/cfg.sh -n dnode4 -c balanceMonitorInterval -v 1 - -system sh/cfg.sh -n dnode1 -c balanceStartInterval -v 10 -system sh/cfg.sh -n dnode2 -c balanceStartInterval -v 10 -system sh/cfg.sh -n dnode3 -c balanceStartInterval -v 10 -system sh/cfg.sh -n dnode4 -c balanceStartInterval -v 10 +system sh/cfg.sh -n dnode1 -c balanceInterval -v 10 +system sh/cfg.sh -n dnode2 -c balanceInterval -v 10 +system sh/cfg.sh -n dnode3 -c balanceInterval -v 10 +system sh/cfg.sh -n dnode4 -c balanceInterval -v 10 system sh/cfg.sh -n dnode1 -c mgmtEqualVnodeNum -v 4 system sh/cfg.sh -n dnode2 -c mgmtEqualVnodeNum -v 4 diff --git a/tests/script/unique/dnode/balance3.sim b/tests/script/unique/dnode/balance3.sim index 14be27878f..53fda28dc4 100644 --- a/tests/script/unique/dnode/balance3.sim +++ b/tests/script/unique/dnode/balance3.sim @@ -176,20 +176,21 @@ if $data2_5 != 3 then endi print ========== step5 -sql create dnode $hostname2 -system sh/exec_up.sh -n dnode2 -s start +sql create dnode $hostname6 +system sh/deploy.sh -n dnode6 -i 6 +system sh/exec_up.sh -n dnode6 -s start $x = 0 show5: $x = $x + 1 sleep 2000 - if $x == 20 then + if $x == 10 then return -1 endi sql show dnodes print dnode1 openVnodes $data2_1 -print dnode2 openVnodes $data2_2 +print dnode6 openVnodes $data2_6 print dnode3 openVnodes $data2_3 print dnode4 openVnodes $data2_4 print dnode5 openVnodes $data2_5 @@ -197,7 +198,7 @@ print dnode5 openVnodes $data2_5 if $data2_1 != 0 then goto show5 endi -if $data2_2 != 2 then +if $data2_6 != 2 then goto show5 endi @@ -216,7 +217,7 @@ show6: sql show dnodes print dnode1 openVnodes $data2_1 -print dnode2 openVnodes $data2_2 +print dnode6 openVnodes $data2_6 print dnode3 openVnodes $data2_3 print dnode4 openVnodes $data2_4 print dnode5 openVnodes $data2_5 @@ -224,7 +225,7 @@ print dnode5 openVnodes $data2_5 if $data2_1 != 0 then goto show6 endi -if $data2_2 != 3 then +if $data2_6 != 3 then goto show6 endi if $data2_3 != null then diff --git a/tests/script/unique/dnode/balancex.sim b/tests/script/unique/dnode/balancex.sim index b251731c41..6c851b5559 100644 --- a/tests/script/unique/dnode/balancex.sim +++ b/tests/script/unique/dnode/balancex.sim @@ -1,25 +1,10 @@ system sh/stop_dnodes.sh - - - - - system sh/deploy.sh -n dnode1 -i 1 system sh/deploy.sh -n dnode2 -i 2 system sh/deploy.sh -n dnode3 -i 3 system sh/deploy.sh -n dnode4 -i 4 -system sh/cfg.sh -n dnode1 -c balanceMonitorInterval -v 1 -system sh/cfg.sh -n dnode2 -c balanceMonitorInterval -v 1 -system sh/cfg.sh -n dnode3 -c balanceMonitorInterval -v 1 -system sh/cfg.sh -n dnode4 -c balanceMonitorInterval -v 1 - -system sh/cfg.sh -n dnode1 -c balanceStartInterval -v 10 -system sh/cfg.sh -n dnode2 -c balanceStartInterval -v 10 -system sh/cfg.sh -n dnode3 -c balanceStartInterval -v 10 -system sh/cfg.sh -n dnode4 -c balanceStartInterval -v 10 - system sh/cfg.sh -n dnode1 -c mgmtEqualVnodeNum -v 4 system sh/cfg.sh -n dnode2 -c mgmtEqualVnodeNum -v 4 system sh/cfg.sh -n dnode3 -c mgmtEqualVnodeNum -v 4 @@ -52,8 +37,8 @@ sql insert into d2.t2 values(now+4s, 22) sql insert into d2.t2 values(now+5s, 21) sql show dnodes -print dnode1 openVnodes $data3_1 -if $data3_1 != 2 then +print dnode1 openVnodes $data2_1 +if $data2_1 != 2 then return -1 endi @@ -70,12 +55,12 @@ show2: endi sql show dnodes -print dnode1 openVnodes $data3_1 -print dnode2 openVnodes $data3_2 -if $data3_1 != 4 then +print dnode1 openVnodes $data2_1 +print dnode2 openVnodes $data2_2 +if $data2_1 != 0 then goto show2 endi -if $data3_2 != 2 then +if $data2_2 != 2 then goto show2 endi @@ -96,12 +81,12 @@ show3: return -1 endi sql show dnodes -print dnode1 openVnodes $data3_1 -print dnode2 openVnodes $data3_2 -if $data3_1 != 3 then +print dnode1 openVnodes $data2_1 +print dnode2 openVnodes $data2_2 +if $data2_1 != 1 then goto show3 endi -if $data3_2 != 1 then +if $data2_2 != 3 then goto show3 endi @@ -117,16 +102,16 @@ show4: return -1 endi sql show dnodes -print dnode1 openVnodes $data3_1 -print dnode2 openVnodes $data3_2 -print dnode3 openVnodes $data3_3 -if $data3_1 != 4 then +print dnode1 openVnodes $data2_1 +print dnode2 openVnodes $data2_2 +print dnode3 openVnodes $data2_3 +if $data2_1 != 0 then goto show4 endi -if $data3_2 != 2 then +if $data2_2 != 2 then goto show4 endi -if $data3_3 != 2 then +if $data2_3 != 2 then goto show4 endi @@ -141,21 +126,24 @@ show5: return -1 endi sql show dnodes -print dnode1 openVnodes $data3_1 -print dnode2 openVnodes $data3_2 -print dnode3 openVnodes $data3_3 -if $data3_1 != 3 then +print dnode1 openVnodes $data2_1 +print dnode2 openVnodes $data2_2 +print dnode3 openVnodes $data2_3 +if $data2_1 != 1 then goto show5 endi -if $data3_2 != null then +if $data2_2 != null then goto show5 endi -if $data3_3 != 1 then +if $data2_3 != 3 then goto show5 endi system sh/exec_up.sh -n dnode2 -s stop -x SIGINT +sql reset query cache +sleep 1000 + print ========== step6 sql select * from d1.t1 order by t desc print $data01 $data11 $data21 $data31 $data41 diff --git a/tests/script/unique/dnode/monitor_bug.sim b/tests/script/unique/dnode/monitor_bug.sim index 1550e379dc..fda7f4ad77 100644 --- a/tests/script/unique/dnode/monitor_bug.sim +++ b/tests/script/unique/dnode/monitor_bug.sim @@ -1,17 +1,8 @@ system sh/stop_dnodes.sh - - - system sh/deploy.sh -n dnode1 -i 1 system sh/deploy.sh -n dnode2 -i 2 -system sh/cfg.sh -n dnode1 -c balanceMonitorInterval -v 1 -system sh/cfg.sh -n dnode2 -c balanceMonitorInterval -v 1 - -system sh/cfg.sh -n dnode1 -c balanceStartInterval -v 10 -system sh/cfg.sh -n dnode2 -c balanceStartInterval -v 10 - system sh/cfg.sh -n dnode1 -c mgmtEqualVnodeNum -v 4 system sh/cfg.sh -n dnode2 -c mgmtEqualVnodeNum -v 4 diff --git a/tests/script/unique/dnode/offline1.sim b/tests/script/unique/dnode/offline1.sim index 9b307d604a..c4751bb66b 100644 --- a/tests/script/unique/dnode/offline1.sim +++ b/tests/script/unique/dnode/offline1.sim @@ -1,25 +1,17 @@ system sh/stop_dnodes.sh - - - - system sh/deploy.sh -n dnode1 -i 1 system sh/deploy.sh -n dnode2 -i 2 system sh/deploy.sh -n dnode3 -i 3 -system sh/cfg.sh -n dnode1 -c balanceMonitorInterval -v 1 -system sh/cfg.sh -n dnode2 -c balanceMonitorInterval -v 1 -system sh/cfg.sh -n dnode3 -c balanceMonitorInterval -v 1 - -system sh/cfg.sh -n dnode1 -c balanceStartInterval -v 10 -system sh/cfg.sh -n dnode2 -c balanceStartInterval -v 10 -system sh/cfg.sh -n dnode3 -c balanceStartInterval -v 10 - system sh/cfg.sh -n dnode1 -c offlineThreshold -v 10 system sh/cfg.sh -n dnode2 -c offlineThreshold -v 10 system sh/cfg.sh -n dnode3 -c offlineThreshold -v 10 +system sh/cfg.sh -n dnode1 -c balanceInterval -v 5 +system sh/cfg.sh -n dnode2 -c balanceInterval -v 5 +system sh/cfg.sh -n dnode3 -c balanceInterval -v 5 + system sh/cfg.sh -n dnode1 -c mgmtEqualVnodeNum -v 4 system sh/cfg.sh -n dnode2 -c mgmtEqualVnodeNum -v 4 system sh/cfg.sh -n dnode3 -c mgmtEqualVnodeNum -v 4 @@ -36,41 +28,42 @@ system sh/exec_up.sh -n dnode2 -s start sleep 3000 sql show dnodes -if $data4_192.168.0.1 != ready then +print dnode1 $data4_1 +print dnode1 $data4_2 + +if $data4_1 != ready then return -1 endi -if $data4_192.168.0.2 != ready then +if $data4_2 != ready then return -1 endi print ========== step2 system sh/exec_up.sh -n dnode2 -s stop -x SIGINT -sleep 6000 +sleep 8000 sql show dnodes -if $data4_192.168.0.1 != ready then +print dnode1 $data4_1 +print dnode1 $data4_2 + +if $data4_1 != ready then return -1 endi -if $data4_192.168.0.2 != offline then +if $data4_2 != offline then return -1 endi print ========== step3 sleep 10000 -$x = 0 -show4: - $x = $x + 1 - sleep 5000 - if $x == 20 then - return -1 - endi - sql show dnodes -if $data4_192.168.0.1 != ready then - goto show4 +print dnode1 $data4_1 +print dnode1 $data4_2 + +if $data4_1 != ready then + return -1 endi -if $data4_192.168.0.2 != null then - goto show4 +if $data4_2 != null then + return -1 endi diff --git a/tests/script/unique/dnode/offline2.sim b/tests/script/unique/dnode/offline2.sim index d21e418459..b9a3464811 100644 --- a/tests/script/unique/dnode/offline2.sim +++ b/tests/script/unique/dnode/offline2.sim @@ -1,25 +1,17 @@ system sh/stop_dnodes.sh - - - - system sh/deploy.sh -n dnode1 -i 1 system sh/deploy.sh -n dnode2 -i 2 system sh/deploy.sh -n dnode3 -i 3 -system sh/cfg.sh -n dnode1 -c balanceMonitorInterval -v 1 -system sh/cfg.sh -n dnode2 -c balanceMonitorInterval -v 1 -system sh/cfg.sh -n dnode3 -c balanceMonitorInterval -v 1 - -system sh/cfg.sh -n dnode1 -c balanceStartInterval -v 10 -system sh/cfg.sh -n dnode2 -c balanceStartInterval -v 10 -system sh/cfg.sh -n dnode3 -c balanceStartInterval -v 10 - system sh/cfg.sh -n dnode1 -c offlineThreshold -v 10 system sh/cfg.sh -n dnode2 -c offlineThreshold -v 10 system sh/cfg.sh -n dnode3 -c offlineThreshold -v 10 +system sh/cfg.sh -n dnode1 -c balanceInterval -v 5 +system sh/cfg.sh -n dnode2 -c balanceInterval -v 5 +system sh/cfg.sh -n dnode3 -c balanceInterval -v 5 + system sh/cfg.sh -n dnode1 -c mgmtEqualVnodeNum -v 4 system sh/cfg.sh -n dnode2 -c mgmtEqualVnodeNum -v 4 system sh/cfg.sh -n dnode3 -c mgmtEqualVnodeNum -v 4 @@ -40,39 +32,49 @@ sql create table d1.t1(ts timestamp, i int) sql insert into d1.t1 values(now, 1) sql show dnodes -if $data4_192.168.0.1 != ready then +print dnode1 $data4_1 +print dnode1 $data4_2 + +if $data4_1 != ready then return -1 endi -if $data4_192.168.0.2 != ready then +if $data4_2 != ready then return -1 endi print ========== step2 system sh/exec_up.sh -n dnode2 -s stop -x SIGINT -sleep 5000 +sleep 8000 sql show dnodes -if $data4_192.168.0.1 != ready then +print dnode1 $data4_1 +print dnode1 $data4_2 + +if $data4_1 != ready then return -1 endi -if $data4_192.168.0.2 != offline then +if $data4_2 != offline then return -1 endi print ========== step3 -sleep 18000 +sleep 10000 sql show dnodes -if $data4_192.168.0.1 != ready then +print dnode1 $data4_1 +print dnode1 $data4_2 + +if $data4_1 != ready then return -1 endi -if $data4_192.168.0.2 != offline then +if $data4_2 != dropping then return -1 endi print ========== step4 sql create dnode $hostname3 system sh/exec_up.sh -n dnode3 -s start +system sh/exec_up.sh -n dnode2 -s start sql drop dnode $hostname2 sleep 5000 @@ -80,23 +82,25 @@ $x = 0 show4: $x = $x + 1 sleep 5000 - if $x == 20 then + if $x == 50 then return -1 endi sql show dnodes -if $data4_192.168.0.1 != ready then - return -1 +if $data4_1 != ready then + goto show4 endi -if $data4_192.168.0.2 != null then - return -1 +if $data4_2 != null then + goto show4 endi -if $data4_192.168.0.3 != ready then - return -1 +if $data4_3 != ready then + goto show4 endi print ======================== step5 -sleep 10000 +sql reset query cache +sleep 1000 + sql select * from d1.t1 if $rows != 1 then return -1 diff --git a/tests/script/unique/dnode/remove1.sim b/tests/script/unique/dnode/remove1.sim index 721f912914..c345aa202b 100644 --- a/tests/script/unique/dnode/remove1.sim +++ b/tests/script/unique/dnode/remove1.sim @@ -1,25 +1,10 @@ system sh/stop_dnodes.sh - - - - - system sh/deploy.sh -n dnode1 -i 1 system sh/deploy.sh -n dnode2 -i 2 system sh/deploy.sh -n dnode3 -i 3 system sh/deploy.sh -n dnode4 -i 4 -system sh/cfg.sh -n dnode1 -c balanceMonitorInterval -v 1 -system sh/cfg.sh -n dnode2 -c balanceMonitorInterval -v 1 -system sh/cfg.sh -n dnode3 -c balanceMonitorInterval -v 1 -system sh/cfg.sh -n dnode4 -c balanceMonitorInterval -v 1 - -system sh/cfg.sh -n dnode1 -c balanceStartInterval -v 10 -system sh/cfg.sh -n dnode2 -c balanceStartInterval -v 10 -system sh/cfg.sh -n dnode3 -c balanceStartInterval -v 10 -system sh/cfg.sh -n dnode4 -c balanceStartInterval -v 10 - system sh/cfg.sh -n dnode1 -c mgmtEqualVnodeNum -v 4 system sh/cfg.sh -n dnode2 -c mgmtEqualVnodeNum -v 4 system sh/cfg.sh -n dnode3 -c mgmtEqualVnodeNum -v 4 @@ -52,8 +37,8 @@ sql insert into d2.t2 values(now+4s, 22) sql insert into d2.t2 values(now+5s, 21) sql show dnodes -print dnode1 openVnodes $data3_1 -if $data3_1 != 2 then +print dnode1 openVnodes $data2_1 +if $data2_1 != 2 then return -1 endi @@ -79,12 +64,12 @@ show2: endi sql show dnodes -print dnode1 openVnodes $data3_1 -print dnode2 openVnodes $data3_2 -if $data3_1 != 3 then +print dnode1 openVnodes $data2_1 +print dnode2 openVnodes $data2_2 +if $data2_1 != 3 then goto show2 endi -if $data3_2 != 1 then +if $data2_2 != 1 then goto show2 endi @@ -101,8 +86,8 @@ show3: endi sql show dnodes -print dnode1 openVnodes $data3_1 -print dnode2 openVnodes $data3_2 $data5_192.168.0.2 +print dnode1 openVnodes $data2_1 +print dnode2 openVnodes $data2_2 print ========== step4 sql create dnode $hostname3 @@ -117,10 +102,10 @@ show4: endi sql show dnodes -print dnode1 openVnodes $data3_1 -print dnode2 openVnodes $data3_2 -print dnode3 openVnodes $data3_3 -if $data3_2 != null then +print dnode1 openVnodes $data2_1 +print dnode2 openVnodes $data2_2 +print dnode3 openVnodes $data2_3 +if $data2_2 != null then goto show4 endi @@ -138,20 +123,20 @@ show5: return -1 endi sql show dnodes -print dnode1 openVnodes $data3_1 -print dnode2 openVnodes $data3_2 -print dnode3 openVnodes $data3_3 -print dnode4 openVnodes $data3_4 -if $data3_1 != 4 then +print dnode1 openVnodes $data2_1 +print dnode2 openVnodes $data2_2 +print dnode3 openVnodes $data2_3 +print dnode4 openVnodes $data2_4 +if $data2_1 != 4 then goto show5 endi -if $data3_2 != null then +if $data2_2 != null then goto show5 endi -if $data3_3 != 2 then +if $data2_3 != 2 then goto show5 endi -if $data3_4 != 2 then +if $data2_4 != 2 then goto show5 endi diff --git a/tests/script/unique/dnode/remove2.sim b/tests/script/unique/dnode/remove2.sim index 1e06c17317..909f82e61c 100644 --- a/tests/script/unique/dnode/remove2.sim +++ b/tests/script/unique/dnode/remove2.sim @@ -1,25 +1,10 @@ system sh/stop_dnodes.sh - - - - - system sh/deploy.sh -n dnode1 -i 1 system sh/deploy.sh -n dnode2 -i 2 system sh/deploy.sh -n dnode3 -i 3 system sh/deploy.sh -n dnode4 -i 4 -system sh/cfg.sh -n dnode1 -c balanceMonitorInterval -v 1 -system sh/cfg.sh -n dnode2 -c balanceMonitorInterval -v 1 -system sh/cfg.sh -n dnode3 -c balanceMonitorInterval -v 1 -system sh/cfg.sh -n dnode4 -c balanceMonitorInterval -v 1 - -system sh/cfg.sh -n dnode1 -c balanceStartInterval -v 10 -system sh/cfg.sh -n dnode2 -c balanceStartInterval -v 10 -system sh/cfg.sh -n dnode3 -c balanceStartInterval -v 10 -system sh/cfg.sh -n dnode4 -c balanceStartInterval -v 10 - system sh/cfg.sh -n dnode1 -c mgmtEqualVnodeNum -v 4 system sh/cfg.sh -n dnode2 -c mgmtEqualVnodeNum -v 4 system sh/cfg.sh -n dnode3 -c mgmtEqualVnodeNum -v 4 @@ -52,8 +37,8 @@ sql insert into d2.t2 values(now+4s, 22) sql insert into d2.t2 values(now+5s, 21) sql show dnodes -print dnode1 openVnodes $data3_1 -if $data3_1 != 2 then +print dnode1 openVnodes $data2_1 +if $data2_1 != 2 then return -1 endi @@ -79,12 +64,12 @@ show2: endi sql show dnodes -print dnode1 openVnodes $data3_1 -print dnode2 openVnodes $data3_2 -if $data3_1 != 3 then +print dnode1 openVnodes $data2_1 +print dnode2 openVnodes $data2_2 +if $data2_1 != 3 then goto show2 endi -if $data3_2 != 1 then +if $data2_2 != 1 then goto show2 endi @@ -102,8 +87,8 @@ show3: endi sql show dnodes -print dnode1 openVnodes $data3_1 -print dnode2 openVnodes $data3_2 $data5_192.168.0.2 +print dnode1 openVnodes $data2_1 +print dnode2 openVnodes $data2_2 $data5_192.168.0.2 print ========== step4 sql create dnode $hostname3 @@ -118,16 +103,16 @@ show4: endi sql show dnodes -print dnode1 openVnodes $data3_1 -print dnode2 openVnodes $data3_2 -print dnode3 openVnodes $data3_3 -if $data3_2 != null then +print dnode1 openVnodes $data2_1 +print dnode2 openVnodes $data2_2 +print dnode3 openVnodes $data2_3 +if $data2_2 != null then goto show4 endi -if $data3_1 != 3 then +if $data2_1 != 3 then goto show4 endi -if $data3_3 != 1 then +if $data2_3 != 1 then goto show4 endi diff --git a/tests/script/unique/dnode/testSuite.sim b/tests/script/unique/dnode/testSuite.sim index afb1cafd2c..9921cbf378 100644 --- a/tests/script/unique/dnode/testSuite.sim +++ b/tests/script/unique/dnode/testSuite.sim @@ -4,10 +4,6 @@ run unique/dnode/balance3.sim run unique/dnode/balancex.sim run unique/dnode/offline1.sim run unique/dnode/offline2.sim -run unique/dnode/remove1.sim -run unique/dnode/remove2.sim -run unique/dnode/vnode_clean.sim - - - - +#run unique/dnode/remove1.sim +#run unique/dnode/remove2.sim +#run unique/dnode/vnode_clean.sim diff --git a/tests/script/unique/dnode/vnode_clean.sim b/tests/script/unique/dnode/vnode_clean.sim index 2d55889af1..3693868497 100644 --- a/tests/script/unique/dnode/vnode_clean.sim +++ b/tests/script/unique/dnode/vnode_clean.sim @@ -1,25 +1,10 @@ system sh/stop_dnodes.sh - - - - - system sh/deploy.sh -n dnode1 -i 1 system sh/deploy.sh -n dnode2 -i 2 system sh/deploy.sh -n dnode3 -i 3 system sh/deploy.sh -n dnode4 -i 4 -system sh/cfg.sh -n dnode1 -c balanceMonitorInterval -v 1 -system sh/cfg.sh -n dnode2 -c balanceMonitorInterval -v 1 -system sh/cfg.sh -n dnode3 -c balanceMonitorInterval -v 1 -system sh/cfg.sh -n dnode4 -c balanceMonitorInterval -v 1 - -system sh/cfg.sh -n dnode1 -c balanceStartInterval -v 10 -system sh/cfg.sh -n dnode2 -c balanceStartInterval -v 10 -system sh/cfg.sh -n dnode3 -c balanceStartInterval -v 10 -system sh/cfg.sh -n dnode4 -c balanceStartInterval -v 10 - system sh/cfg.sh -n dnode1 -c mgmtEqualVnodeNum -v 4 system sh/cfg.sh -n dnode2 -c mgmtEqualVnodeNum -v 4 system sh/cfg.sh -n dnode3 -c mgmtEqualVnodeNum -v 4 @@ -43,8 +28,8 @@ sql insert into d1.t1 values(now+4s, 12) sql insert into d1.t1 values(now+5s, 11) sql show dnodes -print dnode1 openVnodes $data3_1 -if $data3_1 != 3 then +print dnode1 openVnodes $data2_1 +if $data2_1 != 3 then return -1 endi @@ -60,12 +45,12 @@ show2: return -1 endi sql show dnodes -print dnode1 openVnodes $data3_1 -print dnode2 openVnodes $data3_2 -if $data3_1 != 4 then +print dnode1 openVnodes $data2_1 +print dnode2 openVnodes $data2_2 +if $data2_1 != 4 then goto show2 endi -if $data3_2 != 3 then +if $data2_2 != 3 then goto show2 endi @@ -81,12 +66,12 @@ sql insert into d2.t2 values(now+5s, 21) $x = 0 sql show dnodes -print dnode1 openVnodes $data3_1 -print dnode2 openVnodes $data3_2 -if $data3_1 != 4 then +print dnode1 openVnodes $data2_1 +print dnode2 openVnodes $data2_2 +if $data2_1 != 4 then return -1 endi -if $data3_2 != 2 then +if $data2_2 != 2 then return -1 endi @@ -101,12 +86,12 @@ show4: return -1 endi sql show dnodes -print dnode1 openVnodes $data3_1 -print dnode2 openVnodes $data3_2 -if $data3_1 != 2 then +print dnode1 openVnodes $data2_1 +print dnode2 openVnodes $data2_2 +if $data2_1 != 2 then goto show4 endi -if $data3_2 != null then +if $data2_2 != null then goto show4 endi if $rows != 1 then @@ -120,8 +105,7 @@ sleep 2000 sql create dnode $hostname2 system sh/deploy.sh -n dnode2 -i 2 system sh/cfg.sh -n dnode2 -c numOfMPeers -v 1 -system sh/cfg.sh -n dnode2 -c balanceMonitorInterval -v 1 -system sh/cfg.sh -n dnode2 -c balanceStartInterval -v 10 +system sh/cfg.sh -n dnode2 -c balanceInterval -v 10 system sh/cfg.sh -n dnode2 -c mgmtEqualVnodeNum -v 4 system sh/cfg.sh -n dnode2 -c clog -v 1 system sh/exec_up.sh -n dnode2 -s start @@ -134,12 +118,12 @@ show5: return -1 endi sql show dnodes -print dnode1 openVnodes $data3_1 -print dnode2 openVnodes $data3_2 -if $data3_1 != 4 then +print dnode1 openVnodes $data2_1 +print dnode2 openVnodes $data2_2 +if $data2_1 != 4 then goto show5 endi -if $data3_2 != 2 then +if $data2_2 != 2 then goto show5 endi @@ -153,12 +137,12 @@ sql insert into d3.t3 values(now+4s, 32) sql insert into d3.t3 values(now+5s, 31) sql show dnodes -print dnode1 openVnodes $data3_1 -print dnode2 openVnodes $data3_2 -if $data3_1 != 4 then +print dnode1 openVnodes $data2_1 +print dnode2 openVnodes $data2_2 +if $data2_1 != 4 then return -1 endi -if $data3_2 != 1 then +if $data2_2 != 1 then return -1 endi @@ -175,16 +159,16 @@ show7: endi sql show dnodes -print dnode1 openVnodes $data3_1 -print dnode2 openVnodes $data3_2 -print dnode3 openVnodes $data3_3 -if $data3_1 != 4 then +print dnode1 openVnodes $data2_1 +print dnode2 openVnodes $data2_2 +print dnode3 openVnodes $data2_3 +if $data2_1 != 4 then goto show7 endi -if $data3_2 != 2 then +if $data2_2 != 2 then goto show7 endi -if $data3_3 != 3 then +if $data2_3 != 3 then goto show7 endi @@ -205,16 +189,16 @@ show8: return -1 endi sql show dnodes -print dnode1 openVnodes $data3_1 -print dnode2 openVnodes $data3_2 -print dnode3 openVnodes $data3_3 -if $data3_1 != 4 then +print dnode1 openVnodes $data2_1 +print dnode2 openVnodes $data2_2 +print dnode3 openVnodes $data2_3 +if $data2_1 != 4 then goto show8 endi -if $data3_2 != 2 then +if $data2_2 != 2 then goto show8 endi -if $data3_3 != 2 then +if $data2_3 != 2 then goto show8 endi @@ -230,16 +214,16 @@ show9: endi sql show dnodes -print dnode1 openVnodes $data3_1 -print dnode2 openVnodes $data3_2 -print dnode3 openVnodes $data3_3 -if $data3_1 != 4 then +print dnode1 openVnodes $data2_1 +print dnode2 openVnodes $data2_2 +print dnode3 openVnodes $data2_3 +if $data2_1 != 4 then goto show9 endi -if $data3_2 != null then +if $data2_2 != null then goto show9 endi -if $data3_3 != 0 then +if $data2_3 != 0 then goto show9 endi diff --git a/tests/script/unique/metrics/balance_replica1.sim b/tests/script/unique/metrics/balance_replica1.sim index 2339c4c36f..d32e647fbe 100644 --- a/tests/script/unique/metrics/balance_replica1.sim +++ b/tests/script/unique/metrics/balance_replica1.sim @@ -8,10 +8,8 @@ system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4 system sh/cfg.sh -n dnode2 -c numOfTotalVnodes -v 4 system sh/cfg.sh -n dnode1 -c statusInterval -v 1 system sh/cfg.sh -n dnode2 -c statusInterval -v 1 -system sh/cfg.sh -n dnode1 -c balanceMonitorInterval -v 1 -system sh/cfg.sh -n dnode2 -c balanceMonitorInterval -v 1 -system sh/cfg.sh -n dnode1 -c balanceStartInterval -v 10 -system sh/cfg.sh -n dnode2 -c balanceStartInterval -v 10 +system sh/cfg.sh -n dnode1 -c balanceInterval -v 10 +system sh/cfg.sh -n dnode2 -c balanceInterval -v 10 system sh/cfg.sh -n dnode1 -c commitLog -v 0 system sh/cfg.sh -n dnode2 -c commitLog -v 0 system sh/cfg.sh -n dnode1 -c mgmtEqualVnodeNum -v 0 diff --git a/tests/script/unique/stream/metrics_balance.sim b/tests/script/unique/stream/metrics_balance.sim index 48702d584c..feac15f4db 100644 --- a/tests/script/unique/stream/metrics_balance.sim +++ b/tests/script/unique/stream/metrics_balance.sim @@ -8,10 +8,8 @@ system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4 system sh/cfg.sh -n dnode2 -c numOfTotalVnodes -v 4 system sh/cfg.sh -n dnode1 -c statusInterval -v 1 system sh/cfg.sh -n dnode2 -c statusInterval -v 1 -system sh/cfg.sh -n dnode1 -c balanceMonitorInterval -v 1 -system sh/cfg.sh -n dnode2 -c balanceMonitorInterval -v 1 -system sh/cfg.sh -n dnode1 -c balanceStartInterval -v 10 -system sh/cfg.sh -n dnode2 -c balanceStartInterval -v 10 +system sh/cfg.sh -n dnode1 -c balanceInterval -v 10 +system sh/cfg.sh -n dnode2 -c balanceInterval -v 10 system sh/cfg.sh -n dnode1 -c commitLog -v 0 system sh/cfg.sh -n dnode2 -c commitLog -v 0 system sh/cfg.sh -n dnode1 -c mgmtEqualVnodeNum -v 0 diff --git a/tests/script/unique/stream/table_balance.sim b/tests/script/unique/stream/table_balance.sim index 2736b223b6..3eab029529 100644 --- a/tests/script/unique/stream/table_balance.sim +++ b/tests/script/unique/stream/table_balance.sim @@ -8,10 +8,8 @@ system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4 system sh/cfg.sh -n dnode2 -c numOfTotalVnodes -v 4 system sh/cfg.sh -n dnode1 -c statusInterval -v 1 system sh/cfg.sh -n dnode2 -c statusInterval -v 1 -system sh/cfg.sh -n dnode1 -c balanceMonitorInterval -v 1 -system sh/cfg.sh -n dnode2 -c balanceMonitorInterval -v 1 -system sh/cfg.sh -n dnode1 -c balanceStartInterval -v 10 -system sh/cfg.sh -n dnode2 -c balanceStartInterval -v 10 +system sh/cfg.sh -n dnode1 -c balanceInterval -v 10 +system sh/cfg.sh -n dnode2 -c balanceInterval -v 10 system sh/cfg.sh -n dnode1 -c commitLog -v 0 system sh/cfg.sh -n dnode2 -c commitLog -v 0 system sh/cfg.sh -n dnode1 -c mgmtEqualVnodeNum -v 0 diff --git a/tests/script/unique/stream/table_move.sim b/tests/script/unique/stream/table_move.sim index b677aa95f0..3096bcc9f9 100644 --- a/tests/script/unique/stream/table_move.sim +++ b/tests/script/unique/stream/table_move.sim @@ -20,15 +20,10 @@ system sh/cfg.sh -n dnode2 -c statusInterval -v 1 system sh/cfg.sh -n dnode3 -c statusInterval -v 1 system sh/cfg.sh -n dnode4 -c statusInterval -v 1 -system sh/cfg.sh -n dnode1 -c balanceMonitorInterval -v 1 -system sh/cfg.sh -n dnode2 -c balanceMonitorInterval -v 1 -system sh/cfg.sh -n dnode3 -c balanceMonitorInterval -v 1 -system sh/cfg.sh -n dnode4 -c balanceMonitorInterval -v 1 - -system sh/cfg.sh -n dnode1 -c balanceStartInterval -v 10 -system sh/cfg.sh -n dnode2 -c balanceStartInterval -v 10 -system sh/cfg.sh -n dnode3 -c balanceStartInterval -v 10 -system sh/cfg.sh -n dnode4 -c balanceStartInterval -v 10 +system sh/cfg.sh -n dnode1 -c balanceInterval -v 10 +system sh/cfg.sh -n dnode2 -c balanceInterval -v 10 +system sh/cfg.sh -n dnode3 -c balanceInterval -v 10 +system sh/cfg.sh -n dnode4 -c balanceInterval -v 10 system sh/cfg.sh -n dnode1 -c clog -v 1 system sh/cfg.sh -n dnode2 -c clog -v 1 From f041e6c25c069c0f39606bf56c93b7a9e90ee48f Mon Sep 17 00:00:00 2001 From: yifan hao Date: Sun, 3 May 2020 13:10:35 -0600 Subject: [PATCH 05/11] [Trivial] Fix initialization code of TSDB_MOD_MGMT module. * Description This patch fixes enablement of TSDB_MOD_MGMT module, which was incorrectly assign to 'name' variable. * Testing Compile the code. Feel free to suggest more testing that needs to be done. Given that 'tsModule' is zero initialized, I don't think there's any functional difference for this patch. --- src/dnode/src/dnodeModule.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/dnode/src/dnodeModule.c b/src/dnode/src/dnodeModule.c index aa53dddbe4..e1aa48d477 100644 --- a/src/dnode/src/dnodeModule.c +++ b/src/dnode/src/dnodeModule.c @@ -44,13 +44,13 @@ static void dnodeUnSetModuleStatus(int32_t module) { } static void dnodeAllocModules() { - tsModule[TSDB_MOD_MGMT].name = false; + tsModule[TSDB_MOD_MGMT].enable = false; tsModule[TSDB_MOD_MGMT].name = "mgmt"; tsModule[TSDB_MOD_MGMT].initFp = mgmtInitSystem; tsModule[TSDB_MOD_MGMT].cleanUpFp = mgmtCleanUpSystem; tsModule[TSDB_MOD_MGMT].startFp = mgmtStartSystem; tsModule[TSDB_MOD_MGMT].stopFp = mgmtStopSystem; - + tsModule[TSDB_MOD_HTTP].enable = (tsEnableHttpModule == 1); tsModule[TSDB_MOD_HTTP].name = "http"; tsModule[TSDB_MOD_HTTP].initFp = httpInitSystem; @@ -60,7 +60,7 @@ static void dnodeAllocModules() { if (tsEnableHttpModule) { dnodeSetModuleStatus(TSDB_MOD_HTTP); } - + tsModule[TSDB_MOD_MONITOR].enable = (tsEnableMonitorModule == 1); tsModule[TSDB_MOD_MONITOR].name = "monitor"; tsModule[TSDB_MOD_MONITOR].initFp = monitorInitSystem; From 9336fd3df1cc848f2b1944c0a8934cf1ef11bab2 Mon Sep 17 00:00:00 2001 From: yifan hao Date: Sun, 3 May 2020 14:46:09 -0600 Subject: [PATCH 06/11] Proper error handling in dnodeOpenVnodes / dnodeCloseVnodes * Description These two functions do not properly handle any error returned from dnodeGetVnodeList(). This patch als changes the signature of dnodeGetVnodeList() to make sure it returns only status, and number of vnodes is passed out through a separate argument. * Testing Before the patch, if I start taosd and then remove 'vnode' folder, the shutdown message would include the following: 05/03 14:26:17.158204 0x140025950476096 DND total vnodes:-2147483296 are all closed This shows the code uses error code as vnode count. After the patch, it outputs proper error message: 05/03 14:30:45.044762 0x139933723604800 DND Get dnode list failed --- src/dnode/src/dnodeMgmt.c | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/src/dnode/src/dnodeMgmt.c b/src/dnode/src/dnodeMgmt.c index 2fa7762c44..fbf1ceea71 100644 --- a/src/dnode/src/dnodeMgmt.c +++ b/src/dnode/src/dnodeMgmt.c @@ -71,13 +71,13 @@ void dnodeMgmt(SRpcMsg *pMsg) { rpcFreeCont(pMsg->pCont); } -static int32_t dnodeGetVnodeList(int32_t vnodeList[]) { +static int32_t dnodeGetVnodeList(int32_t vnodeList[], int32_t *numOfVnodes) { DIR *dir = opendir(tsVnodeDir); if (dir == NULL) { return TSDB_CODE_NO_WRITE_ACCESS; } - int32_t numOfVnodes = 0; + *numOfVnodes = 0; struct dirent *de = NULL; while ((de = readdir(dir)) != NULL) { if (strcmp(de->d_name, ".") == 0 || strcmp(de->d_name, "..") == 0) continue; @@ -86,21 +86,28 @@ static int32_t dnodeGetVnodeList(int32_t vnodeList[]) { int32_t vnode = atoi(de->d_name + 5); if (vnode == 0) continue; - vnodeList[numOfVnodes] = vnode; - numOfVnodes++; + vnodeList[*numOfVnodes] = vnode; + (*numOfVnodes)++; } } closedir(dir); - return numOfVnodes; + return TSDB_CODE_SUCCESS; } static int32_t dnodeOpenVnodes() { char vnodeDir[TSDB_FILENAME_LEN * 3]; int32_t failed = 0; - int32_t *vnodeList = (int32_t *)malloc(sizeof(int32_t) * TSDB_MAX_VNODES); - int32_t numOfVnodes = dnodeGetVnodeList(vnodeList); + int32_t numOfVnodes; + int32_t status; + + status = dnodeGetVnodeList(vnodeList, &numOfVnodes); + + if (status != TSDB_CODE_SUCCESS) { + dPrint("Get dnode list failed"); + return status; + } for (int32_t i = 0; i < numOfVnodes; ++i) { snprintf(vnodeDir, TSDB_FILENAME_LEN * 3, "%s/vnode%d", tsVnodeDir, vnodeList[i]); @@ -115,7 +122,15 @@ static int32_t dnodeOpenVnodes() { static void dnodeCloseVnodes() { int32_t *vnodeList = (int32_t *)malloc(sizeof(int32_t) * TSDB_MAX_VNODES); - int32_t numOfVnodes = dnodeGetVnodeList(vnodeList); + int32_t numOfVnodes; + int32_t status; + + status = dnodeGetVnodeList(vnodeList, &numOfVnodes); + + if (status != TSDB_CODE_SUCCESS) { + dPrint("Get dnode list failed"); + return; + } for (int32_t i = 0; i < numOfVnodes; ++i) { vnodeClose(vnodeList[i]); @@ -143,7 +158,7 @@ static int32_t dnodeProcessCreateVnodeMsg(SRpcMsg *rpcMsg) { for (int32_t j = 0; j < pCreate->cfg.replications; ++j) { pCreate->nodes[j].nodeId = htonl(pCreate->nodes[j].nodeId); } - + void *pVnode = vnodeAccquireVnode(pCreate->cfg.vgId); if (pVnode != NULL) { int32_t code = vnodeAlter(pVnode, pCreate); From 952eec14318b0f5027f5fee1c3db15a5b5ffc0b7 Mon Sep 17 00:00:00 2001 From: yifan hao Date: Sun, 3 May 2020 14:46:09 -0600 Subject: [PATCH 07/11] Proper error handling in dnodeOpenVnodes / dnodeCloseVnodes * Description These two functions do not properly handle any error returned from dnodeGetVnodeList(). This patch als changes the signature of dnodeGetVnodeList() to make sure it returns only status, and number of vnodes is passed out through a separate argument. * Testing Before the patch, if I start taosd and then remove 'vnode' folder, the shutdown message would include the following: 05/03 14:26:17.158204 0x140025950476096 DND total vnodes:-2147483296 are all closed This shows the code uses error code as vnode count. After the patch, it outputs proper error message: 05/03 14:30:45.044762 0x139933723604800 DND Get dnode list failed --- src/dnode/src/dnodeMgmt.c | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/src/dnode/src/dnodeMgmt.c b/src/dnode/src/dnodeMgmt.c index 2fa7762c44..fbf1ceea71 100644 --- a/src/dnode/src/dnodeMgmt.c +++ b/src/dnode/src/dnodeMgmt.c @@ -71,13 +71,13 @@ void dnodeMgmt(SRpcMsg *pMsg) { rpcFreeCont(pMsg->pCont); } -static int32_t dnodeGetVnodeList(int32_t vnodeList[]) { +static int32_t dnodeGetVnodeList(int32_t vnodeList[], int32_t *numOfVnodes) { DIR *dir = opendir(tsVnodeDir); if (dir == NULL) { return TSDB_CODE_NO_WRITE_ACCESS; } - int32_t numOfVnodes = 0; + *numOfVnodes = 0; struct dirent *de = NULL; while ((de = readdir(dir)) != NULL) { if (strcmp(de->d_name, ".") == 0 || strcmp(de->d_name, "..") == 0) continue; @@ -86,21 +86,28 @@ static int32_t dnodeGetVnodeList(int32_t vnodeList[]) { int32_t vnode = atoi(de->d_name + 5); if (vnode == 0) continue; - vnodeList[numOfVnodes] = vnode; - numOfVnodes++; + vnodeList[*numOfVnodes] = vnode; + (*numOfVnodes)++; } } closedir(dir); - return numOfVnodes; + return TSDB_CODE_SUCCESS; } static int32_t dnodeOpenVnodes() { char vnodeDir[TSDB_FILENAME_LEN * 3]; int32_t failed = 0; - int32_t *vnodeList = (int32_t *)malloc(sizeof(int32_t) * TSDB_MAX_VNODES); - int32_t numOfVnodes = dnodeGetVnodeList(vnodeList); + int32_t numOfVnodes; + int32_t status; + + status = dnodeGetVnodeList(vnodeList, &numOfVnodes); + + if (status != TSDB_CODE_SUCCESS) { + dPrint("Get dnode list failed"); + return status; + } for (int32_t i = 0; i < numOfVnodes; ++i) { snprintf(vnodeDir, TSDB_FILENAME_LEN * 3, "%s/vnode%d", tsVnodeDir, vnodeList[i]); @@ -115,7 +122,15 @@ static int32_t dnodeOpenVnodes() { static void dnodeCloseVnodes() { int32_t *vnodeList = (int32_t *)malloc(sizeof(int32_t) * TSDB_MAX_VNODES); - int32_t numOfVnodes = dnodeGetVnodeList(vnodeList); + int32_t numOfVnodes; + int32_t status; + + status = dnodeGetVnodeList(vnodeList, &numOfVnodes); + + if (status != TSDB_CODE_SUCCESS) { + dPrint("Get dnode list failed"); + return; + } for (int32_t i = 0; i < numOfVnodes; ++i) { vnodeClose(vnodeList[i]); @@ -143,7 +158,7 @@ static int32_t dnodeProcessCreateVnodeMsg(SRpcMsg *rpcMsg) { for (int32_t j = 0; j < pCreate->cfg.replications; ++j) { pCreate->nodes[j].nodeId = htonl(pCreate->nodes[j].nodeId); } - + void *pVnode = vnodeAccquireVnode(pCreate->cfg.vgId); if (pVnode != NULL) { int32_t code = vnodeAlter(pVnode, pCreate); From cbf3c61d4bc417814fc7fbd7fc2e3f6a9c313f24 Mon Sep 17 00:00:00 2001 From: jtao1735 Date: Mon, 4 May 2020 01:03:59 +0000 Subject: [PATCH 08/11] rpc shall not check peer IP address, it shall only use FQDN --- src/rpc/src/rpcMain.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/rpc/src/rpcMain.c b/src/rpc/src/rpcMain.c index 820720f4c2..b5c2967e47 100644 --- a/src/rpc/src/rpcMain.c +++ b/src/rpc/src/rpcMain.c @@ -793,14 +793,6 @@ static SRpcConn *rpcProcessMsgHead(SRpcInfo *pRpc, SRecvInfo *pRecv) { sid = pConn->sid; pConn->chandle = pRecv->chandle; - if (pConn->peerIp != pRecv->ip) { - pConn->peerIp = pRecv->ip; - char ipstr[20] = {0}; - tinet_ntoa(ipstr, pRecv->ip); - strcpy(pConn->peerFqdn, ipstr); - } - - if (pRecv->port) pConn->peerPort = pRecv->port; if (pHead->port) pConn->peerPort = htons(pHead->port); terrno = rpcCheckAuthentication(pConn, (char *)pHead, pRecv->msgLen); From a6116dfa3dcf1cf10318d17373de894b1390f9e5 Mon Sep 17 00:00:00 2001 From: jtao1735 Date: Mon, 4 May 2020 01:17:42 +0000 Subject: [PATCH 09/11] delete one more line by accident --- src/rpc/src/rpcMain.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/rpc/src/rpcMain.c b/src/rpc/src/rpcMain.c index b5c2967e47..2e8c4bbc30 100644 --- a/src/rpc/src/rpcMain.c +++ b/src/rpc/src/rpcMain.c @@ -793,6 +793,7 @@ static SRpcConn *rpcProcessMsgHead(SRpcInfo *pRpc, SRecvInfo *pRecv) { sid = pConn->sid; pConn->chandle = pRecv->chandle; + if (pRecv->port) pConn->peerPort = pRecv->port; if (pHead->port) pConn->peerPort = htons(pHead->port); terrno = rpcCheckAuthentication(pConn, (char *)pHead, pRecv->msgLen); From 4402e599bdd807ef4da6d354edea9a975b10c194 Mon Sep 17 00:00:00 2001 From: jtao1735 Date: Mon, 4 May 2020 01:38:12 +0000 Subject: [PATCH 10/11] minor changes on UDP --- src/rpc/src/rpcMain.c | 2 +- src/rpc/src/rpcUdp.c | 11 ++++------- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/rpc/src/rpcMain.c b/src/rpc/src/rpcMain.c index 2e8c4bbc30..36d74189f5 100644 --- a/src/rpc/src/rpcMain.c +++ b/src/rpc/src/rpcMain.c @@ -793,7 +793,7 @@ static SRpcConn *rpcProcessMsgHead(SRpcInfo *pRpc, SRecvInfo *pRecv) { sid = pConn->sid; pConn->chandle = pRecv->chandle; - if (pRecv->port) pConn->peerPort = pRecv->port; + if (pConn->peerPort == 0) pConn->peerPort = pRecv->port; if (pHead->port) pConn->peerPort = htons(pHead->port); terrno = rpcCheckAuthentication(pConn, (char *)pHead, pRecv->msgLen); diff --git a/src/rpc/src/rpcUdp.c b/src/rpc/src/rpcUdp.c index 4a5fc7ba27..8d5721a437 100644 --- a/src/rpc/src/rpcUdp.c +++ b/src/rpc/src/rpcUdp.c @@ -127,7 +127,7 @@ void *taosInitUdpConnection(uint32_t ip, uint16_t port, char *label, int threads unsigned int addrlen = sizeof(sin); if (getsockname(pConn->fd, (struct sockaddr *)&sin, &addrlen) == 0 && sin.sin_family == AF_INET && addrlen == sizeof(sin)) { - pConn->localPort = (int16_t)ntohs(sin.sin_port); + pConn->localPort = (uint16_t)ntohs(sin.sin_port); } strcpy(pConn->label, label); @@ -198,8 +198,7 @@ void *taosOpenUdpConnection(void *shandle, void *thandle, uint32_t ip, uint16_t SUdpConn *pConn = pSet->udpConn + pSet->index; pConn->port = port; - tTrace("%s UDP connection is setup, ip:%x:%hu, local:%x:%d", pConn->label, ip, port, pSet->ip, - ntohs((uint16_t)pConn->localPort)); + tTrace("%s UDP connection is setup, ip:%x:%hu, local:%x:%d", pConn->label, ip, port, pSet->ip, pConn->localPort); return pConn; } @@ -219,16 +218,14 @@ static void *taosRecvUdpData(void *param) { while (1) { dataLen = recvfrom(pConn->fd, pConn->buffer, RPC_MAX_UDP_SIZE, 0, (struct sockaddr *)&sourceAdd, &addLen); - tTrace("%s msg is recv from 0x%x:%hu len:%d", pConn->label, sourceAdd.sin_addr.s_addr, ntohs(sourceAdd.sin_port), - dataLen); + port = ntohs(sourceAdd.sin_port); + tTrace("%s msg is recv from 0x%x:%hu len:%d", pConn->label, sourceAdd.sin_addr.s_addr, port, dataLen); if (dataLen < sizeof(SRpcHead)) { tError("%s recvfrom failed, reason:%s\n", pConn->label, strerror(errno)); continue; } - port = ntohs(sourceAdd.sin_port); - int processedLen = 0, leftLen = 0; int msgLen = 0; int count = 0; From 0d09f6c0b61cf69ab61d15dacaa747c29785ef66 Mon Sep 17 00:00:00 2001 From: slguan Date: Mon, 4 May 2020 10:50:18 +0800 Subject: [PATCH 11/11] add scripts --- tests/script/basicSuite.sim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/script/basicSuite.sim b/tests/script/basicSuite.sim index c9c2023ffe..73d99e2b6d 100644 --- a/tests/script/basicSuite.sim +++ b/tests/script/basicSuite.sim @@ -20,7 +20,7 @@ run general/table/tinyint.sim run general/table/db.table.sim run general/user/basic1.sim -run general/user/pass_alter.sim +#run general/user/pass_alter.sim run general/user/pass_len.sim run general/user/user_create.sim run general/user/user_len.sim