本文整理汇总了C++中SharedDatabase::requestCheckpoint方法的典型用法代码示例。如果您正苦于以下问题:C++ SharedDatabase::requestCheckpoint方法的具体用法?C++ SharedDatabase::requestCheckpoint怎么用?C++ SharedDatabase::requestCheckpoint使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SharedDatabase
的用法示例。
在下文中一共展示了SharedDatabase::requestCheckpoint方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: visit
void CmdInterpreter::visit(ProxyCmdCommit &cmd)
{
TxnHandle *pTxnHandle = getTxnHandle(cmd.getTxnHandle());
SharedDatabase pDb = pTxnHandle->pDb;
// block checkpoints during this method
bool txnBlocksCheckpoint = !pTxnHandle->readOnly && pDb->shouldForceTxns();
SXMutexSharedGuard actionMutexGuard(
pDb->getCheckpointThread()->getActionMutex());
if (pDb->areSnapshotsEnabled()) {
// Commit the current txn, and start a new one so the versioned
// pages that we're now going to commit will be marked with a txnId
// corresponding to the time of the commit. At present, those pages
// are marked with a txnId corresponding to the start of the txn.
pTxnHandle->pTxn->commit();
pTxnHandle->pTxn = pDb->getTxnLog()->newLogicalTxn(pDb->getCache());
SnapshotRandomAllocationSegment *pSnapshotSegment =
SegmentFactory::dynamicCast<SnapshotRandomAllocationSegment *>(
pTxnHandle->pSnapshotSegment);
TxnId commitTxnId = pTxnHandle->pTxn->getTxnId();
pSnapshotSegment->commitChanges(commitTxnId);
// Flush pages associated with the snapshot segment. Note that we
// don't need to flush the underlying versioned segment first since
// the snapshot pages are all new and therefore, are never logged.
// Pages in the underlying versioned segment will be flushed in the
// requestCheckpoint call further below. Also note that the
// checkpoint is not initiated through the dynamically cast segment
// to ensure that the command is traced if tracing is turned on.
if (txnBlocksCheckpoint) {
pTxnHandle->pSnapshotSegment->checkpoint(CHECKPOINT_FLUSH_ALL);
}
}
if (cmd.getSvptHandle()) {
SavepointId svptId = getSavepointId(cmd.getSvptHandle());
pTxnHandle->pTxn->commitSavepoint(svptId);
} else {
pTxnHandle->pTxn->commit();
deleteAndNullify(pTxnHandle);
if (txnBlocksCheckpoint) {
// release the checkpoint lock acquired above
actionMutexGuard.unlock();
// force a checkpoint now to flush all data modified by transaction
// to disk; wait for it to complete before reporting the
// transaction as committed
pDb->requestCheckpoint(CHECKPOINT_FLUSH_ALL, false);
}
}
}