Merge pull request #26750 from taosdata/fix/refactorTqBackend
Fix/refactorTqBackend
This commit is contained in:
commit
b0d28315ad
|
@ -39,13 +39,15 @@ int32_t streamTaskSnapReaderOpen(STQ* pTq, int64_t sver, int64_t ever, SStreamTa
|
||||||
// alloc
|
// alloc
|
||||||
pReader = (SStreamTaskReader*)taosMemoryCalloc(1, sizeof(SStreamTaskReader));
|
pReader = (SStreamTaskReader*)taosMemoryCalloc(1, sizeof(SStreamTaskReader));
|
||||||
if (pReader == NULL) {
|
if (pReader == NULL) {
|
||||||
code = TSDB_CODE_OUT_OF_MEMORY;
|
TAOS_CHECK_RETURN(TSDB_CODE_OUT_OF_MEMORY);
|
||||||
goto _err;
|
|
||||||
}
|
}
|
||||||
pReader->pTq = pTq;
|
pReader->pTq = pTq;
|
||||||
pReader->sver = sver;
|
pReader->sver = sver;
|
||||||
pReader->ever = ever;
|
pReader->ever = ever;
|
||||||
pReader->tdbTbList = taosArrayInit(4, sizeof(STablePair));
|
pReader->tdbTbList = taosArrayInit(4, sizeof(STablePair));
|
||||||
|
if (pReader->tdbTbList == NULL) {
|
||||||
|
TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, NULL, _err);
|
||||||
|
}
|
||||||
|
|
||||||
STablePair pair1 = {.tbl = pTq->pStreamMeta->pTaskDb, .type = SNAP_DATA_STREAM_TASK};
|
STablePair pair1 = {.tbl = pTq->pStreamMeta->pTaskDb, .type = SNAP_DATA_STREAM_TASK};
|
||||||
taosArrayPush(pReader->tdbTbList, &pair1);
|
taosArrayPush(pReader->tdbTbList, &pair1);
|
||||||
|
@ -60,16 +62,14 @@ int32_t streamTaskSnapReaderOpen(STQ* pTq, int64_t sver, int64_t ever, SStreamTa
|
||||||
if (code) {
|
if (code) {
|
||||||
tqInfo("vgId:%d, vnode stream-task snapshot reader failed to open, reason: %s", TD_VID(pTq->pVnode),
|
tqInfo("vgId:%d, vnode stream-task snapshot reader failed to open, reason: %s", TD_VID(pTq->pVnode),
|
||||||
tstrerror(code));
|
tstrerror(code));
|
||||||
taosMemoryFree(pReader);
|
TAOS_CHECK_GOTO(code, NULL, _err);
|
||||||
goto _err;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
code = tdbTbcMoveToFirst(pReader->pCur);
|
code = tdbTbcMoveToFirst(pReader->pCur);
|
||||||
if (code) {
|
if (code) {
|
||||||
tqInfo("vgId:%d, vnode stream-task snapshot reader failed to iterate, reason: %s", TD_VID(pTq->pVnode),
|
tqInfo("vgId:%d, vnode stream-task snapshot reader failed to iterate, reason: %s", TD_VID(pTq->pVnode),
|
||||||
tstrerror(code));
|
tstrerror(code));
|
||||||
taosMemoryFree(pReader);
|
TAOS_CHECK_GOTO(code, NULL, _err);
|
||||||
goto _err;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tqDebug("vgId:%d, vnode stream-task snapshot reader opened", TD_VID(pTq->pVnode));
|
tqDebug("vgId:%d, vnode stream-task snapshot reader opened", TD_VID(pTq->pVnode));
|
||||||
|
@ -79,11 +79,14 @@ int32_t streamTaskSnapReaderOpen(STQ* pTq, int64_t sver, int64_t ever, SStreamTa
|
||||||
|
|
||||||
_err:
|
_err:
|
||||||
tqError("vgId:%d, vnode stream-task snapshot reader open failed since %s", TD_VID(pTq->pVnode), tstrerror(code));
|
tqError("vgId:%d, vnode stream-task snapshot reader open failed since %s", TD_VID(pTq->pVnode), tstrerror(code));
|
||||||
|
streamTaskSnapReaderClose(pReader);
|
||||||
*ppReader = NULL;
|
*ppReader = NULL;
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t streamTaskSnapReaderClose(SStreamTaskReader* pReader) {
|
int32_t streamTaskSnapReaderClose(SStreamTaskReader* pReader) {
|
||||||
|
if (pReader == NULL) return 0;
|
||||||
|
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
tqInfo("vgId:%d, vnode stream-task snapshot reader closed", TD_VID(pReader->pTq->pVnode));
|
tqInfo("vgId:%d, vnode stream-task snapshot reader closed", TD_VID(pReader->pTq->pVnode));
|
||||||
taosArrayDestroy(pReader->tdbTbList);
|
taosArrayDestroy(pReader->tdbTbList);
|
||||||
|
@ -116,6 +119,10 @@ NextTbl:
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
pVal = taosMemoryCalloc(1, tLen);
|
pVal = taosMemoryCalloc(1, tLen);
|
||||||
|
if (pVal == NULL) {
|
||||||
|
code = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
goto _err;
|
||||||
|
}
|
||||||
memcpy(pVal, tVal, tLen);
|
memcpy(pVal, tVal, tLen);
|
||||||
vLen = tLen;
|
vLen = tLen;
|
||||||
}
|
}
|
||||||
|
@ -174,8 +181,7 @@ int32_t streamTaskSnapWriterOpen(STQ* pTq, int64_t sver, int64_t ever, SStreamTa
|
||||||
// alloc
|
// alloc
|
||||||
pWriter = (SStreamTaskWriter*)taosMemoryCalloc(1, sizeof(*pWriter));
|
pWriter = (SStreamTaskWriter*)taosMemoryCalloc(1, sizeof(*pWriter));
|
||||||
if (pWriter == NULL) {
|
if (pWriter == NULL) {
|
||||||
code = TSDB_CODE_OUT_OF_MEMORY;
|
TAOS_CHECK_RETURN(TSDB_CODE_OUT_OF_MEMORY);
|
||||||
goto _err;
|
|
||||||
}
|
}
|
||||||
pWriter->pTq = pTq;
|
pWriter->pTq = pTq;
|
||||||
pWriter->sver = sver;
|
pWriter->sver = sver;
|
||||||
|
@ -184,12 +190,6 @@ int32_t streamTaskSnapWriterOpen(STQ* pTq, int64_t sver, int64_t ever, SStreamTa
|
||||||
*ppWriter = pWriter;
|
*ppWriter = pWriter;
|
||||||
tqDebug("vgId:%d, vnode stream-task snapshot writer opened", TD_VID(pTq->pVnode));
|
tqDebug("vgId:%d, vnode stream-task snapshot writer opened", TD_VID(pTq->pVnode));
|
||||||
return code;
|
return code;
|
||||||
|
|
||||||
_err:
|
|
||||||
tqError("vgId:%d, vnode stream-task snapshot writer failed to write since %s", TD_VID(pTq->pVnode), tstrerror(code));
|
|
||||||
*ppWriter = NULL;
|
|
||||||
return code;
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t streamTaskSnapWriterClose(SStreamTaskWriter* pWriter, int8_t rollback) {
|
int32_t streamTaskSnapWriterClose(SStreamTaskWriter* pWriter, int8_t rollback) {
|
||||||
|
@ -207,8 +207,7 @@ int32_t streamTaskSnapWriterClose(SStreamTaskWriter* pWriter, int8_t rollback) {
|
||||||
if (code) goto _err;
|
if (code) goto _err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tdbBegin(pTq->pStreamMeta->db, &pTq->pStreamMeta->txn, tdbDefaultMalloc, tdbDefaultFree, NULL, 0) < 0) {
|
if ((code = tdbBegin(pTq->pStreamMeta->db, &pTq->pStreamMeta->txn, tdbDefaultMalloc, tdbDefaultFree, NULL, 0)) < 0) {
|
||||||
code = -1;
|
|
||||||
taosMemoryFree(pWriter);
|
taosMemoryFree(pWriter);
|
||||||
goto _err;
|
goto _err;
|
||||||
}
|
}
|
||||||
|
@ -241,10 +240,11 @@ int32_t streamTaskSnapWrite(SStreamTaskWriter* pWriter, uint8_t* pData, uint32_t
|
||||||
|
|
||||||
int64_t key[2] = {taskId.streamId, taskId.taskId};
|
int64_t key[2] = {taskId.streamId, taskId.taskId};
|
||||||
streamMetaWLock(pTq->pStreamMeta);
|
streamMetaWLock(pTq->pStreamMeta);
|
||||||
if (tdbTbUpsert(pTq->pStreamMeta->pTaskDb, key, sizeof(int64_t) << 1, (uint8_t*)pData + sizeof(SSnapDataHdr),
|
if ((code =
|
||||||
nData - sizeof(SSnapDataHdr), pTq->pStreamMeta->txn) < 0) {
|
tdbTbUpsert(pTq->pStreamMeta->pTaskDb, key, sizeof(int64_t) << 1, (uint8_t*)pData + sizeof(SSnapDataHdr),
|
||||||
|
nData - sizeof(SSnapDataHdr), pTq->pStreamMeta->txn)) < 0) {
|
||||||
streamMetaWUnLock(pTq->pStreamMeta);
|
streamMetaWUnLock(pTq->pStreamMeta);
|
||||||
return -1;
|
return code;
|
||||||
}
|
}
|
||||||
streamMetaWUnLock(pTq->pStreamMeta);
|
streamMetaWUnLock(pTq->pStreamMeta);
|
||||||
} else if (pHdr->type == SNAP_DATA_STREAM_TASK_CHECKPOINT) {
|
} else if (pHdr->type == SNAP_DATA_STREAM_TASK_CHECKPOINT) {
|
||||||
|
|
|
@ -143,7 +143,7 @@ SListNode* streamBackendAddCompare(void* backend, void* arg);
|
||||||
void streamBackendDelCompare(void* backend, void* arg);
|
void streamBackendDelCompare(void* backend, void* arg);
|
||||||
int32_t streamStateCvtDataFormat(char* path, char* key, void* cfInst);
|
int32_t streamStateCvtDataFormat(char* path, char* key, void* cfInst);
|
||||||
|
|
||||||
STaskDbWrapper* taskDbOpen(const char* path, const char* key, int64_t chkptId, int64_t* processVer);
|
int32_t taskDbOpen(const char* path, const char* key, int64_t chkptId, int64_t* processVer, STaskDbWrapper** ppTaskDb);
|
||||||
void taskDbDestroy(void* pBackend, bool flush);
|
void taskDbDestroy(void* pBackend, bool flush);
|
||||||
void taskDbDestroy2(void* pBackend);
|
void taskDbDestroy2(void* pBackend);
|
||||||
|
|
||||||
|
@ -252,7 +252,7 @@ int32_t taskDbDestroySnap(void* arg, SArray* pSnapInfo);
|
||||||
|
|
||||||
int32_t taskDbDoCheckpoint(void* arg, int64_t chkpId, int64_t processId);
|
int32_t taskDbDoCheckpoint(void* arg, int64_t chkpId, int64_t processId);
|
||||||
|
|
||||||
SBkdMgt* bkdMgtCreate(char* path);
|
int32_t bkdMgtCreate(char* path, SBkdMgt **bm);
|
||||||
int32_t bkdMgtAddChkp(SBkdMgt* bm, char* task, char* path);
|
int32_t bkdMgtAddChkp(SBkdMgt* bm, char* task, char* path);
|
||||||
int32_t bkdMgtGetDelta(SBkdMgt* bm, char* taskId, int64_t chkpId, SArray* list, char* name);
|
int32_t bkdMgtGetDelta(SBkdMgt* bm, char* taskId, int64_t chkpId, SArray* list, char* name);
|
||||||
int32_t bkdMgtDumpTo(SBkdMgt* bm, char* taskId, char* dname);
|
int32_t bkdMgtDumpTo(SBkdMgt* bm, char* taskId, char* dname);
|
||||||
|
|
|
@ -2525,35 +2525,35 @@ _EXIT:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
STaskDbWrapper* taskDbOpen(const char* path, const char* key, int64_t chkptId, int64_t* processVer) {
|
int32_t taskDbOpen(const char* path, const char* key, int64_t chkptId, int64_t* processVer, STaskDbWrapper** ppTaskDb) {
|
||||||
char* statePath = NULL;
|
char* statePath = NULL;
|
||||||
char* dbPath = NULL;
|
char* dbPath = NULL;
|
||||||
int code = 0;
|
int code = 0;
|
||||||
terrno = 0;
|
|
||||||
if ((code = restoreCheckpointData(path, key, chkptId, &statePath, &dbPath, processVer)) < 0) {
|
if ((code = restoreCheckpointData(path, key, chkptId, &statePath, &dbPath, processVer)) < 0) {
|
||||||
terrno = code;
|
|
||||||
stError("failed to restore checkpoint data, path:%s, key:%s, checkpointId: %" PRId64 "reason:%s", path, key,
|
stError("failed to restore checkpoint data, path:%s, key:%s, checkpointId: %" PRId64 "reason:%s", path, key,
|
||||||
chkptId, tstrerror(terrno));
|
chkptId, tstrerror(code));
|
||||||
return NULL;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
STaskDbWrapper* pTaskDb = taskDbOpenImpl(key, statePath, dbPath);
|
STaskDbWrapper* pTaskDb = taskDbOpenImpl(key, statePath, dbPath);
|
||||||
if (pTaskDb != NULL) {
|
if (pTaskDb != NULL) {
|
||||||
int64_t chkpId = -1, ver = -1;
|
int64_t chkpId = -1, ver = -1;
|
||||||
if ((code = chkpLoadExtraInfo(dbPath, &chkpId, &ver) == 0)) {
|
if ((code = chkpLoadExtraInfo(dbPath, &chkpId, &ver)) == 0) {
|
||||||
*processVer = ver;
|
*processVer = ver;
|
||||||
} else {
|
} else {
|
||||||
terrno = code;
|
|
||||||
stError("failed to load extra info, path:%s, key:%s, checkpointId: %" PRId64 "reason:%s", path, key, chkptId,
|
stError("failed to load extra info, path:%s, key:%s, checkpointId: %" PRId64 "reason:%s", path, key, chkptId,
|
||||||
tstrerror(terrno));
|
tstrerror(code));
|
||||||
taskDbDestroy(pTaskDb, false);
|
taskDbDestroy(pTaskDb, false);
|
||||||
return NULL;
|
return code;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
code = TSDB_CODE_INVALID_PARA;
|
||||||
}
|
}
|
||||||
|
|
||||||
taosMemoryFree(dbPath);
|
taosMemoryFree(dbPath);
|
||||||
taosMemoryFree(statePath);
|
taosMemoryFree(statePath);
|
||||||
return pTaskDb;
|
*ppTaskDb = pTaskDb;
|
||||||
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
void taskDbDestroy(void* pDb, bool flush) {
|
void taskDbDestroy(void* pDb, bool flush) {
|
||||||
|
@ -2794,7 +2794,9 @@ int32_t streamStateCvtDataFormat(char* path, char* key, void* pCfInst) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
|
|
||||||
int64_t processVer = -1;
|
int64_t processVer = -1;
|
||||||
STaskDbWrapper* pTaskDb = taskDbOpen(path, key, 0, &processVer);
|
STaskDbWrapper* pTaskDb = NULL;
|
||||||
|
|
||||||
|
code = taskDbOpen(path, key, 0, &processVer, &pTaskDb);
|
||||||
RocksdbCfInst* pSrcBackend = pCfInst;
|
RocksdbCfInst* pSrcBackend = pCfInst;
|
||||||
|
|
||||||
for (int i = 0; i < nCf; i++) {
|
for (int i = 0; i < nCf; i++) {
|
||||||
|
@ -4626,10 +4628,11 @@ int32_t dbChkpGetDelta(SDbChkp* p, int64_t chkpId, SArray* list) {
|
||||||
|
|
||||||
void dbChkpDestroy(SDbChkp* pChkp);
|
void dbChkpDestroy(SDbChkp* pChkp);
|
||||||
|
|
||||||
SDbChkp* dbChkpCreate(char* path, int64_t initChkpId) {
|
int32_t dbChkpCreate(char* path, int64_t initChkpId, SDbChkp** ppChkp) {
|
||||||
|
int32_t code = 0;
|
||||||
SDbChkp* p = taosMemoryCalloc(1, sizeof(SDbChkp));
|
SDbChkp* p = taosMemoryCalloc(1, sizeof(SDbChkp));
|
||||||
if (p == NULL) {
|
if (p == NULL) {
|
||||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
code = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
goto _EXIT;
|
goto _EXIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4637,41 +4640,41 @@ SDbChkp* dbChkpCreate(char* path, int64_t initChkpId) {
|
||||||
p->preCkptId = -1;
|
p->preCkptId = -1;
|
||||||
p->pSST = taosArrayInit(64, sizeof(void*));
|
p->pSST = taosArrayInit(64, sizeof(void*));
|
||||||
if (p->pSST == NULL) {
|
if (p->pSST == NULL) {
|
||||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
code = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
dbChkpDestroy(p);
|
dbChkpDestroy(p);
|
||||||
return NULL;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
p->path = path;
|
p->path = path;
|
||||||
p->len = strlen(path) + 128;
|
p->len = strlen(path) + 128;
|
||||||
p->buf = taosMemoryCalloc(1, p->len);
|
p->buf = taosMemoryCalloc(1, p->len);
|
||||||
if (p->buf == NULL) {
|
if (p->buf == NULL) {
|
||||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
code = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
goto _EXIT;
|
goto _EXIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
p->idx = 0;
|
p->idx = 0;
|
||||||
p->pSstTbl[0] = taosHashInit(64, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_ENTRY_LOCK);
|
p->pSstTbl[0] = taosHashInit(64, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_ENTRY_LOCK);
|
||||||
if (p->pSstTbl[0] == NULL) {
|
if (p->pSstTbl[0] == NULL) {
|
||||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
code = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
goto _EXIT;
|
goto _EXIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
p->pSstTbl[1] = taosHashInit(64, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_ENTRY_LOCK);
|
p->pSstTbl[1] = taosHashInit(64, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_ENTRY_LOCK);
|
||||||
if (p->pSstTbl[1] == NULL) {
|
if (p->pSstTbl[1] == NULL) {
|
||||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
code = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
goto _EXIT;
|
goto _EXIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
p->pAdd = taosArrayInit(64, sizeof(void*));
|
p->pAdd = taosArrayInit(64, sizeof(void*));
|
||||||
if (p->pAdd == NULL) {
|
if (p->pAdd == NULL) {
|
||||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
code = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
goto _EXIT;
|
goto _EXIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
p->pDel = taosArrayInit(64, sizeof(void*));
|
p->pDel = taosArrayInit(64, sizeof(void*));
|
||||||
if (p->pDel == NULL) {
|
if (p->pDel == NULL) {
|
||||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
code = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
goto _EXIT;
|
goto _EXIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4679,15 +4682,15 @@ SDbChkp* dbChkpCreate(char* path, int64_t initChkpId) {
|
||||||
taosThreadRwlockInit(&p->rwLock, NULL);
|
taosThreadRwlockInit(&p->rwLock, NULL);
|
||||||
|
|
||||||
SArray* list = NULL;
|
SArray* list = NULL;
|
||||||
int32_t code = dbChkpGetDelta(p, initChkpId, list);
|
code = dbChkpGetDelta(p, initChkpId, list);
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
goto _EXIT;
|
goto _EXIT;
|
||||||
}
|
}
|
||||||
|
*ppChkp = p;
|
||||||
return p;
|
return code;
|
||||||
_EXIT:
|
_EXIT:
|
||||||
dbChkpDestroy(p);
|
dbChkpDestroy(p);
|
||||||
return NULL;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
void dbChkpDestroy(SDbChkp* pChkp) {
|
void dbChkpDestroy(SDbChkp* pChkp) {
|
||||||
|
@ -4880,35 +4883,36 @@ _ERROR:
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
SBkdMgt* bkdMgtCreate(char* path) {
|
int32_t bkdMgtCreate(char* path, SBkdMgt** mgt) {
|
||||||
terrno = 0;
|
int32_t code = 0;
|
||||||
SBkdMgt* p = taosMemoryCalloc(1, sizeof(SBkdMgt));
|
SBkdMgt* p = taosMemoryCalloc(1, sizeof(SBkdMgt));
|
||||||
if (p == NULL) {
|
if (p == NULL) {
|
||||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
code = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
return NULL;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
p->pDbChkpTbl = taosHashInit(64, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_ENTRY_LOCK);
|
p->pDbChkpTbl = taosHashInit(64, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_ENTRY_LOCK);
|
||||||
if (p->pDbChkpTbl == NULL) {
|
if (p->pDbChkpTbl == NULL) {
|
||||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
code = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
bkdMgtDestroy(p);
|
bkdMgtDestroy(p);
|
||||||
return NULL;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
p->path = taosStrdup(path);
|
p->path = taosStrdup(path);
|
||||||
if (p->path == NULL) {
|
if (p->path == NULL) {
|
||||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
code = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
bkdMgtDestroy(p);
|
bkdMgtDestroy(p);
|
||||||
return NULL;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (taosThreadRwlockInit(&p->rwLock, NULL) != 0) {
|
if (taosThreadRwlockInit(&p->rwLock, NULL) != 0) {
|
||||||
terrno = TAOS_SYSTEM_ERROR(errno);
|
code = TAOS_SYSTEM_ERROR(errno);
|
||||||
bkdMgtDestroy(p);
|
bkdMgtDestroy(p);
|
||||||
return NULL;
|
return code;
|
||||||
}
|
}
|
||||||
|
*mgt = p;
|
||||||
|
|
||||||
return p;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
void bkdMgtDestroy(SBkdMgt* bm) {
|
void bkdMgtDestroy(SBkdMgt* bm) {
|
||||||
|
@ -4949,11 +4953,11 @@ int32_t bkdMgtGetDelta(SBkdMgt* bm, char* taskId, int64_t chkpId, SArray* list,
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
SDbChkp* p = dbChkpCreate(path, chkpId);
|
SDbChkp* p = NULL;
|
||||||
if (p == NULL) {
|
code = dbChkpCreate(path, chkpId, &p);
|
||||||
|
if (code != 0) {
|
||||||
taosMemoryFree(path);
|
taosMemoryFree(path);
|
||||||
taosThreadRwlockUnlock(&bm->rwLock);
|
taosThreadRwlockUnlock(&bm->rwLock);
|
||||||
code = terrno;
|
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4986,8 +4990,9 @@ int32_t bkdMgtAddChkp(SBkdMgt* bm, char* task, char* path) {
|
||||||
taosThreadRwlockWrlock(&bm->rwLock);
|
taosThreadRwlockWrlock(&bm->rwLock);
|
||||||
SDbChkp** pp = taosHashGet(bm->pDbChkpTbl, task, strlen(task));
|
SDbChkp** pp = taosHashGet(bm->pDbChkpTbl, task, strlen(task));
|
||||||
if (pp == NULL) {
|
if (pp == NULL) {
|
||||||
SDbChkp* p = dbChkpCreate(path, 0);
|
SDbChkp* p = NULL;
|
||||||
if (p != NULL) {
|
code = dbChkpCreate(path, 0, &p);
|
||||||
|
if (code != 0) {
|
||||||
taosHashPut(bm->pDbChkpTbl, task, strlen(task), &p, sizeof(void*));
|
taosHashPut(bm->pDbChkpTbl, task, strlen(task), &p, sizeof(void*));
|
||||||
code = 0;
|
code = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -276,6 +276,7 @@ int32_t streamMetaMayCvtDbFormat(SStreamMeta* pMeta) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t streamTaskSetDb(SStreamMeta* pMeta, SStreamTask* pTask, const char* key) {
|
int32_t streamTaskSetDb(SStreamMeta* pMeta, SStreamTask* pTask, const char* key) {
|
||||||
|
int32_t code = 0;
|
||||||
int64_t chkpId = pTask->chkInfo.checkpointId;
|
int64_t chkpId = pTask->chkInfo.checkpointId;
|
||||||
|
|
||||||
streamMutexLock(&pMeta->backendMutex);
|
streamMutexLock(&pMeta->backendMutex);
|
||||||
|
@ -299,8 +300,8 @@ int32_t streamTaskSetDb(SStreamMeta* pMeta, SStreamTask* pTask, const char* key)
|
||||||
STaskDbWrapper* pBackend = NULL;
|
STaskDbWrapper* pBackend = NULL;
|
||||||
int64_t processVer = -1;
|
int64_t processVer = -1;
|
||||||
while (1) {
|
while (1) {
|
||||||
pBackend = taskDbOpen(pMeta->path, key, chkpId, &processVer);
|
code = taskDbOpen(pMeta->path, key, chkpId, &processVer, &pBackend);
|
||||||
if (pBackend != NULL) {
|
if (code == 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -319,7 +320,7 @@ int32_t streamTaskSetDb(SStreamMeta* pMeta, SStreamTask* pTask, const char* key)
|
||||||
|
|
||||||
if (processVer != -1) pTask->chkInfo.processedVer = processVer;
|
if (processVer != -1) pTask->chkInfo.processedVer = processVer;
|
||||||
|
|
||||||
int32_t code = taosHashPut(pMeta->pTaskDbUnique, key, strlen(key), &pBackend, sizeof(void*));
|
code = taosHashPut(pMeta->pTaskDbUnique, key, strlen(key), &pBackend, sizeof(void*));
|
||||||
if (code) {
|
if (code) {
|
||||||
stError("s-task:0x%x failed to put taskDb backend, code:out of memory", pTask->id.taskId);
|
stError("s-task:0x%x failed to put taskDb backend, code:out of memory", pTask->id.taskId);
|
||||||
}
|
}
|
||||||
|
@ -469,8 +470,8 @@ int32_t streamMetaOpen(const char* path, void* ahandle, FTaskBuild buildTaskFn,
|
||||||
|
|
||||||
pMeta->qHandle = taosInitScheduler(32, 1, "stream-chkp", NULL);
|
pMeta->qHandle = taosInitScheduler(32, 1, "stream-chkp", NULL);
|
||||||
|
|
||||||
pMeta->bkdChkptMgt = bkdMgtCreate(tpath);
|
code = bkdMgtCreate(tpath, (SBkdMgt**)&pMeta->bkdChkptMgt);
|
||||||
if (pMeta->bkdChkptMgt == NULL) {
|
if (code != 0) {
|
||||||
goto _err;
|
goto _err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1364,7 +1365,8 @@ int32_t streamMetaStartAllTasks(SStreamMeta* pMeta) {
|
||||||
(void)streamLaunchFillHistoryTask(pTask); // todo: how about retry launch fill-history task?
|
(void)streamLaunchFillHistoryTask(pTask); // todo: how about retry launch fill-history task?
|
||||||
}
|
}
|
||||||
|
|
||||||
(void) streamMetaAddTaskLaunchResult(pMeta, pTaskId->streamId, pTaskId->taskId, pInfo->checkTs, pInfo->readyTs, true);
|
(void)streamMetaAddTaskLaunchResult(pMeta, pTaskId->streamId, pTaskId->taskId, pInfo->checkTs, pInfo->readyTs,
|
||||||
|
true);
|
||||||
streamMetaReleaseTask(pMeta, pTask);
|
streamMetaReleaseTask(pMeta, pTask);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -1560,7 +1562,6 @@ int32_t streamMetaAddTaskLaunchResult(SStreamMeta* pMeta, int64_t streamId, int3
|
||||||
STaskInitTs initTs = {.start = startTs, .end = endTs, .success = ready};
|
STaskInitTs initTs = {.start = startTs, .end = endTs, .success = ready};
|
||||||
int32_t code = taosHashPut(pDst, &id, sizeof(id), &initTs, sizeof(STaskInitTs));
|
int32_t code = taosHashPut(pDst, &id, sizeof(id), &initTs, sizeof(STaskInitTs));
|
||||||
if (code) {
|
if (code) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t numOfTotal = streamMetaGetNumOfTasks(pMeta);
|
int32_t numOfTotal = streamMetaGetNumOfTasks(pMeta);
|
||||||
|
|
|
@ -432,13 +432,12 @@ TEST_F(BackendEnv, checkOpen) {
|
||||||
const char *path = "/tmp/backend/stream";
|
const char *path = "/tmp/backend/stream";
|
||||||
const char *dump = "/tmp/backend/stream/dump";
|
const char *dump = "/tmp/backend/stream/dump";
|
||||||
// taosMkDir(dump);
|
// taosMkDir(dump);
|
||||||
code = taosMulMkDir(dump);
|
taosMulMkDir(dump);
|
||||||
ASSERT(code == 0);
|
SBkdMgt *mgt = NULL;
|
||||||
|
|
||||||
SBkdMgt *mgt = bkdMgtCreate((char *)path);
|
code = bkdMgtCreate((char *)path, &mgt);
|
||||||
SArray *result = taosArrayInit(4, sizeof(void *));
|
SArray *result = taosArrayInit(4, sizeof(void *));
|
||||||
code = bkdMgtGetDelta(mgt, p->pTdbState->idstr, 3, result, (char *)dump);
|
bkdMgtGetDelta(mgt, p->pTdbState->idstr, 3, result, (char *)dump);
|
||||||
ASSERT(code == 0);
|
|
||||||
|
|
||||||
code = taskDbDoCheckpoint(p->pTdbState->pOwner->pBackend, 4, 0);
|
code = taskDbDoCheckpoint(p->pTdbState->pOwner->pBackend, 4, 0);
|
||||||
ASSERT(code == 0);
|
ASSERT(code == 0);
|
||||||
|
|
|
@ -53,7 +53,7 @@ TEST(TD_STREAM_UPDATE_TEST, update) {
|
||||||
void *p = NULL;
|
void *p = NULL;
|
||||||
// SBackendWrapper *p = streamBackendInit(streamPath, -1, 2);
|
// SBackendWrapper *p = streamBackendInit(streamPath, -1, 2);
|
||||||
// p = taskDbOpen((char *)streamPath, (char *)"test", -1);
|
// p = taskDbOpen((char *)streamPath, (char *)"test", -1);
|
||||||
p = bkdMgtCreate((char *)streamPath);
|
int32_t code = bkdMgtCreate((char *)streamPath, (SBkdMgt **)&p);
|
||||||
|
|
||||||
// const int64_t interval = 20 * 1000;
|
// const int64_t interval = 20 * 1000;
|
||||||
// const int64_t watermark = 10 * 60 * 1000;
|
// const int64_t watermark = 10 * 60 * 1000;
|
||||||
|
|
Loading…
Reference in New Issue