Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
215613f4
TDengine
项目概览
taosdata
/
TDengine
大约 1 年 前同步成功
通知
1184
Star
22015
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
215613f4
编写于
5月 07, 2022
作者:
C
Cary Xu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: set tsdb cfg for rollup sma
上级
ba7bd35a
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
80 addition
and
31 deletion
+80
-31
source/dnode/vnode/inc/vnode.h
source/dnode/vnode/inc/vnode.h
+19
-12
source/dnode/vnode/src/inc/tsdb.h
source/dnode/vnode/src/inc/tsdb.h
+4
-2
source/dnode/vnode/src/tsdb/tsdbCommit.c
source/dnode/vnode/src/tsdb/tsdbCommit.c
+6
-6
source/dnode/vnode/src/tsdb/tsdbFS.c
source/dnode/vnode/src/tsdb/tsdbFS.c
+1
-1
source/dnode/vnode/src/tsdb/tsdbOpen.c
source/dnode/vnode/src/tsdb/tsdbOpen.c
+41
-1
source/dnode/vnode/src/tsdb/tsdbRead.c
source/dnode/vnode/src/tsdb/tsdbRead.c
+6
-6
source/dnode/vnode/src/tsdb/tsdbSma.c
source/dnode/vnode/src/tsdb/tsdbSma.c
+2
-2
source/dnode/vnode/src/tsdb/tsdbWrite.c
source/dnode/vnode/src/tsdb/tsdbWrite.c
+1
-1
未找到文件。
source/dnode/vnode/inc/vnode.h
浏览文件 @
215613f4
...
@@ -39,9 +39,10 @@ extern "C" {
...
@@ -39,9 +39,10 @@ extern "C" {
#endif
#endif
// vnode
// vnode
typedef
struct
SVnode
SVnode
;
typedef
struct
SVnode
SVnode
;
typedef
struct
STsdbCfg
STsdbCfg
;
// todo: remove
typedef
struct
STsdbCfg
STsdbCfg
;
// todo: remove
typedef
struct
SVnodeCfg
SVnodeCfg
;
typedef
struct
STsdbKeepCfg
STsdbKeepCfg
;
typedef
struct
SVnodeCfg
SVnodeCfg
;
extern
const
SVnodeCfg
vnodeCfgDefault
;
extern
const
SVnodeCfg
vnodeCfgDefault
;
...
@@ -133,19 +134,25 @@ int32_t tqRetrieveDataBlock(SArray **ppCols, STqReadHandle *pHandle, uint64_t *p
...
@@ -133,19 +134,25 @@ int32_t tqRetrieveDataBlock(SArray **ppCols, STqReadHandle *pHandle, uint64_t *p
// structs
// structs
struct
STsdbCfg
{
struct
STsdbCfg
{
int8_t
precision
;
int8_t
precision
;
int8_t
update
;
int8_t
update
;
int8_t
compression
;
int8_t
compression
;
int8_t
slLevel
;
int8_t
slLevel
;
int32_t
minRows
;
int32_t
maxRows
;
int32_t
days
;
// just for save config, don't use in tsdbRead/tsdbCommit/..., and use STsdbKeepCfg in STsdb instead
int32_t
keep0
;
// just for save config, don't use in tsdbRead/tsdbCommit/..., and use STsdbKeepCfg in STsdb instead
int32_t
keep1
;
// just for save config, don't use in tsdbRead/tsdbCommit/..., and use STsdbKeepCfg in STsdb instead
int32_t
keep2
;
// just for save config, don't use in tsdbRead/tsdbCommit/..., and use STsdbKeepCfg in STsdb instead
SRetention
retentions
[
TSDB_RETENTION_MAX
];
};
struct
STsdbKeepCfg
{
int8_t
precision
;
// precision always use with below cfg
int32_t
days
;
int32_t
days
;
int32_t
minRows
;
int32_t
maxRows
;
int32_t
keep0
;
int32_t
keep0
;
int32_t
keep1
;
int32_t
keep1
;
int32_t
keep2
;
int32_t
keep2
;
// TODO: save to tsdb cfg file
int8_t
type
;
// ETsdbType
SRetention
retentions
[
TSDB_RETENTION_MAX
];
};
};
typedef
enum
{
typedef
enum
{
...
...
source/dnode/vnode/src/inc/tsdb.h
浏览文件 @
215613f4
...
@@ -70,9 +70,10 @@ struct SSmaEnvs {
...
@@ -70,9 +70,10 @@ struct SSmaEnvs {
struct
STsdb
{
struct
STsdb
{
char
*
path
;
char
*
path
;
SVnode
*
pVnode
;
SVnode
*
pVnode
;
TdThreadMutex
mutex
;
bool
repoLocked
;
bool
repoLocked
;
int8_t
level
;
// retention level
int8_t
level
;
// retention level
TdThreadMutex
mutex
;
STsdbKeepCfg
keepCfg
;
STsdbMemTable
*
mem
;
STsdbMemTable
*
mem
;
STsdbMemTable
*
imem
;
STsdbMemTable
*
imem
;
SRtn
rtn
;
SRtn
rtn
;
...
@@ -185,6 +186,7 @@ struct STsdbFS {
...
@@ -185,6 +186,7 @@ struct STsdbFS {
#define REPO_ID(r) TD_VID((r)->pVnode)
#define REPO_ID(r) TD_VID((r)->pVnode)
#define REPO_CFG(r) (&(r)->pVnode->config.tsdbCfg)
#define REPO_CFG(r) (&(r)->pVnode->config.tsdbCfg)
#define REPO_KEEP_CFG(r) (&(r)->keepCfg)
#define REPO_LEVEL(r) ((r)->level)
#define REPO_LEVEL(r) ((r)->level)
#define REPO_FS(r) ((r)->fs)
#define REPO_FS(r) ((r)->fs)
#define REPO_META(r) ((r)->pVnode->pMeta)
#define REPO_META(r) ((r)->pVnode->pMeta)
...
@@ -830,7 +832,7 @@ typedef struct {
...
@@ -830,7 +832,7 @@ typedef struct {
#define TSDB_FS_ITER_FORWARD TSDB_ORDER_ASC
#define TSDB_FS_ITER_FORWARD TSDB_ORDER_ASC
#define TSDB_FS_ITER_BACKWARD TSDB_ORDER_DESC
#define TSDB_FS_ITER_BACKWARD TSDB_ORDER_DESC
STsdbFS
*
tsdbNewFS
(
const
STsdbCfg
*
pCfg
);
STsdbFS
*
tsdbNewFS
(
const
STsdb
Keep
Cfg
*
pCfg
);
void
*
tsdbFreeFS
(
STsdbFS
*
pfs
);
void
*
tsdbFreeFS
(
STsdbFS
*
pfs
);
int
tsdbOpenFS
(
STsdb
*
pRepo
);
int
tsdbOpenFS
(
STsdb
*
pRepo
);
void
tsdbCloseFS
(
STsdb
*
pRepo
);
void
tsdbCloseFS
(
STsdb
*
pRepo
);
...
...
source/dnode/vnode/src/tsdb/tsdbCommit.c
浏览文件 @
215613f4
...
@@ -210,7 +210,7 @@ int tsdbCommit(STsdb *pRepo) {
...
@@ -210,7 +210,7 @@ int tsdbCommit(STsdb *pRepo) {
}
}
void
tsdbGetRtnSnap
(
STsdb
*
pRepo
,
SRtn
*
pRtn
)
{
void
tsdbGetRtnSnap
(
STsdb
*
pRepo
,
SRtn
*
pRtn
)
{
STsdb
Cfg
*
pCfg
=
REPO
_CFG
(
pRepo
);
STsdb
KeepCfg
*
pCfg
=
REPO_KEEP
_CFG
(
pRepo
);
TSKEY
minKey
,
midKey
,
maxKey
,
now
;
TSKEY
minKey
,
midKey
,
maxKey
,
now
;
now
=
taosGetTimestamp
(
pCfg
->
precision
);
now
=
taosGetTimestamp
(
pCfg
->
precision
);
...
@@ -304,9 +304,9 @@ static void tsdbSeekCommitIter(SCommitH *pCommith, TSKEY key) {
...
@@ -304,9 +304,9 @@ static void tsdbSeekCommitIter(SCommitH *pCommith, TSKEY key) {
}
}
static
int
tsdbNextCommitFid
(
SCommitH
*
pCommith
)
{
static
int
tsdbNextCommitFid
(
SCommitH
*
pCommith
)
{
STsdb
*
pRepo
=
TSDB_COMMIT_REPO
(
pCommith
);
STsdb
*
pRepo
=
TSDB_COMMIT_REPO
(
pCommith
);
STsdb
Cfg
*
pCfg
=
REPO
_CFG
(
pRepo
);
STsdb
KeepCfg
*
pCfg
=
REPO_KEEP
_CFG
(
pRepo
);
int
fid
=
TSDB_IVLD_FID
;
int
fid
=
TSDB_IVLD_FID
;
for
(
int
i
=
0
;
i
<
pCommith
->
niters
;
i
++
)
{
for
(
int
i
=
0
;
i
<
pCommith
->
niters
;
i
++
)
{
SCommitIter
*
pIter
=
pCommith
->
iters
+
i
;
SCommitIter
*
pIter
=
pCommith
->
iters
+
i
;
...
@@ -337,8 +337,8 @@ static void tsdbDestroyCommitH(SCommitH *pCommith) {
...
@@ -337,8 +337,8 @@ static void tsdbDestroyCommitH(SCommitH *pCommith) {
}
}
static
int
tsdbCommitToFile
(
SCommitH
*
pCommith
,
SDFileSet
*
pSet
,
int
fid
)
{
static
int
tsdbCommitToFile
(
SCommitH
*
pCommith
,
SDFileSet
*
pSet
,
int
fid
)
{
STsdb
*
pRepo
=
TSDB_COMMIT_REPO
(
pCommith
);
STsdb
*
pRepo
=
TSDB_COMMIT_REPO
(
pCommith
);
STsdb
Cfg
*
pCfg
=
REPO
_CFG
(
pRepo
);
STsdb
KeepCfg
*
pCfg
=
REPO_KEEP
_CFG
(
pRepo
);
ASSERT
(
pSet
==
NULL
||
pSet
->
fid
==
fid
);
ASSERT
(
pSet
==
NULL
||
pSet
->
fid
==
fid
);
...
...
source/dnode/vnode/src/tsdb/tsdbFS.c
浏览文件 @
215613f4
...
@@ -191,7 +191,7 @@ static int tsdbAddDFileSetToStatus(SFSStatus *pStatus, const SDFileSet *pSet) {
...
@@ -191,7 +191,7 @@ static int tsdbAddDFileSetToStatus(SFSStatus *pStatus, const SDFileSet *pSet) {
}
}
// ================== STsdbFS
// ================== STsdbFS
STsdbFS
*
tsdbNewFS
(
const
STsdbCfg
*
pCfg
)
{
STsdbFS
*
tsdbNewFS
(
const
STsdb
Keep
Cfg
*
pCfg
)
{
int
keep
=
pCfg
->
keep2
;
int
keep
=
pCfg
->
keep2
;
int
days
=
pCfg
->
days
;
int
days
=
pCfg
->
days
;
int
maxFSet
=
TSDB_MAX_FSETS
(
keep
,
days
);
int
maxFSet
=
TSDB_MAX_FSETS
(
keep
,
days
);
...
...
source/dnode/vnode/src/tsdb/tsdbOpen.c
浏览文件 @
215613f4
...
@@ -15,6 +15,8 @@
...
@@ -15,6 +15,8 @@
#include "tsdb.h"
#include "tsdb.h"
static
int
tsdbSetKeepCfg
(
STsdbCfg
*
pCfg
,
STsdbKeepCfg
*
pKeepCfg
,
int8_t
type
);
static
int
tsdbOpenImpl
(
SVnode
*
pVnode
,
int8_t
type
,
STsdb
**
ppTsdb
,
const
char
*
dir
,
int8_t
level
);
static
int
tsdbOpenImpl
(
SVnode
*
pVnode
,
int8_t
type
,
STsdb
**
ppTsdb
,
const
char
*
dir
,
int8_t
level
);
int
tsdbOpen
(
SVnode
*
pVnode
,
int8_t
type
)
{
int
tsdbOpen
(
SVnode
*
pVnode
,
int8_t
type
)
{
...
@@ -37,6 +39,43 @@ int tsdbOpen(SVnode *pVnode, int8_t type) {
...
@@ -37,6 +39,43 @@ int tsdbOpen(SVnode *pVnode, int8_t type) {
return
0
;
return
0
;
}
}
static
int
tsdbSetKeepCfg
(
STsdbCfg
*
pCfg
,
STsdbKeepCfg
*
pKeepCfg
,
int8_t
type
)
{
pKeepCfg
->
precision
=
pCfg
->
precision
;
switch
(
type
)
{
case
TSDB_TYPE_TSDB
:
pKeepCfg
->
days
=
pCfg
->
days
;
pKeepCfg
->
keep0
=
pCfg
->
keep0
;
pKeepCfg
->
keep1
=
pCfg
->
keep1
;
pKeepCfg
->
keep2
=
pCfg
->
keep2
;
break
;
case
TSDB_TYPE_TSMA
:
ASSERT
(
0
);
break
;
case
TSDB_TYPE_RSMA_L0
:
pKeepCfg
->
days
=
pCfg
->
days
;
pKeepCfg
->
keep0
=
pCfg
->
keep0
;
pKeepCfg
->
keep1
=
pCfg
->
keep1
;
pKeepCfg
->
keep2
=
pCfg
->
keep2
;
break
;
case
TSDB_TYPE_RSMA_L1
:
pKeepCfg
->
days
=
pCfg
->
days
;
pKeepCfg
->
keep0
=
pCfg
->
keep0
;
pKeepCfg
->
keep1
=
pCfg
->
keep1
;
pKeepCfg
->
keep2
=
pCfg
->
keep2
;
break
;
case
TSDB_TYPE_RSMA_L2
:
pKeepCfg
->
days
=
pCfg
->
days
;
pKeepCfg
->
keep0
=
pCfg
->
keep0
;
pKeepCfg
->
keep1
=
pCfg
->
keep1
;
pKeepCfg
->
keep2
=
pCfg
->
keep2
;
break
;
default:
ASSERT
(
0
);
break
;
}
return
0
;
}
/**
/**
* @brief
* @brief
*
*
...
@@ -68,7 +107,8 @@ int tsdbOpenImpl(SVnode *pVnode, int8_t type, STsdb **ppTsdb, const char *dir, i
...
@@ -68,7 +107,8 @@ int tsdbOpenImpl(SVnode *pVnode, int8_t type, STsdb **ppTsdb, const char *dir, i
pTsdb
->
level
=
level
;
pTsdb
->
level
=
level
;
pTsdb
->
repoLocked
=
false
;
pTsdb
->
repoLocked
=
false
;
taosThreadMutexInit
(
&
pTsdb
->
mutex
,
NULL
);
taosThreadMutexInit
(
&
pTsdb
->
mutex
,
NULL
);
pTsdb
->
fs
=
tsdbNewFS
(
REPO_CFG
(
pTsdb
));
tsdbSetKeepCfg
(
REPO_CFG
(
pTsdb
),
REPO_KEEP_CFG
(
pTsdb
),
type
);
pTsdb
->
fs
=
tsdbNewFS
(
REPO_KEEP_CFG
(
pTsdb
));
// create dir (TODO: use tfsMkdir)
// create dir (TODO: use tfsMkdir)
taosMkDir
(
pTsdb
->
path
);
taosMkDir
(
pTsdb
->
path
);
...
...
source/dnode/vnode/src/tsdb/tsdbRead.c
浏览文件 @
215613f4
...
@@ -320,7 +320,7 @@ static bool emptyQueryTimewindow(STsdbReadHandle* pTsdbReadHandle) {
...
@@ -320,7 +320,7 @@ static bool emptyQueryTimewindow(STsdbReadHandle* pTsdbReadHandle) {
// Update the query time window according to the data time to live(TTL) information, in order to avoid to return
// Update the query time window according to the data time to live(TTL) information, in order to avoid to return
// the expired data to client, even it is queried already.
// the expired data to client, even it is queried already.
static
int64_t
getEarliestValidTimestamp
(
STsdb
*
pTsdb
)
{
static
int64_t
getEarliestValidTimestamp
(
STsdb
*
pTsdb
)
{
STsdb
Cfg
*
pCfg
=
REPO
_CFG
(
pTsdb
);
STsdb
KeepCfg
*
pCfg
=
REPO_KEEP
_CFG
(
pTsdb
);
int64_t
now
=
taosGetTimestamp
(
pCfg
->
precision
);
int64_t
now
=
taosGetTimestamp
(
pCfg
->
precision
);
return
now
-
(
tsTickPerDay
[
pCfg
->
precision
]
*
pCfg
->
keep2
)
+
1
;
// needs to add one tick
return
now
-
(
tsTickPerDay
[
pCfg
->
precision
]
*
pCfg
->
keep2
)
+
1
;
// needs to add one tick
...
@@ -2425,7 +2425,7 @@ static int32_t getFirstFileDataBlock(STsdbReadHandle* pTsdbReadHandle, bool* exi
...
@@ -2425,7 +2425,7 @@ static int32_t getFirstFileDataBlock(STsdbReadHandle* pTsdbReadHandle, bool* exi
int32_t
numOfBlocks
=
0
;
int32_t
numOfBlocks
=
0
;
int32_t
numOfTables
=
(
int32_t
)
taosArrayGetSize
(
pTsdbReadHandle
->
pTableCheckInfo
);
int32_t
numOfTables
=
(
int32_t
)
taosArrayGetSize
(
pTsdbReadHandle
->
pTableCheckInfo
);
STsdb
Cfg
*
pCfg
=
REPO
_CFG
(
pTsdbReadHandle
->
pTsdb
);
STsdb
KeepCfg
*
pCfg
=
REPO_KEEP
_CFG
(
pTsdbReadHandle
->
pTsdb
);
STimeWindow
win
=
TSWINDOW_INITIALIZER
;
STimeWindow
win
=
TSWINDOW_INITIALIZER
;
while
(
true
)
{
while
(
true
)
{
...
@@ -2531,8 +2531,8 @@ int32_t tsdbGetFileBlocksDistInfo(tsdbReaderT* queryHandle, STableBlockDistInfo*
...
@@ -2531,8 +2531,8 @@ int32_t tsdbGetFileBlocksDistInfo(tsdbReaderT* queryHandle, STableBlockDistInfo*
// find the start data block in file
// find the start data block in file
pTsdbReadHandle
->
locateStart
=
true
;
pTsdbReadHandle
->
locateStart
=
true
;
STsdb
Cfg
*
pCfg
=
REPO
_CFG
(
pTsdbReadHandle
->
pTsdb
);
STsdb
KeepCfg
*
pCfg
=
REPO_KEEP
_CFG
(
pTsdbReadHandle
->
pTsdb
);
int32_t
fid
=
getFileIdFromKey
(
pTsdbReadHandle
->
window
.
skey
,
pCfg
->
days
,
pCfg
->
precision
);
int32_t
fid
=
getFileIdFromKey
(
pTsdbReadHandle
->
window
.
skey
,
pCfg
->
days
,
pCfg
->
precision
);
tsdbRLockFS
(
pFileHandle
);
tsdbRLockFS
(
pFileHandle
);
tsdbFSIterInit
(
&
pTsdbReadHandle
->
fileIter
,
pFileHandle
,
pTsdbReadHandle
->
order
);
tsdbFSIterInit
(
&
pTsdbReadHandle
->
fileIter
,
pFileHandle
,
pTsdbReadHandle
->
order
);
...
@@ -2632,8 +2632,8 @@ static int32_t getDataBlocksInFiles(STsdbReadHandle* pTsdbReadHandle, bool* exis
...
@@ -2632,8 +2632,8 @@ static int32_t getDataBlocksInFiles(STsdbReadHandle* pTsdbReadHandle, bool* exis
// find the start data block in file
// find the start data block in file
if
(
!
pTsdbReadHandle
->
locateStart
)
{
if
(
!
pTsdbReadHandle
->
locateStart
)
{
pTsdbReadHandle
->
locateStart
=
true
;
pTsdbReadHandle
->
locateStart
=
true
;
STsdb
Cfg
*
pCfg
=
REPO
_CFG
(
pTsdbReadHandle
->
pTsdb
);
STsdb
KeepCfg
*
pCfg
=
REPO_KEEP
_CFG
(
pTsdbReadHandle
->
pTsdb
);
int32_t
fid
=
getFileIdFromKey
(
pTsdbReadHandle
->
window
.
skey
,
pCfg
->
days
,
pCfg
->
precision
);
int32_t
fid
=
getFileIdFromKey
(
pTsdbReadHandle
->
window
.
skey
,
pCfg
->
days
,
pCfg
->
precision
);
tsdbRLockFS
(
pFileHandle
);
tsdbRLockFS
(
pFileHandle
);
tsdbFSIterInit
(
&
pTsdbReadHandle
->
fileIter
,
pFileHandle
,
pTsdbReadHandle
->
order
);
tsdbFSIterInit
(
&
pTsdbReadHandle
->
fileIter
,
pFileHandle
,
pTsdbReadHandle
->
order
);
...
...
source/dnode/vnode/src/tsdb/tsdbSma.c
浏览文件 @
215613f4
...
@@ -1013,8 +1013,8 @@ static int32_t tsdbSetTSmaDataFile(STSmaWriteH *pSmaH, int64_t indexUid, int32_t
...
@@ -1013,8 +1013,8 @@ static int32_t tsdbSetTSmaDataFile(STSmaWriteH *pSmaH, int64_t indexUid, int32_t
* @return int32_t
* @return int32_t
*/
*/
static
int32_t
tsdbGetTSmaDays
(
STsdb
*
pTsdb
,
int64_t
interval
,
int32_t
storageLevel
)
{
static
int32_t
tsdbGetTSmaDays
(
STsdb
*
pTsdb
,
int64_t
interval
,
int32_t
storageLevel
)
{
STsdb
Cfg
*
pCfg
=
REPO
_CFG
(
pTsdb
);
STsdb
KeepCfg
*
pCfg
=
REPO_KEEP
_CFG
(
pTsdb
);
int32_t
daysPerFile
=
pCfg
->
days
;
int32_t
daysPerFile
=
pCfg
->
days
;
if
(
storageLevel
==
SMA_STORAGE_LEVEL_TSDB
)
{
if
(
storageLevel
==
SMA_STORAGE_LEVEL_TSDB
)
{
int32_t
days
=
SMA_STORAGE_TSDB_TIMES
*
(
interval
/
tsTickPerDay
[
pCfg
->
precision
]);
int32_t
days
=
SMA_STORAGE_TSDB_TIMES
*
(
interval
/
tsTickPerDay
[
pCfg
->
precision
]);
...
...
source/dnode/vnode/src/tsdb/tsdbWrite.c
浏览文件 @
215613f4
...
@@ -60,7 +60,7 @@ static int tsdbScanAndConvertSubmitMsg(STsdb *pTsdb, SSubmitReq *pMsg) {
...
@@ -60,7 +60,7 @@ static int tsdbScanAndConvertSubmitMsg(STsdb *pTsdb, SSubmitReq *pMsg) {
SSubmitBlk
*
pBlock
=
NULL
;
SSubmitBlk
*
pBlock
=
NULL
;
SSubmitBlkIter
blkIter
=
{
0
};
SSubmitBlkIter
blkIter
=
{
0
};
STSRow
*
row
=
NULL
;
STSRow
*
row
=
NULL
;
STsdb
Cfg
*
pCfg
=
REPO
_CFG
(
pTsdb
);
STsdb
KeepCfg
*
pCfg
=
REPO_KEEP
_CFG
(
pTsdb
);
TSKEY
now
=
taosGetTimestamp
(
pCfg
->
precision
);
TSKEY
now
=
taosGetTimestamp
(
pCfg
->
precision
);
TSKEY
minKey
=
now
-
tsTickPerDay
[
pCfg
->
precision
]
*
pCfg
->
keep2
;
TSKEY
minKey
=
now
-
tsTickPerDay
[
pCfg
->
precision
]
*
pCfg
->
keep2
;
TSKEY
maxKey
=
now
+
tsTickPerDay
[
pCfg
->
precision
]
*
pCfg
->
days
;
TSKEY
maxKey
=
now
+
tsTickPerDay
[
pCfg
->
precision
]
*
pCfg
->
days
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录