enh: use optimistic locking to protect snapshot reader open against vnode commit
This commit is contained in:
parent
048f8ee7c5
commit
bbe6fe02d2
|
@ -448,8 +448,8 @@ _exit:
|
|||
taosMemoryFree(reader[0]);
|
||||
reader[0] = NULL;
|
||||
} else {
|
||||
tsdbInfo("vgId:%d tsdb snapshot reader opened. sver:%" PRId64 " ever:%" PRId64 " type:%d", TD_VID(tsdb->pVnode),
|
||||
sver, ever, type);
|
||||
tsdbInfo("vgId:%d, tsdb snapshot incremental reader opened. sver:%" PRId64 " ever:%" PRId64 " type:%d",
|
||||
TD_VID(tsdb->pVnode), sver, ever, type);
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
|
|
@ -69,7 +69,8 @@ _exit:
|
|||
taosMemoryFree(reader[0]);
|
||||
reader[0] = NULL;
|
||||
} else {
|
||||
tsdbInfo("vgId:%d tsdb snapshot reader opened. sver:0, ever:%" PRId64 " type:%d", TD_VID(tsdb->pVnode), ever, type);
|
||||
tsdbInfo("vgId:%d, tsdb snapshot raw reader opened. sver:0, ever:%" PRId64 " type:%d", TD_VID(tsdb->pVnode), ever,
|
||||
type);
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
|
|
@ -172,6 +172,23 @@ int32_t vnodeSnapReaderOpen(SVnode *pVnode, SSnapshotParam *pParam, SVSnapReader
|
|||
goto _err;
|
||||
}
|
||||
|
||||
// open tsdb snapshot raw reader
|
||||
if (!pReader->tsdbRAWDone) {
|
||||
ASSERT(pReader->sver == 0);
|
||||
code = tsdbSnapRAWReaderOpen(pVnode->pTsdb, ever, SNAP_DATA_RAW, &pReader->pTsdbRAWReader);
|
||||
if (code) goto _err;
|
||||
}
|
||||
|
||||
// check snapshot ever
|
||||
SSnapshot snapshot = {0};
|
||||
vnodeGetSnapshot(pVnode, &snapshot);
|
||||
if (ever != snapshot.lastApplyIndex) {
|
||||
vError("vgId:%d, abort reader open due to vnode snapshot changed. ever:%" PRId64 ", commit ver:%" PRId64,
|
||||
TD_VID(pVnode), ever, snapshot.lastApplyIndex);
|
||||
code = TSDB_CODE_SYN_INTERNAL_ERROR;
|
||||
goto _err;
|
||||
}
|
||||
|
||||
vInfo("vgId:%d, vnode snapshot reader opened, sver:%" PRId64 " ever:%" PRId64, TD_VID(pVnode), sver, ever);
|
||||
*ppReader = pReader;
|
||||
return code;
|
||||
|
|
Loading…
Reference in New Issue