Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
29cb7c67
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看板
提交
29cb7c67
编写于
1月 07, 2022
作者:
L
Liu Jicong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
implement client heartbeat
上级
57d34170
变更
12
隐藏空白更改
内联
并排
Showing
12 changed file
with
172 addition
and
103 deletion
+172
-103
include/common/tmsg.h
include/common/tmsg.h
+23
-13
include/libs/planner/planner.h
include/libs/planner/planner.h
+1
-0
include/libs/qcom/query.h
include/libs/qcom/query.h
+0
-49
include/libs/transport/trpc.h
include/libs/transport/trpc.h
+49
-0
include/util/thash.h
include/util/thash.h
+18
-0
source/client/inc/clientHb.h
source/client/inc/clientHb.h
+5
-2
source/client/src/clientHb.c
source/client/src/clientHb.c
+53
-3
source/client/src/clientHbMq.c
source/client/src/clientHbMq.c
+0
-25
source/common/src/tmsg.c
source/common/src/tmsg.c
+17
-8
source/libs/qcom/test/CMakeLists.txt
source/libs/qcom/test/CMakeLists.txt
+1
-1
source/libs/qcom/test/queryTest.cpp
source/libs/qcom/test/queryTest.cpp
+2
-1
source/util/src/thash.c
source/util/src/thash.c
+3
-1
未找到文件。
include/common/tmsg.h
浏览文件 @
29cb7c67
...
...
@@ -133,12 +133,12 @@ typedef enum _mgmt_table {
#define TSDB_COL_IS_UD_COL(f) ((f & (~(TSDB_COL_NULL))) == TSDB_COL_UDC)
#define TSDB_COL_REQ_NULL(f) (((f)&TSDB_COL_NULL) != 0)
typedef
struct
SK
l
v
{
typedef
struct
SKv
{
int32_t
keyLen
;
int32_t
valueLen
;
void
*
key
;
void
*
value
;
}
SK
l
v
;
}
SKv
;
typedef
struct
SClientHbKey
{
int32_t
connId
;
...
...
@@ -174,26 +174,36 @@ static FORCE_INLINE uint32_t hbKeyHashFunc(const char* key, uint32_t keyLen) {
int
tSerializeSClientHbReq
(
void
**
buf
,
const
SClientHbReq
*
pReq
);
void
*
tDeserializeClientHbReq
(
void
*
buf
,
SClientHbReq
*
pReq
);
static
FORCE_INLINE
void
tFreeClientHbReq
(
void
*
pReq
)
{
SClientHbReq
*
req
=
pReq
;
SClientHbReq
*
req
=
(
SClientHbReq
*
)
pReq
;
taosHashCleanup
(
req
->
info
);
free
(
pReq
);
}
static
FORCE_INLINE
int
taosEncodeSKlv
(
void
**
buf
,
const
SKlv
*
pKlv
)
{
int
tSerializeSClientHbBatchReq
(
void
**
buf
,
const
SClientHbBatchReq
*
pReq
);
void
*
tDeserializeClientHbBatchReq
(
void
*
buf
,
SClientHbBatchReq
*
pReq
);
static
FORCE_INLINE
void
tFreeClientHbBatchReq
(
void
*
pReq
)
{
SClientHbBatchReq
*
req
=
(
SClientHbBatchReq
*
)
pReq
;
taosArrayDestroyEx
(
req
->
reqs
,
tFreeClientHbReq
);
free
(
pReq
);
}
static
FORCE_INLINE
int
taosEncodeSKv
(
void
**
buf
,
const
SKv
*
pKv
)
{
int
tlen
=
0
;
tlen
+=
taosEncodeFixedI32
(
buf
,
pK
l
v
->
keyLen
);
tlen
+=
taosEncodeFixedI32
(
buf
,
pK
l
v
->
valueLen
);
tlen
+=
taosEncodeBinary
(
buf
,
pK
lv
->
key
,
pKl
v
->
keyLen
);
tlen
+=
taosEncodeBinary
(
buf
,
pK
lv
->
value
,
pKl
v
->
valueLen
);
tlen
+=
taosEncodeFixedI32
(
buf
,
pKv
->
keyLen
);
tlen
+=
taosEncodeFixedI32
(
buf
,
pKv
->
valueLen
);
tlen
+=
taosEncodeBinary
(
buf
,
pK
v
->
key
,
pK
v
->
keyLen
);
tlen
+=
taosEncodeBinary
(
buf
,
pK
v
->
value
,
pK
v
->
valueLen
);
return
tlen
;
}
static
FORCE_INLINE
void
*
taosDecodeSK
lv
(
void
*
buf
,
SKlv
*
pKl
v
)
{
buf
=
taosDecodeFixedI32
(
buf
,
&
pK
l
v
->
keyLen
);
buf
=
taosDecodeFixedI32
(
buf
,
&
pK
l
v
->
valueLen
);
buf
=
taosDecodeBinary
(
buf
,
&
pK
lv
->
key
,
pKl
v
->
keyLen
);
buf
=
taosDecodeBinary
(
buf
,
&
pK
lv
->
value
,
pKl
v
->
valueLen
);
static
FORCE_INLINE
void
*
taosDecodeSK
v
(
void
*
buf
,
SKv
*
pK
v
)
{
buf
=
taosDecodeFixedI32
(
buf
,
&
pKv
->
keyLen
);
buf
=
taosDecodeFixedI32
(
buf
,
&
pKv
->
valueLen
);
buf
=
taosDecodeBinary
(
buf
,
&
pK
v
->
key
,
pK
v
->
keyLen
);
buf
=
taosDecodeBinary
(
buf
,
&
pK
v
->
value
,
pK
v
->
valueLen
);
return
buf
;
}
...
...
include/libs/planner/planner.h
浏览文件 @
29cb7c67
...
...
@@ -23,6 +23,7 @@ extern "C" {
#include "query.h"
#include "tmsg.h"
#include "tarray.h"
#include "trpc.h"
#define QUERY_TYPE_MERGE 1
#define QUERY_TYPE_PARTIAL 2
...
...
include/libs/qcom/query.h
浏览文件 @
29cb7c67
...
...
@@ -94,55 +94,6 @@ typedef struct STableMetaOutput {
STableMeta
*
tbMeta
;
}
STableMetaOutput
;
typedef
struct
SDataBuf
{
void
*
pData
;
uint32_t
len
;
}
SDataBuf
;
typedef
int32_t
(
*
__async_send_cb_fn_t
)(
void
*
param
,
const
SDataBuf
*
pMsg
,
int32_t
code
);
typedef
int32_t
(
*
__async_exec_fn_t
)(
void
*
param
);
typedef
struct
SMsgSendInfo
{
__async_send_cb_fn_t
fp
;
//async callback function
void
*
param
;
uint64_t
requestId
;
uint64_t
requestObjRefId
;
int32_t
msgType
;
SDataBuf
msgInfo
;
}
SMsgSendInfo
;
typedef
struct
SQueryNodeAddr
{
int32_t
nodeId
;
//vgId or qnodeId
int8_t
inUse
;
int8_t
numOfEps
;
SEpAddrMsg
epAddr
[
TSDB_MAX_REPLICA
];
}
SQueryNodeAddr
;
bool
tIsValidSchema
(
struct
SSchema
*
pSchema
,
int32_t
numOfCols
,
int32_t
numOfTags
);
int32_t
initTaskQueue
();
int32_t
cleanupTaskQueue
();
/**
*
* @param execFn The asynchronously execution function
* @param execParam The parameters of the execFn
* @param code The response code during execution the execFn
* @return
*/
int32_t
taosAsyncExec
(
__async_exec_fn_t
execFn
,
void
*
execParam
,
int32_t
*
code
);
/**
* Asynchronously send message to server, after the response received, the callback will be incured.
*
* @param pTransporter
* @param epSet
* @param pTransporterId
* @param pInfo
* @return
*/
int32_t
asyncSendMsgToServer
(
void
*
pTransporter
,
SEpSet
*
epSet
,
int64_t
*
pTransporterId
,
const
SMsgSendInfo
*
pInfo
);
const
SSchema
*
tGetTbnameColumnSchema
();
void
initQueryModuleMsgHandle
();
...
...
include/libs/transport/trpc.h
浏览文件 @
29cb7c67
...
...
@@ -84,6 +84,55 @@ void rpcSendRecv(void *shandle, SEpSet *pEpSet, SRpcMsg *pReq, SRpcMsg *pRsp)
int
rpcReportProgress
(
void
*
pConn
,
char
*
pCont
,
int
contLen
);
void
rpcCancelRequest
(
int64_t
rid
);
typedef
struct
SDataBuf
{
void
*
pData
;
uint32_t
len
;
}
SDataBuf
;
typedef
int32_t
(
*
__async_send_cb_fn_t
)(
void
*
param
,
const
SDataBuf
*
pMsg
,
int32_t
code
);
typedef
int32_t
(
*
__async_exec_fn_t
)(
void
*
param
);
typedef
struct
SMsgSendInfo
{
__async_send_cb_fn_t
fp
;
//async callback function
void
*
param
;
uint64_t
requestId
;
uint64_t
requestObjRefId
;
int32_t
msgType
;
SDataBuf
msgInfo
;
}
SMsgSendInfo
;
typedef
struct
SQueryNodeAddr
{
int32_t
nodeId
;
//vgId or qnodeId
int8_t
inUse
;
int8_t
numOfEps
;
SEpAddrMsg
epAddr
[
TSDB_MAX_REPLICA
];
}
SQueryNodeAddr
;
bool
tIsValidSchema
(
struct
SSchema
*
pSchema
,
int32_t
numOfCols
,
int32_t
numOfTags
);
int32_t
initTaskQueue
();
int32_t
cleanupTaskQueue
();
/**
*
* @param execFn The asynchronously execution function
* @param execParam The parameters of the execFn
* @param code The response code during execution the execFn
* @return
*/
int32_t
taosAsyncExec
(
__async_exec_fn_t
execFn
,
void
*
execParam
,
int32_t
*
code
);
/**
* Asynchronously send message to server, after the response received, the callback will be incured.
*
* @param pTransporter
* @param epSet
* @param pTransporterId
* @param pInfo
* @return
*/
int32_t
asyncSendMsgToServer
(
void
*
pTransporter
,
SEpSet
*
epSet
,
int64_t
*
pTransporterId
,
const
SMsgSendInfo
*
pInfo
);
#ifdef __cplusplus
}
#endif
...
...
include/util/thash.h
浏览文件 @
29cb7c67
...
...
@@ -211,6 +211,24 @@ void taosHashCancelIterate(SHashObj *pHashObj, void *p);
int32_t
taosHashGetKey
(
void
*
data
,
void
**
key
,
size_t
*
keyLen
);
/**
* Get the corresponding key information for a given data in hash table, using memcpy
* @param data
* @param dst
* @return
*/
static
FORCE_INLINE
int32_t
taosHashCopyKey
(
void
*
data
,
void
*
dst
)
{
if
(
NULL
==
data
||
NULL
==
dst
)
{
return
-
1
;
}
SHashNode
*
node
=
GET_HASH_PNODE
(
data
);
void
*
key
=
GET_HASH_NODE_KEY
(
node
);
memcpy
(
dst
,
key
,
node
->
keyLen
);
return
0
;
}
/**
* Get the corresponding data length for a given data in hash table
* @param data
...
...
source/client/inc/clientHb.h
浏览文件 @
29cb7c67
...
...
@@ -28,10 +28,13 @@ typedef enum {
}
EHbType
;
typedef
int32_t
(
*
FHbRspHandle
)(
SClientHbRsp
*
pReq
);
typedef
int32_t
(
*
FGetConnInfo
)(
SClientHbKey
connKey
,
void
*
param
);
//TODO: embed param into function
//return type: SArray<Skv>
typedef
SArray
*
(
*
FGetConnInfo
)(
SClientHbKey
connKey
,
void
*
param
);
// called by mgmt
int
hbMgrInit
();
int
hbMgrInit
(
void
*
transporter
,
SEpSet
epSet
);
void
hbMgrCleanUp
();
int
hbHandleRsp
(
SClientHbBatchRsp
*
hbRsp
);
...
...
source/client/src/clientHb
Mgmt
.c
→
source/client/src/clientHb.c
浏览文件 @
29cb7c67
...
...
@@ -14,6 +14,7 @@
*/
#include "clientHb.h"
#include "trpc.h"
typedef
struct
SClientHbMgr
{
int8_t
inited
;
...
...
@@ -23,8 +24,13 @@ typedef struct SClientHbMgr {
int32_t
connKeyCnt
;
int64_t
reportBytes
;
// not implemented
int64_t
startTime
;
// thread
// ctl
int8_t
threadStop
;
pthread_t
thread
;
SRWLatch
lock
;
// lock is used in serialization
// connection
void
*
transporter
;
SEpSet
epSet
;
SHashObj
*
activeInfo
;
// hash<SClientHbKey, SClientHbReq>
SHashObj
*
getInfoFuncs
;
// hash<SClientHbKey, FGetConnInfo>
...
...
@@ -36,6 +42,14 @@ static SClientHbMgr clientHbMgr = {0};
static
int32_t
hbCreateThread
();
static
void
hbStopThread
();
static
int32_t
hbMqHbRspHandle
(
SClientHbRsp
*
pReq
)
{
return
0
;
}
void
hbMgrInitMqHbRspHandle
()
{
clientHbMgr
.
handle
[
HEARTBEAT_TYPE_MQ
]
=
hbMqHbRspHandle
;
}
static
FORCE_INLINE
void
hbMgrInitHandle
()
{
// init all handle
hbMgrInitMqHbRspHandle
();
...
...
@@ -50,11 +64,22 @@ static SClientHbBatchReq* hbGatherAllInfo() {
int32_t
connKeyCnt
=
atomic_load_32
(
&
clientHbMgr
.
connKeyCnt
);
pReq
->
reqs
=
taosArrayInit
(
connKeyCnt
,
sizeof
(
SClientHbReq
));
void
*
pIter
=
taosHashIterate
(
clientHbMgr
.
activeInfo
,
pIter
);
void
*
pIter
=
taosHashIterate
(
clientHbMgr
.
activeInfo
,
NULL
);
while
(
pIter
!=
NULL
)
{
taosArrayPush
(
pReq
->
reqs
,
pIter
);
SClientHbReq
*
pOneReq
=
pIter
;
taosHashClear
(
pOneReq
->
info
);
pIter
=
taosHashIterate
(
clientHbMgr
.
activeInfo
,
pIter
);
}
pIter
=
taosHashIterate
(
clientHbMgr
.
getInfoFuncs
,
NULL
);
while
(
pIter
!=
NULL
)
{
FGetConnInfo
getConnInfoFp
=
(
FGetConnInfo
)
pIter
;
SClientHbKey
connKey
;
taosHashCopyKey
(
pIter
,
&
connKey
);
getConnInfoFp
(
connKey
,
NULL
);
pIter
=
taosHashIterate
(
clientHbMgr
.
activeInfo
,
pIter
);
}
...
...
@@ -64,8 +89,23 @@ static SClientHbBatchReq* hbGatherAllInfo() {
static
void
*
hbThreadFunc
(
void
*
param
)
{
setThreadName
(
"hb"
);
while
(
1
)
{
int8_t
threadStop
=
atomic_load_8
(
&
clientHbMgr
.
threadStop
);
if
(
threadStop
)
{
break
;
}
SClientHbBatchReq
*
pReq
=
hbGatherAllInfo
();
void
*
reqStr
=
NULL
;
tSerializeSClientHbBatchReq
(
&
reqStr
,
pReq
);
SMsgSendInfo
info
;
int64_t
transporterId
=
0
;
asyncSendMsgToServer
(
clientHbMgr
.
transporter
,
&
clientHbMgr
.
epSet
,
&
transporterId
,
&
info
);
tFreeClientHbBatchReq
(
pReq
);
atomic_add_fetch_32
(
&
clientHbMgr
.
reportCnt
,
1
);
taosMsleep
(
HEARTBEAT_INTERVAL
);
}
return
NULL
;
...
...
@@ -84,7 +124,11 @@ static int32_t hbCreateThread() {
return
0
;
}
int
hbMgrInit
()
{
static
void
hbStopThread
()
{
atomic_store_8
(
&
clientHbMgr
.
threadStop
,
1
);
}
int
hbMgrInit
(
void
*
transporter
,
SEpSet
epSet
)
{
// init once
int8_t
old
=
atomic_val_compare_exchange_8
(
&
clientHbMgr
.
inited
,
0
,
1
);
if
(
old
==
1
)
return
0
;
...
...
@@ -101,7 +145,13 @@ int hbMgrInit() {
// init getInfoFunc
clientHbMgr
.
getInfoFuncs
=
taosHashInit
(
64
,
hbKeyHashFunc
,
1
,
HASH_ENTRY_LOCK
);
//init connection info
clientHbMgr
.
transporter
=
transporter
;
clientHbMgr
.
epSet
=
epSet
;
// init backgroud thread
hbCreateThread
();
return
0
;
}
...
...
source/client/src/clientHbMq.c
已删除
100644 → 0
浏览文件 @
57d34170
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "clientHb.h"
static
int32_t
mqHbRspHandle
(
SClientHbRsp
*
pReq
)
{
return
0
;
}
void
hbMgrInitMqHbRspHandle
()
{
clientHbMgr
.
handle
[
HEARTBEAT_TYPE_MQ
]
=
mqHbRspHandle
;
}
source/common/src/tmsg.c
浏览文件 @
29cb7c67
...
...
@@ -31,13 +31,13 @@ int tSerializeSClientHbReq(void **buf, const SClientHbReq *pReq) {
int
tlen
=
0
;
tlen
+=
taosEncodeSClientHbKey
(
buf
,
&
pReq
->
connKey
);
SK
lv
kl
v
;
SK
v
k
v
;
void
*
pIter
=
taosHashIterate
(
pReq
->
info
,
pIter
);
while
(
pIter
!=
NULL
)
{
taosHashGetKey
(
pIter
,
&
k
lv
.
key
,
(
size_t
*
)
&
kl
v
.
keyLen
);
k
l
v
.
valueLen
=
taosHashGetDataLen
(
pIter
);
k
l
v
.
value
=
pIter
;
taosEncodeSK
lv
(
buf
,
&
kl
v
);
taosHashGetKey
(
pIter
,
&
k
v
.
key
,
(
size_t
*
)
&
k
v
.
keyLen
);
kv
.
valueLen
=
taosHashGetDataLen
(
pIter
);
kv
.
value
=
pIter
;
taosEncodeSK
v
(
buf
,
&
k
v
);
pIter
=
taosHashIterate
(
pReq
->
info
,
pIter
);
}
...
...
@@ -52,13 +52,22 @@ void *tDeserializeClientHbReq(void *buf, SClientHbReq *pReq) {
if
(
pReq
->
info
==
NULL
)
{
pReq
->
info
=
taosHashInit
(
64
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BINARY
),
true
,
HASH_NO_LOCK
);
}
SK
lv
kl
v
;
buf
=
taosDecodeSK
lv
(
buf
,
&
kl
v
);
taosHashPut
(
pReq
->
info
,
k
lv
.
key
,
klv
.
keyLen
,
klv
.
value
,
kl
v
.
valueLen
);
SK
v
k
v
;
buf
=
taosDecodeSK
v
(
buf
,
&
k
v
);
taosHashPut
(
pReq
->
info
,
k
v
.
key
,
kv
.
keyLen
,
kv
.
value
,
k
v
.
valueLen
);
return
buf
;
}
int
tSerializeSClientHbBatchReq
(
void
**
buf
,
const
SClientHbBatchReq
*
pReq
)
{
int
tlen
=
0
;
return
tlen
;
}
void
*
tDeserializeClientHbBatchReq
(
void
*
buf
,
SClientHbBatchReq
*
pReq
)
{
return
buf
;
}
int
tSerializeSVCreateTbReq
(
void
**
buf
,
SVCreateTbReq
*
pReq
)
{
int
tlen
=
0
;
...
...
source/libs/qcom/test/CMakeLists.txt
浏览文件 @
29cb7c67
...
...
@@ -15,5 +15,5 @@ TARGET_INCLUDE_DIRECTORIES(
TARGET_LINK_LIBRARIES
(
queryUtilTest
PUBLIC os util gtest qcom common
PUBLIC os util gtest qcom common
transport
)
source/libs/qcom/test/queryTest.cpp
浏览文件 @
29cb7c67
...
...
@@ -17,6 +17,7 @@
#include <iostream>
#include "tmsg.h"
#include "query.h"
#include "trpc.h"
#pragma GCC diagnostic ignored "-Wwrite-strings"
#pragma GCC diagnostic ignored "-Wunused-function"
...
...
@@ -80,4 +81,4 @@ TEST(testCase, error_in_async_test) {
taosAsyncExec
(
testPrintError
,
p
,
&
code
);
usleep
(
1000
);
printf
(
"Error code:%d after asynchronously exec function
\n
"
,
code
);
}
\ No newline at end of file
}
source/util/src/thash.c
浏览文件 @
29cb7c67
...
...
@@ -794,7 +794,9 @@ FORCE_INLINE int32_t taosHashGetKey(void *data, void** key, size_t* keyLen) {
SHashNode
*
node
=
GET_HASH_PNODE
(
data
);
*
key
=
GET_HASH_NODE_KEY
(
node
);
*
keyLen
=
node
->
keyLen
;
if
(
keyLen
)
{
*
keyLen
=
node
->
keyLen
;
}
return
0
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录