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