Submit the first version of merge import
This commit is contained in:
parent
d3941fe95b
commit
c012704a5b
|
@ -372,13 +372,60 @@ void vnodeCancelCommit(SVnodeObj *pVnode) {
|
||||||
taosTmrReset(vnodeProcessCommitTimer, pVnode->cfg.commitTime * 1000, pVnode, vnodeTmrCtrl, &pVnode->commitTimer);
|
taosTmrReset(vnodeProcessCommitTimer, pVnode->cfg.commitTime * 1000, pVnode, vnodeTmrCtrl, &pVnode->commitTimer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* The vnode cache lock should be hold before calling this interface
|
||||||
|
*/
|
||||||
|
SCacheBlock *vnodeGetFreeCacheBlock(SVnodeObj *pVnode) {
|
||||||
|
SCachePool *pPool = (SCachePool *)(pVnode->pCachePool);
|
||||||
|
SVnodeCfg *pCfg = &(pVnode->cfg);
|
||||||
|
SCacheBlock *pCacheBlock = NULL;
|
||||||
|
int skipped = 0;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
pCacheBlock = (SCacheBlock *)(pPool->pMem[((int64_t)pPool->freeSlot)]);
|
||||||
|
if (pCacheBlock->blockId == 0) break;
|
||||||
|
|
||||||
|
if (pCacheBlock->notFree) {
|
||||||
|
pPool->freeSlot++;
|
||||||
|
pPool->freeSlot = pPool->freeSlot % pCfg->cacheNumOfBlocks.totalBlocks;
|
||||||
|
skipped++;
|
||||||
|
if (skipped > pPool->threshold) {
|
||||||
|
vnodeCreateCommitThread(pVnode);
|
||||||
|
pthread_mutex_unlock(&pPool->vmutex);
|
||||||
|
dError("vid:%d committing process is too slow, notFreeSlots:%d....", pVnode->vnode, pPool->notFreeSlots);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
SMeterObj * pRelObj = pCacheBlock->pMeterObj;
|
||||||
|
SCacheInfo *pRelInfo = (SCacheInfo *)pRelObj->pCache;
|
||||||
|
int firstSlot = (pRelInfo->currentSlot - pRelInfo->numOfBlocks + 1 + pRelInfo->maxBlocks) % pRelInfo->maxBlocks;
|
||||||
|
pCacheBlock = pRelInfo->cacheBlocks[firstSlot];
|
||||||
|
if (pCacheBlock) {
|
||||||
|
pPool->freeSlot = pCacheBlock->index;
|
||||||
|
vnodeFreeCacheBlock(pCacheBlock);
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
pPool->freeSlot = (pPool->freeSlot + 1) % pCfg->cacheNumOfBlocks.totalBlocks;
|
||||||
|
skipped++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pCacheBlock = (SCacheBlock *)(pPool->pMem[pPool->freeSlot]);
|
||||||
|
pCacheBlock->index = pPool->freeSlot;
|
||||||
|
pCacheBlock->notFree = 1;
|
||||||
|
pPool->freeSlot = (pPool->freeSlot + 1) % pCfg->cacheNumOfBlocks.totalBlocks;
|
||||||
|
pPool->notFreeSlots++;
|
||||||
|
|
||||||
|
return pCacheBlock;
|
||||||
|
}
|
||||||
|
|
||||||
int vnodeAllocateCacheBlock(SMeterObj *pObj) {
|
int vnodeAllocateCacheBlock(SMeterObj *pObj) {
|
||||||
int index;
|
int index;
|
||||||
SCachePool * pPool;
|
SCachePool * pPool;
|
||||||
SCacheBlock *pCacheBlock;
|
SCacheBlock *pCacheBlock;
|
||||||
SCacheInfo * pInfo;
|
SCacheInfo * pInfo;
|
||||||
SVnodeObj * pVnode;
|
SVnodeObj * pVnode;
|
||||||
int skipped = 0, commit = 0;
|
int commit = 0;
|
||||||
|
|
||||||
pVnode = vnodeList + pObj->vnode;
|
pVnode = vnodeList + pObj->vnode;
|
||||||
pPool = (SCachePool *)pVnode->pCachePool;
|
pPool = (SCachePool *)pVnode->pCachePool;
|
||||||
|
@ -406,45 +453,10 @@ int vnodeAllocateCacheBlock(SMeterObj *pObj) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (1) {
|
if ((pCacheBlock = vnodeGetFreeCacheBlock(pVnode)) == NULL) return -1;
|
||||||
pCacheBlock = (SCacheBlock *)(pPool->pMem[((int64_t)pPool->freeSlot)]);
|
|
||||||
if (pCacheBlock->blockId == 0) break;
|
|
||||||
|
|
||||||
if (pCacheBlock->notFree) {
|
|
||||||
pPool->freeSlot++;
|
|
||||||
pPool->freeSlot = pPool->freeSlot % pCfg->cacheNumOfBlocks.totalBlocks;
|
|
||||||
skipped++;
|
|
||||||
if (skipped > pPool->threshold) {
|
|
||||||
vnodeCreateCommitThread(pVnode);
|
|
||||||
pthread_mutex_unlock(&pPool->vmutex);
|
|
||||||
dError("vid:%d sid:%d id:%s, committing process is too slow, notFreeSlots:%d....",
|
|
||||||
pObj->vnode, pObj->sid, pObj->meterId, pPool->notFreeSlots);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
SMeterObj *pRelObj = pCacheBlock->pMeterObj;
|
|
||||||
SCacheInfo *pRelInfo = (SCacheInfo *)pRelObj->pCache;
|
|
||||||
int firstSlot = (pRelInfo->currentSlot - pRelInfo->numOfBlocks + 1 + pRelInfo->maxBlocks) % pRelInfo->maxBlocks;
|
|
||||||
pCacheBlock = pRelInfo->cacheBlocks[firstSlot];
|
|
||||||
if (pCacheBlock) {
|
|
||||||
pPool->freeSlot = pCacheBlock->index;
|
|
||||||
vnodeFreeCacheBlock(pCacheBlock);
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
pPool->freeSlot = (pPool->freeSlot + 1) % pCfg->cacheNumOfBlocks.totalBlocks;
|
|
||||||
skipped++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
index = pPool->freeSlot;
|
|
||||||
pPool->freeSlot++;
|
|
||||||
pPool->freeSlot = pPool->freeSlot % pCfg->cacheNumOfBlocks.totalBlocks;
|
|
||||||
pPool->notFreeSlots++;
|
|
||||||
|
|
||||||
|
index = pCacheBlock->index;
|
||||||
pCacheBlock->pMeterObj = pObj;
|
pCacheBlock->pMeterObj = pObj;
|
||||||
pCacheBlock->notFree = 1;
|
|
||||||
pCacheBlock->index = index;
|
|
||||||
|
|
||||||
pCacheBlock->offset[0] = ((char *)(pCacheBlock)) + sizeof(SCacheBlock) + pObj->numOfColumns * sizeof(char *);
|
pCacheBlock->offset[0] = ((char *)(pCacheBlock)) + sizeof(SCacheBlock) + pObj->numOfColumns * sizeof(char *);
|
||||||
for (int col = 1; col < pObj->numOfColumns; ++col)
|
for (int col = 1; col < pObj->numOfColumns; ++col)
|
||||||
|
|
|
@ -103,8 +103,8 @@ void vnodeGetDnameFromLname(char *lhead, char *ldata, char *llast, char *dhead,
|
||||||
}
|
}
|
||||||
|
|
||||||
void vnodeGetHeadTname(char *nHeadName, char *nLastName, int vnode, int fileId) {
|
void vnodeGetHeadTname(char *nHeadName, char *nLastName, int vnode, int fileId) {
|
||||||
sprintf(nHeadName, "%s/vnode%d/db/v%df%d.t", tsDirectory, vnode, vnode, fileId);
|
if (nHeadName != NULL) sprintf(nHeadName, "%s/vnode%d/db/v%df%d.t", tsDirectory, vnode, vnode, fileId);
|
||||||
sprintf(nLastName, "%s/vnode%d/db/v%df%d.l", tsDirectory, vnode, vnode, fileId);
|
if (nLastName != NULL) sprintf(nLastName, "%s/vnode%d/db/v%df%d.l", tsDirectory, vnode, vnode, fileId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void vnodeCreateDataDirIfNeeded(int vnode, char *path) {
|
void vnodeCreateDataDirIfNeeded(int vnode, char *path) {
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue