Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
bb58ec1e
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1187
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
bb58ec1e
编写于
7月 16, 2022
作者:
L
Liu Jicong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat(tmq): support background heartbeat
上级
280ed4f6
变更
7
显示空白变更内容
内联
并排
Showing
7 changed file
with
436 addition
and
468 deletion
+436
-468
include/common/tmsg.h
include/common/tmsg.h
+37
-105
include/common/tmsgdef.h
include/common/tmsgdef.h
+1
-0
source/client/src/clientHb.c
source/client/src/clientHb.c
+43
-53
source/client/src/tmq.c
source/client/src/tmq.c
+317
-246
source/dnode/mgmt/mgmt_mnode/src/mmHandle.c
source/dnode/mgmt/mgmt_mnode/src/mmHandle.c
+1
-0
source/dnode/mnode/impl/src/mndConsumer.c
source/dnode/mnode/impl/src/mndConsumer.c
+35
-2
source/dnode/mnode/impl/src/mndProfile.c
source/dnode/mnode/impl/src/mndProfile.c
+2
-62
未找到文件。
include/common/tmsg.h
浏览文件 @
bb58ec1e
...
...
@@ -75,13 +75,18 @@ typedef uint16_t tmsg_t;
#define TSDB_IE_TYPE_DNODE_EXT 6
#define TSDB_IE_TYPE_DNODE_STATE 7
enum
{
CONN_TYPE__QUERY
=
1
,
CONN_TYPE__TMQ
,
CONN_TYPE__UDFD
,
CONN_TYPE__MAX
};
enum
{
CONN_TYPE__QUERY
=
1
,
CONN_TYPE__TMQ
,
CONN_TYPE__UDFD
,
CONN_TYPE__MAX
,
};
enum
{
HEARTBEAT_KEY_USER_AUTHINFO
=
1
,
HEARTBEAT_KEY_DBINFO
,
HEARTBEAT_KEY_STBINFO
,
HEARTBEAT_KEY_
MQ_TMP
,
HEARTBEAT_KEY_
TMQ
,
};
typedef
enum
_mgmt_table
{
...
...
@@ -2145,6 +2150,15 @@ typedef struct {
char
cgroup
[
TSDB_CGROUP_LEN
];
}
SMqAskEpReq
;
typedef
struct
{
int64_t
consumerId
;
int32_t
epoch
;
}
SMqHbReq
;
typedef
struct
{
int8_t
reserved
;
}
SMqHbRsp
;
typedef
struct
{
int32_t
key
;
int32_t
valueLen
;
...
...
@@ -2333,29 +2347,30 @@ static FORCE_INLINE int32_t tDecodeSClientHbKey(SDecoder* pDecoder, SClientHbKey
return
0
;
}
typedef
struct
SMqHbVgInfo
{
typedef
struct
{
int32_t
vgId
;
}
SMqHbVgInfo
;
// TODO stas
}
SMqReportVgInfo
;
static
FORCE_INLINE
int32_t
taosEncodeSMqVgInfo
(
void
**
buf
,
const
SMq
Hb
VgInfo
*
pVgInfo
)
{
static
FORCE_INLINE
int32_t
taosEncodeSMqVgInfo
(
void
**
buf
,
const
SMq
Report
VgInfo
*
pVgInfo
)
{
int32_t
tlen
=
0
;
tlen
+=
taosEncodeFixedI32
(
buf
,
pVgInfo
->
vgId
);
return
tlen
;
}
static
FORCE_INLINE
void
*
taosDecodeSMqVgInfo
(
void
*
buf
,
SMq
Hb
VgInfo
*
pVgInfo
)
{
static
FORCE_INLINE
void
*
taosDecodeSMqVgInfo
(
void
*
buf
,
SMq
Report
VgInfo
*
pVgInfo
)
{
buf
=
taosDecodeFixedI32
(
buf
,
&
pVgInfo
->
vgId
);
return
buf
;
}
typedef
struct
SMqHbTopicInfo
{
typedef
struct
{
int32_t
epoch
;
int64_t
topicUid
;
char
name
[
TSDB_TOPIC_FNAME_LEN
];
SArray
*
pVgInfo
;
// SArray<SMqHbVgInfo>
}
SMq
Hb
TopicInfo
;
}
SMqTopicInfo
;
static
FORCE_INLINE
int32_t
taosEncodeSMq
HbTopicInfoMsg
(
void
**
buf
,
const
SMqHb
TopicInfo
*
pTopicInfo
)
{
static
FORCE_INLINE
int32_t
taosEncodeSMq
TopicInfoMsg
(
void
**
buf
,
const
SMq
TopicInfo
*
pTopicInfo
)
{
int32_t
tlen
=
0
;
tlen
+=
taosEncodeFixedI32
(
buf
,
pTopicInfo
->
epoch
);
tlen
+=
taosEncodeFixedI64
(
buf
,
pTopicInfo
->
topicUid
);
...
...
@@ -2363,35 +2378,35 @@ static FORCE_INLINE int32_t taosEncodeSMqHbTopicInfoMsg(void** buf, const SMqHbT
int32_t
sz
=
taosArrayGetSize
(
pTopicInfo
->
pVgInfo
);
tlen
+=
taosEncodeFixedI32
(
buf
,
sz
);
for
(
int32_t
i
=
0
;
i
<
sz
;
i
++
)
{
SMq
HbVgInfo
*
pVgInfo
=
(
SMqHb
VgInfo
*
)
taosArrayGet
(
pTopicInfo
->
pVgInfo
,
i
);
SMq
ReportVgInfo
*
pVgInfo
=
(
SMqReport
VgInfo
*
)
taosArrayGet
(
pTopicInfo
->
pVgInfo
,
i
);
tlen
+=
taosEncodeSMqVgInfo
(
buf
,
pVgInfo
);
}
return
tlen
;
}
static
FORCE_INLINE
void
*
taosDecodeSMq
HbTopicInfoMsg
(
void
*
buf
,
SMqHb
TopicInfo
*
pTopicInfo
)
{
static
FORCE_INLINE
void
*
taosDecodeSMq
TopicInfoMsg
(
void
*
buf
,
SMq
TopicInfo
*
pTopicInfo
)
{
buf
=
taosDecodeFixedI32
(
buf
,
&
pTopicInfo
->
epoch
);
buf
=
taosDecodeFixedI64
(
buf
,
&
pTopicInfo
->
topicUid
);
buf
=
taosDecodeStringTo
(
buf
,
pTopicInfo
->
name
);
int32_t
sz
;
buf
=
taosDecodeFixedI32
(
buf
,
&
sz
);
pTopicInfo
->
pVgInfo
=
taosArrayInit
(
sz
,
sizeof
(
SMq
Hb
VgInfo
));
pTopicInfo
->
pVgInfo
=
taosArrayInit
(
sz
,
sizeof
(
SMq
Report
VgInfo
));
for
(
int32_t
i
=
0
;
i
<
sz
;
i
++
)
{
SMq
Hb
VgInfo
vgInfo
;
SMq
Report
VgInfo
vgInfo
;
buf
=
taosDecodeSMqVgInfo
(
buf
,
&
vgInfo
);
taosArrayPush
(
pTopicInfo
->
pVgInfo
,
&
vgInfo
);
}
return
buf
;
}
typedef
struct
SMqHbMsg
{
typedef
struct
{
int32_t
status
;
// ask hb endpoint
int32_t
epoch
;
int64_t
consumerId
;
SArray
*
pTopics
;
// SArray<SMqHbTopicInfo>
}
SMq
HbMsg
;
}
SMq
ReportReq
;
static
FORCE_INLINE
int32_t
taosEncodeSMq
Msg
(
void
**
buf
,
const
SMqHbMsg
*
pMsg
)
{
static
FORCE_INLINE
int32_t
taosEncodeSMq
ReportMsg
(
void
**
buf
,
const
SMqReportReq
*
pMsg
)
{
int32_t
tlen
=
0
;
tlen
+=
taosEncodeFixedI32
(
buf
,
pMsg
->
status
);
tlen
+=
taosEncodeFixedI32
(
buf
,
pMsg
->
epoch
);
...
...
@@ -2399,22 +2414,22 @@ static FORCE_INLINE int32_t taosEncodeSMqMsg(void** buf, const SMqHbMsg* pMsg) {
int32_t
sz
=
taosArrayGetSize
(
pMsg
->
pTopics
);
tlen
+=
taosEncodeFixedI32
(
buf
,
sz
);
for
(
int32_t
i
=
0
;
i
<
sz
;
i
++
)
{
SMq
HbTopicInfo
*
topicInfo
=
(
SMqHb
TopicInfo
*
)
taosArrayGet
(
pMsg
->
pTopics
,
i
);
tlen
+=
taosEncodeSMq
Hb
TopicInfoMsg
(
buf
,
topicInfo
);
SMq
TopicInfo
*
topicInfo
=
(
SMq
TopicInfo
*
)
taosArrayGet
(
pMsg
->
pTopics
,
i
);
tlen
+=
taosEncodeSMqTopicInfoMsg
(
buf
,
topicInfo
);
}
return
tlen
;
}
static
FORCE_INLINE
void
*
taosDecodeSMq
Msg
(
void
*
buf
,
SMqHbMsg
*
pMsg
)
{
static
FORCE_INLINE
void
*
taosDecodeSMq
ReportMsg
(
void
*
buf
,
SMqReportReq
*
pMsg
)
{
buf
=
taosDecodeFixedI32
(
buf
,
&
pMsg
->
status
);
buf
=
taosDecodeFixedI32
(
buf
,
&
pMsg
->
epoch
);
buf
=
taosDecodeFixedI64
(
buf
,
&
pMsg
->
consumerId
);
int32_t
sz
;
buf
=
taosDecodeFixedI32
(
buf
,
&
sz
);
pMsg
->
pTopics
=
taosArrayInit
(
sz
,
sizeof
(
SMq
Hb
TopicInfo
));
pMsg
->
pTopics
=
taosArrayInit
(
sz
,
sizeof
(
SMqTopicInfo
));
for
(
int32_t
i
=
0
;
i
<
sz
;
i
++
)
{
SMq
Hb
TopicInfo
topicInfo
;
buf
=
taosDecodeSMq
Hb
TopicInfoMsg
(
buf
,
&
topicInfo
);
SMqTopicInfo
topicInfo
;
buf
=
taosDecodeSMqTopicInfoMsg
(
buf
,
&
topicInfo
);
taosArrayPush
(
pMsg
->
pTopics
,
&
topicInfo
);
}
return
buf
;
...
...
@@ -2919,89 +2934,6 @@ typedef struct {
int32_t
tEncodeSMqDataRsp
(
SEncoder
*
pEncoder
,
const
SMqDataRsp
*
pRsp
);
int32_t
tDecodeSMqDataRsp
(
SDecoder
*
pDecoder
,
SMqDataRsp
*
pRsp
);
#if 0
typedef struct {
SMqRspHead head;
int64_t reqOffset;
int64_t rspOffset;
int32_t skipLogNum;
int32_t blockNum;
int8_t withTbName;
int8_t withSchema;
SArray* blockDataLen; // SArray<int32_t>
SArray* blockData; // SArray<SRetrieveTableRsp*>
SArray* blockTbName; // SArray<char*>
SArray* blockSchema; // SArray<SSchemaWrapper>
} SMqDataBlkRsp;
static FORCE_INLINE int32_t tEncodeSMqDataBlkRsp(void** buf, const SMqDataBlkRsp* pRsp) {
int32_t tlen = 0;
tlen += taosEncodeFixedI64(buf, pRsp->reqOffset);
tlen += taosEncodeFixedI64(buf, pRsp->rspOffset);
tlen += taosEncodeFixedI32(buf, pRsp->skipLogNum);
tlen += taosEncodeFixedI32(buf, pRsp->blockNum);
if (pRsp->blockNum != 0) {
tlen += taosEncodeFixedI8(buf, pRsp->withTbName);
tlen += taosEncodeFixedI8(buf, pRsp->withSchema);
for (int32_t i = 0; i < pRsp->blockNum; i++) {
int32_t bLen = *(int32_t*)taosArrayGet(pRsp->blockDataLen, i);
void* data = taosArrayGetP(pRsp->blockData, i);
tlen += taosEncodeFixedI32(buf, bLen);
tlen += taosEncodeBinary(buf, data, bLen);
if (pRsp->withSchema) {
SSchemaWrapper* pSW = (SSchemaWrapper*)taosArrayGetP(pRsp->blockSchema, i);
tlen += taosEncodeSSchemaWrapper(buf, pSW);
}
if (pRsp->withTbName) {
char* tbName = (char*)taosArrayGetP(pRsp->blockTbName, i);
tlen += taosEncodeString(buf, tbName);
}
}
}
return tlen;
}
static FORCE_INLINE void* tDecodeSMqDataBlkRsp(const void* buf, SMqDataBlkRsp* pRsp) {
buf = taosDecodeFixedI64(buf, &pRsp->reqOffset);
buf = taosDecodeFixedI64(buf, &pRsp->rspOffset);
buf = taosDecodeFixedI32(buf, &pRsp->skipLogNum);
buf = taosDecodeFixedI32(buf, &pRsp->blockNum);
if (pRsp->blockNum != 0) {
pRsp->blockData = taosArrayInit(pRsp->blockNum, sizeof(void*));
pRsp->blockDataLen = taosArrayInit(pRsp->blockNum, sizeof(int32_t));
buf = taosDecodeFixedI8(buf, &pRsp->withTbName);
buf = taosDecodeFixedI8(buf, &pRsp->withSchema);
if (pRsp->withTbName) {
pRsp->blockTbName = taosArrayInit(pRsp->blockNum, sizeof(void*));
}
if (pRsp->withSchema) {
pRsp->blockSchema = taosArrayInit(pRsp->blockNum, sizeof(void*));
}
for (int32_t i = 0; i < pRsp->blockNum; i++) {
int32_t bLen = 0;
void* data = NULL;
buf = taosDecodeFixedI32(buf, &bLen);
buf = taosDecodeBinary(buf, &data, bLen);
taosArrayPush(pRsp->blockDataLen, &bLen);
taosArrayPush(pRsp->blockData, &data);
if (pRsp->withSchema) {
SSchemaWrapper* pSW = (SSchemaWrapper*)taosMemoryMalloc(sizeof(SSchemaWrapper));
buf = taosDecodeSSchemaWrapper(buf, pSW);
taosArrayPush(pRsp->blockSchema, &pSW);
}
if (pRsp->withTbName) {
char* name = NULL;
buf = taosDecodeString(buf, &name);
taosArrayPush(pRsp->blockTbName, &name);
}
}
}
return (void*)buf;
}
#endif
typedef
struct
{
SMqRspHead
head
;
char
cgroup
[
TSDB_CGROUP_LEN
];
...
...
include/common/tmsgdef.h
浏览文件 @
bb58ec1e
...
...
@@ -144,6 +144,7 @@ enum {
TD_DEF_MSG_TYPE
(
TDMT_MND_MQ_ASK_EP
,
"ask-ep"
,
SMqAskEpReq
,
SMqAskEpRsp
)
TD_DEF_MSG_TYPE
(
TDMT_MND_MQ_CONSUMER_LOST
,
"consumer-lost"
,
SMqConsumerLostMsg
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_MND_MQ_CONSUMER_RECOVER
,
"consumer-recover"
,
SMqConsumerRecoverMsg
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_MND_MQ_HB
,
"consumer-hb"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_MND_MQ_DO_REBALANCE
,
"do-rebalance"
,
SMqDoRebalanceMsg
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_MND_MQ_DROP_CGROUP
,
"drop-cgroup"
,
SMqDropCGroupReq
,
SMqDropCGroupRsp
)
TD_DEF_MSG_TYPE
(
TDMT_MND_MQ_COMMIT_OFFSET
,
"mnode-commit-offset"
,
SMqCMCommitOffsetReq
,
SMqCMCommitOffsetRsp
)
...
...
source/client/src/clientHb.c
浏览文件 @
bb58ec1e
...
...
@@ -24,9 +24,15 @@ static SClientHbMgr clientHbMgr = {0};
static
int32_t
hbCreateThread
();
static
void
hbStopThread
();
static
int32_t
hbMqHbReqHandle
(
SClientHbKey
*
connKey
,
void
*
param
,
SClientHbReq
*
req
)
{
return
0
;
}
static
int32_t
hbMqHbReqHandle
(
SClientHbKey
*
connKey
,
void
*
param
,
SClientHbReq
*
req
)
{
//
return
0
;
}
static
int32_t
hbMqHbRspHandle
(
SAppHbMgr
*
pAppHbMgr
,
SClientHbRsp
*
pRsp
)
{
return
0
;
}
static
int32_t
hbMqHbRspHandle
(
SAppHbMgr
*
pAppHbMgr
,
SClientHbRsp
*
pRsp
)
{
//
return
0
;
}
static
int32_t
hbProcessUserAuthInfoRsp
(
void
*
value
,
int32_t
valueLen
,
struct
SCatalog
*
pCatalog
)
{
int32_t
code
=
0
;
...
...
@@ -158,12 +164,12 @@ static int32_t hbQueryHbRspHandle(SAppHbMgr *pAppHbMgr, SClientHbRsp *pRsp) {
tscDebug
(
"tscObj rid %"
PRIx64
" not exist"
,
pRsp
->
connKey
.
tscRid
);
}
else
{
if
(
pRsp
->
query
->
totalDnodes
>
1
&&
!
isEpsetEqual
(
&
pTscObj
->
pAppInfo
->
mgmtEp
.
epSet
,
&
pRsp
->
query
->
epSet
))
{
SEpSet
*
pOrig
=
&
pTscObj
->
pAppInfo
->
mgmtEp
.
epSet
;
SEp
*
pOrigEp
=
&
pOrig
->
eps
[
pOrig
->
inUse
];
SEp
*
pNewEp
=
&
pRsp
->
query
->
epSet
.
eps
[
pRsp
->
query
->
epSet
.
inUse
];
tscDebug
(
"mnode epset updated from %d/%d=>%s:%d to %d/%d=>%s:%d in hb"
,
pOrig
->
inUse
,
pOrig
->
numOfEps
,
pOrigEp
->
fqdn
,
pOrigEp
->
port
,
pRsp
->
query
->
epSet
.
inUse
,
pRsp
->
query
->
epSet
.
numOfEps
,
pNewEp
->
fqdn
,
pNewEp
->
port
);
SEpSet
*
pOrig
=
&
pTscObj
->
pAppInfo
->
mgmtEp
.
epSet
;
SEp
*
pOrigEp
=
&
pOrig
->
eps
[
pOrig
->
inUse
];
SEp
*
pNewEp
=
&
pRsp
->
query
->
epSet
.
eps
[
pRsp
->
query
->
epSet
.
inUse
];
tscDebug
(
"mnode epset updated from %d/%d=>%s:%d to %d/%d=>%s:%d in hb"
,
pOrig
->
inUse
,
pOrig
->
numOfEps
,
pOrigEp
->
fqdn
,
pOrigEp
->
port
,
pRsp
->
query
->
epSet
.
inUse
,
pRsp
->
query
->
epSet
.
numOfEps
,
pNewEp
->
fqdn
,
pNewEp
->
port
);
updateEpSet_s
(
&
pTscObj
->
pAppInfo
->
mgmtEp
,
&
pRsp
->
query
->
epSet
);
}
...
...
@@ -392,7 +398,6 @@ int32_t hbGetQueryBasicInfo(SClientHbKey *connKey, SClientHbReq *req) {
return
TSDB_CODE_QRY_OUT_OF_MEMORY
;
}
int32_t
code
=
hbBuildQueryDesc
(
hbBasic
,
pTscObj
);
if
(
code
)
{
releaseTscObj
(
connKey
->
tscRid
);
...
...
@@ -442,7 +447,6 @@ int32_t hbGetExpiredUserInfo(SClientHbKey *connKey, struct SCatalog *pCatalog, S
return
TSDB_CODE_SUCCESS
;
}
int32_t
hbGetExpiredDBInfo
(
SClientHbKey
*
connKey
,
struct
SCatalog
*
pCatalog
,
SClientHbReq
*
req
)
{
SDbVgVersion
*
dbs
=
NULL
;
uint32_t
dbNum
=
0
;
...
...
@@ -521,7 +525,7 @@ int32_t hbGetExpiredStbInfo(SClientHbKey *connKey, struct SCatalog *pCatalog, SC
}
int32_t
hbGetAppInfo
(
int64_t
clusterId
,
SClientHbReq
*
req
)
{
SAppHbReq
*
pApp
=
taosHashGet
(
clientHbMgr
.
appSummary
,
&
clusterId
,
sizeof
(
clusterId
));
SAppHbReq
*
pApp
=
taosHashGet
(
clientHbMgr
.
appSummary
,
&
clusterId
,
sizeof
(
clusterId
));
if
(
NULL
!=
pApp
)
{
memcpy
(
&
req
->
app
,
pApp
,
sizeof
(
*
pApp
));
}
else
{
...
...
@@ -534,7 +538,6 @@ int32_t hbGetAppInfo(int64_t clusterId, SClientHbReq *req) {
return
TSDB_CODE_SUCCESS
;
}
int32_t
hbQueryHbReqHandle
(
SClientHbKey
*
connKey
,
void
*
param
,
SClientHbReq
*
req
)
{
int64_t
*
clusterId
=
(
int64_t
*
)
param
;
struct
SCatalog
*
pCatalog
=
NULL
;
...
...
@@ -567,7 +570,8 @@ int32_t hbQueryHbReqHandle(SClientHbKey *connKey, void *param, SClientHbReq *req
return
TSDB_CODE_SUCCESS
;
}
void
hbMgrInitMqHbHandle
()
{
static
FORCE_INLINE
void
hbMgrInitHandle
()
{
// init all handle
clientHbMgr
.
reqHandle
[
CONN_TYPE__QUERY
]
=
hbQueryHbReqHandle
;
clientHbMgr
.
reqHandle
[
CONN_TYPE__TMQ
]
=
hbMqHbReqHandle
;
...
...
@@ -575,11 +579,6 @@ void hbMgrInitMqHbHandle() {
clientHbMgr
.
rspHandle
[
CONN_TYPE__TMQ
]
=
hbMqHbRspHandle
;
}
static
FORCE_INLINE
void
hbMgrInitHandle
()
{
// init all handle
hbMgrInitMqHbHandle
();
}
SClientHbBatchReq
*
hbGatherAllInfo
(
SAppHbMgr
*
pAppHbMgr
)
{
SClientHbBatchReq
*
pBatchReq
=
taosMemoryCalloc
(
1
,
sizeof
(
SClientHbBatchReq
));
if
(
pBatchReq
==
NULL
)
{
...
...
@@ -602,7 +601,7 @@ SClientHbBatchReq *hbGatherAllInfo(SAppHbMgr *pAppHbMgr) {
continue
;
}
//hbClearClientHbReq(pOneReq);
//
hbClearClientHbReq(pOneReq);
pIter
=
taosHashIterate
(
pAppHbMgr
->
activeInfo
,
pIter
);
}
...
...
@@ -615,11 +614,9 @@ SClientHbBatchReq *hbGatherAllInfo(SAppHbMgr *pAppHbMgr) {
return
pBatchReq
;
}
void
hbThreadFuncUnexpectedStopped
(
void
)
{
atomic_store_8
(
&
clientHbMgr
.
threadStop
,
2
);
}
void
hbThreadFuncUnexpectedStopped
(
void
)
{
atomic_store_8
(
&
clientHbMgr
.
threadStop
,
2
);
}
void
hbMergeSummary
(
SAppClusterSummary
*
dst
,
SAppClusterSummary
*
src
)
{
void
hbMergeSummary
(
SAppClusterSummary
*
dst
,
SAppClusterSummary
*
src
)
{
dst
->
numOfInsertsReq
+=
src
->
numOfInsertsReq
;
dst
->
numOfInsertRows
+=
src
->
numOfInsertRows
;
dst
->
insertElapsedTime
+=
src
->
insertElapsedTime
;
...
...
@@ -645,7 +642,7 @@ int32_t hbGatherAppInfo(void) {
for
(
int32_t
i
=
0
;
i
<
sz
;
++
i
)
{
SAppHbMgr
*
pAppHbMgr
=
taosArrayGetP
(
clientHbMgr
.
appHbMgrs
,
i
);
uint64_t
clusterId
=
pAppHbMgr
->
pAppInstInfo
->
clusterId
;
SAppHbReq
*
pApp
=
taosHashGet
(
clientHbMgr
.
appSummary
,
&
clusterId
,
sizeof
(
clusterId
));
SAppHbReq
*
pApp
=
taosHashGet
(
clientHbMgr
.
appSummary
,
&
clusterId
,
sizeof
(
clusterId
));
if
(
NULL
==
pApp
)
{
memcpy
(
&
req
.
summary
,
&
pAppHbMgr
->
pAppInstInfo
->
summary
,
sizeof
(
req
.
summary
));
req
.
startTime
=
pAppHbMgr
->
startTime
;
...
...
@@ -662,7 +659,6 @@ int32_t hbGatherAppInfo(void) {
return
TSDB_CODE_SUCCESS
;
}
static
void
*
hbThreadFunc
(
void
*
param
)
{
setThreadName
(
"hb"
);
#ifdef WINDOWS
...
...
@@ -698,7 +694,6 @@ static void *hbThreadFunc(void *param) {
if
(
buf
==
NULL
)
{
terrno
=
TSDB_CODE_TSC_OUT_OF_MEMORY
;
tFreeClientHbBatchReq
(
pReq
);
//hbClearReqInfo(pAppHbMgr);
break
;
}
...
...
@@ -708,7 +703,6 @@ static void *hbThreadFunc(void *param) {
if
(
pInfo
==
NULL
)
{
terrno
=
TSDB_CODE_TSC_OUT_OF_MEMORY
;
tFreeClientHbBatchReq
(
pReq
);
//hbClearReqInfo(pAppHbMgr);
taosMemoryFree
(
buf
);
break
;
}
...
...
@@ -725,7 +719,6 @@ static void *hbThreadFunc(void *param) {
SEpSet
epSet
=
getEpSet_s
(
&
pAppInstInfo
->
mgmtEp
);
asyncSendMsgToServer
(
pAppInstInfo
->
pTransporter
,
&
epSet
,
&
transporterId
,
pInfo
);
tFreeClientHbBatchReq
(
pReq
);
//hbClearReqInfo(pAppHbMgr);
atomic_add_fetch_32
(
&
pAppHbMgr
->
reportCnt
,
1
);
}
...
...
@@ -881,7 +874,7 @@ int hbRegisterConnImpl(SAppHbMgr *pAppHbMgr, SClientHbKey connKey, int64_t clust
SClientHbReq
hbReq
=
{
0
};
hbReq
.
connKey
=
connKey
;
hbReq
.
clusterId
=
clusterId
;
//hbReq.info = taosHashInit(64, hbKeyHashFunc, 1, HASH_ENTRY_LOCK);
//
hbReq.info = taosHashInit(64, hbKeyHashFunc, 1, HASH_ENTRY_LOCK);
taosHashPut
(
pAppHbMgr
->
activeInfo
,
&
connKey
,
sizeof
(
SClientHbKey
),
&
hbReq
,
sizeof
(
SClientHbReq
));
...
...
@@ -896,12 +889,9 @@ int hbRegisterConn(SAppHbMgr *pAppHbMgr, int64_t tscRefId, int64_t clusterId, in
};
switch
(
connType
)
{
case
CONN_TYPE__QUERY
:
{
case
CONN_TYPE__QUERY
:
case
CONN_TYPE__TMQ
:
return
hbRegisterConnImpl
(
pAppHbMgr
,
connKey
,
clusterId
);
}
case
CONN_TYPE__TMQ
:
{
return
0
;
}
default:
return
0
;
}
...
...
source/client/src/tmq.c
浏览文件 @
bb58ec1e
...
...
@@ -55,8 +55,11 @@ struct tmq_conf_t {
int8_t
autoCommit
;
int8_t
resetOffset
;
int8_t
withTbName
;
int8_t
spEnable
;
int32_t
spBatchSize
;
int8_t
ssEnable
;
int32_t
ssBatchSize
;
bool
hbBgEnable
;
uint16_t
port
;
int32_t
autoCommitInterval
;
char
*
ip
;
...
...
@@ -76,6 +79,9 @@ struct tmq_t {
int32_t
autoCommitInterval
;
int32_t
resetOffsetCfg
;
int64_t
consumerId
;
bool
hbBgEnable
;
tmq_commit_cb
*
commitCb
;
void
*
commitCbUserParam
;
...
...
@@ -89,7 +95,8 @@ struct tmq_t {
int64_t
pollCnt
;
// timer
tmr_h
hbTimer
;
tmr_h
hbLiveTimer
;
tmr_h
epTimer
;
tmr_h
reportTimer
;
tmr_h
commitTimer
;
...
...
@@ -124,7 +131,7 @@ enum {
};
enum
{
TMQ_DELAYED_TASK__
HB
=
1
,
TMQ_DELAYED_TASK__
ASK_EP
=
1
,
TMQ_DELAYED_TASK__REPORT
,
TMQ_DELAYED_TASK__COMMIT
,
};
...
...
@@ -297,18 +304,31 @@ tmq_conf_res_t tmq_conf_set(tmq_conf_t* conf, const char* key, const char* value
if
(
strcmp
(
key
,
"experimental.snapshot.enable"
)
==
0
)
{
if
(
strcmp
(
value
,
"true"
)
==
0
)
{
conf
->
spEnable
=
true
;
conf
->
ssEnable
=
true
;
return
TMQ_CONF_OK
;
}
else
if
(
strcmp
(
value
,
"false"
)
==
0
)
{
conf
->
ssEnable
=
false
;
return
TMQ_CONF_OK
;
}
else
{
return
TMQ_CONF_INVALID
;
}
}
if
(
strcmp
(
key
,
"enable.heartbeat.background"
)
==
0
)
{
if
(
strcmp
(
value
,
"true"
)
==
0
)
{
conf
->
hbBgEnable
=
true
;
return
TMQ_CONF_OK
;
}
else
if
(
strcmp
(
value
,
"false"
)
==
0
)
{
conf
->
sp
Enable
=
false
;
conf
->
hbBg
Enable
=
false
;
return
TMQ_CONF_OK
;
}
else
{
return
TMQ_CONF_INVALID
;
}
return
TMQ_CONF_OK
;
}
if
(
strcmp
(
key
,
"experimental.snapshot.batch.size"
)
==
0
)
{
conf
->
s
p
BatchSize
=
atoi
(
value
);
conf
->
s
s
BatchSize
=
atoi
(
value
);
return
TMQ_CONF_OK
;
}
...
...
@@ -757,10 +777,10 @@ END:
}
#endif
void
tmqAssign
DelayedHb
Task
(
void
*
param
,
void
*
tmrId
)
{
void
tmqAssign
AskEp
Task
(
void
*
param
,
void
*
tmrId
)
{
tmq_t
*
tmq
=
(
tmq_t
*
)
param
;
int8_t
*
pTaskType
=
taosAllocateQitem
(
sizeof
(
int8_t
),
DEF_QITEM
);
*
pTaskType
=
TMQ_DELAYED_TASK__
HB
;
*
pTaskType
=
TMQ_DELAYED_TASK__
ASK_EP
;
taosWriteQitem
(
tmq
->
delayedTask
,
pTaskType
);
tsem_post
(
&
tmq
->
rspSem
);
}
...
...
@@ -781,6 +801,46 @@ void tmqAssignDelayedReportTask(void* param, void* tmrId) {
tsem_post
(
&
tmq
->
rspSem
);
}
int32_t
tmqHbCb
(
void
*
param
,
SDataBuf
*
pMsg
,
int32_t
code
)
{
if
(
pMsg
&&
pMsg
->
pData
)
taosMemoryFree
(
pMsg
->
pData
);
return
0
;
}
void
tmqSendHbReq
(
void
*
param
,
void
*
tmrId
)
{
// TODO replace with ref
tmq_t
*
tmq
=
(
tmq_t
*
)
param
;
int64_t
consumerId
=
tmq
->
consumerId
;
int32_t
epoch
=
tmq
->
epoch
;
SMqHbReq
*
pReq
=
taosMemoryMalloc
(
sizeof
(
SMqHbReq
));
if
(
pReq
==
NULL
)
goto
OVER
;
pReq
->
consumerId
=
consumerId
;
pReq
->
epoch
=
epoch
;
SMsgSendInfo
*
sendInfo
=
taosMemoryCalloc
(
1
,
sizeof
(
SMsgSendInfo
));
if
(
sendInfo
==
NULL
)
{
taosMemoryFree
(
pReq
);
}
sendInfo
->
msgInfo
=
(
SDataBuf
){
.
pData
=
pReq
,
.
len
=
sizeof
(
SMqHbReq
),
.
handle
=
NULL
,
};
sendInfo
->
requestId
=
generateRequestId
();
sendInfo
->
requestObjRefId
=
0
;
sendInfo
->
param
=
NULL
;
sendInfo
->
fp
=
tmqHbCb
;
sendInfo
->
msgType
=
TDMT_MND_MQ_HB
;
SEpSet
epSet
=
getEpSet_s
(
&
tmq
->
pTscObj
->
pAppInfo
->
mgmtEp
);
int64_t
transporterId
=
0
;
asyncSendMsgToServer
(
tmq
->
pTscObj
->
pAppInfo
->
pTransporter
,
&
epSet
,
&
transporterId
,
sendInfo
);
OVER:
taosTmrReset
(
tmqSendHbReq
,
1000
,
tmq
,
tmqMgmt
.
timer
,
&
tmq
->
hbLiveTimer
);
}
int32_t
tmqHandleAllDelayedTask
(
tmq_t
*
tmq
)
{
STaosQall
*
qall
=
taosAllocateQall
();
taosReadAllQitems
(
tmq
->
delayedTask
,
qall
);
...
...
@@ -789,9 +849,9 @@ int32_t tmqHandleAllDelayedTask(tmq_t* tmq) {
taosGetQitem
(
qall
,
(
void
**
)
&
pTaskType
);
if
(
pTaskType
==
NULL
)
break
;
if
(
*
pTaskType
==
TMQ_DELAYED_TASK__
HB
)
{
if
(
*
pTaskType
==
TMQ_DELAYED_TASK__
ASK_EP
)
{
tmqAskEp
(
tmq
,
true
);
taosTmrReset
(
tmqAssign
DelayedHbTask
,
1000
,
tmq
,
tmqMgmt
.
timer
,
&
tmq
->
hb
Timer
);
taosTmrReset
(
tmqAssign
AskEpTask
,
1000
,
tmq
,
tmqMgmt
.
timer
,
&
tmq
->
ep
Timer
);
}
else
if
(
*
pTaskType
==
TMQ_DELAYED_TASK__COMMIT
)
{
tmqCommitInner2
(
tmq
,
NULL
,
1
,
1
,
tmq
->
commitCb
,
tmq
->
commitCbUserParam
);
taosTmrReset
(
tmqAssignDelayedCommitTask
,
tmq
->
autoCommitInterval
,
tmq
,
tmqMgmt
.
timer
,
&
tmq
->
commitTimer
);
...
...
@@ -935,13 +995,15 @@ tmq_t* tmq_consumer_new(tmq_conf_t* conf, char* errstr, int32_t errstrLen) {
strcpy
(
pTmq
->
clientId
,
conf
->
clientId
);
strcpy
(
pTmq
->
groupId
,
conf
->
groupId
);
pTmq
->
withTbName
=
conf
->
withTbName
;
pTmq
->
useSnapshot
=
conf
->
s
p
Enable
;
pTmq
->
useSnapshot
=
conf
->
s
s
Enable
;
pTmq
->
autoCommit
=
conf
->
autoCommit
;
pTmq
->
autoCommitInterval
=
conf
->
autoCommitInterval
;
pTmq
->
commitCb
=
conf
->
commitCb
;
pTmq
->
commitCbUserParam
=
conf
->
commitCbUserParam
;
pTmq
->
resetOffsetCfg
=
conf
->
resetOffset
;
pTmq
->
hbBgEnable
=
conf
->
hbBgEnable
;
// assign consumerId
pTmq
->
consumerId
=
tGenIdPI64
();
...
...
@@ -959,6 +1021,10 @@ tmq_t* tmq_consumer_new(tmq_conf_t* conf, char* errstr, int32_t errstrLen) {
goto
FAIL
;
}
if
(
pTmq
->
hbBgEnable
)
{
pTmq
->
hbLiveTimer
=
taosTmrStart
(
tmqSendHbReq
,
1000
,
pTmq
,
tmqMgmt
.
timer
);
}
tscInfo
(
"consumer %ld is setup, consumer group %s"
,
pTmq
->
consumerId
,
pTmq
->
groupId
);
return
pTmq
;
...
...
@@ -1055,9 +1121,9 @@ int32_t tmq_subscribe(tmq_t* tmq, const tmq_list_t* topic_list) {
taosMsleep
(
500
);
}
// init
hb
timer
if
(
tmq
->
hb
Timer
==
NULL
)
{
tmq
->
hbTimer
=
taosTmrStart
(
tmqAssignDelayedHb
Task
,
1000
,
tmq
,
tmqMgmt
.
timer
);
// init
ep
timer
if
(
tmq
->
ep
Timer
==
NULL
)
{
tmq
->
epTimer
=
taosTmrStart
(
tmqAssignAskEp
Task
,
1000
,
tmq
,
tmqMgmt
.
timer
);
}
// init auto commit timer
...
...
@@ -1858,9 +1924,9 @@ const char* tmq_get_table_name(TAOS_RES* res) {
return
NULL
;
}
tmq_raw_data
*
tmq_get_raw_meta
(
TAOS_RES
*
res
)
{
tmq_raw_data
*
tmq_get_raw_meta
(
TAOS_RES
*
res
)
{
if
(
TD_RES_TMQ_META
(
res
))
{
tmq_raw_data
*
raw
=
taosMemoryCalloc
(
1
,
sizeof
(
tmq_raw_data
));
tmq_raw_data
*
raw
=
taosMemoryCalloc
(
1
,
sizeof
(
tmq_raw_data
));
SMqMetaRspObj
*
pMetaRspObj
=
(
SMqMetaRspObj
*
)
res
;
raw
->
raw_meta
=
pMetaRspObj
->
metaRsp
.
metaRsp
;
raw
->
raw_meta_len
=
pMetaRspObj
->
metaRsp
.
metaRspLen
;
...
...
@@ -1870,7 +1936,8 @@ tmq_raw_data *tmq_get_raw_meta(TAOS_RES* res) {
return
NULL
;
}
static
char
*
buildCreateTableJson
(
SSchemaWrapper
*
schemaRow
,
SSchemaWrapper
*
schemaTag
,
char
*
name
,
int64_t
id
,
int8_t
t
){
static
char
*
buildCreateTableJson
(
SSchemaWrapper
*
schemaRow
,
SSchemaWrapper
*
schemaTag
,
char
*
name
,
int64_t
id
,
int8_t
t
)
{
char
*
string
=
NULL
;
cJSON
*
json
=
cJSON_CreateObject
();
if
(
json
==
NULL
)
{
...
...
@@ -1879,31 +1946,31 @@ static char *buildCreateTableJson(SSchemaWrapper *schemaRow, SSchemaWrapper* sch
cJSON
*
type
=
cJSON_CreateString
(
"create"
);
cJSON_AddItemToObject
(
json
,
"type"
,
type
);
// char uid[32] = {0};
// sprintf(uid, "%"PRIi64, id);
// cJSON* id_ = cJSON_CreateString(uid);
// cJSON_AddItemToObject(json, "id", id_);
// char uid[32] = {0};
// sprintf(uid, "%"PRIi64, id);
// cJSON* id_ = cJSON_CreateString(uid);
// cJSON_AddItemToObject(json, "id", id_);
cJSON
*
tableName
=
cJSON_CreateString
(
name
);
cJSON_AddItemToObject
(
json
,
"tableName"
,
tableName
);
cJSON
*
tableType
=
cJSON_CreateString
(
t
==
TSDB_NORMAL_TABLE
?
"normal"
:
"super"
);
cJSON_AddItemToObject
(
json
,
"tableType"
,
tableType
);
// cJSON* version = cJSON_CreateNumber(1);
// cJSON_AddItemToObject(json, "version", version);
// cJSON* version = cJSON_CreateNumber(1);
// cJSON_AddItemToObject(json, "version", version);
cJSON
*
columns
=
cJSON_CreateArray
();
for
(
int
i
=
0
;
i
<
schemaRow
->
nCols
;
i
++
)
{
for
(
int
i
=
0
;
i
<
schemaRow
->
nCols
;
i
++
)
{
cJSON
*
column
=
cJSON_CreateObject
();
SSchema
*
s
=
schemaRow
->
pSchema
+
i
;
SSchema
*
s
=
schemaRow
->
pSchema
+
i
;
cJSON
*
cname
=
cJSON_CreateString
(
s
->
name
);
cJSON_AddItemToObject
(
column
,
"name"
,
cname
);
cJSON
*
ctype
=
cJSON_CreateNumber
(
s
->
type
);
cJSON_AddItemToObject
(
column
,
"type"
,
ctype
);
if
(
s
->
type
==
TSDB_DATA_TYPE_BINARY
)
{
if
(
s
->
type
==
TSDB_DATA_TYPE_BINARY
)
{
int32_t
length
=
s
->
bytes
-
VARSTR_HEADER_SIZE
;
cJSON
*
cbytes
=
cJSON_CreateNumber
(
length
);
cJSON_AddItemToObject
(
column
,
"length"
,
cbytes
);
}
else
if
(
s
->
type
==
TSDB_DATA_TYPE_NCHAR
)
{
int32_t
length
=
(
s
->
bytes
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
;
}
else
if
(
s
->
type
==
TSDB_DATA_TYPE_NCHAR
)
{
int32_t
length
=
(
s
->
bytes
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
;
cJSON
*
cbytes
=
cJSON_CreateNumber
(
length
);
cJSON_AddItemToObject
(
column
,
"length"
,
cbytes
);
}
...
...
@@ -1912,19 +1979,19 @@ static char *buildCreateTableJson(SSchemaWrapper *schemaRow, SSchemaWrapper* sch
cJSON_AddItemToObject
(
json
,
"columns"
,
columns
);
cJSON
*
tags
=
cJSON_CreateArray
();
for
(
int
i
=
0
;
schemaTag
&&
i
<
schemaTag
->
nCols
;
i
++
)
{
for
(
int
i
=
0
;
schemaTag
&&
i
<
schemaTag
->
nCols
;
i
++
)
{
cJSON
*
tag
=
cJSON_CreateObject
();
SSchema
*
s
=
schemaTag
->
pSchema
+
i
;
SSchema
*
s
=
schemaTag
->
pSchema
+
i
;
cJSON
*
tname
=
cJSON_CreateString
(
s
->
name
);
cJSON_AddItemToObject
(
tag
,
"name"
,
tname
);
cJSON
*
ttype
=
cJSON_CreateNumber
(
s
->
type
);
cJSON_AddItemToObject
(
tag
,
"type"
,
ttype
);
if
(
s
->
type
==
TSDB_DATA_TYPE_BINARY
)
{
if
(
s
->
type
==
TSDB_DATA_TYPE_BINARY
)
{
int32_t
length
=
s
->
bytes
-
VARSTR_HEADER_SIZE
;
cJSON
*
cbytes
=
cJSON_CreateNumber
(
length
);
cJSON_AddItemToObject
(
tag
,
"length"
,
cbytes
);
}
else
if
(
s
->
type
==
TSDB_DATA_TYPE_NCHAR
)
{
int32_t
length
=
(
s
->
bytes
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
;
}
else
if
(
s
->
type
==
TSDB_DATA_TYPE_NCHAR
)
{
int32_t
length
=
(
s
->
bytes
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
;
cJSON
*
cbytes
=
cJSON_CreateNumber
(
length
);
cJSON_AddItemToObject
(
tag
,
"length"
,
cbytes
);
}
...
...
@@ -1937,7 +2004,7 @@ static char *buildCreateTableJson(SSchemaWrapper *schemaRow, SSchemaWrapper* sch
return
string
;
}
static
char
*
buildAlterSTableJson
(
void
*
alterData
,
int32_t
alterDataLen
)
{
static
char
*
buildAlterSTableJson
(
void
*
alterData
,
int32_t
alterDataLen
)
{
SMAlterStbReq
req
=
{
0
};
cJSON
*
json
=
NULL
;
char
*
string
=
NULL
;
...
...
@@ -1952,8 +2019,8 @@ static char *buildAlterSTableJson(void* alterData, int32_t alterDataLen){
}
cJSON
*
type
=
cJSON_CreateString
(
"alter"
);
cJSON_AddItemToObject
(
json
,
"type"
,
type
);
// cJSON* uid = cJSON_CreateNumber(id);
// cJSON_AddItemToObject(json, "uid", uid);
// cJSON* uid = cJSON_CreateNumber(id);
// cJSON_AddItemToObject(json, "uid", uid);
SName
name
=
{
0
};
tNameFromString
(
&
name
,
req
.
name
,
T_NAME_ACCT
|
T_NAME_DB
|
T_NAME_TABLE
);
cJSON
*
tableName
=
cJSON_CreateString
(
name
.
tname
);
...
...
@@ -1966,52 +2033,52 @@ static char *buildAlterSTableJson(void* alterData, int32_t alterDataLen){
switch
(
req
.
alterType
)
{
case
TSDB_ALTER_TABLE_ADD_TAG
:
case
TSDB_ALTER_TABLE_ADD_COLUMN
:
{
TAOS_FIELD
*
field
=
taosArrayGet
(
req
.
pFields
,
0
);
TAOS_FIELD
*
field
=
taosArrayGet
(
req
.
pFields
,
0
);
cJSON
*
colName
=
cJSON_CreateString
(
field
->
name
);
cJSON_AddItemToObject
(
json
,
"colName"
,
colName
);
cJSON
*
colType
=
cJSON_CreateNumber
(
field
->
type
);
cJSON_AddItemToObject
(
json
,
"colType"
,
colType
);
if
(
field
->
type
==
TSDB_DATA_TYPE_BINARY
)
{
if
(
field
->
type
==
TSDB_DATA_TYPE_BINARY
)
{
int32_t
length
=
field
->
bytes
-
VARSTR_HEADER_SIZE
;
cJSON
*
cbytes
=
cJSON_CreateNumber
(
length
);
cJSON_AddItemToObject
(
json
,
"colLength"
,
cbytes
);
}
else
if
(
field
->
type
==
TSDB_DATA_TYPE_NCHAR
)
{
int32_t
length
=
(
field
->
bytes
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
;
}
else
if
(
field
->
type
==
TSDB_DATA_TYPE_NCHAR
)
{
int32_t
length
=
(
field
->
bytes
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
;
cJSON
*
cbytes
=
cJSON_CreateNumber
(
length
);
cJSON_AddItemToObject
(
json
,
"colLength"
,
cbytes
);
}
break
;
}
case
TSDB_ALTER_TABLE_DROP_TAG
:
case
TSDB_ALTER_TABLE_DROP_COLUMN
:{
TAOS_FIELD
*
field
=
taosArrayGet
(
req
.
pFields
,
0
);
case
TSDB_ALTER_TABLE_DROP_COLUMN
:
{
TAOS_FIELD
*
field
=
taosArrayGet
(
req
.
pFields
,
0
);
cJSON
*
colName
=
cJSON_CreateString
(
field
->
name
);
cJSON_AddItemToObject
(
json
,
"colName"
,
colName
);
break
;
}
case
TSDB_ALTER_TABLE_UPDATE_TAG_BYTES
:
case
TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES
:{
TAOS_FIELD
*
field
=
taosArrayGet
(
req
.
pFields
,
0
);
case
TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES
:
{
TAOS_FIELD
*
field
=
taosArrayGet
(
req
.
pFields
,
0
);
cJSON
*
colName
=
cJSON_CreateString
(
field
->
name
);
cJSON_AddItemToObject
(
json
,
"colName"
,
colName
);
cJSON
*
colType
=
cJSON_CreateNumber
(
field
->
type
);
cJSON_AddItemToObject
(
json
,
"colType"
,
colType
);
if
(
field
->
type
==
TSDB_DATA_TYPE_BINARY
)
{
if
(
field
->
type
==
TSDB_DATA_TYPE_BINARY
)
{
int32_t
length
=
field
->
bytes
-
VARSTR_HEADER_SIZE
;
cJSON
*
cbytes
=
cJSON_CreateNumber
(
length
);
cJSON_AddItemToObject
(
json
,
"colLength"
,
cbytes
);
}
else
if
(
field
->
type
==
TSDB_DATA_TYPE_NCHAR
)
{
int32_t
length
=
(
field
->
bytes
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
;
}
else
if
(
field
->
type
==
TSDB_DATA_TYPE_NCHAR
)
{
int32_t
length
=
(
field
->
bytes
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
;
cJSON
*
cbytes
=
cJSON_CreateNumber
(
length
);
cJSON_AddItemToObject
(
json
,
"colLength"
,
cbytes
);
}
break
;
}
case
TSDB_ALTER_TABLE_UPDATE_TAG_NAME
:
case
TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME
:{
TAOS_FIELD
*
oldField
=
taosArrayGet
(
req
.
pFields
,
0
);
TAOS_FIELD
*
newField
=
taosArrayGet
(
req
.
pFields
,
1
);
case
TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME
:
{
TAOS_FIELD
*
oldField
=
taosArrayGet
(
req
.
pFields
,
0
);
TAOS_FIELD
*
newField
=
taosArrayGet
(
req
.
pFields
,
1
);
cJSON
*
colName
=
cJSON_CreateString
(
oldField
->
name
);
cJSON_AddItemToObject
(
json
,
"colName"
,
colName
);
cJSON
*
colNewName
=
cJSON_CreateString
(
newField
->
name
);
...
...
@@ -2023,13 +2090,13 @@ static char *buildAlterSTableJson(void* alterData, int32_t alterDataLen){
}
string
=
cJSON_PrintUnformatted
(
json
);
end:
end:
cJSON_Delete
(
json
);
tFreeSMAltertbReq
(
&
req
);
return
string
;
}
static
char
*
processCreateStb
(
SMqMetaRsp
*
metaRsp
)
{
static
char
*
processCreateStb
(
SMqMetaRsp
*
metaRsp
)
{
SVCreateStbReq
req
=
{
0
};
SDecoder
coder
;
char
*
string
=
NULL
;
...
...
@@ -2046,12 +2113,12 @@ static char *processCreateStb(SMqMetaRsp *metaRsp){
tDecoderClear
(
&
coder
);
return
string
;
_err:
_err:
tDecoderClear
(
&
coder
);
return
string
;
}
static
char
*
processAlterStb
(
SMqMetaRsp
*
metaRsp
)
{
static
char
*
processAlterStb
(
SMqMetaRsp
*
metaRsp
)
{
SVCreateStbReq
req
=
{
0
};
SDecoder
coder
;
char
*
string
=
NULL
;
...
...
@@ -2068,12 +2135,12 @@ static char *processAlterStb(SMqMetaRsp *metaRsp){
tDecoderClear
(
&
coder
);
return
string
;
_err:
_err:
tDecoderClear
(
&
coder
);
return
string
;
}
static
char
*
buildCreateCTableJson
(
STag
*
pTag
,
char
*
sname
,
char
*
name
,
SArray
*
tagName
,
int64_t
id
)
{
static
char
*
buildCreateCTableJson
(
STag
*
pTag
,
char
*
sname
,
char
*
name
,
SArray
*
tagName
,
int64_t
id
)
{
char
*
string
=
NULL
;
SArray
*
pTagVals
=
NULL
;
cJSON
*
json
=
cJSON_CreateObject
();
...
...
@@ -2082,10 +2149,10 @@ static char *buildCreateCTableJson(STag* pTag, char* sname, char* name, SArray*
}
cJSON
*
type
=
cJSON_CreateString
(
"create"
);
cJSON_AddItemToObject
(
json
,
"type"
,
type
);
// char cid[32] = {0};
// sprintf(cid, "%"PRIi64, id);
// cJSON* cid_ = cJSON_CreateString(cid);
// cJSON_AddItemToObject(json, "id", cid_);
// char cid[32] = {0};
// sprintf(cid, "%"PRIi64, id);
// cJSON* cid_ = cJSON_CreateString(cid);
// cJSON_AddItemToObject(json, "id", cid_);
cJSON
*
tableName
=
cJSON_CreateString
(
name
);
cJSON_AddItemToObject
(
json
,
"tableName"
,
tableName
);
...
...
@@ -2093,8 +2160,8 @@ static char *buildCreateCTableJson(STag* pTag, char* sname, char* name, SArray*
cJSON_AddItemToObject
(
json
,
"tableType"
,
tableType
);
cJSON
*
using
=
cJSON_CreateString
(
sname
);
cJSON_AddItemToObject
(
json
,
"using"
,
using
);
// cJSON* version = cJSON_CreateNumber(1);
// cJSON_AddItemToObject(json, "version", version);
// cJSON* version = cJSON_CreateNumber(1);
// cJSON_AddItemToObject(json, "version", version);
cJSON
*
tags
=
cJSON_CreateArray
();
int32_t
code
=
tTagToValArray
(
pTag
,
&
pTagVals
);
...
...
@@ -2104,7 +2171,7 @@ static char *buildCreateCTableJson(STag* pTag, char* sname, char* name, SArray*
if
(
tTagIsJson
(
pTag
))
{
STag
*
p
=
(
STag
*
)
pTag
;
if
(
p
->
nTag
==
0
)
{
if
(
p
->
nTag
==
0
)
{
goto
end
;
}
char
*
pJson
=
parseTagDatatoJson
(
pTag
);
...
...
@@ -2114,8 +2181,8 @@ static char *buildCreateCTableJson(STag* pTag, char* sname, char* name, SArray*
char
*
ptname
=
taosArrayGet
(
tagName
,
0
);
cJSON
*
tname
=
cJSON_CreateString
(
ptname
);
cJSON_AddItemToObject
(
tag
,
"name"
,
tname
);
// cJSON* cid_ = cJSON_CreateString("");
// cJSON_AddItemToObject(tag, "cid", cid_);
// cJSON* cid_ = cJSON_CreateString("");
// cJSON_AddItemToObject(tag, "cid", cid_);
cJSON
*
ttype
=
cJSON_CreateNumber
(
TSDB_DATA_TYPE_JSON
);
cJSON_AddItemToObject
(
tag
,
"type"
,
ttype
);
cJSON
*
tvalue
=
cJSON_CreateString
(
pJson
);
...
...
@@ -2125,7 +2192,7 @@ static char *buildCreateCTableJson(STag* pTag, char* sname, char* name, SArray*
goto
end
;
}
for
(
int
i
=
0
;
i
<
taosArrayGetSize
(
pTagVals
);
i
++
)
{
for
(
int
i
=
0
;
i
<
taosArrayGetSize
(
pTagVals
);
i
++
)
{
STagVal
*
pTagVal
=
(
STagVal
*
)
taosArrayGet
(
pTagVals
,
i
);
cJSON
*
tag
=
cJSON_CreateObject
();
...
...
@@ -2133,8 +2200,8 @@ static char *buildCreateCTableJson(STag* pTag, char* sname, char* name, SArray*
char
*
ptname
=
taosArrayGet
(
tagName
,
i
);
cJSON
*
tname
=
cJSON_CreateString
(
ptname
);
cJSON_AddItemToObject
(
tag
,
"name"
,
tname
);
// cJSON* cid = cJSON_CreateNumber(pTagVal->cid);
// cJSON_AddItemToObject(tag, "cid", cid);
// cJSON* cid = cJSON_CreateNumber(pTagVal->cid);
// cJSON_AddItemToObject(tag, "cid", cid);
cJSON
*
ttype
=
cJSON_CreateNumber
(
pTagVal
->
type
);
cJSON_AddItemToObject
(
tag
,
"type"
,
ttype
);
...
...
@@ -2153,7 +2220,7 @@ static char *buildCreateCTableJson(STag* pTag, char* sname, char* name, SArray*
cJSON_AddItemToArray
(
tags
,
tag
);
}
end:
end:
cJSON_AddItemToObject
(
json
,
"tags"
,
tags
);
string
=
cJSON_PrintUnformatted
(
json
);
cJSON_Delete
(
json
);
...
...
@@ -2161,11 +2228,11 @@ static char *buildCreateCTableJson(STag* pTag, char* sname, char* name, SArray*
return
string
;
}
static
char
*
processCreateTable
(
SMqMetaRsp
*
metaRsp
)
{
static
char
*
processCreateTable
(
SMqMetaRsp
*
metaRsp
)
{
SDecoder
decoder
=
{
0
};
SVCreateTbBatchReq
req
=
{
0
};
SVCreateTbReq
*
pCreateReq
;
char
*
string
=
NULL
;
SVCreateTbReq
*
pCreateReq
;
char
*
string
=
NULL
;
// decode
void
*
data
=
POINTER_SHIFT
(
metaRsp
->
metaRsp
,
sizeof
(
SMsgHead
));
int32_t
len
=
metaRsp
->
metaRspLen
-
sizeof
(
SMsgHead
);
...
...
@@ -2177,24 +2244,26 @@ static char *processCreateTable(SMqMetaRsp *metaRsp){
// loop to create table
for
(
int32_t
iReq
=
0
;
iReq
<
req
.
nReqs
;
iReq
++
)
{
pCreateReq
=
req
.
pReqs
+
iReq
;
if
(
pCreateReq
->
type
==
TSDB_CHILD_TABLE
){
string
=
buildCreateCTableJson
((
STag
*
)
pCreateReq
->
ctb
.
pTag
,
pCreateReq
->
ctb
.
name
,
pCreateReq
->
name
,
pCreateReq
->
ctb
.
tagName
,
pCreateReq
->
uid
);
}
else
if
(
pCreateReq
->
type
==
TSDB_NORMAL_TABLE
){
string
=
buildCreateTableJson
(
&
pCreateReq
->
ntb
.
schemaRow
,
NULL
,
pCreateReq
->
name
,
pCreateReq
->
uid
,
TSDB_NORMAL_TABLE
);
if
(
pCreateReq
->
type
==
TSDB_CHILD_TABLE
)
{
string
=
buildCreateCTableJson
((
STag
*
)
pCreateReq
->
ctb
.
pTag
,
pCreateReq
->
ctb
.
name
,
pCreateReq
->
name
,
pCreateReq
->
ctb
.
tagName
,
pCreateReq
->
uid
);
}
else
if
(
pCreateReq
->
type
==
TSDB_NORMAL_TABLE
)
{
string
=
buildCreateTableJson
(
&
pCreateReq
->
ntb
.
schemaRow
,
NULL
,
pCreateReq
->
name
,
pCreateReq
->
uid
,
TSDB_NORMAL_TABLE
);
}
}
tDecoderClear
(
&
decoder
);
_exit:
_exit:
tDecoderClear
(
&
decoder
);
return
string
;
}
static
char
*
processAlterTable
(
SMqMetaRsp
*
metaRsp
)
{
static
char
*
processAlterTable
(
SMqMetaRsp
*
metaRsp
)
{
SDecoder
decoder
=
{
0
};
SVAlterTbReq
vAlterTbReq
=
{
0
};
char
*
string
=
NULL
;
char
*
string
=
NULL
;
// decode
void
*
data
=
POINTER_SHIFT
(
metaRsp
->
metaRsp
,
sizeof
(
SMsgHead
));
...
...
@@ -2210,8 +2279,8 @@ static char *processAlterTable(SMqMetaRsp *metaRsp){
}
cJSON
*
type
=
cJSON_CreateString
(
"alter"
);
cJSON_AddItemToObject
(
json
,
"type"
,
type
);
// cJSON* uid = cJSON_CreateNumber(id);
// cJSON_AddItemToObject(json, "uid", uid);
// cJSON* uid = cJSON_CreateNumber(id);
// cJSON_AddItemToObject(json, "uid", uid);
cJSON
*
tableName
=
cJSON_CreateString
(
vAlterTbReq
.
tbName
);
cJSON_AddItemToObject
(
json
,
"tableName"
,
tableName
);
cJSON
*
tableType
=
cJSON_CreateString
(
vAlterTbReq
.
action
==
TSDB_ALTER_TABLE_UPDATE_TAG_VAL
?
"child"
:
"normal"
);
...
...
@@ -2226,55 +2295,55 @@ static char *processAlterTable(SMqMetaRsp *metaRsp){
cJSON
*
colType
=
cJSON_CreateNumber
(
vAlterTbReq
.
type
);
cJSON_AddItemToObject
(
json
,
"colType"
,
colType
);
if
(
vAlterTbReq
.
type
==
TSDB_DATA_TYPE_BINARY
)
{
if
(
vAlterTbReq
.
type
==
TSDB_DATA_TYPE_BINARY
)
{
int32_t
length
=
vAlterTbReq
.
bytes
-
VARSTR_HEADER_SIZE
;
cJSON
*
cbytes
=
cJSON_CreateNumber
(
length
);
cJSON_AddItemToObject
(
json
,
"colLength"
,
cbytes
);
}
else
if
(
vAlterTbReq
.
type
==
TSDB_DATA_TYPE_NCHAR
)
{
int32_t
length
=
(
vAlterTbReq
.
bytes
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
;
}
else
if
(
vAlterTbReq
.
type
==
TSDB_DATA_TYPE_NCHAR
)
{
int32_t
length
=
(
vAlterTbReq
.
bytes
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
;
cJSON
*
cbytes
=
cJSON_CreateNumber
(
length
);
cJSON_AddItemToObject
(
json
,
"colLength"
,
cbytes
);
}
break
;
}
case
TSDB_ALTER_TABLE_DROP_COLUMN
:{
case
TSDB_ALTER_TABLE_DROP_COLUMN
:
{
cJSON
*
colName
=
cJSON_CreateString
(
vAlterTbReq
.
colName
);
cJSON_AddItemToObject
(
json
,
"colName"
,
colName
);
break
;
}
case
TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES
:{
case
TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES
:
{
cJSON
*
colName
=
cJSON_CreateString
(
vAlterTbReq
.
colName
);
cJSON_AddItemToObject
(
json
,
"colName"
,
colName
);
cJSON
*
colType
=
cJSON_CreateNumber
(
vAlterTbReq
.
colModType
);
cJSON_AddItemToObject
(
json
,
"colType"
,
colType
);
if
(
vAlterTbReq
.
colModType
==
TSDB_DATA_TYPE_BINARY
)
{
if
(
vAlterTbReq
.
colModType
==
TSDB_DATA_TYPE_BINARY
)
{
int32_t
length
=
vAlterTbReq
.
colModBytes
-
VARSTR_HEADER_SIZE
;
cJSON
*
cbytes
=
cJSON_CreateNumber
(
length
);
cJSON_AddItemToObject
(
json
,
"colLength"
,
cbytes
);
}
else
if
(
vAlterTbReq
.
colModType
==
TSDB_DATA_TYPE_NCHAR
)
{
int32_t
length
=
(
vAlterTbReq
.
colModBytes
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
;
}
else
if
(
vAlterTbReq
.
colModType
==
TSDB_DATA_TYPE_NCHAR
)
{
int32_t
length
=
(
vAlterTbReq
.
colModBytes
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
;
cJSON
*
cbytes
=
cJSON_CreateNumber
(
length
);
cJSON_AddItemToObject
(
json
,
"colLength"
,
cbytes
);
}
break
;
}
case
TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME
:{
case
TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME
:
{
cJSON
*
colName
=
cJSON_CreateString
(
vAlterTbReq
.
colName
);
cJSON_AddItemToObject
(
json
,
"colName"
,
colName
);
cJSON
*
colNewName
=
cJSON_CreateString
(
vAlterTbReq
.
colNewName
);
cJSON_AddItemToObject
(
json
,
"colNewName"
,
colNewName
);
break
;
}
case
TSDB_ALTER_TABLE_UPDATE_TAG_VAL
:{
case
TSDB_ALTER_TABLE_UPDATE_TAG_VAL
:
{
cJSON
*
tagName
=
cJSON_CreateString
(
vAlterTbReq
.
tagName
);
cJSON_AddItemToObject
(
json
,
"colName"
,
tagName
);
bool
isNull
=
vAlterTbReq
.
isNull
;
if
(
vAlterTbReq
.
tagType
==
TSDB_DATA_TYPE_JSON
)
{
STag
*
jsonTag
=
(
STag
*
)
vAlterTbReq
.
pTagVal
;
if
(
jsonTag
->
nTag
==
0
)
isNull
=
true
;
if
(
vAlterTbReq
.
tagType
==
TSDB_DATA_TYPE_JSON
)
{
STag
*
jsonTag
=
(
STag
*
)
vAlterTbReq
.
pTagVal
;
if
(
jsonTag
->
nTag
==
0
)
isNull
=
true
;
}
if
(
!
isNull
){
if
(
!
isNull
)
{
char
*
buf
=
NULL
;
if
(
vAlterTbReq
.
tagType
==
TSDB_DATA_TYPE_JSON
)
{
...
...
@@ -2299,15 +2368,15 @@ static char *processAlterTable(SMqMetaRsp *metaRsp){
}
string
=
cJSON_PrintUnformatted
(
json
);
_exit:
_exit:
tDecoderClear
(
&
decoder
);
return
string
;
}
static
char
*
processDropSTable
(
SMqMetaRsp
*
metaRsp
)
{
static
char
*
processDropSTable
(
SMqMetaRsp
*
metaRsp
)
{
SDecoder
decoder
=
{
0
};
SVDropStbReq
req
=
{
0
};
char
*
string
=
NULL
;
char
*
string
=
NULL
;
// decode
void
*
data
=
POINTER_SHIFT
(
metaRsp
->
metaRsp
,
sizeof
(
SMsgHead
));
...
...
@@ -2330,15 +2399,15 @@ static char *processDropSTable(SMqMetaRsp *metaRsp){
string
=
cJSON_PrintUnformatted
(
json
);
_exit:
_exit:
tDecoderClear
(
&
decoder
);
return
string
;
}
static
char
*
processDropTable
(
SMqMetaRsp
*
metaRsp
)
{
static
char
*
processDropTable
(
SMqMetaRsp
*
metaRsp
)
{
SDecoder
decoder
=
{
0
};
SVDropTbBatchReq
req
=
{
0
};
char
*
string
=
NULL
;
char
*
string
=
NULL
;
// decode
void
*
data
=
POINTER_SHIFT
(
metaRsp
->
metaRsp
,
sizeof
(
SMsgHead
));
...
...
@@ -2354,10 +2423,10 @@ static char *processDropTable(SMqMetaRsp *metaRsp){
}
cJSON
*
type
=
cJSON_CreateString
(
"drop"
);
cJSON_AddItemToObject
(
json
,
"type"
,
type
);
// cJSON* uid = cJSON_CreateNumber(id);
// cJSON_AddItemToObject(json, "uid", uid);
// cJSON* tableType = cJSON_CreateString("normal");
// cJSON_AddItemToObject(json, "tableType", tableType);
// cJSON* uid = cJSON_CreateNumber(id);
// cJSON_AddItemToObject(json, "uid", uid);
// cJSON* tableType = cJSON_CreateString("normal");
// cJSON_AddItemToObject(json, "tableType", tableType);
cJSON
*
tableNameList
=
cJSON_CreateArray
();
for
(
int32_t
iReq
=
0
;
iReq
<
req
.
nReqs
;
iReq
++
)
{
...
...
@@ -2370,38 +2439,36 @@ static char *processDropTable(SMqMetaRsp *metaRsp){
string
=
cJSON_PrintUnformatted
(
json
);
_exit:
_exit:
tDecoderClear
(
&
decoder
);
return
string
;
}
char
*
tmq_get_json_meta
(
TAOS_RES
*
res
)
{
char
*
tmq_get_json_meta
(
TAOS_RES
*
res
)
{
if
(
!
TD_RES_TMQ_META
(
res
))
{
return
NULL
;
}
SMqMetaRspObj
*
pMetaRspObj
=
(
SMqMetaRspObj
*
)
res
;
if
(
pMetaRspObj
->
metaRsp
.
resMsgType
==
TDMT_VND_CREATE_STB
)
{
if
(
pMetaRspObj
->
metaRsp
.
resMsgType
==
TDMT_VND_CREATE_STB
)
{
return
processCreateStb
(
&
pMetaRspObj
->
metaRsp
);
}
else
if
(
pMetaRspObj
->
metaRsp
.
resMsgType
==
TDMT_VND_ALTER_STB
)
{
}
else
if
(
pMetaRspObj
->
metaRsp
.
resMsgType
==
TDMT_VND_ALTER_STB
)
{
return
processAlterStb
(
&
pMetaRspObj
->
metaRsp
);
}
else
if
(
pMetaRspObj
->
metaRsp
.
resMsgType
==
TDMT_VND_DROP_STB
)
{
}
else
if
(
pMetaRspObj
->
metaRsp
.
resMsgType
==
TDMT_VND_DROP_STB
)
{
return
processDropSTable
(
&
pMetaRspObj
->
metaRsp
);
}
else
if
(
pMetaRspObj
->
metaRsp
.
resMsgType
==
TDMT_VND_CREATE_TABLE
)
{
}
else
if
(
pMetaRspObj
->
metaRsp
.
resMsgType
==
TDMT_VND_CREATE_TABLE
)
{
return
processCreateTable
(
&
pMetaRspObj
->
metaRsp
);
}
else
if
(
pMetaRspObj
->
metaRsp
.
resMsgType
==
TDMT_VND_ALTER_TABLE
)
{
}
else
if
(
pMetaRspObj
->
metaRsp
.
resMsgType
==
TDMT_VND_ALTER_TABLE
)
{
return
processAlterTable
(
&
pMetaRspObj
->
metaRsp
);
}
else
if
(
pMetaRspObj
->
metaRsp
.
resMsgType
==
TDMT_VND_DROP_TABLE
)
{
}
else
if
(
pMetaRspObj
->
metaRsp
.
resMsgType
==
TDMT_VND_DROP_TABLE
)
{
return
processDropTable
(
&
pMetaRspObj
->
metaRsp
);
}
return
NULL
;
}
void
tmq_free_json_meta
(
char
*
jsonMeta
){
taosMemoryFreeClear
(
jsonMeta
);
}
void
tmq_free_json_meta
(
char
*
jsonMeta
)
{
taosMemoryFreeClear
(
jsonMeta
);
}
static
int32_t
taosCreateStb
(
TAOS
*
taos
,
void
*
meta
,
int32_t
metaLen
)
{
static
int32_t
taosCreateStb
(
TAOS
*
taos
,
void
*
meta
,
int32_t
metaLen
)
{
SVCreateStbReq
req
=
{
0
};
SDecoder
coder
;
SMCreateStbReq
pReq
=
{
0
};
...
...
@@ -2413,7 +2480,7 @@ static int32_t taosCreateStb(TAOS *taos, void *meta, int32_t metaLen){
goto
end
;
}
if
(
!
pRequest
->
pDb
)
{
if
(
!
pRequest
->
pDb
)
{
code
=
TSDB_CODE_PAR_DB_NOT_SPECIFIED
;
goto
end
;
}
...
...
@@ -2427,14 +2494,14 @@ static int32_t taosCreateStb(TAOS *taos, void *meta, int32_t metaLen){
}
// build create stable
pReq
.
pColumns
=
taosArrayInit
(
req
.
schemaRow
.
nCols
,
sizeof
(
SField
));
for
(
int32_t
i
=
0
;
i
<
req
.
schemaRow
.
nCols
;
i
++
)
{
for
(
int32_t
i
=
0
;
i
<
req
.
schemaRow
.
nCols
;
i
++
)
{
SSchema
*
pSchema
=
req
.
schemaRow
.
pSchema
+
i
;
SField
field
=
{.
type
=
pSchema
->
type
,
.
bytes
=
pSchema
->
bytes
};
strcpy
(
field
.
name
,
pSchema
->
name
);
taosArrayPush
(
pReq
.
pColumns
,
&
field
);
}
pReq
.
pTags
=
taosArrayInit
(
req
.
schemaTag
.
nCols
,
sizeof
(
SField
));
for
(
int32_t
i
=
0
;
i
<
req
.
schemaTag
.
nCols
;
i
++
)
{
for
(
int32_t
i
=
0
;
i
<
req
.
schemaTag
.
nCols
;
i
++
)
{
SSchema
*
pSchema
=
req
.
schemaTag
.
pSchema
+
i
;
SField
field
=
{.
type
=
pSchema
->
type
,
.
bytes
=
pSchema
->
bytes
};
strcpy
(
field
.
name
,
pSchema
->
name
);
...
...
@@ -2475,14 +2542,14 @@ static int32_t taosCreateStb(TAOS *taos, void *meta, int32_t metaLen){
code
=
pRequest
->
code
;
taosMemoryFree
(
pCmdMsg
.
pMsg
);
end:
end:
destroyRequest
(
pRequest
);
tFreeSMCreateStbReq
(
&
pReq
);
tDecoderClear
(
&
coder
);
return
code
;
}
static
int32_t
taosDropStb
(
TAOS
*
taos
,
void
*
meta
,
int32_t
metaLen
)
{
static
int32_t
taosDropStb
(
TAOS
*
taos
,
void
*
meta
,
int32_t
metaLen
)
{
SVDropStbReq
req
=
{
0
};
SDecoder
coder
;
SMDropStbReq
pReq
=
{
0
};
...
...
@@ -2494,7 +2561,7 @@ static int32_t taosDropStb(TAOS *taos, void *meta, int32_t metaLen){
goto
end
;
}
if
(
!
pRequest
->
pDb
)
{
if
(
!
pRequest
->
pDb
)
{
code
=
TSDB_CODE_PAR_DB_NOT_SPECIFIED
;
goto
end
;
}
...
...
@@ -2537,7 +2604,7 @@ static int32_t taosDropStb(TAOS *taos, void *meta, int32_t metaLen){
code
=
pRequest
->
code
;
taosMemoryFree
(
pCmdMsg
.
pMsg
);
end:
end:
destroyRequest
(
pRequest
);
tDecoderClear
(
&
coder
);
return
code
;
...
...
@@ -2550,7 +2617,7 @@ typedef struct SVgroupCreateTableBatch {
}
SVgroupCreateTableBatch
;
static
void
destroyCreateTbReqBatch
(
void
*
data
)
{
SVgroupCreateTableBatch
*
pTbBatch
=
(
SVgroupCreateTableBatch
*
)
data
;
SVgroupCreateTableBatch
*
pTbBatch
=
(
SVgroupCreateTableBatch
*
)
data
;
taosArrayDestroy
(
pTbBatch
->
req
.
pArray
);
}
...
...
@@ -2567,8 +2634,7 @@ static int32_t taosCreateTable(TAOS* taos, void* meta, int32_t metaLen) {
goto
end
;
}
if
(
!
pRequest
->
pDb
){
if
(
!
pRequest
->
pDb
)
{
code
=
TSDB_CODE_PAR_DB_NOT_SPECIFIED
;
goto
end
;
}
...
...
@@ -2649,7 +2715,7 @@ static int32_t taosCreateTable(TAOS* taos, void* meta, int32_t metaLen) {
pQuery
=
NULL
;
// no need to free in the end
code
=
pRequest
->
code
;
end:
end:
taosHashCleanup
(
pVgroupHashmap
);
destroyRequest
(
pRequest
);
tDecoderClear
(
&
coder
);
...
...
@@ -2681,7 +2747,7 @@ static int32_t taosDropTable(TAOS* taos, void* meta, int32_t metaLen) {
goto
end
;
}
if
(
!
pRequest
->
pDb
)
{
if
(
!
pRequest
->
pDb
)
{
code
=
TSDB_CODE_PAR_DB_NOT_SPECIFIED
;
goto
end
;
}
...
...
@@ -2761,7 +2827,7 @@ static int32_t taosDropTable(TAOS* taos, void* meta, int32_t metaLen) {
pQuery
=
NULL
;
// no need to free in the end
code
=
pRequest
->
code
;
end:
end:
taosHashCleanup
(
pVgroupHashmap
);
destroyRequest
(
pRequest
);
tDecoderClear
(
&
coder
);
...
...
@@ -2769,22 +2835,22 @@ static int32_t taosDropTable(TAOS* taos, void* meta, int32_t metaLen) {
return
code
;
}
static
int32_t
taosAlterTable
(
TAOS
*
taos
,
void
*
meta
,
int32_t
metaLen
)
{
static
int32_t
taosAlterTable
(
TAOS
*
taos
,
void
*
meta
,
int32_t
metaLen
)
{
SVAlterTbReq
req
=
{
0
};
SDecoder
coder
=
{
0
};
int32_t
code
=
TSDB_CODE_SUCCESS
;
SRequestObj
*
pRequest
=
NULL
;
SQuery
*
pQuery
=
NULL
;
SArray
*
pArray
=
NULL
;
SVgDataBlocks
*
pVgData
=
NULL
;
SRequestObj
*
pRequest
=
NULL
;
SQuery
*
pQuery
=
NULL
;
SArray
*
pArray
=
NULL
;
SVgDataBlocks
*
pVgData
=
NULL
;
code
=
buildRequest
(
*
(
int64_t
*
)
taos
,
""
,
0
,
NULL
,
false
,
&
pRequest
);
code
=
buildRequest
(
*
(
int64_t
*
)
taos
,
""
,
0
,
NULL
,
false
,
&
pRequest
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
end
;
}
if
(
!
pRequest
->
pDb
)
{
if
(
!
pRequest
->
pDb
)
{
code
=
TSDB_CODE_PAR_DB_NOT_SPECIFIED
;
goto
end
;
}
...
...
@@ -2798,12 +2864,12 @@ static int32_t taosAlterTable(TAOS *taos, void *meta, int32_t metaLen){
}
// do not deal TSDB_ALTER_TABLE_UPDATE_OPTIONS
if
(
req
.
action
==
TSDB_ALTER_TABLE_UPDATE_OPTIONS
)
{
if
(
req
.
action
==
TSDB_ALTER_TABLE_UPDATE_OPTIONS
)
{
goto
end
;
}
STscObj
*
pTscObj
=
pRequest
->
pTscObj
;
SCatalog
*
pCatalog
=
NULL
;
SCatalog
*
pCatalog
=
NULL
;
code
=
catalogGetHandle
(
pTscObj
->
pAppInfo
->
clusterId
,
&
pCatalog
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
end
;
...
...
@@ -2861,13 +2927,13 @@ static int32_t taosAlterTable(TAOS *taos, void *meta, int32_t metaLen){
pVgData
=
NULL
;
pArray
=
NULL
;
code
=
pRequest
->
code
;
if
(
code
==
TSDB_CODE_VND_TABLE_NOT_EXIST
){
if
(
code
==
TSDB_CODE_VND_TABLE_NOT_EXIST
)
{
code
=
0
;
}
end:
end:
taosArrayDestroy
(
pArray
);
if
(
pVgData
)
taosMemoryFreeClear
(
pVgData
->
pData
);
if
(
pVgData
)
taosMemoryFreeClear
(
pVgData
->
pData
);
taosMemoryFreeClear
(
pVgData
);
destroyRequest
(
pRequest
);
tDecoderClear
(
&
coder
);
...
...
@@ -2875,33 +2941,38 @@ static int32_t taosAlterTable(TAOS *taos, void *meta, int32_t metaLen){
return
code
;
}
int32_t
taos_write_raw_meta
(
TAOS
*
taos
,
tmq_raw_data
*
raw_meta
)
{
int32_t
taos_write_raw_meta
(
TAOS
*
taos
,
tmq_raw_data
*
raw_meta
)
{
if
(
!
taos
||
!
raw_meta
)
{
return
TSDB_CODE_INVALID_PARA
;
}
if
(
raw_meta
->
raw_meta_type
==
TDMT_VND_CREATE_STB
)
{
if
(
raw_meta
->
raw_meta_type
==
TDMT_VND_CREATE_STB
)
{
return
taosCreateStb
(
taos
,
raw_meta
->
raw_meta
,
raw_meta
->
raw_meta_len
);
}
else
if
(
raw_meta
->
raw_meta_type
==
TDMT_VND_ALTER_STB
)
{
}
else
if
(
raw_meta
->
raw_meta_type
==
TDMT_VND_ALTER_STB
)
{
return
taosCreateStb
(
taos
,
raw_meta
->
raw_meta
,
raw_meta
->
raw_meta_len
);
}
else
if
(
raw_meta
->
raw_meta_type
==
TDMT_VND_DROP_STB
)
{
}
else
if
(
raw_meta
->
raw_meta_type
==
TDMT_VND_DROP_STB
)
{
return
taosDropStb
(
taos
,
raw_meta
->
raw_meta
,
raw_meta
->
raw_meta_len
);
}
else
if
(
raw_meta
->
raw_meta_type
==
TDMT_VND_CREATE_TABLE
)
{
}
else
if
(
raw_meta
->
raw_meta_type
==
TDMT_VND_CREATE_TABLE
)
{
return
taosCreateTable
(
taos
,
raw_meta
->
raw_meta
,
raw_meta
->
raw_meta_len
);
}
else
if
(
raw_meta
->
raw_meta_type
==
TDMT_VND_ALTER_TABLE
)
{
}
else
if
(
raw_meta
->
raw_meta_type
==
TDMT_VND_ALTER_TABLE
)
{
return
taosAlterTable
(
taos
,
raw_meta
->
raw_meta
,
raw_meta
->
raw_meta_len
);
}
else
if
(
raw_meta
->
raw_meta_type
==
TDMT_VND_DROP_TABLE
)
{
}
else
if
(
raw_meta
->
raw_meta_type
==
TDMT_VND_DROP_TABLE
)
{
return
taosDropTable
(
taos
,
raw_meta
->
raw_meta
,
raw_meta
->
raw_meta_len
);
}
return
TSDB_CODE_INVALID_PARA
;
}
void
tmq_free_raw_meta
(
tmq_raw_data
*
rawMeta
){
void
tmq_free_raw_meta
(
tmq_raw_data
*
rawMeta
)
{
//
taosMemoryFreeClear
(
rawMeta
);
}
void
tmq_commit_async
(
tmq_t
*
tmq
,
const
TAOS_RES
*
msg
,
tmq_commit_cb
*
cb
,
void
*
param
)
{
//
tmqCommitInner2
(
tmq
,
msg
,
0
,
1
,
cb
,
param
);
}
int32_t
tmq_commit_sync
(
tmq_t
*
tmq
,
const
TAOS_RES
*
msg
)
{
return
tmqCommitInner2
(
tmq
,
msg
,
0
,
0
,
NULL
,
NULL
);
}
\ No newline at end of file
int32_t
tmq_commit_sync
(
tmq_t
*
tmq
,
const
TAOS_RES
*
msg
)
{
//
return
tmqCommitInner2
(
tmq
,
msg
,
0
,
0
,
NULL
,
NULL
);
}
source/dnode/mgmt/mgmt_mnode/src/mmHandle.c
浏览文件 @
bb58ec1e
...
...
@@ -196,6 +196,7 @@ SArray *mmGetMsgHandles() {
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_DROP_TOPIC
,
mmPutMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_SUBSCRIBE
,
mmPutMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_MQ_ASK_EP
,
mmPutMsgToReadQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_MQ_HB
,
mmPutMsgToReadQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_MQ_DROP_CGROUP
,
mmPutMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_MQ_DROP_CGROUP_RSP
,
mmPutMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_MQ_COMMIT_OFFSET
,
mmPutMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
...
...
source/dnode/mnode/impl/src/mndConsumer.c
浏览文件 @
bb58ec1e
...
...
@@ -48,6 +48,7 @@ static void mndCancelGetNextConsumer(SMnode *pMnode, void *pIter);
static
int32_t
mndProcessSubscribeReq
(
SRpcMsg
*
pMsg
);
static
int32_t
mndProcessAskEpReq
(
SRpcMsg
*
pMsg
);
static
int32_t
mndProcessMqHbReq
(
SRpcMsg
*
pMsg
);
static
int32_t
mndProcessMqTimerMsg
(
SRpcMsg
*
pMsg
);
static
int32_t
mndProcessConsumerLostMsg
(
SRpcMsg
*
pMsg
);
static
int32_t
mndProcessConsumerRecoverMsg
(
SRpcMsg
*
pMsg
);
...
...
@@ -62,6 +63,7 @@ int32_t mndInitConsumer(SMnode *pMnode) {
.
deleteFp
=
(
SdbDeleteFp
)
mndConsumerActionDelete
};
mndSetMsgHandle
(
pMnode
,
TDMT_MND_SUBSCRIBE
,
mndProcessSubscribeReq
);
mndSetMsgHandle
(
pMnode
,
TDMT_MND_MQ_HB
,
mndProcessMqHbReq
);
mndSetMsgHandle
(
pMnode
,
TDMT_MND_MQ_ASK_EP
,
mndProcessAskEpReq
);
mndSetMsgHandle
(
pMnode
,
TDMT_MND_MQ_TIMER
,
mndProcessMqTimerMsg
);
mndSetMsgHandle
(
pMnode
,
TDMT_MND_MQ_CONSUMER_LOST
,
mndProcessConsumerLostMsg
);
...
...
@@ -255,6 +257,33 @@ static int32_t mndProcessMqTimerMsg(SRpcMsg *pMsg) {
return
0
;
}
static
int32_t
mndProcessMqHbReq
(
SRpcMsg
*
pMsg
)
{
SMnode
*
pMnode
=
pMsg
->
info
.
node
;
SMqHbReq
*
pReq
=
(
SMqHbReq
*
)
pMsg
->
pCont
;
int64_t
consumerId
=
be64toh
(
pReq
->
consumerId
);
SMqConsumerObj
*
pConsumer
=
mndAcquireConsumer
(
pMnode
,
consumerId
);
atomic_store_32
(
&
pConsumer
->
hbStatus
,
0
);
int32_t
status
=
atomic_load_32
(
&
pConsumer
->
status
);
if
(
status
==
MQ_CONSUMER_STATUS__LOST_REBD
)
{
SMqConsumerRecoverMsg
*
pRecoverMsg
=
rpcMallocCont
(
sizeof
(
SMqConsumerRecoverMsg
));
pRecoverMsg
->
consumerId
=
consumerId
;
SRpcMsg
*
pRpcMsg
=
taosMemoryCalloc
(
1
,
sizeof
(
SRpcMsg
));
pRpcMsg
->
msgType
=
TDMT_MND_MQ_CONSUMER_RECOVER
;
pRpcMsg
->
pCont
=
pRecoverMsg
;
pRpcMsg
->
contLen
=
sizeof
(
SMqConsumerRecoverMsg
);
tmsgPutToQueue
(
&
pMnode
->
msgCb
,
WRITE_QUEUE
,
pRpcMsg
);
}
mndReleaseConsumer
(
pMnode
,
pConsumer
);
return
0
;
}
static
int32_t
mndProcessAskEpReq
(
SRpcMsg
*
pMsg
)
{
SMnode
*
pMnode
=
pMsg
->
info
.
node
;
SMqAskEpReq
*
pReq
=
(
SMqAskEpReq
*
)
pMsg
->
pCont
;
...
...
@@ -262,19 +291,22 @@ static int32_t mndProcessAskEpReq(SRpcMsg *pMsg) {
int64_t
consumerId
=
be64toh
(
pReq
->
consumerId
);
int32_t
epoch
=
ntohl
(
pReq
->
epoch
);
SMqConsumerObj
*
pConsumer
=
mndAcquireConsumer
(
pM
sg
->
info
.
node
,
consumerId
);
SMqConsumerObj
*
pConsumer
=
mndAcquireConsumer
(
pMnode
,
consumerId
);
if
(
pConsumer
==
NULL
)
{
terrno
=
TSDB_CODE_MND_CONSUMER_NOT_EXIST
;
return
-
1
;
}
ASSERT
(
strcmp
(
pReq
->
cgroup
,
pConsumer
->
cgroup
)
==
0
);
/*int32_t hbStatus = atomic_load_32(&pConsumer->hbStatus);*/
#if 1
atomic_store_32
(
&
pConsumer
->
hbStatus
,
0
);
#endif
// 1. check consumer status
int32_t
status
=
atomic_load_32
(
&
pConsumer
->
status
);
#if 0
if (status == MQ_CONSUMER_STATUS__LOST_REBD) {
SMqConsumerRecoverMsg *pRecoverMsg = rpcMallocCont(sizeof(SMqConsumerRecoverMsg));
...
...
@@ -285,6 +317,7 @@ static int32_t mndProcessAskEpReq(SRpcMsg *pMsg) {
pRpcMsg->contLen = sizeof(SMqConsumerRecoverMsg);
tmsgPutToQueue(&pMnode->msgCb, WRITE_QUEUE, pRpcMsg);
}
#endif
if
(
status
!=
MQ_CONSUMER_STATUS__READY
)
{
terrno
=
TSDB_CODE_MND_CONSUMER_NOT_READY
;
...
...
source/dnode/mnode/impl/src/mndProfile.c
浏览文件 @
bb58ec1e
...
...
@@ -15,10 +15,10 @@
#define _DEFAULT_SOURCE
#include "mndProfile.h"
#include "mndPrivilege.h"
#include "mndDb.h"
#include "mndDnode.h"
#include "mndMnode.h"
#include "mndPrivilege.h"
#include "mndQnode.h"
#include "mndShow.h"
#include "mndStb.h"
...
...
@@ -387,67 +387,7 @@ static void mndCancelGetNextApp(SMnode *pMnode, void *pIter) {
}
static
SClientHbRsp
*
mndMqHbBuildRsp
(
SMnode
*
pMnode
,
SClientHbReq
*
pReq
)
{
#if 0
SClientHbRsp* pRsp = taosMemoryMalloc(sizeof(SClientHbRsp));
if (pRsp == NULL) {
terrno = TSDB_CODE_OUT_OF_MEMORY;
return NULL;
}
pRsp->connKey = pReq->connKey;
SMqHbBatchRsp batchRsp;
batchRsp.batchRsps = taosArrayInit(0, sizeof(SMqHbRsp));
if (batchRsp.batchRsps == NULL) {
terrno = TSDB_CODE_OUT_OF_MEMORY;
return NULL;
}
SClientHbKey connKey = pReq->connKey;
SHashObj* pObj = pReq->info;
SKv* pKv = taosHashGet(pObj, "mq-tmp", strlen("mq-tmp") + 1);
if (pKv == NULL) {
taosMemoryFree(pRsp);
return NULL;
}
SMqHbMsg mqHb;
taosDecodeSMqMsg(pKv->value, &mqHb);
/*int64_t clientUid = htonl(pKv->value);*/
/*if (mqHb.epoch )*/
int sz = taosArrayGetSize(mqHb.pTopics);
SMqConsumerObj* pConsumer = mndAcquireConsumer(pMnode, mqHb.consumerId);
for (int i = 0; i < sz; i++) {
SMqHbOneTopicBatchRsp innerBatchRsp;
innerBatchRsp.rsps = taosArrayInit(sz, sizeof(SMqHbRsp));
if (innerBatchRsp.rsps == NULL) {
//TODO
terrno = TSDB_CODE_OUT_OF_MEMORY;
return NULL;
}
SMqHbTopicInfo* topicInfo = taosArrayGet(mqHb.pTopics, i);
SMqConsumerTopic* pConsumerTopic = taosHashGet(pConsumer->topicHash, topicInfo->name, strlen(topicInfo->name)+1);
if (pConsumerTopic->epoch != topicInfo->epoch) {
//add new vgids into rsp
int vgSz = taosArrayGetSize(topicInfo->pVgInfo);
for (int j = 0; j < vgSz; j++) {
SMqHbRsp innerRsp;
SMqHbVgInfo* pVgInfo = taosArrayGet(topicInfo->pVgInfo, i);
SVgObj* pVgObj = mndAcquireVgroup(pMnode, pVgInfo->vgId);
innerRsp.epSet = mndGetVgroupEpset(pMnode, pVgObj);
taosArrayPush(innerBatchRsp.rsps, &innerRsp);
}
}
taosArrayPush(batchRsp.batchRsps, &innerBatchRsp);
}
int32_t tlen = taosEncodeSMqHbBatchRsp(NULL, &batchRsp);
void* buf = taosMemoryMalloc(tlen);
if (buf == NULL) {
//TODO
return NULL;
}
void* abuf = buf;
taosEncodeSMqHbBatchRsp(&abuf, &batchRsp);
pRsp->body = buf;
pRsp->bodyLen = tlen;
return pRsp;
#endif
//
return
NULL
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录