fix definite lost while restore wal
This commit is contained in:
parent
e786c61a98
commit
820a87b654
|
@ -354,7 +354,7 @@ static void mndTransDropData(STrans *pTrans) {
|
||||||
mndTransDropActions(pTrans->redoActions);
|
mndTransDropActions(pTrans->redoActions);
|
||||||
mndTransDropActions(pTrans->undoActions);
|
mndTransDropActions(pTrans->undoActions);
|
||||||
if (pTrans->rpcRsp != NULL) {
|
if (pTrans->rpcRsp != NULL) {
|
||||||
rpcFreeCont(pTrans->rpcRsp);
|
free(pTrans->rpcRsp);
|
||||||
pTrans->rpcRsp = NULL;
|
pTrans->rpcRsp = NULL;
|
||||||
pTrans->rpcRspLen = 0;
|
pTrans->rpcRspLen = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,8 @@
|
||||||
#define _DEFAULT_SOURCE
|
#define _DEFAULT_SOURCE
|
||||||
#include "sdbInt.h"
|
#include "sdbInt.h"
|
||||||
|
|
||||||
|
static void sdbCheck(SSdb *pSdb, SSdbRow *pRow);
|
||||||
|
|
||||||
const char *sdbTableName(ESdbType type) {
|
const char *sdbTableName(ESdbType type) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case SDB_TRANS:
|
case SDB_TRANS:
|
||||||
|
@ -221,6 +223,8 @@ static int32_t sdbDeleteRow(SSdb *pSdb, SHashObj *hash, SSdbRaw *pRaw, SSdbRow *
|
||||||
|
|
||||||
pSdb->tableVer[pOldRow->type]++;
|
pSdb->tableVer[pOldRow->type]++;
|
||||||
sdbFreeRow(pSdb, pRow);
|
sdbFreeRow(pSdb, pRow);
|
||||||
|
|
||||||
|
sdbCheck(pSdb, pOldRow);
|
||||||
// sdbRelease(pSdb, pOldRow->pObj);
|
// sdbRelease(pSdb, pOldRow->pObj);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -305,6 +309,19 @@ void *sdbAcquire(SSdb *pSdb, ESdbType type, const void *pKey) {
|
||||||
return pRet;
|
return pRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void sdbCheck(SSdb *pSdb, SSdbRow *pRow) {
|
||||||
|
SRWLatch *pLock = &pSdb->locks[pRow->type];
|
||||||
|
taosRLockLatch(pLock);
|
||||||
|
|
||||||
|
int32_t ref = atomic_load_32(&pRow->refCount);
|
||||||
|
sdbPrintOper(pSdb, pRow, "checkRow");
|
||||||
|
if (ref <= 0 && pRow->status == SDB_STATUS_DROPPED) {
|
||||||
|
sdbFreeRow(pSdb, pRow);
|
||||||
|
}
|
||||||
|
|
||||||
|
taosRUnLockLatch(pLock);
|
||||||
|
}
|
||||||
|
|
||||||
void sdbRelease(SSdb *pSdb, void *pObj) {
|
void sdbRelease(SSdb *pSdb, void *pObj) {
|
||||||
if (pObj == NULL) return;
|
if (pObj == NULL) return;
|
||||||
|
|
||||||
|
@ -332,6 +349,7 @@ void *sdbFetch(SSdb *pSdb, ESdbType type, void *pIter, void **ppObj) {
|
||||||
SRWLatch *pLock = &pSdb->locks[type];
|
SRWLatch *pLock = &pSdb->locks[type];
|
||||||
taosRLockLatch(pLock);
|
taosRLockLatch(pLock);
|
||||||
|
|
||||||
|
#if 0
|
||||||
if (pIter != NULL) {
|
if (pIter != NULL) {
|
||||||
SSdbRow *pLastRow = *(SSdbRow **)pIter;
|
SSdbRow *pLastRow = *(SSdbRow **)pIter;
|
||||||
int32_t ref = atomic_load_32(&pLastRow->refCount);
|
int32_t ref = atomic_load_32(&pLastRow->refCount);
|
||||||
|
@ -339,6 +357,7 @@ void *sdbFetch(SSdb *pSdb, ESdbType type, void *pIter, void **ppObj) {
|
||||||
sdbFreeRow(pSdb, pLastRow);
|
sdbFreeRow(pSdb, pLastRow);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
SSdbRow **ppRow = taosHashIterate(hash, pIter);
|
SSdbRow **ppRow = taosHashIterate(hash, pIter);
|
||||||
while (ppRow != NULL) {
|
while (ppRow != NULL) {
|
||||||
|
|
Loading…
Reference in New Issue