提交 2e2286e2 编写于 作者: H Hongze Cheng

fix commit coredump

上级 fb538e88
...@@ -256,7 +256,7 @@ int tsdbCommitTableData(SRWHelper *pHelper, SCommitIter *pCommitIter, SDataCols ...@@ -256,7 +256,7 @@ int tsdbCommitTableData(SRWHelper *pHelper, SCommitIter *pCommitIter, SDataCols
TSKEY keyFirst = tsdbNextIterKey(pCommitIter->pIter); TSKEY keyFirst = tsdbNextIterKey(pCommitIter->pIter);
if (keyFirst < 0 || keyFirst > maxKey) break; // iter over if (keyFirst < 0 || keyFirst > maxKey) break; // iter over
if (pIdx->offset <= 0 || keyFirst > pIdx->maxKey) { if (pIdx->len <= 0 || keyFirst > pIdx->maxKey) {
if (tsdbProcessAppendCommit(pHelper, pCommitIter, pDataCols, maxKey) < 0) return -1; if (tsdbProcessAppendCommit(pHelper, pCommitIter, pDataCols, maxKey) < 0) return -1;
blkIdx = pIdx->numOfBlocks; blkIdx = pIdx->numOfBlocks;
} else { } else {
...@@ -340,27 +340,30 @@ int tsdbWriteCompInfo(SRWHelper *pHelper) { ...@@ -340,27 +340,30 @@ int tsdbWriteCompInfo(SRWHelper *pHelper) {
} }
} }
} else { } else {
pHelper->pCompInfo->delimiter = TSDB_FILE_DELIMITER; if (pIdx->len > 0) {
pHelper->pCompInfo->uid = pHelper->tableInfo.uid; pHelper->pCompInfo->delimiter = TSDB_FILE_DELIMITER;
pHelper->pCompInfo->checksum = 0; pHelper->pCompInfo->uid = pHelper->tableInfo.uid;
ASSERT((pIdx->len - sizeof(SCompInfo) - sizeof(TSCKSUM)) % sizeof(SCompBlock) == 0); pHelper->pCompInfo->checksum = 0;
taosCalcChecksumAppend(0, (uint8_t *)pHelper->pCompInfo, pIdx->len); ASSERT(pIdx->len > sizeof(SCompInfo) + sizeof(TSCKSUM) &&
offset = lseek(pHelper->files.nHeadF.fd, 0, SEEK_END); (pIdx->len - sizeof(SCompInfo) - sizeof(TSCKSUM)) % sizeof(SCompBlock) == 0);
if (offset < 0) { taosCalcChecksumAppend(0, (uint8_t *)pHelper->pCompInfo, pIdx->len);
tsdbError("vgId:%d failed to lseek file %s since %s", REPO_ID(pHelper->pRepo), pHelper->files.nHeadF.fname, offset = lseek(pHelper->files.nHeadF.fd, 0, SEEK_END);
strerror(errno)); if (offset < 0) {
terrno = TAOS_SYSTEM_ERROR(errno); tsdbError("vgId:%d failed to lseek file %s since %s", REPO_ID(pHelper->pRepo), pHelper->files.nHeadF.fname,
return -1; strerror(errno));
} terrno = TAOS_SYSTEM_ERROR(errno);
pIdx->offset = offset; return -1;
pIdx->uid = pHelper->tableInfo.uid; }
ASSERT(pIdx->offset >= TSDB_FILE_HEAD_SIZE); pIdx->offset = offset;
pIdx->uid = pHelper->tableInfo.uid;
ASSERT(pIdx->offset >= TSDB_FILE_HEAD_SIZE);
if (twrite(pHelper->files.nHeadF.fd, (void *)(pHelper->pCompInfo), pIdx->len) < pIdx->len) { if (twrite(pHelper->files.nHeadF.fd, (void *)(pHelper->pCompInfo), pIdx->len) < pIdx->len) {
tsdbError("vgId:%d failed to write %d bytes to file %s since %s", REPO_ID(pHelper->pRepo), pIdx->len, tsdbError("vgId:%d failed to write %d bytes to file %s since %s", REPO_ID(pHelper->pRepo), pIdx->len,
pHelper->files.nHeadF.fname, strerror(errno)); pHelper->files.nHeadF.fname, strerror(errno));
terrno = TAOS_SYSTEM_ERROR(errno); terrno = TAOS_SYSTEM_ERROR(errno);
return -1; return -1;
}
} }
} }
...@@ -1337,9 +1340,9 @@ static int tsdbProcessAppendCommit(SRWHelper *pHelper, SCommitIter *pCommitIter, ...@@ -1337,9 +1340,9 @@ static int tsdbProcessAppendCommit(SRWHelper *pHelper, SCommitIter *pCommitIter,
int defaultRowsInBlock = pCfg->maxRowsPerFileBlock * 4 / 5; int defaultRowsInBlock = pCfg->maxRowsPerFileBlock * 4 / 5;
SCompBlock compBlock = {0}; SCompBlock compBlock = {0};
ASSERT(pIdx->offset <= 0 || keyFirst > pIdx->maxKey); ASSERT(pIdx->len <= 0 || keyFirst > pIdx->maxKey);
if (pIdx->hasLast) { // append to with last block if (pIdx->hasLast) { // append to with last block
ASSERT(pIdx->offset > 0); ASSERT(pIdx->len > 0);
SCompBlock *pCompBlock = blockAtIdx(pHelper, pIdx->numOfBlocks - 1); SCompBlock *pCompBlock = blockAtIdx(pHelper, pIdx->numOfBlocks - 1);
ASSERT(pCompBlock->last && pCompBlock->numOfRows < pCfg->minRowsPerFileBlock); ASSERT(pCompBlock->last && pCompBlock->numOfRows < pCfg->minRowsPerFileBlock);
tdResetDataCols(pDataCols); tdResetDataCols(pDataCols);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册