提交 4755a907 编写于 作者: A Alex Duan

[TS-238-D]<fix>(tsdb): del block ok

上级 12f716b3
...@@ -22,7 +22,7 @@ enum { ...@@ -22,7 +22,7 @@ enum {
}; };
enum BlockSolve { enum BlockSolve {
BLOCK_RETAIN = 0, BLOCK_READ = 0,
BLOCK_MODIFY, BLOCK_MODIFY,
BLOCK_DELETE BLOCK_DELETE
}; };
...@@ -592,7 +592,7 @@ static int tsdbBlockSolve(STruncateH *ptru, SBlock *pBlock) { ...@@ -592,7 +592,7 @@ static int tsdbBlockSolve(STruncateH *ptru, SBlock *pBlock) {
// do nothing for no delete // do nothing for no delete
if(pBlock->keyFirst > pdel->ekey || pBlock->keyLast < pdel->skey) if(pBlock->keyFirst > pdel->ekey || pBlock->keyLast < pdel->skey)
return BLOCK_RETAIN; return BLOCK_READ;
// border block // border block
if(pBlock->keyFirst <= pdel->skey || pBlock->keyLast >= pdel->ekey) if(pBlock->keyFirst <= pdel->skey || pBlock->keyLast >= pdel->ekey)
...@@ -612,33 +612,36 @@ int tsdbRemoveDelBlocks(STruncateH *ptru, STableTruncateH * pItem) { ...@@ -612,33 +612,36 @@ int tsdbRemoveDelBlocks(STruncateH *ptru, STableTruncateH * pItem) {
for (int i = numOfBlocks - 1; i >= 0; --i) { for (int i = numOfBlocks - 1; i >= 0; --i) {
SBlock *pBlock = pItem->pInfo->blocks + i; SBlock *pBlock = pItem->pInfo->blocks + i;
int32_t solve = tsdbBlockSolve(ptru, pBlock); int32_t solve = tsdbBlockSolve(ptru, pBlock);
bool doDel = false;
if (solve == BLOCK_DELETE) { if (solve == BLOCK_DELETE) {
if (from == -1) if (from == -1)
from = i; from = i;
if (i == 0)
doDel = true;
} else { } else {
if(from != -1) if(from != -1) {
doDel = true;
}
// do del // do del
if (doDel) { int delCnt = from - i;
int delCnt = from - i + 1; memmove(pItem->pInfo->blocks + i + 1, pItem->pInfo->blocks + i + 1 + delCnt, (numOfBlocks - (i+1) - delCnt) * sizeof(SBlock));
memmove(pBlock, pItem->pInfo->blocks + i + delCnt, sizeof(SBlock) * delCnt);
delAll += delCnt; delAll += delCnt;
numOfBlocks -= delCnt;
from = -1;
}
} }
} }
if(from != -1) {
int delCnt = from;
memmove(pItem->pInfo->blocks, pItem->pInfo->blocks + delCnt, (numOfBlocks - delCnt) * sizeof(SBlock));
delAll += delCnt;
numOfBlocks -= delCnt;
}
// set value // set value
pItem->pBlkIdx->numOfBlocks -= delAll; pItem->pBlkIdx->numOfBlocks = numOfBlocks;
return delAll; return delAll;
} }
static void tsdbAddBlock(STruncateH *ptru, STableTruncateH *pItem, SBlock *pBlock) { static void tsdbAddBlock(STruncateH *ptru, STableTruncateH *pItem, SBlock *pBlock) {
taosArrayPush(ptru->aSubBlk, (const void *)pBlock); taosArrayPush(ptru->aSupBlk, (const void *)pBlock);
// have sub block // have sub block
if (pBlock->numOfSubBlocks > 1) { if (pBlock->numOfSubBlocks > 1) {
SBlock *jBlock = POINTER_SHIFT(pItem->pInfo, pBlock->offset);; SBlock *jBlock = POINTER_SHIFT(pItem->pInfo, pBlock->offset);;
...@@ -684,7 +687,7 @@ static int tsdbModifyBlocks(STruncateH *ptru, STableTruncateH *pItem) { ...@@ -684,7 +687,7 @@ static int tsdbModifyBlocks(STruncateH *ptru, STableTruncateH *pItem) {
for (int i = 0; i < pItem->pBlkIdx->numOfBlocks; ++i) { for (int i = 0; i < pItem->pBlkIdx->numOfBlocks; ++i) {
SBlock *pBlock = pItem->pInfo->blocks + i; SBlock *pBlock = pItem->pInfo->blocks + i;
int32_t solve = tsdbBlockSolve(ptru, pBlock); int32_t solve = tsdbBlockSolve(ptru, pBlock);
if (solve == BLOCK_RETAIN) { if (solve == BLOCK_READ) {
tsdbAddBlock(ptru, pItem, pBlock); tsdbAddBlock(ptru, pItem, pBlock);
continue; continue;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册