Skip to content

Commit

Permalink
Merge pull request #22404 from taosdata/fix/TD-25621-3.0
Browse files Browse the repository at this point in the history
fix: dup read lock on windows
  • Loading branch information
dapan1121 committed Aug 14, 2023
2 parents 1990a89 + 64a1636 commit c2417eb
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 11 deletions.
21 changes: 11 additions & 10 deletions source/dnode/vnode/src/meta/metaQuery.c
Original file line number Diff line number Diff line change
Expand Up @@ -1434,35 +1434,36 @@ int32_t metaGetInfo(SMeta *pMeta, int64_t uid, SMetaInfo *pInfo, SMetaReader *pR
int nData = 0;
int lock = 0;

metaRLock(pMeta);
if (pReader && !(pReader->flags & META_READER_NOLOCK)) {
lock = 1;
}

if(!lock) metaRLock(pMeta);

// search cache
if (metaCacheGet(pMeta, uid, pInfo) == 0) {
metaULock(pMeta);
if(!lock) metaULock(pMeta);
goto _exit;
}

// search TDB
if (tdbTbGet(pMeta->pUidIdx, &uid, sizeof(uid), &pData, &nData) < 0) {
// not found
metaULock(pMeta);
if(!lock) metaULock(pMeta);
code = TSDB_CODE_NOT_FOUND;
goto _exit;
}

metaULock(pMeta);
if(!lock) metaULock(pMeta);

pInfo->uid = uid;
pInfo->suid = ((SUidIdxVal *)pData)->suid;
pInfo->version = ((SUidIdxVal *)pData)->version;
pInfo->skmVer = ((SUidIdxVal *)pData)->skmVer;

if (pReader != NULL) {
lock = !(pReader->flags & META_READER_NOLOCK);
if (lock) {
metaULock(pReader->pMeta);
// metaReaderReleaseLock(pReader);
}
if (lock) {
metaULock(pReader->pMeta);
// metaReaderReleaseLock(pReader);
}
// upsert the cache
metaWLock(pMeta);
Expand Down
2 changes: 1 addition & 1 deletion source/libs/executor/src/scanoperator.c
Original file line number Diff line number Diff line change
Expand Up @@ -504,7 +504,7 @@ int32_t addTagPseudoColumnData(SReadHandle* pHandle, const SExprInfo* pExpr, int

// 1. check if it is existed in meta cache
if (pCache == NULL) {
pHandle->api.metaReaderFn.initReader(&mr, pHandle->vnode, META_READER_NOLOCK, &pHandle->api.metaFn);
pHandle->api.metaReaderFn.initReader(&mr, pHandle->vnode, 0, &pHandle->api.metaFn);
code = pHandle->api.metaReaderFn.getEntryGetUidCache(&mr, pBlock->info.id.uid);
if (code != TSDB_CODE_SUCCESS) {
// when encounter the TSDB_CODE_PAR_TABLE_NOT_EXIST error, we proceed.
Expand Down

0 comments on commit c2417eb

Please sign in to comment.