Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
9ebdee32
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
9ebdee32
编写于
4月 01, 2022
作者:
L
Liu Jicong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix txn
上级
e916f83f
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
37 addition
and
35 deletion
+37
-35
source/client/src/tmq.c
source/client/src/tmq.c
+18
-11
source/dnode/mnode/impl/src/mndConsumer.c
source/dnode/mnode/impl/src/mndConsumer.c
+1
-0
source/dnode/mnode/impl/src/mndSubscribe.c
source/dnode/mnode/impl/src/mndSubscribe.c
+10
-15
source/dnode/vnode/src/tq/tq.c
source/dnode/vnode/src/tq/tq.c
+5
-6
source/libs/catalog/src/catalog.c
source/libs/catalog/src/catalog.c
+2
-2
tests/script/tsim/tmq/basic1.sim
tests/script/tsim/tmq/basic1.sim
+1
-1
未找到文件。
source/client/src/tmq.c
浏览文件 @
9ebdee32
...
...
@@ -78,6 +78,7 @@ struct tmq_t {
STscObj
*
pTscObj
;
tmq_commit_cb
*
commit_cb
;
int32_t
nextTopicIdx
;
int8_t
epStatus
;
int32_t
waitingRequest
;
int32_t
readyRequest
;
SArray
*
clientTopics
;
// SArray<SMqClientTopic>
...
...
@@ -311,6 +312,7 @@ tmq_t* tmq_consumer_new(void* conn, tmq_conf_t* conf, char* errstr, int32_t errs
pTmq
->
epoch
=
0
;
pTmq
->
waitingRequest
=
0
;
pTmq
->
readyRequest
=
0
;
pTmq
->
epStatus
=
0
;
// set conf
strcpy
(
pTmq
->
clientId
,
conf
->
clientId
);
strcpy
(
pTmq
->
groupId
,
conf
->
groupId
);
...
...
@@ -833,7 +835,7 @@ int32_t tmqPollCb(void* param, const SDataBuf* pMsg, int32_t code) {
tmq_t
*
tmq
=
pParam
->
tmq
;
if
(
code
!=
0
)
{
tscWarn
(
"msg discard, code:%x"
,
code
);
goto
WRITE_QUEUE
_FAIL
;
goto
CREATE_MSG
_FAIL
;
}
int32_t
msgEpoch
=
((
SMqRspHead
*
)
pMsg
->
pData
)
->
epoch
;
...
...
@@ -873,7 +875,7 @@ int32_t tmqPollCb(void* param, const SDataBuf* pMsg, int32_t code) {
/*SMqConsumeRsp* pRsp = taosMemoryCalloc(1, sizeof(SMqConsumeRsp));*/
tmq_message_t
*
pRsp
=
taosAllocateQitem
(
sizeof
(
tmq_message_t
));
if
(
pRsp
==
NULL
)
{
goto
WRITE_QUEUE
_FAIL
;
goto
CREATE_MSG
_FAIL
;
}
memcpy
(
pRsp
,
pMsg
->
pData
,
sizeof
(
SMqRspHead
));
tDecodeSMqPollRsp
(
POINTER_SHIFT
(
pMsg
->
pData
,
sizeof
(
SMqRspHead
)),
&
pRsp
->
msg
);
...
...
@@ -886,7 +888,7 @@ int32_t tmqPollCb(void* param, const SDataBuf* pMsg, int32_t code) {
if (pRsp->msg.numOfTopics == 0) {
/*printf("no data\n");*/
taosFreeQitem(pRsp);
goto
WRITE_QUEUE
_FAIL;
goto
CREATE_MSG
_FAIL;
}
#endif
...
...
@@ -899,7 +901,7 @@ int32_t tmqPollCb(void* param, const SDataBuf* pMsg, int32_t code) {
tsem_post
(
&
tmq
->
rspSem
);
return
0
;
WRITE_QUEUE
_FAIL:
CREATE_MSG
_FAIL:
if
(
pParam
->
epoch
==
tmq
->
epoch
)
{
atomic_store_32
(
&
pVg
->
vgStatus
,
TMQ_VG_STATUS__IDLE
);
}
...
...
@@ -940,7 +942,7 @@ bool tmqUpdateEp(tmq_t* tmq, int32_t epoch, SMqCMGetSubEpRsp* pRsp) {
for
(
int32_t
k
=
0
;
k
<
vgNumCur
;
k
++
)
{
SMqClientVg
*
pVgCur
=
taosArrayGet
(
pTopicCur
->
vgs
,
k
);
sprintf
(
vgKey
,
"%s:%d"
,
topic
.
topicName
,
pVgCur
->
vgId
);
printf
(
"epoch %d vg %d build %s
\n
"
,
epoch
,
pVgCur
->
vgId
,
vgKey
);
tscDebug
(
"epoch %d vg %d build %s
\n
"
,
epoch
,
pVgCur
->
vgId
,
vgKey
);
taosHashPut
(
pHash
,
vgKey
,
strlen
(
vgKey
),
&
pVgCur
->
currentOffset
,
sizeof
(
int64_t
));
}
break
;
...
...
@@ -954,12 +956,12 @@ bool tmqUpdateEp(tmq_t* tmq, int32_t epoch, SMqCMGetSubEpRsp* pRsp) {
sprintf
(
vgKey
,
"%s:%d"
,
topic
.
topicName
,
pVgEp
->
vgId
);
int64_t
*
pOffset
=
taosHashGet
(
pHash
,
vgKey
,
strlen
(
vgKey
));
int64_t
offset
=
pVgEp
->
offset
;
printf
(
"epoch %d vg %d offset og to %ld
\n
"
,
epoch
,
pVgEp
->
vgId
,
offset
);
tscDebug
(
"epoch %d vg %d offset og to %ld
\n
"
,
epoch
,
pVgEp
->
vgId
,
offset
);
if
(
pOffset
!=
NULL
)
{
offset
=
*
pOffset
;
printf
(
"epoch %d vg %d found %s
\n
"
,
epoch
,
pVgEp
->
vgId
,
vgKey
);
tscDebug
(
"epoch %d vg %d found %s
\n
"
,
epoch
,
pVgEp
->
vgId
,
vgKey
);
}
printf
(
"epoch %d vg %d offset set to %ld
\n
"
,
epoch
,
pVgEp
->
vgId
,
offset
);
tscDebug
(
"epoch %d vg %d offset set to %ld
\n
"
,
epoch
,
pVgEp
->
vgId
,
offset
);
SMqClientVg
clientVg
=
{
.
pollCnt
=
0
,
.
currentOffset
=
offset
,
...
...
@@ -1020,6 +1022,7 @@ int32_t tmqAskEpCb(void* param, const SDataBuf* pMsg, int32_t code) {
}
END:
atomic_store_8
(
&
tmq
->
epStatus
,
0
);
if
(
pParam
->
sync
)
{
tsem_post
(
&
pParam
->
rspSem
);
}
...
...
@@ -1027,6 +1030,10 @@ END:
}
int32_t
tmqAskEp
(
tmq_t
*
tmq
,
bool
sync
)
{
int8_t
epStatus
=
atomic_val_compare_exchange_8
(
&
tmq
->
epStatus
,
0
,
1
);
if
(
epStatus
==
1
)
{
return
0
;
}
int32_t
tlen
=
sizeof
(
SMqCMGetSubEpReq
);
SMqCMGetSubEpReq
*
req
=
taosMemoryMalloc
(
tlen
);
if
(
req
==
NULL
)
{
...
...
@@ -1207,7 +1214,7 @@ int32_t tmqPollImpl(tmq_t* tmq, int64_t blockingTime) {
SMqClientVg
*
pVg
=
taosArrayGet
(
pTopic
->
vgs
,
j
);
int32_t
vgStatus
=
atomic_val_compare_exchange_32
(
&
pVg
->
vgStatus
,
TMQ_VG_STATUS__IDLE
,
TMQ_VG_STATUS__WAIT
);
if
(
vgStatus
!=
TMQ_VG_STATUS__IDLE
)
{
/*printf("skip vg %d\n", pVg->vgId);*/
tscDebug
(
"skip vg %d"
,
pVg
->
vgId
);
continue
;
}
SMqPollReq
*
pReq
=
tmqBuildConsumeReqImpl
(
tmq
,
blockingTime
,
pTopic
,
pVg
);
...
...
@@ -1251,7 +1258,7 @@ int32_t tmqPollImpl(tmq_t* tmq, int64_t blockingTime) {
int64_t
transporterId
=
0
;
/*printf("send poll\n");*/
atomic_add_fetch_32
(
&
tmq
->
waitingRequest
,
1
);
/*tscDebug("tmq send poll: vg %d, req offset %ld", pVg->vgId, pVg->currentOffset);*/
tscDebug
(
"tmq send poll: vg %d, req offset %ld"
,
pVg
->
vgId
,
pVg
->
currentOffset
);
/*printf("send vg %d %ld\n", pVg->vgId, pVg->currentOffset);*/
asyncSendMsgToServer
(
tmq
->
pTscObj
->
pAppInfo
->
pTransporter
,
&
pVg
->
epSet
,
&
transporterId
,
sendInfo
);
pVg
->
pollCnt
++
;
...
...
@@ -1315,7 +1322,7 @@ tmq_message_t* tmqHandleAllRsp(tmq_t* tmq, int64_t blockingTime, bool pollIfRese
tmqHandleNoPollRsp
(
tmq
,
rspHead
,
&
reset
);
taosFreeQitem
(
rspHead
);
if
(
pollIfReset
&&
reset
)
{
printf
(
"reset and repoll
\n
"
);
tscDebug
(
"reset and repoll
\n
"
);
tmqPollImpl
(
tmq
,
blockingTime
);
}
}
...
...
source/dnode/mnode/impl/src/mndConsumer.c
浏览文件 @
9ebdee32
...
...
@@ -160,6 +160,7 @@ static int32_t mndConsumerActionDelete(SSdb *pSdb, SMqConsumerObj *pConsumer) {
static
int32_t
mndConsumerActionUpdate
(
SSdb
*
pSdb
,
SMqConsumerObj
*
pOldConsumer
,
SMqConsumerObj
*
pNewConsumer
)
{
mTrace
(
"consumer:%"
PRId64
", perform update action"
,
pOldConsumer
->
consumerId
);
pOldConsumer
->
epoch
++
;
// TODO handle update
/*taosWLockLatch(&pOldConsumer->lock);*/
...
...
source/dnode/mnode/impl/src/mndSubscribe.c
浏览文件 @
9ebdee32
...
...
@@ -446,26 +446,21 @@ static int32_t mndProcessDoRebalanceMsg(SNodeMsg *pMsg) {
if
(
vgThisConsumerAfterRb
!=
vgThisConsumerBeforeRb
||
(
vgThisConsumerAfterRb
!=
0
&&
status
!=
MQ_CONSUMER_STATUS__ACTIVE
)
||
(
vgThisConsumerAfterRb
==
0
&&
status
!=
MQ_CONSUMER_STATUS__LOST
))
{
SMqConsumerObj
*
pNewRebConsumer
=
taosMemoryMalloc
(
sizeof
(
SMqConsumerObj
));
ASSERT
(
pNewRebConsumer
);
memcpy
(
pNewRebConsumer
,
pRebConsumer
,
sizeof
(
SMqConsumerObj
));
pNewRebConsumer
->
currentTopics
=
taosArrayDup
(
pRebConsumer
->
currentTopics
);
pNewRebConsumer
->
recentRemovedTopics
=
taosArrayDup
(
pRebConsumer
->
recentRemovedTopics
);
if
(
vgThisConsumerAfterRb
!=
vgThisConsumerBeforeRb
)
{
pNewRebConsumer
->
epoch
++
;
}
/*if (vgThisConsumerAfterRb != vgThisConsumerBeforeRb) {*/
/*pRebConsumer->epoch++;*/
/*}*/
if
(
vgThisConsumerAfterRb
!=
0
)
{
atomic_store_32
(
&
p
New
RebConsumer
->
status
,
MQ_CONSUMER_STATUS__ACTIVE
);
atomic_store_32
(
&
pRebConsumer
->
status
,
MQ_CONSUMER_STATUS__ACTIVE
);
}
else
{
atomic_store_32
(
&
p
New
RebConsumer
->
status
,
MQ_CONSUMER_STATUS__IDLE
);
atomic_store_32
(
&
pRebConsumer
->
status
,
MQ_CONSUMER_STATUS__IDLE
);
}
mInfo
(
"mq consumer:%"
PRId64
", status change from %d to %d"
,
p
New
RebConsumer
->
consumerId
,
status
,
p
New
RebConsumer
->
status
);
mInfo
(
"mq consumer:%"
PRId64
", status change from %d to %d"
,
pRebConsumer
->
consumerId
,
status
,
pRebConsumer
->
status
);
SSdbRaw
*
pConsumerRaw
=
mndConsumerActionEncode
(
p
New
RebConsumer
);
SSdbRaw
*
pConsumerRaw
=
mndConsumerActionEncode
(
pRebConsumer
);
sdbSetRawStatus
(
pConsumerRaw
,
SDB_STATUS_READY
);
mndTransAppend
Redo
log
(
pTrans
,
pConsumerRaw
);
mndTransAppend
Commit
log
(
pTrans
,
pConsumerRaw
);
}
mndReleaseConsumer
(
pMnode
,
pRebConsumer
);
}
...
...
@@ -512,7 +507,7 @@ static int32_t mndProcessDoRebalanceMsg(SNodeMsg *pMsg) {
// TODO: log rebalance statistics
SSdbRaw
*
pSubRaw
=
mndSubActionEncode
(
pSub
);
sdbSetRawStatus
(
pSubRaw
,
SDB_STATUS_
READY
);
sdbSetRawStatus
(
pSubRaw
,
SDB_STATUS_
UPDATING
);
mndTransAppendRedolog
(
pTrans
,
pSubRaw
);
}
mndReleaseSubscribe
(
pMnode
,
pSub
);
...
...
source/dnode/vnode/src/tq/tq.c
浏览文件 @
9ebdee32
...
...
@@ -264,7 +264,7 @@ int32_t tqProcessPollReq(STQ* pTq, SRpcMsg* pMsg, int32_t workerId) {
fetchOffset
=
pReq
->
currentOffset
+
1
;
}
printf
(
"tmq poll vg %d req %ld %ld
\n
"
,
pTq
->
pVnode
->
vgId
,
pReq
->
currentOffset
,
fetchOffset
);
/*printf("tmq poll vg %d req %ld %ld\n", pTq->pVnode->vgId, pReq->currentOffset, fetchOffset);*/
SMqPollRsp
rsp
=
{
/*.consumerId = consumerId,*/
...
...
@@ -299,8 +299,7 @@ int32_t tqProcessPollReq(STQ* pTq, SRpcMsg* pMsg, int32_t workerId) {
// response to user
break
;
}
printf
(
"vg %d offset %ld msgType %d from epoch %d
\n
"
,
pTq
->
pVnode
->
vgId
,
fetchOffset
,
pHead
->
msgType
,
pReq
->
epoch
);
/*printf("vg %d offset %ld msgType %d from epoch %d\n", pTq->pVnode->vgId, fetchOffset, pHead->msgType, pReq->epoch);*/
/*int8_t pos = fetchOffset % TQ_BUFFER_SIZE;*/
/*pHead = pTopic->pReadhandle->pHead;*/
if
(
pHead
->
msgType
==
TDMT_VND_SUBMIT
)
{
...
...
@@ -353,7 +352,7 @@ int32_t tqProcessPollReq(STQ* pTq, SRpcMsg* pMsg, int32_t workerId) {
pMsg
->
pCont
=
buf
;
pMsg
->
contLen
=
tlen
;
pMsg
->
code
=
0
;
printf
(
"vg %d offset %ld msgType %d from epoch %d actual rsp
\n
"
,
pTq
->
pVnode
->
vgId
,
fetchOffset
,
pHead
->
msgType
,
pReq
->
epoch
);
/*printf("vg %d offset %ld msgType %d from epoch %d actual rsp\n", pTq->pVnode->vgId, fetchOffset, pHead->msgType, pReq->epoch);*/
tmsgSendRsp
(
pMsg
);
taosMemoryFree
(
pHead
);
return
0
;
...
...
@@ -384,7 +383,7 @@ int32_t tqProcessPollReq(STQ* pTq, SRpcMsg* pMsg, int32_t workerId) {
pMsg
->
contLen
=
tlen
;
pMsg
->
code
=
0
;
tmsgSendRsp
(
pMsg
);
printf
(
"vg %d offset %ld from epoch %d not rsp
\n
"
,
pTq
->
pVnode
->
vgId
,
fetchOffset
,
pReq
->
epoch
);
/*printf("vg %d offset %ld from epoch %d not rsp\n", pTq->pVnode->vgId, fetchOffset, pReq->epoch);*/
/*}*/
return
0
;
...
...
@@ -451,7 +450,7 @@ int32_t tqProcessSetConnReq(STQ* pTq, char* msg) {
pTopic
->
buffer
.
output
[
i
].
task
=
qCreateStreamExecTaskInfo
(
req
.
qmsg
,
&
handle
);
ASSERT
(
pTopic
->
buffer
.
output
[
i
].
task
);
}
printf
(
"set topic %s to consumer %ld on vg %d
\n
"
,
pTopic
->
topicName
,
req
.
consumerId
,
pTq
->
pVnode
->
vgId
);
/*printf("set topic %s to consumer %ld on vg %d\n", pTopic->topicName, req.consumerId, pTq->pVnode->vgId);*/
taosArrayPush
(
pConsumer
->
topics
,
pTopic
);
tqHandleMovePut
(
pTq
->
tqMeta
,
req
.
consumerId
,
pConsumer
);
tqHandleCommit
(
pTq
->
tqMeta
,
req
.
consumerId
);
...
...
source/libs/catalog/src/catalog.c
浏览文件 @
9ebdee32
...
...
@@ -2304,8 +2304,6 @@ int32_t catalogInit(SCatalogCfg *cfg) {
CTG_ERR_RET
(
TSDB_CODE_CTG_INTERNAL_ERROR
);
}
CTG_ERR_RET
(
ctgStartUpdateThread
());
tsem_init
(
&
gCtgMgmt
.
queue
.
reqSem
,
0
,
0
);
tsem_init
(
&
gCtgMgmt
.
queue
.
rspSem
,
0
,
0
);
...
...
@@ -2316,6 +2314,8 @@ int32_t catalogInit(SCatalogCfg *cfg) {
}
gCtgMgmt
.
queue
.
tail
=
gCtgMgmt
.
queue
.
head
;
CTG_ERR_RET
(
ctgStartUpdateThread
());
qDebug
(
"catalog initialized, maxDb:%u, maxTbl:%u, dbRentSec:%u, stbRentSec:%u"
,
gCtgMgmt
.
cfg
.
maxDBCacheNum
,
gCtgMgmt
.
cfg
.
maxTblCacheNum
,
gCtgMgmt
.
cfg
.
dbRentSec
,
gCtgMgmt
.
cfg
.
stbRentSec
);
return
TSDB_CODE_SUCCESS
;
...
...
tests/script/tsim/tmq/basic1.sim
浏览文件 @
9ebdee32
...
...
@@ -35,7 +35,7 @@ sql connect
$dbNamme = d0
print =============== create database , vgroup 1
sql create database $dbNamme vgroups 1
0
sql create database $dbNamme vgroups 1
sql show databases
print $data00 $data01 $data02
if $rows != 2 then
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录