1
0
Fork 0

Fix cluster-wide locking for AQL.

This commit is contained in:
Max Neunhoeffer 2014-12-22 16:21:45 +01:00
parent 797c15b753
commit 1782039138
2 changed files with 18 additions and 3 deletions

View File

@ -190,13 +190,12 @@ namespace triagens {
int lockCollections () {
auto trx = getInternals();
size_t i = trx->_collections._length;
while (i-- > 0) {
for (size_t i = 0; i < trx->_collections._length; i++) {
TRI_transaction_collection_t* trxCollection
= static_cast<TRI_transaction_collection_t*>
(TRI_AtVectorPointer(&trx->_collections, i));
int res = TRI_UnlockCollectionTransaction(trxCollection,
int res = TRI_LockCollectionTransaction(trxCollection,
trxCollection->_accessType, 0);
if (res != TRI_ERROR_NO_ERROR) {
return res;

View File

@ -930,6 +930,14 @@ static int EndWrite (TRI_document_collection_t* document) {
static int BeginReadTimed (TRI_document_collection_t* document,
uint64_t timeout,
uint64_t sleepPeriod) {
if (triagens::arango::Transaction::_makeNolockHeaders != nullptr) {
std::string collName(document->_info._name);
auto it = triagens::arango::Transaction::_makeNolockHeaders->find(collName);
if (it != triagens::arango::Transaction::_makeNolockHeaders->end()) {
// do not lock by command
return TRI_ERROR_NO_ERROR;
}
}
uint64_t waited = 0;
while (! TRI_TRY_READ_LOCK_DOCUMENTS_INDEXES_PRIMARY_COLLECTION(document)) {
@ -956,6 +964,14 @@ static int BeginReadTimed (TRI_document_collection_t* document,
static int BeginWriteTimed (TRI_document_collection_t* document,
uint64_t timeout,
uint64_t sleepPeriod) {
if (triagens::arango::Transaction::_makeNolockHeaders != nullptr) {
std::string collName(document->_info._name);
auto it = triagens::arango::Transaction::_makeNolockHeaders->find(collName);
if (it != triagens::arango::Transaction::_makeNolockHeaders->end()) {
// do not lock by command
return TRI_ERROR_NO_ERROR;
}
}
uint64_t waited = 0;
while (! TRI_TRY_WRITE_LOCK_DOCUMENTS_INDEXES_PRIMARY_COLLECTION(document)) {