Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
aaab6de4
T
TDengine
项目概览
taosdata
/
TDengine
11 个月 前同步成功
通知
1179
Star
22014
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
aaab6de4
编写于
2月 23, 2022
作者:
H
Hongze Cheng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
more
上级
708fef9a
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
91 addition
and
85 deletion
+91
-85
source/libs/tdb/src/db/tdbPgCache.c
source/libs/tdb/src/db/tdbPgCache.c
+11
-7
source/libs/tdb/src/inc/tdbPgCache.h
source/libs/tdb/src/inc/tdbPgCache.h
+1
-0
source/libs/tdb/src/sqlite/pager.c
source/libs/tdb/src/sqlite/pager.c
+76
-78
source/libs/tdb/src/sqliteinc/sqliteInt.h
source/libs/tdb/src/sqliteinc/sqliteInt.h
+3
-0
未找到文件。
source/libs/tdb/src/db/tdbPgCache.c
浏览文件 @
aaab6de4
...
...
@@ -29,7 +29,8 @@ struct SPCache {
SPgHdr
*
pFree
;
};
#define PCACHE_PAGE_HASH(pgid) 0 // TODO
#define PCACHE_PAGE_HASH(pgid) 0 // TODO
#define PAGE_IS_UNPINNED(pPage) true // TODO
static
void
tdbPCacheInitLock
(
SPCache
*
pCache
);
static
void
tdbPCacheClearLock
(
SPCache
*
pCache
);
...
...
@@ -37,6 +38,7 @@ static void tdbPCacheLock(SPCache *pCache);
static
void
tdbPCacheUnlock
(
SPCache
*
pCache
);
static
bool
tdbPCacheLocked
(
SPCache
*
pCache
);
static
SPgHdr
*
tdbPCacheFetchImpl
(
SPCache
*
pCache
,
const
SPgid
*
pPgid
,
bool
alcNewPage
);
static
void
tdbPCachePinPage
(
SPgHdr
*
pPage
);
int
tdbOpenPCache
(
int
pageSize
,
int
cacheSize
,
int
extraSize
,
SPCache
**
ppCache
)
{
SPCache
*
pCache
;
...
...
@@ -113,14 +115,16 @@ static SPgHdr *tdbPCacheFetchImpl(SPCache *pCache, const SPgid *pPgid, bool alcN
pPage
=
pPage
->
pHashNext
;
}
if
(
pPage
)
{
// TODO: pin the page and return the page
return
pPage
;
}
else
if
(
!
alcNewPage
)
{
if
(
pPage
||
!
alcNewPage
)
{
if
(
pPage
)
tdbPCachePinPage
(
pPage
);
return
pPage
;
}
// Try other methods
return
pPage
;
}
static
void
tdbPCachePinPage
(
SPgHdr
*
pPage
)
{
if
(
PAGE_IS_UNPINNED
(
pPage
))
{
/* TODO */
}
}
\ No newline at end of file
source/libs/tdb/src/inc/tdbPgCache.h
浏览文件 @
aaab6de4
...
...
@@ -27,6 +27,7 @@ struct SPgHdr {
void
*
pData
;
void
*
pExtra
;
SPgid
pgid
;
uint8_t
isLocalPage
;
SPgHdr
*
pFreeNext
;
SPgHdr
*
pHashNext
;
};
...
...
source/libs/tdb/src/sqlite/pager.c
浏览文件 @
aaab6de4
...
...
@@ -82,7 +82,6 @@
// #define SPILLFLAG_NOSYNC 0x04 /* Spill is ok, but do not sync */
struct
Pager
{
sqlite3_vfs
*
pVfs
;
/* OS functions to use for IO */
u8
exclusiveMode
;
/* Boolean. True if locking_mode==EXCLUSIVE */
u8
journalMode
;
/* One of the PAGER_JOURNALMODE_* values */
u8
useJournal
;
/* Use a rollback journal on this file */
...
...
@@ -4099,86 +4098,85 @@ int sqlite3PagerOpen(Pager **ppPager, const char *zFilename, int nExtra, int fla
** + The value returned by sqlite3OsSectorSize()
** + The largest page size that can be written atomically.
*/
if
(
rc
==
SQLITE_OK
)
{
int
iDc
=
sqlite3OsDeviceCharacteristics
(
pPager
->
fd
);
if
(
!
readOnly
)
{
setSectorSize
(
pPager
);
assert
(
SQLITE_DEFAULT_PAGE_SIZE
<=
SQLITE_MAX_DEFAULT_PAGE_SIZE
);
if
(
szPageDflt
<
pPager
->
sectorSize
)
{
if
(
pPager
->
sectorSize
>
SQLITE_MAX_DEFAULT_PAGE_SIZE
)
{
szPageDflt
=
SQLITE_MAX_DEFAULT_PAGE_SIZE
;
}
else
{
szPageDflt
=
(
u32
)
pPager
->
sectorSize
;
}
}
}
pPager
->
noLock
=
sqlite3_uri_boolean
(
pPager
->
zFilename
,
"nolock"
,
0
);
if
((
iDc
&
SQLITE_IOCAP_IMMUTABLE
)
!=
0
||
sqlite3_uri_boolean
(
pPager
->
zFilename
,
"immutable"
,
0
))
{
vfsFlags
|=
SQLITE_OPEN_READONLY
;
goto
act_like_temp_file
;
}
}
/* The following call to PagerSetPagesize() serves to set the value of
** Pager.pageSize and to allocate the Pager.pTmpSpace buffer.
*/
if
(
rc
==
SQLITE_OK
)
{
assert
(
pPager
->
memDb
==
0
);
rc
=
sqlite3PagerSetPagesize
(
pPager
,
&
szPageDflt
,
-
1
);
testcase
(
rc
!=
SQLITE_OK
);
}
// if (rc == SQLITE_OK) {
// int iDc = sqlite3OsDeviceCharacteristics(pPager->fd);
// if (!readOnly) {
// setSectorSize(pPager);
// if (szPageDflt < pPager->sectorSize) {
// if (pPager->sectorSize > SQLITE_MAX_DEFAULT_PAGE_SIZE) {
// szPageDflt = SQLITE_MAX_DEFAULT_PAGE_SIZE;
// } else {
// szPageDflt = (u32)pPager->sectorSize;
// }
// }
// }
// pPager->noLock = sqlite3_uri_boolean(pPager->zFilename, "nolock", 0);
// if ((iDc & SQLITE_IOCAP_IMMUTABLE) != 0 || sqlite3_uri_boolean(pPager->zFilename, "immutable", 0)) {
// vfsFlags |= SQLITE_OPEN_READONLY;
// goto act_like_temp_file;
// }
// }
// /* The following call to PagerSetPagesize() serves to set the value of
// ** Pager.pageSize and to allocate the Pager.pTmpSpace buffer.
// */
// if (rc == SQLITE_OK) {
// assert(pPager->memDb == 0);
// rc = sqlite3PagerSetPagesize(pPager, &szPageDflt, -1);
// testcase(rc != SQLITE_OK);
// }
/* Initialize the PCache object. */
if
(
rc
==
SQLITE_OK
)
{
nExtra
=
ROUND8
(
nExtra
);
assert
(
nExtra
>=
8
&&
nExtra
<
1000
);
rc
=
sqlite3PcacheOpen
(
szPageDflt
,
nExtra
,
!
memDb
,
!
memDb
?
pagerStress
:
0
,
(
void
*
)
pPager
,
pPager
->
pPCache
);
}
/
/ /
* Initialize the PCache object. */
//
if (rc == SQLITE_OK) {
//
nExtra = ROUND8(nExtra);
//
assert(nExtra >= 8 && nExtra < 1000);
//
rc = sqlite3PcacheOpen(szPageDflt, nExtra, !memDb, !memDb ? pagerStress : 0, (void *)pPager, pPager->pPCache);
//
}
/* If an error occurred above, free the Pager structure and close the file.
*/
if
(
rc
!=
SQLITE_OK
)
{
sqlite3OsClose
(
pPager
->
fd
);
sqlite3PageFree
(
pPager
->
pTmpSpace
);
sqlite3_free
(
pPager
);
return
rc
;
}
/
/ /
* If an error occurred above, free the Pager structure and close the file.
//
*/
//
if (rc != SQLITE_OK) {
//
sqlite3OsClose(pPager->fd);
//
sqlite3PageFree(pPager->pTmpSpace);
//
sqlite3_free(pPager);
//
return rc;
//
}
PAGERTRACE
((
"OPEN %d %s
\n
"
,
FILEHANDLEID
(
pPager
->
fd
),
pPager
->
zFilename
));
IOTRACE
((
"OPEN %p %s
\n
"
,
pPager
,
pPager
->
zFilename
))
pPager
->
useJournal
=
(
u8
)
useJournal
;
pPager
->
mxPgno
=
SQLITE_MAX_PAGE_COUNT
;
pPager
->
tempFile
=
(
u8
)
tempFile
;
assert
(
tempFile
==
PAGER_LOCKINGMODE_NORMAL
||
tempFile
==
PAGER_LOCKINGMODE_EXCLUSIVE
);
assert
(
PAGER_LOCKINGMODE_EXCLUSIVE
==
1
);
pPager
->
exclusiveMode
=
(
u8
)
tempFile
;
pPager
->
changeCountDone
=
pPager
->
tempFile
;
pPager
->
memDb
=
(
u8
)
memDb
;
pPager
->
readOnly
=
(
u8
)
readOnly
;
assert
(
useJournal
||
pPager
->
tempFile
);
pPager
->
noSync
=
pPager
->
tempFile
;
if
(
pPager
->
noSync
)
{
assert
(
pPager
->
fullSync
==
0
);
assert
(
pPager
->
extraSync
==
0
);
assert
(
pPager
->
syncFlags
==
0
);
assert
(
pPager
->
walSyncFlags
==
0
);
}
else
{
pPager
->
fullSync
=
1
;
pPager
->
extraSync
=
0
;
pPager
->
syncFlags
=
SQLITE_SYNC_NORMAL
;
pPager
->
walSyncFlags
=
SQLITE_SYNC_NORMAL
|
(
SQLITE_SYNC_NORMAL
<<
2
);
}
pPager
->
nExtra
=
(
u16
)
nExtra
;
pPager
->
journalSizeLimit
=
SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT
;
assert
(
isOpen
(
pPager
->
fd
)
||
tempFile
);
setSectorSize
(
pPager
);
if
(
!
useJournal
)
{
pPager
->
journalMode
=
PAGER_JOURNALMODE_OFF
;
}
else
if
(
memDb
||
memJM
)
{
pPager
->
journalMode
=
PAGER_JOURNALMODE_MEMORY
;
}
pPager
->
xReiniter
=
xReinit
;
setGetterMethod
(
pPager
);
//
PAGERTRACE(("OPEN %d %s\n", FILEHANDLEID(pPager->fd), pPager->zFilename));
//
IOTRACE(("OPEN %p %s\n", pPager, pPager->zFilename))
//
pPager->useJournal = (u8)useJournal;
//
pPager->mxPgno = SQLITE_MAX_PAGE_COUNT;
//
pPager->tempFile = (u8)tempFile;
//
assert(tempFile == PAGER_LOCKINGMODE_NORMAL || tempFile == PAGER_LOCKINGMODE_EXCLUSIVE);
//
assert(PAGER_LOCKINGMODE_EXCLUSIVE == 1);
//
pPager->exclusiveMode = (u8)tempFile;
//
pPager->changeCountDone = pPager->tempFile;
//
pPager->memDb = (u8)memDb;
//
pPager->readOnly = (u8)readOnly;
//
assert(useJournal || pPager->tempFile);
//
pPager->noSync = pPager->tempFile;
//
if (pPager->noSync) {
//
assert(pPager->fullSync == 0);
//
assert(pPager->extraSync == 0);
//
assert(pPager->syncFlags == 0);
//
assert(pPager->walSyncFlags == 0);
//
} else {
//
pPager->fullSync = 1;
//
pPager->extraSync = 0;
//
pPager->syncFlags = SQLITE_SYNC_NORMAL;
//
pPager->walSyncFlags = SQLITE_SYNC_NORMAL | (SQLITE_SYNC_NORMAL << 2);
//
}
//
pPager->nExtra = (u16)nExtra;
//
pPager->journalSizeLimit = SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT;
//
assert(isOpen(pPager->fd) || tempFile);
//
setSectorSize(pPager);
//
if (!useJournal) {
//
pPager->journalMode = PAGER_JOURNALMODE_OFF;
//
} else if (memDb || memJM) {
//
pPager->journalMode = PAGER_JOURNALMODE_MEMORY;
//
}
//
pPager->xReiniter = xReinit;
//
setGetterMethod(pPager);
*
ppPager
=
pPager
;
return
SQLITE_OK
;
...
...
source/libs/tdb/src/sqliteinc/sqliteInt.h
浏览文件 @
aaab6de4
...
...
@@ -14,11 +14,14 @@
*/
#include <assert.h>
#include <fcntl.h>
#include <pthread.h>
#include <stddef.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#ifndef SQLITEINT_H
#define SQLITEINT_H
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录