Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
慢慢CG
TDengine
提交
a0621dab
T
TDengine
项目概览
慢慢CG
/
TDengine
与 Fork 源项目一致
Fork自
taosdata / TDengine
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
a0621dab
编写于
10月 09, 2019
作者:
H
hjxilinx
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update the skiplist node level generate method, and signature of some functions.
上级
8bf1054d
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
55 addition
and
138 deletion
+55
-138
src/inc/tskiplist.h
src/inc/tskiplist.h
+6
-24
src/inc/tsql.h
src/inc/tsql.h
+1
-1
src/system/src/mgmtDb.c
src/system/src/mgmtDb.c
+1
-1
src/system/src/mgmtMeter.c
src/system/src/mgmtMeter.c
+3
-3
src/system/src/vnodeStore.c
src/system/src/vnodeStore.c
+0
-2
src/util/src/thistogram.c
src/util/src/thistogram.c
+8
-5
src/util/src/tskiplist.c
src/util/src/tskiplist.c
+36
-102
未找到文件。
src/inc/tskiplist.h
浏览文件 @
a0621dab
...
...
@@ -29,15 +29,6 @@ extern "C" {
#include "os.h"
#include "ttypes.h"
/*
* generate random data with uniform&skewed distribution, extracted from levelDB
*/
typedef
struct
SRandom
{
uint32_t
s
;
uint32_t
(
*
rand
)(
struct
SRandom
*
,
int32_t
n
);
}
SRandom
;
/*
* key of each node
* todo move to as the global structure in all search codes...
...
...
@@ -54,10 +45,11 @@ typedef enum tSkipListPointQueryType {
typedef
struct
tSkipListNode
{
uint16_t
nLevel
;
char
*
pData
;
tSkipListKey
key
;
struct
tSkipListNode
**
pForward
;
struct
tSkipListNode
**
pBackward
;
tSkipListKey
key
;
}
tSkipListNode
;
/*
...
...
@@ -133,9 +125,6 @@ typedef struct tSkipList {
__compar_fn_t
comparator
;
pthread_rwlock_t
lock
;
// will be removed soon
// random generator
SRandom
r
;
// skiplist state
tSkipListState
state
;
}
tSkipList
;
...
...
@@ -150,14 +139,14 @@ typedef struct tSKipListQueryCond {
tSkipListKey
upperBnd
;
int32_t
lowerBndRelOptr
;
// relation operator to denote if lower bound is
// included or not
int32_t
upperBndRelOptr
;
}
tSKipListQueryCond
;
int32_t
tSkipListCreate
(
tSkipList
**
pSkipList
,
int16_t
nMaxLevel
,
int16_t
keyType
,
int16_t
nMaxKeyLen
,
int32_t
(
*
funcp
)());
tSkipList
*
tSkipListCreate
(
int16_t
nMaxLevel
,
int16_t
keyType
,
int16_t
nMaxKeyLen
);
void
tSkipListDestroy
(
tSkipList
*
*
pSkipList
);
void
*
tSkipListDestroy
(
tSkipList
*
pSkipList
);
// create skip list key
tSkipListKey
tSkipListCreateKey
(
int32_t
type
,
char
*
val
,
size_t
keyLength
);
...
...
@@ -170,8 +159,7 @@ tSkipListNode *tSkipListPut(tSkipList *pSkipList, void *pData, tSkipListKey *pKe
/*
* get only *one* node of which key is equalled to pKey, even there are more
* than
* one nodes are of the same key
* than one nodes are of the same key
*/
tSkipListNode
*
tSkipListGetOne
(
tSkipList
*
pSkipList
,
tSkipListKey
*
pKey
);
...
...
@@ -215,12 +203,6 @@ int32_t tSkipListPointQuery(tSkipList *pSkipList, tSkipListKey *pKey, int32_t nu
tSkipListNode
***
pResult
);
void
removeNodeEachLevel
(
tSkipList
*
pSkipList
,
int32_t
nLevel
);
// todo move to utility
void
tInitMatrix
(
double
*
x
,
double
*
y
,
int32_t
length
,
double
p
[
2
][
3
]);
int32_t
tCompute
(
double
p
[
2
][
3
]);
#ifdef __cplusplus
}
#endif
...
...
src/inc/tsql.h
浏览文件 @
a0621dab
...
...
@@ -48,7 +48,7 @@ enum {
TSQL_NODE_TYPE_VALUE
=
0x4
,
};
extern
char
tTokenTypeSwitcher
[
1
2
];
extern
char
tTokenTypeSwitcher
[
1
3
];
#define toTSDBType(x) \
do { \
...
...
src/system/src/mgmtDb.c
浏览文件 @
a0621dab
...
...
@@ -478,7 +478,7 @@ int mgmtRemoveMetricFromDb(SDbObj *pDb, STabObj *pMetric) {
pDb
->
numOfMetrics
--
;
if
(
pMetric
->
pSkipList
!=
NULL
)
{
tSkipListDestroy
(
&
pMetric
->
pSkipList
);
pMetric
->
pSkipList
=
tSkipListDestroy
(
pMetric
->
pSkipList
);
}
return
0
;
}
...
...
src/system/src/mgmtMeter.c
浏览文件 @
a0621dab
...
...
@@ -34,7 +34,7 @@ extern int64_t sdbVersion;
#define mgmtDestroyMeter(pMeter) \
do { \
tfree(pMeter->schema); \
tSkipListDestroy(&(pMeter->pSkipList)
);\
pMeter->pSkipList = tSkipListDestroy((pMeter)->pSkipList
);\
tfree(pMeter); \
} while (0)
...
...
@@ -781,8 +781,8 @@ static void addMeterIntoMetricIndex(STabObj *pMetric, STabObj *pMeter) {
SSchema
*
pTagSchema
=
(
SSchema
*
)(
pMetric
->
schema
+
pMetric
->
numOfColumns
*
sizeof
(
SSchema
));
if
(
pMetric
->
pSkipList
==
NULL
)
{
tSkipListCreate
(
&
pMetric
->
pSkipList
,
MAX_SKIP_LIST_LEVEL
,
pTagSchema
[
KEY_COLUMN_OF_TAGS
].
type
,
pTagSchema
[
KEY_COLUMN_OF_TAGS
].
bytes
,
tSkipListDefaultCompare
);
pMetric
->
pSkipList
=
tSkipListCreate
(
MAX_SKIP_LIST_LEVEL
,
pTagSchema
[
KEY_COLUMN_OF_TAGS
].
type
,
pTagSchema
[
KEY_COLUMN_OF_TAGS
].
bytes
);
}
if
(
pMetric
->
pSkipList
)
{
...
...
src/system/src/vnodeStore.c
浏览文件 @
a0621dab
...
...
@@ -26,8 +26,6 @@
#include "vnodeStore.h"
#include "vnodeUtil.h"
#pragma GCC diagnostic ignored "-Wformat-overflow="
int
vnodeCreateMeterObjFile
(
int
vnode
);
int
tsMaxVnode
=
-
1
;
...
...
src/util/src/thistogram.c
浏览文件 @
a0621dab
...
...
@@ -133,7 +133,7 @@ SHistogramInfo* tHistogramCreate(int32_t numOfEntries) {
SHistogramInfo
*
pHisto
=
malloc
(
sizeof
(
SHistogramInfo
)
+
sizeof
(
SHistBin
)
*
(
numOfEntries
+
1
));
#if !defined(USE_ARRAYLIST)
tSkipListCreate
(
&
pHisto
->
pList
,
MAX_SKIP_LIST_LEVEL
,
TSDB_DATA_TYPE_DOUBLE
,
sizeof
(
double
),
NULL
);
pHisto
->
pList
=
tSkipListCreate
(
MAX_SKIP_LIST_LEVEL
,
TSDB_DATA_TYPE_DOUBLE
,
sizeof
(
double
)
);
SInsertSupporter
*
pss
=
malloc
(
sizeof
(
SInsertSupporter
));
pss
->
numOfEntries
=
pHisto
->
maxEntries
;
pss
->
pSkipList
=
pHisto
->
pList
;
...
...
@@ -623,11 +623,14 @@ double* tHistogramUniform(SHistogramInfo* pHisto, double* ratio, int32_t num) {
SHistogramInfo
*
tHistogramMerge
(
SHistogramInfo
*
pHisto1
,
SHistogramInfo
*
pHisto2
,
int32_t
numOfEntries
)
{
SHistogramInfo
*
pResHistogram
=
tHistogramCreate
(
numOfEntries
);
// error in histogram info
if
(
pHisto1
->
numOfEntries
>
MAX_HISTOGRAM_BIN
||
pHisto2
->
numOfEntries
>
MAX_HISTOGRAM_BIN
)
{
return
pResHistogram
;
}
SHistBin
*
pHistoBins
=
calloc
(
1
,
sizeof
(
SHistBin
)
*
(
pHisto1
->
numOfEntries
+
pHisto2
->
numOfEntries
));
int32_t
i
=
0
,
j
=
0
,
k
=
0
;
int32_t
i
=
0
;
int32_t
j
=
0
;
int32_t
k
=
0
;
while
(
i
<
pHisto1
->
numOfEntries
&&
j
<
pHisto2
->
numOfEntries
)
{
if
(
pHisto1
->
elems
[
i
].
val
<
pHisto2
->
elems
[
j
].
val
)
{
pHistoBins
[
k
++
]
=
pHisto1
->
elems
[
i
++
];
...
...
@@ -660,8 +663,8 @@ SHistogramInfo* tHistogramMerge(SHistogramInfo* pHisto1, SHistogramInfo* pHisto2
histogramMergeImpl
(
pHistoBins
,
&
k
);
}
memcpy
(
pResHistogram
->
elems
,
pHistoBins
,
sizeof
(
SHistBin
)
*
numOfEntries
);
pResHistogram
->
numOfEntries
=
k
;
memcpy
(
pResHistogram
->
elems
,
pHistoBins
,
sizeof
(
SHistBin
)
*
k
);
free
(
pHistoBins
);
return
pResHistogram
;
...
...
src/util/src/tskiplist.c
浏览文件 @
a0621dab
...
...
@@ -23,28 +23,6 @@
#include "tskiplist.h"
#include "tutil.h"
static
uint32_t
doGetRand
(
SRandom
*
pRand
,
int32_t
n
)
{
const
uint32_t
val
=
2147483647L
;
uint64_t
p
=
pRand
->
s
*
16807
;
pRand
->
s
=
(
uint32_t
)((
p
>>
31
)
+
(
p
&
val
));
if
(
pRand
->
s
>
val
)
{
pRand
->
s
-=
val
;
}
return
(
pRand
->
s
%
n
);
}
static
SRandom
getRand
(
uint32_t
s
)
{
uint32_t
seed
=
s
&
0x7FFFFFFF
;
if
(
seed
==
0
||
seed
==
INT32_MAX
)
{
seed
=
1
;
}
struct
SRandom
r
=
{
seed
,
doGetRand
};
return
r
;
}
void
recordNodeEachLevel
(
tSkipList
*
pSkipList
,
int32_t
nLevel
);
int32_t
getSkipListNodeLevel
(
tSkipList
*
pSkipList
);
...
...
@@ -55,14 +33,14 @@ static int32_t getSkipListNodeRandomHeight(tSkipList *pSkipList) {
const
uint32_t
factor
=
4
;
int32_t
n
=
1
;
while
((
pSkipList
->
r
.
rand
(
&
pSkipList
->
r
,
MAX_SKIP_LIST_LEVEL
)
%
factor
)
==
0
&&
n
<=
MAX_SKIP_LIST_LEVEL
)
{
while
((
rand
()
%
factor
)
==
0
&&
n
<=
pSkipList
->
nMaxLevel
)
{
n
++
;
}
return
n
;
}
void
tSkipListDoRecordPut
Node
(
tSkipList
*
pSkipList
)
{
void
tSkipListDoRecordPut
(
tSkipList
*
pSkipList
)
{
const
int32_t
MAX_RECORD_NUM
=
1000
;
if
(
pSkipList
->
state
.
nInsertObjs
==
MAX_RECORD_NUM
)
{
...
...
@@ -239,33 +217,33 @@ static __compar_fn_t getKeyComparator(int32_t keyType) {
return
comparator
;
}
int32_t
tSkipListCreate
(
tSkipList
**
pSkipList
,
int16_t
nMaxLevel
,
int16_t
keyType
,
int16_t
nMaxKeyLen
,
int32_t
(
*
funcp
)())
{
(
*
pSkipList
)
=
(
tSkipList
*
)
calloc
(
1
,
sizeof
(
tSkipList
));
if
((
*
pSkipList
)
==
NULL
)
{
return
-
1
;
tSkipList
*
tSkipListCreate
(
int16_t
nMaxLevel
,
int16_t
keyType
,
int16_t
nMaxKeyLen
)
{
tSkipList
*
pSkipList
=
(
tSkipList
*
)
calloc
(
1
,
sizeof
(
tSkipList
));
if
(
pSkipList
==
NULL
)
{
return
NULL
;
}
(
*
pSkipList
)
->
keyType
=
keyType
;
pSkipList
->
keyType
=
keyType
;
(
*
pSkipList
)
->
comparator
=
getKeyComparator
(
keyType
);
(
*
pSkipList
)
->
pHead
.
pForward
=
(
tSkipListNode
**
)
calloc
(
1
,
POINTER_BYTES
*
MAX_SKIP_LIST_LEVEL
);
pSkipList
->
comparator
=
getKeyComparator
(
keyType
);
pSkipList
->
pHead
.
pForward
=
(
tSkipListNode
**
)
calloc
(
1
,
POINTER_BYTES
*
MAX_SKIP_LIST_LEVEL
);
(
*
pSkipList
)
->
nMaxLevel
=
MAX_SKIP_LIST_LEVEL
;
(
*
pSkipList
)
->
nLevel
=
1
;
pSkipList
->
nMaxLevel
=
MAX_SKIP_LIST_LEVEL
;
pSkipList
->
nLevel
=
1
;
(
*
pSkipList
)
->
nMaxKeyLen
=
nMaxKeyLen
;
(
*
pSkipList
)
->
nMaxLevel
=
nMaxLevel
;
pSkipList
->
nMaxKeyLen
=
nMaxKeyLen
;
pSkipList
->
nMaxLevel
=
nMaxLevel
;
if
(
pthread_rwlock_init
(
&
(
*
pSkipList
)
->
lock
,
NULL
)
!=
0
)
{
return
-
1
;
if
(
pthread_rwlock_init
(
&
pSkipList
->
lock
,
NULL
)
!=
0
)
{
tfree
(
pSkipList
->
pHead
.
pForward
);
tfree
(
pSkipList
);
return
NULL
;
}
srand
(
time
(
NULL
));
(
*
pSkipList
)
->
r
=
getRand
(
time
(
NULL
)
);
pSkipList
->
state
.
nTotalMemSize
+=
sizeof
(
tSkipList
);
(
*
pSkipList
)
->
state
.
nTotalMemSize
+=
sizeof
(
tSkipList
);
return
0
;
return
pSkipList
;
}
static
void
doRemove
(
tSkipList
*
pSkipList
,
tSkipListNode
*
pNode
,
tSkipListNode
*
forward
[])
{
...
...
@@ -324,77 +302,33 @@ static tSkipListNode *tSkipListCreateNode(void *pData, const tSkipListKey *pKey,
}
tSkipListKey
tSkipListCreateKey
(
int32_t
type
,
char
*
val
,
size_t
keyLength
)
{
tSkipListKey
k
;
k
.
nType
=
(
uint8_t
)
type
;
switch
(
type
)
{
case
TSDB_DATA_TYPE_INT
:
{
k
.
i64Key
=
*
(
int32_t
*
)
val
;
return
k
;
}
case
TSDB_DATA_TYPE_BIGINT
:
{
k
.
i64Key
=
*
(
int64_t
*
)
val
;
return
k
;
}
case
TSDB_DATA_TYPE_DOUBLE
:
{
k
.
dKey
=
*
(
double
*
)
val
;
return
k
;
}
case
TSDB_DATA_TYPE_FLOAT
:
{
k
.
dKey
=
*
(
float
*
)
val
;
return
k
;
}
case
TSDB_DATA_TYPE_SMALLINT
:
{
k
.
i64Key
=
*
(
int16_t
*
)
val
;
return
k
;
}
case
TSDB_DATA_TYPE_TINYINT
:
{
k
.
i64Key
=
*
(
int8_t
*
)
val
;
return
k
;
}
case
TSDB_DATA_TYPE_BOOL
:
{
k
.
i64Key
=
*
(
int8_t
*
)
val
;
return
k
;
}
case
TSDB_DATA_TYPE_BINARY
:
{
k
.
pz
=
malloc
(
keyLength
+
1
);
k
.
nLen
=
keyLength
;
memcpy
(
k
.
pz
,
val
,
keyLength
);
k
.
pz
[
keyLength
]
=
0
;
return
k
;
}
case
TSDB_DATA_TYPE_NCHAR
:
{
k
.
pz
=
malloc
(
keyLength
+
TSDB_NCHAR_SIZE
);
k
.
nLen
=
keyLength
/
TSDB_NCHAR_SIZE
;
wcsncpy
(
k
.
wpz
,
(
wchar_t
*
)
val
,
k
.
nLen
);
k
.
wpz
[
k
.
nLen
]
=
0
;
return
k
;
}
default:
return
k
;
}
tSkipListKey
k
=
{
0
};
tVariantCreateB
(
&
k
,
val
,
(
uint32_t
)
keyLength
,
(
uint32_t
)
type
);
return
k
;
}
void
tSkipListDestroyKey
(
tSkipListKey
*
pKey
)
{
tVariantDestroy
(
pKey
);
}
void
tSkipListDestroy
(
tSkipList
*
*
pSkipList
)
{
if
(
(
*
pSkipList
)
==
NULL
)
{
return
;
void
*
tSkipListDestroy
(
tSkipList
*
pSkipList
)
{
if
(
pSkipList
==
NULL
)
{
return
NULL
;
}
pthread_rwlock_wrlock
(
&
(
*
pSkipList
)
->
lock
);
tSkipListNode
*
pNode
=
(
*
pSkipList
)
->
pHead
.
pForward
[
0
];
pthread_rwlock_wrlock
(
&
pSkipList
->
lock
);
tSkipListNode
*
pNode
=
pSkipList
->
pHead
.
pForward
[
0
];
while
(
pNode
)
{
tSkipListNode
*
pTemp
=
pNode
;
pNode
=
pNode
->
pForward
[
0
];
tfree
(
pTemp
);
}
tfree
((
*
pSkipList
)
->
pHead
.
pForward
);
pthread_rwlock_unlock
(
&
(
*
pSkipList
)
->
lock
);
tfree
(
*
pSkipList
);
tfree
(
pSkipList
->
pHead
.
pForward
);
pthread_rwlock_unlock
(
&
pSkipList
->
lock
);
pthread_rwlock_destroy
(
&
pSkipList
->
lock
);
tfree
(
pSkipList
);
return
NULL
;
}
tSkipListNode
*
tSkipListPut
(
tSkipList
*
pSkipList
,
void
*
pData
,
tSkipListKey
*
pKey
,
int32_t
insertIdenticalKey
)
{
...
...
@@ -405,7 +339,7 @@ tSkipListNode *tSkipListPut(tSkipList *pSkipList, void *pData, tSkipListKey *pKe
pthread_rwlock_wrlock
(
&
pSkipList
->
lock
);
// record one node is put into skiplist
tSkipListDoRecordPut
Node
(
pSkipList
);
tSkipListDoRecordPut
(
pSkipList
);
tSkipListNode
*
px
=
&
pSkipList
->
pHead
;
...
...
@@ -419,9 +353,9 @@ tSkipListNode *tSkipListPut(tSkipList *pSkipList, void *pData, tSkipListKey *pKe
forward
[
i
]
=
px
;
}
// if the skiplist does not allowed identical key inserted, the new data will be discarded.
if
((
insertIdenticalKey
==
0
)
&&
forward
[
0
]
!=
&
pSkipList
->
pHead
&&
(
pSkipList
->
comparator
(
&
forward
[
0
]
->
key
,
pKey
)
==
0
))
{
/* ignore identical key*/
pthread_rwlock_unlock
(
&
pSkipList
->
lock
);
return
forward
[
0
];
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录