1
0
Fork 0

removed separate index lock

This commit is contained in:
Jan Steemann 2014-06-05 11:39:14 +02:00
parent 1925a16640
commit ec8742f920
7 changed files with 2 additions and 124 deletions

View File

@ -479,8 +479,6 @@ namespace triagens {
return res;
}
TRI_ReadLockPrimaryIndex(&document->_primaryIndex);
if (document->_primaryIndex._nrUsed == 0) {
TRI_FreeBarrier(*barrier);
*barrier = 0;
@ -500,8 +498,6 @@ namespace triagens {
*mptr = *((TRI_doc_mptr_t*) beg[pos]);
}
TRI_ReadUnlockPrimaryIndex(&document->_primaryIndex);
this->unlock(trxCollection, TRI_TRANSACTION_READ);
// READ-LOCK END
@ -547,8 +543,6 @@ namespace triagens {
}
}
TRI_ReadLockPrimaryIndex(&document->_primaryIndex);
if (document->_primaryIndex._nrUsed > 0) {
ids.reserve(document->_primaryIndex._nrUsed);
@ -563,8 +557,6 @@ namespace triagens {
}
}
TRI_ReadUnlockPrimaryIndex(&document->_primaryIndex);
if (lock) {
this->unlock(trxCollection, TRI_TRANSACTION_READ);
// READ-LOCK END
@ -658,12 +650,8 @@ namespace triagens {
return res;
}
TRI_ReadLockPrimaryIndex(&document->_primaryIndex);
if (document->_primaryIndex._nrUsed == 0) {
// nothing to do
TRI_ReadUnlockPrimaryIndex(&document->_primaryIndex);
this->unlock(trxCollection, TRI_TRANSACTION_READ);
// READ-LOCK END
return TRI_ERROR_NO_ERROR;
@ -672,7 +660,6 @@ namespace triagens {
*barrier = TRI_CreateBarrierElement(&document->_barrierList);
if (*barrier == 0) {
TRI_ReadUnlockPrimaryIndex(&document->_primaryIndex);
this->unlock(trxCollection, TRI_TRANSACTION_READ);
return TRI_ERROR_OUT_OF_MEMORY;
@ -723,8 +710,6 @@ namespace triagens {
}
}
TRI_ReadUnlockPrimaryIndex(&document->_primaryIndex);
this->unlock(trxCollection, TRI_TRANSACTION_READ);
// READ-LOCK END
@ -760,11 +745,8 @@ namespace triagens {
return res;
}
TRI_ReadLockPrimaryIndex(&document->_primaryIndex);
if (document->_primaryIndex._nrUsed == 0) {
// nothing to do
TRI_ReadUnlockPrimaryIndex(&document->_primaryIndex);
this->unlock(trxCollection, TRI_TRANSACTION_READ);
// READ-LOCK END
@ -774,7 +756,6 @@ namespace triagens {
*barrier = TRI_CreateBarrierElement(&document->_barrierList);
if (*barrier == 0) {
TRI_ReadUnlockPrimaryIndex(&document->_primaryIndex);
this->unlock(trxCollection, TRI_TRANSACTION_READ);
return TRI_ERROR_OUT_OF_MEMORY;
@ -806,8 +787,6 @@ namespace triagens {
}
}
TRI_ReadUnlockPrimaryIndex(&document->_primaryIndex);
this->unlock(trxCollection, TRI_TRANSACTION_READ);
// READ-LOCK END

View File

@ -463,7 +463,6 @@ bool TRI_LoadAuthInfo (TRI_vocbase_t* vocbase) {
TRI_WriteLockReadWriteLock(&vocbase->_authInfoLock);
ClearAuthInfo(vocbase);
TRI_ReadLockPrimaryIndex(&document->_primaryIndex);
beg = document->_primaryIndex._table;
end = beg + document->_primaryIndex._nrAlloc;
ptr = beg;
@ -489,7 +488,6 @@ bool TRI_LoadAuthInfo (TRI_vocbase_t* vocbase) {
}
}
}
TRI_ReadUnlockPrimaryIndex(&document->_primaryIndex);
TRI_WriteUnlockReadWriteLock(&vocbase->_authInfoLock);

View File

@ -461,13 +461,9 @@ static bool Compactifier (TRI_df_marker_t const* marker,
key = (char*) d + d->_offsetKey;
// check if the document is still active
TRI_ReadLockPrimaryIndex(&document->_primaryIndex);
found = static_cast<TRI_doc_mptr_t const*>(TRI_LookupByKeyPrimaryIndex(&document->_primaryIndex, key));
deleted = (found == NULL || found->_rid > d->_rid);
TRI_ReadUnlockPrimaryIndex(&document->_primaryIndex);
if (deleted) {
LOG_TRACE("found a stale document: %s", key);
return true;
@ -483,8 +479,6 @@ static bool Compactifier (TRI_df_marker_t const* marker,
}
// check if the document is still active
TRI_WriteLockPrimaryIndex(&document->_primaryIndex);
found = static_cast<TRI_doc_mptr_t const*>(TRI_LookupByKeyPrimaryIndex(&document->_primaryIndex, key));
deleted = found == NULL;
@ -492,8 +486,6 @@ static bool Compactifier (TRI_df_marker_t const* marker,
context->_dfi._numberDead += 1;
context->_dfi._sizeDead += (int64_t) marker->_size;
TRI_WriteUnlockPrimaryIndex(&document->_primaryIndex);
LOG_DEBUG("found a stale document after copying: %s", key);
return true;
@ -522,8 +514,6 @@ static bool Compactifier (TRI_df_marker_t const* marker,
// update datafile info
context->_dfi._numberAlive += 1;
context->_dfi._sizeAlive += (int64_t) marker->_size;
TRI_WriteUnlockPrimaryIndex(&document->_primaryIndex);
}
// deletions
@ -703,13 +693,9 @@ static bool CalculateSize (TRI_df_marker_t const* marker,
key = (char*) d + d->_offsetKey;
// check if the document is still active
TRI_ReadLockPrimaryIndex(&document->_primaryIndex);
TRI_doc_mptr_t const* found = static_cast<TRI_doc_mptr_t const*>(TRI_LookupByKeyPrimaryIndex(&document->_primaryIndex, key));
deleted = (found == NULL || found->_rid > d->_rid);
TRI_ReadUnlockPrimaryIndex(&document->_primaryIndex);
if (deleted) {
return true;
}

View File

@ -562,9 +562,7 @@ static int InsertPrimaryIndex (TRI_document_collection_t* document,
TRI_ASSERT_MAINTAINER(header->_dataptr != nullptr); // ONLY IN INDEX
// insert into primary index
TRI_WriteLockPrimaryIndex(&document->_primaryIndex);
int res = TRI_InsertKeyPrimaryIndex(&document->_primaryIndex, header, (void const**) &found);
TRI_WriteUnlockPrimaryIndex(&document->_primaryIndex);
if (res != TRI_ERROR_NO_ERROR) {
return res;
@ -626,9 +624,7 @@ static int DeletePrimaryIndex (TRI_document_collection_t* document,
// remove from main index
// .............................................................................
TRI_WriteLockPrimaryIndex(&document->_primaryIndex);
TRI_doc_mptr_t* found = static_cast<TRI_doc_mptr_t*>(TRI_RemoveKeyPrimaryIndex(&document->_primaryIndex, TRI_EXTRACT_MARKER_KEY(header))); // ONLY IN INDEX
TRI_WriteUnlockPrimaryIndex(&document->_primaryIndex);
if (found == nullptr) {
return TRI_ERROR_ARANGO_DOCUMENT_NOT_FOUND;
@ -1107,9 +1103,7 @@ static int LookupDocument (TRI_document_collection_t* document,
TRI_voc_key_t key,
TRI_doc_update_policy_t const* policy,
TRI_doc_mptr_t*& header) {
TRI_ReadLockPrimaryIndex(&document->_primaryIndex);
header = static_cast<TRI_doc_mptr_t*>(TRI_LookupByKeyPrimaryIndex(&document->_primaryIndex, key));
TRI_ReadUnlockPrimaryIndex(&document->_primaryIndex);
if (! IsVisible(header)) {
return TRI_ERROR_ARANGO_DOCUMENT_NOT_FOUND;
@ -2903,8 +2897,6 @@ size_t TRI_DocumentIteratorPrimaryCollection (TransactionBase const*,
// master pointers and their data pointers in the callback are
// protected.
TRI_ReadLockPrimaryIndex(&document->_primaryIndex);
size_t const nrUsed = (size_t) document->_primaryIndex._nrUsed;
if (nrUsed > 0) {
@ -2922,8 +2914,6 @@ size_t TRI_DocumentIteratorPrimaryCollection (TransactionBase const*,
}
}
TRI_ReadUnlockPrimaryIndex(&document->_primaryIndex);
return nrUsed;
}
@ -3470,8 +3460,6 @@ static int FillIndex (TRI_document_collection_t* document,
void** ptr;
int res;
TRI_ReadLockPrimaryIndex(&document->_primaryIndex);
ptr = document->_primaryIndex._table;
end = ptr + document->_primaryIndex._nrAlloc;
@ -3496,8 +3484,6 @@ static int FillIndex (TRI_document_collection_t* document,
(char*) TRI_EXTRACT_MARKER_KEY(mptr), // ONLY IN INDEX
(unsigned long long) idx->_iid);
TRI_ReadUnlockPrimaryIndex(&document->_primaryIndex);
return res;
}
@ -3511,8 +3497,6 @@ static int FillIndex (TRI_document_collection_t* document,
}
}
TRI_ReadUnlockPrimaryIndex(&document->_primaryIndex);
return TRI_ERROR_NO_ERROR;
}
@ -5630,8 +5614,6 @@ TRI_vector_t TRI_SelectByExample (TRI_transaction_collection_t* trxCollection,
// do a full scan
shaper = document->_shaper;
TRI_ReadLockPrimaryIndex(&document->_primaryIndex);
TRI_doc_mptr_t const** ptr = (TRI_doc_mptr_t const**) (document->_primaryIndex._table);
TRI_doc_mptr_t const** end = (TRI_doc_mptr_t const**) ptr + document->_primaryIndex._nrAlloc;
@ -5643,8 +5625,6 @@ TRI_vector_t TRI_SelectByExample (TRI_transaction_collection_t* trxCollection,
}
}
TRI_ReadUnlockPrimaryIndex(&document->_primaryIndex);
return filtered;
}

View File

@ -109,7 +109,8 @@ static bool ResizePrimaryIndex (TRI_primary_index_t* idx,
/// @brief comparison function, compares a master pointer to another
////////////////////////////////////////////////////////////////////////////////
static inline bool IsEqualKeyElement (TRI_doc_mptr_t const* header, void const* element) {
static inline bool IsEqualKeyElement (TRI_doc_mptr_t const* header,
void const* element) {
TRI_doc_mptr_t const* e = static_cast<TRI_doc_mptr_t const*>(element);
if (header->_hash != e->_hash) {
@ -148,8 +149,6 @@ int TRI_InitPrimaryIndex (TRI_primary_index_t* idx,
idx->_nrAlloc = 0;
idx->_nrUsed = 0;
TRI_InitReadWriteLock(&idx->_lock);
if (nullptr == (idx->_table = (void**) TRI_Allocate(zone, sizeof(void*) * INITIAL_SIZE, true))) {
return TRI_ERROR_OUT_OF_MEMORY;
}
@ -168,46 +167,12 @@ void TRI_DestroyPrimaryIndex (TRI_primary_index_t* idx) {
TRI_Free(idx->_memoryZone, idx->_table);
idx->_table = nullptr;
}
TRI_DestroyReadWriteLock(&idx->_lock);
}
// -----------------------------------------------------------------------------
// --SECTION-- public functions
// -----------------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////////////
/// @brief write-locks the primary index
////////////////////////////////////////////////////////////////////////////////
void TRI_WriteLockPrimaryIndex (TRI_primary_index_t* idx) {
TRI_WriteLockReadWriteLock(&idx->_lock);
}
////////////////////////////////////////////////////////////////////////////////
/// @brief write-unlocks the primary index
////////////////////////////////////////////////////////////////////////////////
void TRI_WriteUnlockPrimaryIndex (TRI_primary_index_t* idx) {
TRI_WriteUnlockReadWriteLock(&idx->_lock);
}
////////////////////////////////////////////////////////////////////////////////
/// @brief read-locks the primary index
////////////////////////////////////////////////////////////////////////////////
void TRI_ReadLockPrimaryIndex (TRI_primary_index_t* idx) {
TRI_ReadLockReadWriteLock(&idx->_lock);
}
////////////////////////////////////////////////////////////////////////////////
/// @brief read-unlocks the primary index
////////////////////////////////////////////////////////////////////////////////
void TRI_ReadUnlockPrimaryIndex (TRI_primary_index_t* idx) {
TRI_ReadUnlockReadWriteLock(&idx->_lock);
}
////////////////////////////////////////////////////////////////////////////////
/// @brief looks up an element given a key
////////////////////////////////////////////////////////////////////////////////

View File

@ -48,8 +48,6 @@ typedef struct TRI_primary_index_s {
void** _table; // the table itself
TRI_read_write_lock_t _lock; // lock to protect the index
TRI_memory_zone_t* _memoryZone;
}
TRI_primary_index_t;
@ -75,30 +73,6 @@ void TRI_DestroyPrimaryIndex (TRI_primary_index_t*);
// --SECTION-- public functions
// -----------------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////////////
/// @brief write-locks the primary index
////////////////////////////////////////////////////////////////////////////////
void TRI_WriteLockPrimaryIndex (TRI_primary_index_t*);
////////////////////////////////////////////////////////////////////////////////
/// @brief write-unlocks the primary index
////////////////////////////////////////////////////////////////////////////////
void TRI_WriteUnlockPrimaryIndex (TRI_primary_index_t*);
////////////////////////////////////////////////////////////////////////////////
/// @brief read-locks the primary index
////////////////////////////////////////////////////////////////////////////////
void TRI_ReadLockPrimaryIndex (TRI_primary_index_t*);
////////////////////////////////////////////////////////////////////////////////
/// @brief read-unlocks the primary index
////////////////////////////////////////////////////////////////////////////////
void TRI_ReadUnlockPrimaryIndex (TRI_primary_index_t*);
////////////////////////////////////////////////////////////////////////////////
/// @brief lookups an element given a key
////////////////////////////////////////////////////////////////////////////////

View File

@ -568,13 +568,11 @@ int CollectorThread::transferMarkers (Logfile::IdType logfileId,
}
// lookup the document in the primary index and update its master pointer
TRI_ReadLockPrimaryIndex(&document->_primaryIndex);
TRI_doc_mptr_t* found = static_cast<TRI_doc_mptr_t*>(TRI_LookupByKeyPrimaryIndex(&document->_primaryIndex, key));
if (found != nullptr) {
found->_dataptr = static_cast<void*>(dst);
}
TRI_ReadUnlockPrimaryIndex(&document->_primaryIndex);
break;
}
@ -630,13 +628,11 @@ int CollectorThread::transferMarkers (Logfile::IdType logfileId,
}
// lookup the document in the primary index and update its master pointer
TRI_ReadLockPrimaryIndex(&document->_primaryIndex);
TRI_doc_mptr_t* found = static_cast<TRI_doc_mptr_t*>(TRI_LookupByKeyPrimaryIndex(&document->_primaryIndex, key));
if (found != nullptr) {
found->_dataptr = static_cast<void*>(dst);
}
TRI_ReadUnlockPrimaryIndex(&document->_primaryIndex);
break;
}