提交 45e4a9d8 编写于 作者: S Shengliang Guan

TD-2677

上级 b5bcb5f7
...@@ -163,9 +163,10 @@ void dnodeFreeVWriteQueue(void *pWqueue) { ...@@ -163,9 +163,10 @@ void dnodeFreeVWriteQueue(void *pWqueue) {
void dnodeSendRpcVWriteRsp(void *pVnode, void *wparam, int32_t code) { void dnodeSendRpcVWriteRsp(void *pVnode, void *wparam, int32_t code) {
if (wparam == NULL) return; if (wparam == NULL) return;
if (code > 0) code = 0;
SVWriteMsg *pWrite = wparam; SVWriteMsg *pWrite = wparam;
if (code < 0) pWrite->code = code; if (code <= 0) pWrite->code = code;
int32_t count = atomic_add_fetch_32(&pWrite->processedCount, 1); int32_t count = atomic_add_fetch_32(&pWrite->processedCount, 1);
if (count <= 1) return; if (count <= 1) return;
...@@ -204,11 +205,11 @@ static void *dnodeProcessVWriteQueue(void *wparam) { ...@@ -204,11 +205,11 @@ static void *dnodeProcessVWriteQueue(void *wparam) {
dTrace("msg:%p, app:%p type:%s will be processed in vwrite queue, qtype:%s hver:%" PRIu64, pWrite, dTrace("msg:%p, app:%p type:%s will be processed in vwrite queue, qtype:%s hver:%" PRIu64, pWrite,
pWrite->rpcMsg.ahandle, taosMsg[pWrite->pHead->msgType], qtypeStr[qtype], pWrite->pHead->version); pWrite->rpcMsg.ahandle, taosMsg[pWrite->pHead->msgType], qtypeStr[qtype], pWrite->pHead->version);
pWrite->code = vnodeProcessWrite(pVnode, pWrite->pHead, qtype, &pWrite->rspRet); pWrite->code = vnodeProcessWrite(pVnode, pWrite->pHead, qtype, pWrite);
if (pWrite->code <= 0) pWrite->processedCount = 1; if (pWrite->code <= 0) pWrite->processedCount = 1;
if (pWrite->code == 0 && pWrite->pHead->msgType != TSDB_MSG_TYPE_SUBMIT) forceFsync = true; if (pWrite->code >= 0 && pWrite->pHead->msgType != TSDB_MSG_TYPE_SUBMIT) forceFsync = true;
dTrace("msg:%p is processed in vwrite queue, result:%s", pWrite, tstrerror(pWrite->code)); dTrace("msg:%p is processed in vwrite queue, code:0x%x", pWrite, pWrite->code);
} }
walFsync(vnodeGetWal(pVnode), forceFsync); walFsync(vnodeGetWal(pVnode), forceFsync);
......
...@@ -52,7 +52,8 @@ int32_t vnodeProcessWrite(void *vparam, void *wparam, int32_t qtype, void *rpara ...@@ -52,7 +52,8 @@ int32_t vnodeProcessWrite(void *vparam, void *wparam, int32_t qtype, void *rpara
int32_t code = 0; int32_t code = 0;
SVnodeObj *pVnode = vparam; SVnodeObj *pVnode = vparam;
SWalHead * pHead = wparam; SWalHead * pHead = wparam;
SRspRet * pRspRet = rparam; SVWriteMsg*pWrite = rparam;
SRspRet * pRspRet = &pWrite->rspRet;
if (vnodeProcessWriteMsgFp[pHead->msgType] == NULL) { if (vnodeProcessWriteMsgFp[pHead->msgType] == NULL) {
vError("vgId:%d, msg:%s not processed since no handle, qtype:%s hver:%" PRIu64, pVnode->vgId, vError("vgId:%d, msg:%s not processed since no handle, qtype:%s hver:%" PRIu64, pVnode->vgId,
...@@ -85,7 +86,7 @@ int32_t vnodeProcessWrite(void *vparam, void *wparam, int32_t qtype, void *rpara ...@@ -85,7 +86,7 @@ int32_t vnodeProcessWrite(void *vparam, void *wparam, int32_t qtype, void *rpara
// forward to peers, even it is WAL/FWD, it shall be called to update version in sync // forward to peers, even it is WAL/FWD, it shall be called to update version in sync
int32_t syncCode = 0; int32_t syncCode = 0;
syncCode = syncForwardToPeer(pVnode->sync, pHead, pRspRet, qtype); syncCode = syncForwardToPeer(pVnode->sync, pHead, pWrite, qtype);
if (syncCode < 0) return syncCode; if (syncCode < 0) return syncCode;
// write into WAL // write into WAL
......
...@@ -35,7 +35,6 @@ system sh/cfg.sh -n dnode3 -c replica -v 3 ...@@ -35,7 +35,6 @@ system sh/cfg.sh -n dnode3 -c replica -v 3
print ============== deploy print ============== deploy
system sh/exec.sh -n dnode1 -s start system sh/exec.sh -n dnode1 -s start
sleep 5001
sql connect sql connect
sql create dnode $hostname2 sql create dnode $hostname2
...@@ -45,13 +44,29 @@ system sh/exec.sh -n dnode3 -s start ...@@ -45,13 +44,29 @@ system sh/exec.sh -n dnode3 -s start
print =============== step1 print =============== step1
$x = 0 $x = 0
show1: step1:
$x = $x + 1 $x = $x + 1
sleep 2000 sleep 1000
if $x == 5 then if $x == 10 then
return -1 return -1
endi endi
sql show mnodes -x show1
sql show dnodes
print dnode1 $data4_1
print dnode2 $data4_2
print dnode3 $data4_3
if $data4_1 != ready then
goto step1
endi
if $data4_2 != ready then
goto step1
endi
if $data4_3 != ready then
goto step1
endi
sql show mnodes
$mnode1Role = $data2_1 $mnode1Role = $data2_1
print mnode1Role $mnode1Role print mnode1Role $mnode1Role
$mnode2Role = $data2_2 $mnode2Role = $data2_2
...@@ -60,13 +75,13 @@ $mnode3Role = $data2_3 ...@@ -60,13 +75,13 @@ $mnode3Role = $data2_3
print mnode3Role $mnode3Role print mnode3Role $mnode3Role
if $mnode1Role != master then if $mnode1Role != master then
goto show1 goto step1
endi endi
if $mnode2Role != slave then if $mnode2Role != slave then
goto show1 goto step1
endi endi
if $mnode3Role != slave then if $mnode3Role != slave then
goto show1 goto step1
endi endi
$x = 1 $x = 1
...@@ -75,9 +90,21 @@ show2: ...@@ -75,9 +90,21 @@ show2:
print =============== step $x print =============== step $x
sql show mnodes sql show mnodes
print $data0_1 $data2_1 print $data0_1 $data2_1
print $data0_2 $data2_2
print $data0_3 $data2_3
sql show dnodes
print dnode1 $data4_1
print dnode2 $data4_2
print dnode3 $data4_3
if $data4_1 != ready then
goto step1
endi
if $data4_2 != ready then
goto step1
endi
if $data4_3 != ready then
goto step1
endi
$x = $x + 1 $x = $x + 1
sleep 5000 sleep 5000
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册