mirror of https://gitee.com/bigwinds/arangodb
moved TransactionHints.h
This commit is contained in:
parent
101fac3fa8
commit
16189aa969
|
@ -43,7 +43,7 @@
|
|||
#include "Utils/DatabaseGuard.h"
|
||||
#include "Utils/SingleCollectionTransaction.h"
|
||||
#include "Utils/StandaloneTransactionContext.h"
|
||||
#include "Utils/TransactionHints.h"
|
||||
#include "Transaction/Hints.h"
|
||||
#include "VocBase/CompactionLocker.h"
|
||||
#include "VocBase/LogicalCollection.h"
|
||||
|
||||
|
@ -643,14 +643,14 @@ int MMFilesCollectorThread::processCollectionOperations(MMFilesCollectorCache* c
|
|||
arangodb::SingleCollectionTransaction trx(
|
||||
arangodb::StandaloneTransactionContext::Create(collection->vocbase()),
|
||||
collection->cid(), AccessMode::Type::WRITE);
|
||||
trx.addHint(TransactionHints::Hint::NO_USAGE_LOCK,
|
||||
trx.addHint(transaction::Hints::Hint::NO_USAGE_LOCK,
|
||||
true); // already locked by guard above
|
||||
trx.addHint(TransactionHints::Hint::NO_COMPACTION_LOCK,
|
||||
trx.addHint(transaction::Hints::Hint::NO_COMPACTION_LOCK,
|
||||
true); // already locked above
|
||||
trx.addHint(TransactionHints::Hint::NO_THROTTLING, true);
|
||||
trx.addHint(TransactionHints::Hint::NO_BEGIN_MARKER, true);
|
||||
trx.addHint(TransactionHints::Hint::NO_ABORT_MARKER, true);
|
||||
trx.addHint(TransactionHints::Hint::TRY_LOCK, true);
|
||||
trx.addHint(transaction::Hints::Hint::NO_THROTTLING, true);
|
||||
trx.addHint(transaction::Hints::Hint::NO_BEGIN_MARKER, true);
|
||||
trx.addHint(transaction::Hints::Hint::NO_ABORT_MARKER, true);
|
||||
trx.addHint(transaction::Hints::Hint::TRY_LOCK, true);
|
||||
|
||||
int res = trx.begin();
|
||||
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
#include "StorageEngine/StorageEngine.h"
|
||||
#include "Utils/SingleCollectionTransaction.h"
|
||||
#include "Utils/StandaloneTransactionContext.h"
|
||||
#include "Utils/TransactionHints.h"
|
||||
#include "Transaction/Hints.h"
|
||||
#include "VocBase/CompactionLocker.h"
|
||||
#include "VocBase/LogicalCollection.h"
|
||||
#include "VocBase/vocbase.h"
|
||||
|
@ -426,10 +426,10 @@ void MMFilesCompactorThread::compactDatafiles(LogicalCollection* collection,
|
|||
|
||||
arangodb::SingleCollectionTransaction trx(arangodb::StandaloneTransactionContext::Create(collection->vocbase()),
|
||||
collection->cid(), AccessMode::Type::WRITE);
|
||||
trx.addHint(TransactionHints::Hint::NO_BEGIN_MARKER, true);
|
||||
trx.addHint(TransactionHints::Hint::NO_ABORT_MARKER, true);
|
||||
trx.addHint(TransactionHints::Hint::NO_COMPACTION_LOCK, true);
|
||||
trx.addHint(TransactionHints::Hint::NO_THROTTLING, true);
|
||||
trx.addHint(transaction::Hints::Hint::NO_BEGIN_MARKER, true);
|
||||
trx.addHint(transaction::Hints::Hint::NO_ABORT_MARKER, true);
|
||||
trx.addHint(transaction::Hints::Hint::NO_COMPACTION_LOCK, true);
|
||||
trx.addHint(transaction::Hints::Hint::NO_THROTTLING, true);
|
||||
|
||||
CompactionInitialContext initial = getCompactionContext(&trx, collection, toCompact);
|
||||
|
||||
|
@ -956,8 +956,8 @@ uint64_t MMFilesCompactorThread::getNumberOfDocuments(LogicalCollection* collect
|
|||
AccessMode::Type::READ);
|
||||
// only try to acquire the lock here
|
||||
// if lock acquisition fails, we go on and report an (arbitrary) positive number
|
||||
trx.addHint(TransactionHints::Hint::TRY_LOCK, false);
|
||||
trx.addHint(TransactionHints::Hint::NO_THROTTLING, true);
|
||||
trx.addHint(transaction::Hints::Hint::TRY_LOCK, false);
|
||||
trx.addHint(transaction::Hints::Hint::NO_THROTTLING, true);
|
||||
|
||||
int res = trx.begin();
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
#include "MMFiles/MMFilesDocumentOperation.h"
|
||||
#include "StorageEngine/TransactionState.h"
|
||||
#include "Utils/TransactionMethods.h"
|
||||
#include "Utils/TransactionHints.h"
|
||||
#include "Transaction/Hints.h"
|
||||
#include "VocBase/LogicalCollection.h"
|
||||
#include "VocBase/modes.h"
|
||||
|
||||
|
@ -116,7 +116,7 @@ void MMFilesTransactionCollection::freeOperations(TransactionMethods* activeTrx,
|
|||
return;
|
||||
}
|
||||
|
||||
bool const isSingleOperationTransaction = _transaction->_hints.has(TransactionHints::Hint::SINGLE_OPERATION);
|
||||
bool const isSingleOperationTransaction = _transaction->_hints.has(transaction::Hints::Hint::SINGLE_OPERATION);
|
||||
|
||||
if (mustRollback) {
|
||||
// revert all operations
|
||||
|
@ -149,8 +149,8 @@ void MMFilesTransactionCollection::freeOperations(TransactionMethods* activeTrx,
|
|||
|
||||
bool MMFilesTransactionCollection::canAccess(AccessMode::Type accessType) const {
|
||||
if (_collection == nullptr) {
|
||||
if (!_transaction->_hints.has(TransactionHints::Hint::LOCK_NEVER) ||
|
||||
!_transaction->_hints.has(TransactionHints::Hint::NO_USAGE_LOCK)) {
|
||||
if (!_transaction->_hints.has(transaction::Hints::Hint::LOCK_NEVER) ||
|
||||
!_transaction->_hints.has(transaction::Hints::Hint::NO_USAGE_LOCK)) {
|
||||
// not opened. probably a mistake made by the caller
|
||||
return false;
|
||||
}
|
||||
|
@ -198,8 +198,8 @@ int MMFilesTransactionCollection::use(int nestingLevel) {
|
|||
|
||||
if (_collection == nullptr) {
|
||||
// open the collection
|
||||
if (!_transaction->_hints.has(TransactionHints::Hint::LOCK_NEVER) &&
|
||||
!_transaction->_hints.has(TransactionHints::Hint::NO_USAGE_LOCK)) {
|
||||
if (!_transaction->_hints.has(transaction::Hints::Hint::LOCK_NEVER) &&
|
||||
!_transaction->_hints.has(transaction::Hints::Hint::NO_USAGE_LOCK)) {
|
||||
// use and usage-lock
|
||||
TRI_vocbase_col_status_e status;
|
||||
LOG_TRX(_transaction, nestingLevel) << "using collection " << _cid;
|
||||
|
@ -239,7 +239,7 @@ int MMFilesTransactionCollection::use(int nestingLevel) {
|
|||
if (nestingLevel == 0 &&
|
||||
AccessMode::isWriteOrExclusive(_accessType)) {
|
||||
// read-lock the compaction lock
|
||||
if (!_transaction->_hints.has(TransactionHints::Hint::NO_COMPACTION_LOCK)) {
|
||||
if (!_transaction->_hints.has(transaction::Hints::Hint::NO_COMPACTION_LOCK)) {
|
||||
if (!_compactionLocked) {
|
||||
_collection->preventCompaction();
|
||||
_compactionLocked = true;
|
||||
|
@ -252,10 +252,10 @@ int MMFilesTransactionCollection::use(int nestingLevel) {
|
|||
_originalRevision = _collection->revision();
|
||||
}
|
||||
|
||||
bool shouldLock = _transaction->_hints.has(TransactionHints::Hint::LOCK_ENTIRELY);
|
||||
bool shouldLock = _transaction->_hints.has(transaction::Hints::Hint::LOCK_ENTIRELY);
|
||||
|
||||
if (!shouldLock) {
|
||||
shouldLock = (AccessMode::isWriteOrExclusive(_accessType) && !_transaction->_hints.has(TransactionHints::Hint::SINGLE_OPERATION));
|
||||
shouldLock = (AccessMode::isWriteOrExclusive(_accessType) && !_transaction->_hints.has(transaction::Hints::Hint::SINGLE_OPERATION));
|
||||
}
|
||||
|
||||
if (shouldLock && !isLocked()) {
|
||||
|
@ -279,7 +279,7 @@ void MMFilesTransactionCollection::unuse(int nestingLevel) {
|
|||
|
||||
// the top level transaction releases all collections
|
||||
if (nestingLevel == 0 && _collection != nullptr) {
|
||||
if (!_transaction->_hints.has(TransactionHints::Hint::NO_COMPACTION_LOCK)) {
|
||||
if (!_transaction->_hints.has(transaction::Hints::Hint::NO_COMPACTION_LOCK)) {
|
||||
if (AccessMode::isWriteOrExclusive(_accessType) && _compactionLocked) {
|
||||
// read-unlock the compaction lock
|
||||
_collection->allowCompaction();
|
||||
|
@ -304,7 +304,7 @@ void MMFilesTransactionCollection::release() {
|
|||
|
||||
/// @brief lock a collection
|
||||
int MMFilesTransactionCollection::doLock(AccessMode::Type type, int nestingLevel) {
|
||||
if (_transaction->_hints.has(TransactionHints::Hint::LOCK_NEVER)) {
|
||||
if (_transaction->_hints.has(transaction::Hints::Hint::LOCK_NEVER)) {
|
||||
// never lock
|
||||
return TRI_ERROR_NO_ERROR;
|
||||
}
|
||||
|
@ -327,12 +327,12 @@ int MMFilesTransactionCollection::doLock(AccessMode::Type type, int nestingLevel
|
|||
LogicalCollection* collection = _collection;
|
||||
TRI_ASSERT(collection != nullptr);
|
||||
double timeout = _transaction->_timeout;
|
||||
if (_transaction->_hints.has(TransactionHints::Hint::TRY_LOCK)) {
|
||||
if (_transaction->_hints.has(transaction::Hints::Hint::TRY_LOCK)) {
|
||||
// give up early if we cannot acquire the lock instantly
|
||||
timeout = 0.00000001;
|
||||
}
|
||||
|
||||
bool const useDeadlockDetector = !_transaction->_hints.has(TransactionHints::Hint::SINGLE_OPERATION);
|
||||
bool const useDeadlockDetector = !_transaction->_hints.has(transaction::Hints::Hint::SINGLE_OPERATION);
|
||||
|
||||
int res;
|
||||
if (!isWrite(type)) {
|
||||
|
@ -352,7 +352,7 @@ int MMFilesTransactionCollection::doLock(AccessMode::Type type, int nestingLevel
|
|||
|
||||
/// @brief unlock a collection
|
||||
int MMFilesTransactionCollection::doUnlock(AccessMode::Type type, int nestingLevel) {
|
||||
if (_transaction->_hints.has(TransactionHints::Hint::LOCK_NEVER)) {
|
||||
if (_transaction->_hints.has(transaction::Hints::Hint::LOCK_NEVER)) {
|
||||
// never unlock
|
||||
return TRI_ERROR_NO_ERROR;
|
||||
}
|
||||
|
@ -388,7 +388,7 @@ int MMFilesTransactionCollection::doUnlock(AccessMode::Type type, int nestingLev
|
|||
return TRI_ERROR_INTERNAL;
|
||||
}
|
||||
|
||||
bool const useDeadlockDetector = !_transaction->_hints.has(TransactionHints::Hint::SINGLE_OPERATION);
|
||||
bool const useDeadlockDetector = !_transaction->_hints.has(transaction::Hints::Hint::SINGLE_OPERATION);
|
||||
|
||||
LogicalCollection* collection = _collection;
|
||||
TRI_ASSERT(collection != nullptr);
|
||||
|
|
|
@ -56,7 +56,7 @@ MMFilesTransactionState::MMFilesTransactionState(TRI_vocbase_t* vocbase)
|
|||
MMFilesTransactionState::~MMFilesTransactionState() {}
|
||||
|
||||
/// @brief start a transaction
|
||||
int MMFilesTransactionState::beginTransaction(TransactionHints hints, int nestingLevel) {
|
||||
int MMFilesTransactionState::beginTransaction(transaction::Hints hints, int nestingLevel) {
|
||||
LOG_TRX(this, nestingLevel) << "beginning " << AccessMode::typeString(_type) << " transaction";
|
||||
|
||||
if (nestingLevel == 0) {
|
||||
|
@ -64,7 +64,7 @@ int MMFilesTransactionState::beginTransaction(TransactionHints hints, int nestin
|
|||
|
||||
auto logfileManager = MMFilesLogfileManager::instance();
|
||||
|
||||
if (!hasHint(TransactionHints::Hint::NO_THROTTLING) &&
|
||||
if (!hasHint(transaction::Hints::Hint::NO_THROTTLING) &&
|
||||
AccessMode::isWriteOrExclusive(_type) &&
|
||||
logfileManager->canBeThrottled()) {
|
||||
// write-throttling?
|
||||
|
@ -196,7 +196,7 @@ int MMFilesTransactionState::addOperation(TRI_voc_rid_t revisionId,
|
|||
LogicalCollection* collection = operation.collection();
|
||||
bool const isSingleOperationTransaction = isSingleOperation();
|
||||
|
||||
if (hasHint(TransactionHints::Hint::RECOVERY)) {
|
||||
if (hasHint(transaction::Hints::Hint::RECOVERY)) {
|
||||
// turn off all waitForSync operations during recovery
|
||||
waitForSync = false;
|
||||
} else if (!waitForSync) {
|
||||
|
@ -346,7 +346,7 @@ int MMFilesTransactionState::writeBeginMarker() {
|
|||
return TRI_ERROR_NO_ERROR;
|
||||
}
|
||||
|
||||
if (hasHint(TransactionHints::Hint::NO_BEGIN_MARKER)) {
|
||||
if (hasHint(transaction::Hints::Hint::NO_BEGIN_MARKER)) {
|
||||
return TRI_ERROR_NO_ERROR;
|
||||
}
|
||||
|
||||
|
@ -389,7 +389,7 @@ int MMFilesTransactionState::writeAbortMarker() {
|
|||
return TRI_ERROR_NO_ERROR;
|
||||
}
|
||||
|
||||
if (hasHint(TransactionHints::Hint::NO_ABORT_MARKER)) {
|
||||
if (hasHint(transaction::Hints::Hint::NO_ABORT_MARKER)) {
|
||||
return TRI_ERROR_NO_ERROR;
|
||||
}
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
#include "Basics/SmallVector.h"
|
||||
#include "StorageEngine/TransactionState.h"
|
||||
#include "Utils/TransactionMethods.h"
|
||||
#include "Utils/TransactionHints.h"
|
||||
#include "Transaction/Hints.h"
|
||||
#include "VocBase/AccessMode.h"
|
||||
#include "VocBase/voc-types.h"
|
||||
|
||||
|
@ -52,7 +52,7 @@ class MMFilesTransactionState final : public TransactionState {
|
|||
~MMFilesTransactionState();
|
||||
|
||||
/// @brief begin a transaction
|
||||
int beginTransaction(TransactionHints hints, int nestingLevel) override;
|
||||
int beginTransaction(transaction::Hints hints, int nestingLevel) override;
|
||||
|
||||
/// @brief commit a transaction
|
||||
int commitTransaction(TransactionMethods* trx, int nestingLevel) override;
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
#include "Utils/OperationOptions.h"
|
||||
#include "Utils/SingleCollectionTransaction.h"
|
||||
#include "Utils/StandaloneTransactionContext.h"
|
||||
#include "Utils/TransactionHints.h"
|
||||
#include "Transaction/Hints.h"
|
||||
#include "VocBase/LogicalCollection.h"
|
||||
|
||||
#include <velocypack/Collection.h>
|
||||
|
@ -282,12 +282,12 @@ int MMFilesWalRecoverState::executeSingleOperation(
|
|||
try {
|
||||
SingleCollectionTransaction trx(arangodb::StandaloneTransactionContext::Create(vocbase), collectionId, AccessMode::Type::WRITE);
|
||||
|
||||
trx.addHint(TransactionHints::Hint::SINGLE_OPERATION, false);
|
||||
trx.addHint(TransactionHints::Hint::NO_BEGIN_MARKER, false);
|
||||
trx.addHint(TransactionHints::Hint::NO_ABORT_MARKER, false);
|
||||
trx.addHint(TransactionHints::Hint::NO_THROTTLING, false);
|
||||
trx.addHint(TransactionHints::Hint::LOCK_NEVER, false);
|
||||
trx.addHint(TransactionHints::Hint::RECOVERY, false); // to turn off waitForSync!
|
||||
trx.addHint(transaction::Hints::Hint::SINGLE_OPERATION, false);
|
||||
trx.addHint(transaction::Hints::Hint::NO_BEGIN_MARKER, false);
|
||||
trx.addHint(transaction::Hints::Hint::NO_ABORT_MARKER, false);
|
||||
trx.addHint(transaction::Hints::Hint::NO_THROTTLING, false);
|
||||
trx.addHint(transaction::Hints::Hint::LOCK_NEVER, false);
|
||||
trx.addHint(transaction::Hints::Hint::RECOVERY, false); // to turn off waitForSync!
|
||||
|
||||
res = trx.begin();
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
#include "StorageEngine/TransactionState.h"
|
||||
#include "Utils/CollectionGuard.h"
|
||||
#include "Utils/SingleCollectionTransaction.h"
|
||||
#include "Utils/TransactionHints.h"
|
||||
#include "Transaction/Hints.h"
|
||||
#include "VocBase/LogicalCollection.h"
|
||||
#include "VocBase/vocbase.h"
|
||||
#include "VocBase/voc-types.h"
|
||||
|
@ -573,7 +573,7 @@ int ContinuousSyncer::processDocument(TRI_replication_operation_e type,
|
|||
// update the apply tick for all standalone operations
|
||||
SingleCollectionTransaction trx(StandaloneTransactionContext::Create(_vocbase),
|
||||
cid, AccessMode::Type::WRITE);
|
||||
trx.addHint(TransactionHints::Hint::SINGLE_OPERATION, false);
|
||||
trx.addHint(transaction::Hints::Hint::SINGLE_OPERATION, false);
|
||||
|
||||
int res = trx.begin();
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
#include "Utils/OperationOptions.h"
|
||||
#include "Utils/SingleCollectionTransaction.h"
|
||||
#include "Utils/StandaloneTransactionContext.h"
|
||||
#include "Utils/TransactionHints.h"
|
||||
#include "Transaction/Hints.h"
|
||||
#include "VocBase/vocbase.h"
|
||||
|
||||
using namespace arangodb;
|
||||
|
@ -128,7 +128,7 @@ bool RestDocumentHandler::createDocument() {
|
|||
AccessMode::Type::WRITE);
|
||||
bool const isMultiple = body.isArray();
|
||||
if (!isMultiple) {
|
||||
trx.addHint(TransactionHints::Hint::SINGLE_OPERATION, false);
|
||||
trx.addHint(transaction::Hints::Hint::SINGLE_OPERATION, false);
|
||||
}
|
||||
|
||||
int res = trx.begin();
|
||||
|
@ -233,7 +233,7 @@ bool RestDocumentHandler::readSingleDocument(bool generateBody) {
|
|||
auto transactionContext(StandaloneTransactionContext::Create(_vocbase));
|
||||
SingleCollectionTransaction trx(transactionContext, collection,
|
||||
AccessMode::Type::READ);
|
||||
trx.addHint(TransactionHints::Hint::SINGLE_OPERATION, false);
|
||||
trx.addHint(transaction::Hints::Hint::SINGLE_OPERATION, false);
|
||||
|
||||
// ...........................................................................
|
||||
// inside read transaction
|
||||
|
@ -421,7 +421,7 @@ bool RestDocumentHandler::modifyDocument(bool isPatch) {
|
|||
SingleCollectionTransaction trx(transactionContext, collectionName,
|
||||
AccessMode::Type::WRITE);
|
||||
if (!isArrayCase) {
|
||||
trx.addHint(TransactionHints::Hint::SINGLE_OPERATION, false);
|
||||
trx.addHint(transaction::Hints::Hint::SINGLE_OPERATION, false);
|
||||
}
|
||||
|
||||
// ...........................................................................
|
||||
|
@ -546,7 +546,7 @@ bool RestDocumentHandler::deleteDocument() {
|
|||
SingleCollectionTransaction trx(transactionContext, collectionName,
|
||||
AccessMode::Type::WRITE);
|
||||
if (suffixes.size() == 2 || !search.isArray()) {
|
||||
trx.addHint(TransactionHints::Hint::SINGLE_OPERATION, false);
|
||||
trx.addHint(transaction::Hints::Hint::SINGLE_OPERATION, false);
|
||||
}
|
||||
|
||||
int res = trx.begin();
|
||||
|
|
|
@ -49,7 +49,7 @@
|
|||
#include "Utils/OperationOptions.h"
|
||||
#include "Utils/StandaloneTransactionContext.h"
|
||||
#include "Utils/TransactionContext.h"
|
||||
#include "Utils/TransactionHints.h"
|
||||
#include "Transaction/Hints.h"
|
||||
#include "VocBase/LogicalCollection.h"
|
||||
#include "VocBase/replication-applier.h"
|
||||
#include "VocBase/replication-dump.h"
|
||||
|
@ -1503,7 +1503,7 @@ int RestReplicationHandler::processRestoreCollection(
|
|||
SingleCollectionTransaction trx(
|
||||
StandaloneTransactionContext::Create(_vocbase), col->cid(),
|
||||
AccessMode::Type::WRITE);
|
||||
trx.addHint(TransactionHints::Hint::RECOVERY,
|
||||
trx.addHint(transaction::Hints::Hint::RECOVERY,
|
||||
false); // to turn off waitForSync!
|
||||
|
||||
res = trx.begin();
|
||||
|
@ -2259,7 +2259,7 @@ int RestReplicationHandler::processRestoreData(
|
|||
SingleCollectionTransaction trx(
|
||||
StandaloneTransactionContext::Create(_vocbase), colName,
|
||||
AccessMode::Type::WRITE);
|
||||
trx.addHint(TransactionHints::Hint::RECOVERY,
|
||||
trx.addHint(transaction::Hints::Hint::RECOVERY,
|
||||
false); // to turn off waitForSync!
|
||||
|
||||
int res = trx.begin();
|
||||
|
@ -3448,7 +3448,7 @@ void RestReplicationHandler::handleCommandHoldReadLockCollection() {
|
|||
|
||||
auto trxContext = StandaloneTransactionContext::Create(_vocbase);
|
||||
SingleCollectionTransaction trx(trxContext, col->cid(), AccessMode::Type::READ);
|
||||
trx.addHint(TransactionHints::Hint::LOCK_ENTIRELY, false);
|
||||
trx.addHint(transaction::Hints::Hint::LOCK_ENTIRELY, false);
|
||||
int res = trx.begin();
|
||||
if (res != TRI_ERROR_NO_ERROR) {
|
||||
generateError(rest::ResponseCode::SERVER_ERROR,
|
||||
|
|
|
@ -241,8 +241,8 @@ TransactionCollection* TransactionState::findCollection(TRI_voc_cid_t cid, size_
|
|||
|
||||
/// @brief release collection locks for a transaction
|
||||
int TransactionState::releaseCollections() {
|
||||
if (hasHint(TransactionHints::Hint::LOCK_NEVER) ||
|
||||
hasHint(TransactionHints::Hint::NO_USAGE_LOCK)) {
|
||||
if (hasHint(transaction::Hints::Hint::LOCK_NEVER) ||
|
||||
hasHint(transaction::Hints::Hint::NO_USAGE_LOCK)) {
|
||||
return TRI_ERROR_NO_ERROR;
|
||||
}
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
#include "Basics/Common.h"
|
||||
#include "Basics/SmallVector.h"
|
||||
#include "Utils/TransactionMethods.h"
|
||||
#include "Utils/TransactionHints.h"
|
||||
#include "Transaction/Hints.h"
|
||||
#include "VocBase/AccessMode.h"
|
||||
#include "VocBase/voc-types.h"
|
||||
|
||||
|
@ -81,19 +81,19 @@ class TransactionState {
|
|||
|
||||
/// @brief whether or not a transaction consists of a single operation
|
||||
bool isSingleOperation() const {
|
||||
return hasHint(TransactionHints::Hint::SINGLE_OPERATION);
|
||||
return hasHint(transaction::Hints::Hint::SINGLE_OPERATION);
|
||||
}
|
||||
|
||||
/// @brief update the status of a transaction
|
||||
void updateStatus(TransactionMethods::Status status);
|
||||
|
||||
/// @brief whether or not a specific hint is set for the transaction
|
||||
bool hasHint(TransactionHints::Hint hint) const {
|
||||
bool hasHint(transaction::Hints::Hint hint) const {
|
||||
return _hints.has(hint);
|
||||
}
|
||||
|
||||
/// @brief begin a transaction
|
||||
virtual int beginTransaction(TransactionHints hints, int nestingLevel) = 0;
|
||||
virtual int beginTransaction(transaction::Hints hints, int nestingLevel) = 0;
|
||||
|
||||
/// @brief commit a transaction
|
||||
virtual int commitTransaction(TransactionMethods* trx, int nestingLevel) = 0;
|
||||
|
@ -134,7 +134,7 @@ class TransactionState {
|
|||
SmallVector<TransactionCollection*> _collections; // list of participating collections
|
||||
public:
|
||||
rocksdb::Transaction* _rocksTransaction;
|
||||
TransactionHints _hints; // hints;
|
||||
transaction::Hints _hints; // hints;
|
||||
int _nestingLevel;
|
||||
bool _allowImplicit;
|
||||
bool _hasOperations;
|
||||
|
|
|
@ -21,13 +21,15 @@
|
|||
/// @author Jan Steemann
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef ARANGOD_UTILS_TRANSACTION_HINTS_H
|
||||
#define ARANGOD_UTILS_TRANSACTION_HINTS_H 1
|
||||
#ifndef ARANGOD_TRANSACTION_HINTS_H
|
||||
#define ARANGOD_TRANSACTION_HINTS_H 1
|
||||
|
||||
#include "Basics/Common.h"
|
||||
|
||||
namespace arangodb {
|
||||
class TransactionHints {
|
||||
namespace transaction {
|
||||
|
||||
class Hints {
|
||||
public:
|
||||
typedef uint32_t ValueType;
|
||||
|
||||
|
@ -46,9 +48,9 @@ class TransactionHints {
|
|||
RECOVERY = 512
|
||||
};
|
||||
|
||||
TransactionHints() : _value(0) {}
|
||||
explicit TransactionHints(Hint value) : _value(static_cast<ValueType>(value)) {}
|
||||
explicit TransactionHints(ValueType value) : _value(value) {}
|
||||
Hints() : _value(0) {}
|
||||
explicit Hints(Hint value) : _value(static_cast<ValueType>(value)) {}
|
||||
explicit Hints(ValueType value) : _value(value) {}
|
||||
|
||||
inline bool has(ValueType value) const noexcept {
|
||||
return (_value & value) != 0;
|
||||
|
@ -78,6 +80,7 @@ class TransactionHints {
|
|||
ValueType _value;
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
|
@ -46,9 +46,9 @@ class AqlTransaction final : public TransactionMethods {
|
|||
: TransactionMethods(transactionContext),
|
||||
_collections(*collections) {
|
||||
if (!isMainTransaction) {
|
||||
addHint(TransactionHints::Hint::LOCK_NEVER, true);
|
||||
addHint(transaction::Hints::Hint::LOCK_NEVER, true);
|
||||
} else {
|
||||
addHint(TransactionHints::Hint::LOCK_ENTIRELY, false);
|
||||
addHint(transaction::Hints::Hint::LOCK_ENTIRELY, false);
|
||||
}
|
||||
|
||||
for (auto it : *collections) {
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
#include "Utils/CollectionGuard.h"
|
||||
#include "Utils/SingleCollectionTransaction.h"
|
||||
#include "Utils/StandaloneTransactionContext.h"
|
||||
#include "Utils/TransactionHints.h"
|
||||
#include "Transaction/Hints.h"
|
||||
#include "VocBase/Ditch.h"
|
||||
#include "VocBase/LogicalCollection.h"
|
||||
#include "VocBase/vocbase.h"
|
||||
|
@ -92,7 +92,7 @@ void CollectionExport::run(uint64_t maxWaitTime, size_t limit) {
|
|||
AccessMode::Type::READ);
|
||||
|
||||
// already locked by guard above
|
||||
trx.addHint(TransactionHints::Hint::NO_USAGE_LOCK, true);
|
||||
trx.addHint(transaction::Hints::Hint::NO_USAGE_LOCK, true);
|
||||
int res = trx.begin();
|
||||
|
||||
if (res != TRI_ERROR_NO_ERROR) {
|
||||
|
|
|
@ -149,7 +149,7 @@ static OperationResult EmptyResult(bool waitForSync) {
|
|||
}
|
||||
|
||||
/// @brief add a transaction hint
|
||||
void TransactionMethods::addHint(TransactionHints::Hint hint, bool passthrough) {
|
||||
void TransactionMethods::addHint(transaction::Hints::Hint hint, bool passthrough) {
|
||||
_hints.set(hint);
|
||||
|
||||
if (passthrough && _state != nullptr) {
|
||||
|
@ -158,7 +158,7 @@ void TransactionMethods::addHint(TransactionHints::Hint hint, bool passthrough)
|
|||
}
|
||||
|
||||
/// @brief remove a transaction hint
|
||||
void TransactionMethods::removeHint(TransactionHints::Hint hint, bool passthrough) {
|
||||
void TransactionMethods::removeHint(transaction::Hints::Hint hint, bool passthrough) {
|
||||
_hints.unset(hint);
|
||||
|
||||
if (passthrough && _state != nullptr) {
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
#include "Basics/StringRef.h"
|
||||
#include "Cluster/ServerState.h"
|
||||
#include "Utils/OperationResult.h"
|
||||
#include "Utils/TransactionHints.h"
|
||||
#include "Transaction/Hints.h"
|
||||
#include "VocBase/AccessMode.h"
|
||||
#include "VocBase/vocbase.h"
|
||||
#include "VocBase/voc-types.h"
|
||||
|
@ -204,10 +204,10 @@ class TransactionMethods {
|
|||
rocksdb::Transaction* rocksTransaction();
|
||||
|
||||
/// @brief add a transaction hint
|
||||
void addHint(TransactionHints::Hint hint, bool passthrough);
|
||||
void addHint(transaction::Hints::Hint hint, bool passthrough);
|
||||
|
||||
/// @brief remove a transaction hint
|
||||
void removeHint(TransactionHints::Hint hint, bool passthrough);
|
||||
void removeHint(transaction::Hints::Hint hint, bool passthrough);
|
||||
|
||||
/// @brief return the registered error data
|
||||
std::string const getErrorData() const { return _errorData; }
|
||||
|
@ -693,7 +693,7 @@ class TransactionMethods {
|
|||
std::string _errorData;
|
||||
|
||||
/// @brief transaction hints
|
||||
TransactionHints _hints;
|
||||
transaction::Hints _hints;
|
||||
|
||||
/// @brief timeout for lock acquisition
|
||||
double _timeout;
|
||||
|
|
|
@ -41,7 +41,7 @@ class UserTransaction final : public TransactionMethods {
|
|||
double lockTimeout, bool waitForSync,
|
||||
bool allowImplicitCollections)
|
||||
: TransactionMethods(transactionContext) {
|
||||
addHint(TransactionHints::Hint::LOCK_ENTIRELY, false);
|
||||
addHint(transaction::Hints::Hint::LOCK_ENTIRELY, false);
|
||||
|
||||
if (lockTimeout >= 0.0) {
|
||||
setTimeout(lockTimeout);
|
||||
|
|
|
@ -43,7 +43,7 @@
|
|||
#include "Utils/OperationOptions.h"
|
||||
#include "Utils/OperationResult.h"
|
||||
#include "Utils/SingleCollectionTransaction.h"
|
||||
#include "Utils/TransactionHints.h"
|
||||
#include "Transaction/Hints.h"
|
||||
#include "Utils/V8TransactionContext.h"
|
||||
#include "V8/v8-conv.h"
|
||||
#include "V8/v8-utils.h"
|
||||
|
@ -331,7 +331,7 @@ static void ExistsVocbaseVPack(
|
|||
TRI_ASSERT(search.isObject());
|
||||
|
||||
SingleCollectionTransaction trx(transactionContext, collectionName, AccessMode::Type::READ);
|
||||
trx.addHint(TransactionHints::Hint::SINGLE_OPERATION, false);
|
||||
trx.addHint(transaction::Hints::Hint::SINGLE_OPERATION, false);
|
||||
|
||||
res = trx.begin();
|
||||
|
||||
|
@ -431,7 +431,7 @@ static void DocumentVocbaseCol(
|
|||
SingleCollectionTransaction trx(transactionContext, collectionName,
|
||||
AccessMode::Type::READ);
|
||||
if (!args[0]->IsArray()) {
|
||||
trx.addHint(TransactionHints::Hint::SINGLE_OPERATION, false);
|
||||
trx.addHint(transaction::Hints::Hint::SINGLE_OPERATION, false);
|
||||
}
|
||||
|
||||
TIMER_STOP(JS_DOCUMENT_CREATE_TRX);
|
||||
|
@ -517,7 +517,7 @@ static void DocumentVocbase(
|
|||
|
||||
SingleCollectionTransaction trx(transactionContext, collectionName,
|
||||
AccessMode::Type::READ);
|
||||
trx.addHint(TransactionHints::Hint::SINGLE_OPERATION, false);
|
||||
trx.addHint(transaction::Hints::Hint::SINGLE_OPERATION, false);
|
||||
|
||||
int res = trx.begin();
|
||||
|
||||
|
@ -609,7 +609,7 @@ static void RemoveVocbaseCol(v8::FunctionCallbackInfo<v8::Value> const& args) {
|
|||
|
||||
SingleCollectionTransaction trx(transactionContext, collectionName, AccessMode::Type::WRITE);
|
||||
if (!args[0]->IsArray()) {
|
||||
trx.addHint(TransactionHints::Hint::SINGLE_OPERATION, false);
|
||||
trx.addHint(transaction::Hints::Hint::SINGLE_OPERATION, false);
|
||||
}
|
||||
|
||||
int res = trx.begin();
|
||||
|
@ -752,7 +752,7 @@ static void RemoveVocbase(v8::FunctionCallbackInfo<v8::Value> const& args) {
|
|||
|
||||
SingleCollectionTransaction trx(transactionContext, collectionName,
|
||||
AccessMode::Type::WRITE);
|
||||
trx.addHint(TransactionHints::Hint::SINGLE_OPERATION, false);
|
||||
trx.addHint(transaction::Hints::Hint::SINGLE_OPERATION, false);
|
||||
|
||||
int res = trx.begin();
|
||||
|
||||
|
@ -1390,7 +1390,7 @@ static void JS_PropertiesVocbaseCol(
|
|||
isModification ? AccessMode::Type::WRITE : AccessMode::Type::READ);
|
||||
|
||||
if (!isModification) {
|
||||
trx.addHint(TransactionHints::Hint::NO_USAGE_LOCK, false);
|
||||
trx.addHint(transaction::Hints::Hint::NO_USAGE_LOCK, false);
|
||||
}
|
||||
|
||||
int res = trx.begin();
|
||||
|
@ -1801,7 +1801,7 @@ static void ModifyVocbaseCol(TRI_voc_document_operation_e operation,
|
|||
SingleCollectionTransaction trx(transactionContext, collectionName,
|
||||
AccessMode::Type::WRITE);
|
||||
if (!args[0]->IsArray()) {
|
||||
trx.addHint(TransactionHints::Hint::SINGLE_OPERATION, false);
|
||||
trx.addHint(transaction::Hints::Hint::SINGLE_OPERATION, false);
|
||||
}
|
||||
|
||||
int res = trx.begin();
|
||||
|
@ -1928,7 +1928,7 @@ static void ModifyVocbase(TRI_voc_document_operation_e operation,
|
|||
|
||||
SingleCollectionTransaction trx(transactionContext, collectionName,
|
||||
AccessMode::Type::WRITE);
|
||||
trx.addHint(TransactionHints::Hint::SINGLE_OPERATION, false);
|
||||
trx.addHint(transaction::Hints::Hint::SINGLE_OPERATION, false);
|
||||
|
||||
int res = trx.begin();
|
||||
if (res != TRI_ERROR_NO_ERROR) {
|
||||
|
@ -2173,7 +2173,7 @@ static void JS_SaveVocbase(v8::FunctionCallbackInfo<v8::Value> const& args) {
|
|||
auto transactionContext(V8TransactionContext::Create(vocbase, true));
|
||||
SingleCollectionTransaction trx(transactionContext,
|
||||
collectionName, AccessMode::Type::WRITE);
|
||||
trx.addHint(TransactionHints::Hint::SINGLE_OPERATION, false);
|
||||
trx.addHint(transaction::Hints::Hint::SINGLE_OPERATION, false);
|
||||
|
||||
res = trx.begin();
|
||||
|
||||
|
@ -2336,7 +2336,7 @@ static void JS_InsertVocbaseCol(
|
|||
SingleCollectionTransaction trx(transactionContext, collection->cid(),
|
||||
AccessMode::Type::WRITE);
|
||||
if (!payloadIsArray) {
|
||||
trx.addHint(TransactionHints::Hint::SINGLE_OPERATION, false);
|
||||
trx.addHint(transaction::Hints::Hint::SINGLE_OPERATION, false);
|
||||
}
|
||||
TIMER_STOP(JS_INSERT_CREATE_TRX);
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
#include "StorageEngine/EngineSelectorFeature.h"
|
||||
#include "Utils/Events.h"
|
||||
#include "Utils/SingleCollectionTransaction.h"
|
||||
#include "Utils/TransactionHints.h"
|
||||
#include "Transaction/Hints.h"
|
||||
#include "Utils/V8TransactionContext.h"
|
||||
#include "V8/v8-conv.h"
|
||||
#include "V8/v8-globals.h"
|
||||
|
@ -550,7 +550,7 @@ static void JS_GetIndexesVocbaseCol(
|
|||
V8TransactionContext::Create(collection->vocbase(), true),
|
||||
collection->cid(), AccessMode::Type::READ);
|
||||
|
||||
trx.addHint(TransactionHints::Hint::NO_USAGE_LOCK, false);
|
||||
trx.addHint(transaction::Hints::Hint::NO_USAGE_LOCK, false);
|
||||
|
||||
int res = trx.begin();
|
||||
|
||||
|
|
Loading…
Reference in New Issue