diff --git a/arangod/BitIndexes/bitarrayIndex.cpp b/arangod/BitIndexes/bitarrayIndex.cpp index 6a912a9984..b7bcf07d9d 100644 --- a/arangod/BitIndexes/bitarrayIndex.cpp +++ b/arangod/BitIndexes/bitarrayIndex.cpp @@ -1016,7 +1016,7 @@ int BitarrayIndex_generateInsertBitMask (BitarrayIndex* baIndex, // and what values the document has sent. // ........................................................................... - shaper = ((TRI_document_collection_t*) (element->collection))->getShaper(); + shaper = ((TRI_document_collection_t*) (element->collection))->getShaper(); // ONLY IN INDEX, PROTECTED by RUNTIME mask->_mask = 0; shiftLeft = 0; diff --git a/arangod/CapConstraint/cap-constraint.cpp b/arangod/CapConstraint/cap-constraint.cpp index 8fd629f675..91d75d1d7c 100644 --- a/arangod/CapConstraint/cap-constraint.cpp +++ b/arangod/CapConstraint/cap-constraint.cpp @@ -67,8 +67,8 @@ static int ApplyCap (TRI_cap_constraint_t* cap, if (oldest != NULL) { size_t oldSize; - TRI_ASSERT(oldest->getDataPtr() != NULL); // ONLY IN INDEX - oldSize = ((TRI_df_marker_t*) (oldest->getDataPtr()))->_size; // ONLY IN INDEX + TRI_ASSERT(oldest->getDataPtr() != NULL); // ONLY IN INDEX, PROTECTED by RUNTIME + oldSize = ((TRI_df_marker_t*) (oldest->getDataPtr()))->_size; // ONLY IN INDEX, PROTECTED by RUNTIME TRI_ASSERT(oldSize > 0); @@ -218,7 +218,7 @@ static int InsertCapConstraint (TRI_index_t* idx, // there is a size restriction TRI_df_marker_t* marker; - marker = (TRI_df_marker_t*) doc->getDataPtr(); // ONLY IN INDEX + marker = (TRI_df_marker_t*) doc->getDataPtr(); // ONLY IN INDEX, PROTECTED by RUNTIME // check if the document would be too big if ((int64_t) marker->_size > (int64_t) cap->_size) { diff --git a/arangod/GeoIndex/geo-index.cpp b/arangod/GeoIndex/geo-index.cpp index 69d284502d..070c3f5a8a 100644 --- a/arangod/GeoIndex/geo-index.cpp +++ b/arangod/GeoIndex/geo-index.cpp @@ -247,7 +247,7 @@ static TRI_json_t* JsonGeo1Index (TRI_index_t const* idx) { TRI_document_collection_t* document = idx->_collection; // convert location to string - path = document->getShaper()->lookupAttributePathByPid(document->getShaper(), geo->_location); + path = document->getShaper()->lookupAttributePathByPid(document->getShaper(), geo->_location); // ONLY IN INDEX, PROTECTED by RUNTIME if (path == 0) { return nullptr; @@ -292,7 +292,7 @@ static TRI_json_t* JsonGeo2Index (TRI_index_t const* idx) { TRI_document_collection_t* document = idx->_collection; // convert latitude to string - path = document->getShaper()->lookupAttributePathByPid(document->getShaper(), geo->_latitude); + path = document->getShaper()->lookupAttributePathByPid(document->getShaper(), geo->_latitude); // ONLY IN INDEX, PROTECTED by RUNTIME if (path == 0) { return nullptr; @@ -301,7 +301,7 @@ static TRI_json_t* JsonGeo2Index (TRI_index_t const* idx) { latitude = TRI_NAME_SHAPE_PATH(path); // convert longitude to string - path = document->getShaper()->lookupAttributePathByPid(document->getShaper(), geo->_longitude); + path = document->getShaper()->lookupAttributePathByPid(document->getShaper(), geo->_longitude); // ONLY IN INDEX, PROTECTED by RUNTIME if (path == 0) { return nullptr; @@ -348,10 +348,10 @@ static int InsertGeoIndex (TRI_index_t* idx, int res; geo = (TRI_geo_index_t*) idx; - shaper = geo->base._collection->getShaper(); + shaper = geo->base._collection->getShaper(); // ONLY IN INDEX, PROTECTED by RUNTIME // lookup latitude and longitude - TRI_EXTRACT_SHAPED_JSON_MARKER(shapedJson, doc->getDataPtr()); // ONLY IN INDEX + TRI_EXTRACT_SHAPED_JSON_MARKER(shapedJson, doc->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME if (geo->_location != 0) { if (geo->_geoJson) { @@ -428,8 +428,8 @@ static int RemoveGeoIndex (TRI_index_t* idx, double longitude; geo = (TRI_geo_index_t*) idx; - shaper = geo->base._collection->getShaper(); - TRI_EXTRACT_SHAPED_JSON_MARKER(shapedJson, doc->getDataPtr()); // ONLY IN INDEX + shaper = geo->base._collection->getShaper(); // ONLY IN INDEX, PROTECTED by RUNTIME + TRI_EXTRACT_SHAPED_JSON_MARKER(shapedJson, doc->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME // lookup OLD latitude and longitude if (geo->_location != 0) { diff --git a/arangod/HashIndex/hash-index.cpp b/arangod/HashIndex/hash-index.cpp index a80e8f18e4..c3866184fa 100644 --- a/arangod/HashIndex/hash-index.cpp +++ b/arangod/HashIndex/hash-index.cpp @@ -124,14 +124,14 @@ static int HashIndexHelper (TRI_hash_index_t const* hashIndex, TRI_shaped_json_t shapedJson; // the object behind document TRI_shaped_sub_t shapedSub; // the relative sub-object - shaper = hashIndex->base._collection->getShaper(); + shaper = hashIndex->base._collection->getShaper(); // ONLY IN INDEX, PROTECTED by RUNTIME // ............................................................................. // Assign the document to the TRI_hash_index_element_t structure - so that it // can later be retreived. // ............................................................................. - TRI_EXTRACT_SHAPED_JSON_MARKER(shapedJson, document->getDataPtr()); // ONLY IN INDEX + TRI_EXTRACT_SHAPED_JSON_MARKER(shapedJson, document->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME hashElement->_document = const_cast(document); char const* ptr = document->getShapedJsonPtr(); // ONLY IN INDEX @@ -447,7 +447,7 @@ static TRI_json_t* JsonHashIndex (TRI_index_t const* idx) { // Allocate sufficent memory for the field list // ............................................................................. - char const** fieldList = TRI_FieldListByPathList(document->getShaper(), &hashIndex->_paths); + char const** fieldList = TRI_FieldListByPathList(document->getShaper(), &hashIndex->_paths); // ONLY IN INDEX, PROTECTED by RUNTIME if (fieldList == nullptr) { return nullptr; diff --git a/arangod/Replication/Syncer.cpp b/arangod/Replication/Syncer.cpp index dc565a7a1e..ff427a8135 100644 --- a/arangod/Replication/Syncer.cpp +++ b/arangod/Replication/Syncer.cpp @@ -264,8 +264,8 @@ int Syncer::applyCollectionDumpMarker (TRI_transaction_collection_t* trxCollecti TRI_ASSERT(json != 0); TRI_document_collection_t* document = trxCollection->_collection->_collection; - TRI_memory_zone_t* zone = document->getShaper()->_memoryZone; - TRI_shaped_json_t* shaped = TRI_ShapedJsonJson(document->getShaper(), json, true, true); + TRI_memory_zone_t* zone = document->getShaper()->_memoryZone; // PROTECTED by trx in trxCollection + TRI_shaped_json_t* shaped = TRI_ShapedJsonJson(document->getShaper(), json, true, true); // PROTECTED by trx in trxCollection if (shaped != 0) { TRI_doc_mptr_copy_t mptr; diff --git a/arangod/RestHandler/RestDocumentHandler.cpp b/arangod/RestHandler/RestDocumentHandler.cpp index 75b39d38f2..6ccafdcb08 100644 --- a/arangod/RestHandler/RestDocumentHandler.cpp +++ b/arangod/RestHandler/RestDocumentHandler.cpp @@ -564,7 +564,7 @@ bool RestDocumentHandler::readSingleDocument (bool generateBody) { TRI_document_collection_t* document = trx.documentCollection(); TRI_ASSERT(document != nullptr); - TRI_shaper_t* shaper = document->getShaper(); + TRI_shaper_t* shaper = document->getShaper(); // PROTECTED by trx here res = trx.finish(res); @@ -1325,7 +1325,7 @@ bool RestDocumentHandler::modifyDocument (bool isPatch) { TRI_voc_rid_t rid = 0; TRI_document_collection_t* document = trx.documentCollection(); TRI_ASSERT(document != nullptr); - TRI_shaper_t* shaper = document->getShaper(); + TRI_shaper_t* shaper = document->getShaper(); // PROTECTED by trx here string const cidString = StringUtils::itoa(document->_info._planId); diff --git a/arangod/RestHandler/RestReplicationHandler.cpp b/arangod/RestHandler/RestReplicationHandler.cpp index df2b0e88ca..b469e192fc 100644 --- a/arangod/RestHandler/RestReplicationHandler.cpp +++ b/arangod/RestHandler/RestReplicationHandler.cpp @@ -2444,8 +2444,8 @@ int RestReplicationHandler::applyCollectionDumpMarker (CollectionNameResolver co TRI_ASSERT(json != 0); TRI_document_collection_t* document = trxCollection->_collection->_collection; - TRI_memory_zone_t* zone = document->getShaper()->_memoryZone; - TRI_shaped_json_t* shaped = TRI_ShapedJsonJson(document->getShaper(), json, true, true); + TRI_memory_zone_t* zone = document->getShaper()->_memoryZone; // PROTECTED by trx in trxCollection + TRI_shaped_json_t* shaped = TRI_ShapedJsonJson(document->getShaper(), json, true, true); // PROTECTED by trx in trxCollection if (shaped != 0) { TRI_doc_mptr_copy_t mptr; diff --git a/arangod/RestHandler/RestVocbaseBaseHandler.h b/arangod/RestHandler/RestVocbaseBaseHandler.h index da981845d3..4fac386a3e 100644 --- a/arangod/RestHandler/RestVocbaseBaseHandler.h +++ b/arangod/RestHandler/RestVocbaseBaseHandler.h @@ -268,7 +268,7 @@ namespace triagens { TRI_voc_cid_t cid, TRI_doc_mptr_copy_t const& mptr, TRI_voc_rid_t rid) { - return generatePreconditionFailed(trx.resolver()->getCollectionName(cid), (TRI_voc_key_t) TRI_EXTRACT_MARKER_KEY(&mptr), rid); + return generatePreconditionFailed(trx.resolver()->getCollectionName(cid), (TRI_voc_key_t) TRI_EXTRACT_MARKER_KEY(&mptr), rid); // PROTECTED by RUNTIME } //////////////////////////////////////////////////////////////////////////////// @@ -279,7 +279,7 @@ namespace triagens { TRI_voc_cid_t cid, TRI_doc_mptr_copy_t const& mptr, TRI_voc_rid_t rid) { - return generatePreconditionFailed(trx.resolver()->getCollectionName(cid), (TRI_voc_key_t) TRI_EXTRACT_MARKER_KEY(&mptr), rid); + return generatePreconditionFailed(trx.resolver()->getCollectionName(cid), (TRI_voc_key_t) TRI_EXTRACT_MARKER_KEY(&mptr), rid); // PROTECTED by RUNTIME } //////////////////////////////////////////////////////////////////////////////// diff --git a/arangod/SkipLists/skiplistIndex.cpp b/arangod/SkipLists/skiplistIndex.cpp index 55dfa246fe..4492df1e63 100644 --- a/arangod/SkipLists/skiplistIndex.cpp +++ b/arangod/SkipLists/skiplistIndex.cpp @@ -158,7 +158,7 @@ static int CmpElmElm (void* sli, } SkiplistIndex* skiplistindex = static_cast(sli); - shaper = skiplistindex->_collection->getShaper(); + shaper = skiplistindex->_collection->getShaper(); // ONLY IN INDEX, PROTECTED by RUNTIME int compareResult; for (size_t j = 0; j < skiplistindex->_numFields; j++) { @@ -186,8 +186,8 @@ static int CmpElmElm (void* sli, } // We break this tie in the key comparison by looking at the key: - compareResult = strcmp(TRI_EXTRACT_MARKER_KEY(leftElement->_document), // ONLY IN INDEX - TRI_EXTRACT_MARKER_KEY(rightElement->_document)); // ONLY IN INDEX + compareResult = strcmp(TRI_EXTRACT_MARKER_KEY(leftElement->_document), // ONLY IN INDEX, PROTECTED by RUNTIME + TRI_EXTRACT_MARKER_KEY(rightElement->_document)); // ONLY IN INDEX, PROTECTED by RUNTIME if (compareResult < 0) { return -1; @@ -213,7 +213,7 @@ static int CmpKeyElm (void* sli, TRI_ASSERT(nullptr != right); SkiplistIndex* skiplistindex = static_cast(sli); - shaper = skiplistindex->_collection->getShaper(); + shaper = skiplistindex->_collection->getShaper(); // ONLY IN INDEX, PROTECTED by RUNTIME // Note that the key might contain fewer fields than there are indexed // attributes, therefore we only run the following loop to diff --git a/arangod/Utils/Transaction.h b/arangod/Utils/Transaction.h index 2a911778f5..8e00833125 100644 --- a/arangod/Utils/Transaction.h +++ b/arangod/Utils/Transaction.h @@ -350,7 +350,7 @@ namespace triagens { TRI_ASSERT(trxCollection->_collection != nullptr); TRI_ASSERT(trxCollection->_collection->_collection != nullptr); - return trxCollection->_collection->_collection->getShaper(); + return trxCollection->_collection->_collection->getShaper(); // PROTECTED by trx in trxCollection } //////////////////////////////////////////////////////////////////////////////// diff --git a/arangod/V8Server/v8-query.cpp b/arangod/V8Server/v8-query.cpp index 72f8f364d2..01e77eabd2 100644 --- a/arangod/V8Server/v8-query.cpp +++ b/arangod/V8Server/v8-query.cpp @@ -1032,7 +1032,7 @@ static v8::Handle ExecuteSkiplistQuery (v8::Arguments const& argv, v8::Handle err; TRI_document_collection_t* document = trx.documentCollection(); - TRI_shaper_t* shaper = document->getShaper(); + TRI_shaper_t* shaper = document->getShaper(); // PROTECTED by trx here // extract skip and limit TRI_voc_ssize_t skip; @@ -1233,7 +1233,7 @@ static v8::Handle ExecuteBitarrayQuery (v8::Arguments const& argv, } TRI_document_collection_t* document = trx.documentCollection(); - TRI_shaper_t* shaper = document->getShaper(); + TRI_shaper_t* shaper = document->getShaper(); // PROTECTED by trx here // ............................................................................. // Create the json object result which stores documents located @@ -1840,7 +1840,7 @@ static v8::Handle JS_ByExampleQuery (v8::Arguments const& argv) { } TRI_document_collection_t* document = trx.documentCollection(); - TRI_shaper_t* shaper = document->getShaper(); + TRI_shaper_t* shaper = document->getShaper(); // PROTECTED by trx here v8::Handle example = argv[0]->ToObject(); @@ -1988,7 +1988,7 @@ static v8::Handle ByExampleHashIndexQuery (V8ReadTransaction& trx, TRI_index_search_value_t searchValue; TRI_document_collection_t* document = trx.documentCollection(); - TRI_shaper_t* shaper = document->getShaper(); + TRI_shaper_t* shaper = document->getShaper(); // PROTECTED by trx from above int res = SetupSearchValue(&hashIndex->_paths, example, shaper, searchValue, err); if (res != TRI_ERROR_NO_ERROR) { @@ -2191,7 +2191,7 @@ template static bool ChecksumCalculator (TRI_doc_mptr_t const* TRI_shaped_json_t shaped; TRI_EXTRACT_SHAPED_JSON_MARKER(shaped, d); - TRI_StringifyArrayShapedJson(document->getShaper(), &helper->_buffer, &shaped, false); + TRI_StringifyArrayShapedJson(document->getShaper(), &helper->_buffer, &shaped, false); // PROTECTED by trx in calling function TRI_DocumentIteratorDocumentCollection localCrc += TRI_Crc32HashPointer(TRI_BeginStringBuffer(&helper->_buffer), TRI_LengthStringBuffer(&helper->_buffer)); TRI_ResetStringBuffer(&helper->_buffer); } diff --git a/arangod/V8Server/v8-vocbase.cpp b/arangod/V8Server/v8-vocbase.cpp index 4c6530e629..a14a9cacf5 100644 --- a/arangod/V8Server/v8-vocbase.cpp +++ b/arangod/V8Server/v8-vocbase.cpp @@ -2267,7 +2267,7 @@ static v8::Handle ReplaceVocbaseCol (bool useCollection, } TRI_document_collection_t* document = trx.documentCollection(); - TRI_memory_zone_t* zone = document->getShaper()->_memoryZone; + TRI_memory_zone_t* zone = document->getShaper()->_memoryZone; // PROTECTED by trx here TRI_doc_mptr_copy_t mptr; @@ -2302,7 +2302,7 @@ static v8::Handle ReplaceVocbaseCol (bool useCollection, TRI_shaped_json_t shaped; TRI_EXTRACT_SHAPED_JSON_MARKER(shaped, mptr.getDataPtr()); // PROTECTED by trx here - TRI_json_t* old = TRI_JsonShapedJson(document->getShaper(), &shaped); + TRI_json_t* old = TRI_JsonShapedJson(document->getShaper(), &shaped); // PROTECTED by trx here if (old == 0) { TRI_FreeJson(TRI_UNKNOWN_MEM_ZONE, json); @@ -2321,7 +2321,7 @@ static v8::Handle ReplaceVocbaseCol (bool useCollection, TRI_FreeJson(TRI_UNKNOWN_MEM_ZONE, old); } - TRI_shaped_json_t* shaped = TRI_ShapedJsonV8Object(argv[1], document->getShaper(), true); + TRI_shaped_json_t* shaped = TRI_ShapedJsonV8Object(argv[1], document->getShaper(), true); // PROTECTED by trx here if (shaped == 0) { TRI_FreeString(TRI_CORE_MEM_ZONE, key); @@ -2388,11 +2388,11 @@ static v8::Handle SaveVocbaseCol ( } TRI_document_collection_t* document = trx->documentCollection(); - TRI_memory_zone_t* zone = document->getShaper()->_memoryZone; + TRI_memory_zone_t* zone = document->getShaper()->_memoryZone; // PROTECTED by trx from above trx->lockWrite(); - TRI_shaped_json_t* shaped = TRI_ShapedJsonV8Object(argv[0], document->getShaper(), true); + TRI_shaped_json_t* shaped = TRI_ShapedJsonV8Object(argv[0], document->getShaper(), true); // PROTECTED by trx from above if (shaped == nullptr) { FREE_STRING(TRI_CORE_MEM_ZONE, key); @@ -2503,11 +2503,11 @@ static v8::Handle SaveEdgeCol ( } TRI_document_collection_t* document = trx->documentCollection(); - TRI_memory_zone_t* zone = document->getShaper()->_memoryZone; + TRI_memory_zone_t* zone = document->getShaper()->_memoryZone; // PROTECTED by trx from above trx->lockWrite(); // extract shaped data - TRI_shaped_json_t* shaped = TRI_ShapedJsonV8Object(argv[2], document->getShaper(), true); + TRI_shaped_json_t* shaped = TRI_ShapedJsonV8Object(argv[2], document->getShaper(), true); // PROTECTED by trx here if (shaped == nullptr) { FREE_STRING(TRI_CORE_MEM_ZONE, edge._fromKey); @@ -2689,11 +2689,11 @@ static v8::Handle UpdateVocbaseCol (bool useCollection, TRI_document_collection_t* document = trx.documentCollection(); - TRI_memory_zone_t* zone = document->getShaper()->_memoryZone; + TRI_memory_zone_t* zone = document->getShaper()->_memoryZone; // PROTECTED by trx here TRI_shaped_json_t shaped; TRI_EXTRACT_SHAPED_JSON_MARKER(shaped, mptr.getDataPtr()); // PROTECTED by trx here - TRI_json_t* old = TRI_JsonShapedJson(document->getShaper(), &shaped); + TRI_json_t* old = TRI_JsonShapedJson(document->getShaper(), &shaped); // PROTECTED by trx here if (old == nullptr) { TRI_FreeJson(TRI_UNKNOWN_MEM_ZONE, json); @@ -2706,7 +2706,7 @@ static v8::Handle UpdateVocbaseCol (bool useCollection, const string cidString = StringUtils::itoa(document->_info._planId); if (shardKeysChanged(col->_dbName, cidString, old, json, true)) { - TRI_FreeJson(document->getShaper()->_memoryZone, old); + TRI_FreeJson(document->getShaper()->_memoryZone, old); // PROTECTED by trx here TRI_FreeJson(TRI_UNKNOWN_MEM_ZONE, json); FREE_STRING(TRI_CORE_MEM_ZONE, key); @@ -9291,7 +9291,7 @@ static v8::Handle MapGetNamedShapedJson (v8::Local name, TRI_document_collection_t* collection = barrier->_container->_collection; // get shape accessor - TRI_shaper_t* shaper = collection->getShaper(); + TRI_shaper_t* shaper = collection->getShaper(); // PROTECTED by trx here TRI_shape_pid_t pid = shaper->lookupAttributePathByName(shaper, key.c_str()); if (pid == 0) { @@ -9339,7 +9339,7 @@ static v8::Handle KeysOfShapedJson (const v8::AccessorInfo& info) { TRI_document_collection_t* collection = barrier->_container->_collection; // check for array shape - TRI_shaper_t* shaper = collection->getShaper(); + TRI_shaper_t* shaper = collection->getShaper(); // PROTECTED by BARRIER, checked by RUNTIME TRI_shape_sid_t sid; TRI_EXTRACT_SHAPE_IDENTIFIER_MARKER(sid, marker); @@ -9425,7 +9425,7 @@ static v8::Handle PropertyQueryShapedJson (v8::Local na TRI_document_collection_t* collection = barrier->_container->_collection; // get shape accessor - TRI_shaper_t* shaper = collection->getShaper(); + TRI_shaper_t* shaper = collection->getShaper(); // PROTECTED by BARRIER, checked by RUNTIME TRI_shape_pid_t pid = shaper->lookupAttributePathByName(shaper, key.c_str()); if (pid == 0) { @@ -9650,7 +9650,7 @@ v8::Handle TRI_WrapShapedJson (T& trx, if (doCopy) { // we'll create a full copy of the document TRI_document_collection_t* collection = trx.documentCollection(); - TRI_shaper_t* shaper = collection->getShaper(); + TRI_shaper_t* shaper = collection->getShaper(); // PROTECTED by trx from above TRI_shaped_json_t json; TRI_EXTRACT_SHAPED_JSON_MARKER(json, document->getDataPtr()); // PROTECTED by trx from above diff --git a/arangod/VocBase/auth.cpp b/arangod/VocBase/auth.cpp index e5ba8d7309..a56906b350 100644 --- a/arangod/VocBase/auth.cpp +++ b/arangod/VocBase/auth.cpp @@ -241,7 +241,7 @@ static TRI_vocbase_auth_t* ConvertAuthInfo (TRI_vocbase_t* vocbase, bool found; bool mustChange; - TRI_shaper_t* shaper = document->getShaper(); + TRI_shaper_t* shaper = document->getShaper(); // PROTECTED by trx in caller, checked by RUNTIME // extract username user = ExtractStringShapedJson(shaper, shapedJson, "user"); diff --git a/arangod/VocBase/compactor.cpp b/arangod/VocBase/compactor.cpp index 263ccc636f..dfa50eac39 100644 --- a/arangod/VocBase/compactor.cpp +++ b/arangod/VocBase/compactor.cpp @@ -490,8 +490,8 @@ static bool Compactifier (TRI_df_marker_t const* marker, } TRI_doc_mptr_t* found2 = const_cast(found); - TRI_ASSERT(found2->getDataPtr() != nullptr); - TRI_ASSERT(((TRI_df_marker_t*) found2->getDataPtr())->_size > 0); + TRI_ASSERT(found2->getDataPtr() != nullptr); // ONLY in COMPACTIFIER, PROTECTED by fake trx outside + TRI_ASSERT(((TRI_df_marker_t*) found2->getDataPtr())->_size > 0); // ONLY in COMPACTIFIER, PROTECTED by fake trx outside // the fid might change if (found->_fid != context->_compactor->_fid) { @@ -539,7 +539,7 @@ static bool Compactifier (TRI_df_marker_t const* marker, LOG_FATAL_AND_EXIT("cannot write shape marker to compactor file: %s", TRI_last_error()); } - res = TRI_MoveMarkerVocShaper(document->getShaper(), result); + res = TRI_MoveMarkerVocShaper(document->getShaper(), result); // ONLY IN COMPACTOR, PROTECTED by fake trx in caller if (res != TRI_ERROR_NO_ERROR) { LOG_FATAL_AND_EXIT("cannot re-locate shape marker"); @@ -559,7 +559,7 @@ static bool Compactifier (TRI_df_marker_t const* marker, LOG_FATAL_AND_EXIT("cannot write attribute marker to compactor file: %s", TRI_last_error()); } - res = TRI_MoveMarkerVocShaper(document->getShaper(), result); + res = TRI_MoveMarkerVocShaper(document->getShaper(), result); // ONLY IN COMPACTOR, PROTECTED by fake trx in caller if (res != TRI_ERROR_NO_ERROR) { LOG_FATAL_AND_EXIT("cannot re-locate shape marker"); diff --git a/arangod/VocBase/document-collection.cpp b/arangod/VocBase/document-collection.cpp index 096fd443d0..55061aa38b 100644 --- a/arangod/VocBase/document-collection.cpp +++ b/arangod/VocBase/document-collection.cpp @@ -419,7 +419,7 @@ static int InsertPrimaryIndex (TRI_document_collection_t* document, TRI_ASSERT(document != nullptr); TRI_ASSERT(header != nullptr); - TRI_ASSERT(header->getDataPtr() != nullptr); // ONLY IN INDEX + TRI_ASSERT(header->getDataPtr() != nullptr); // ONLY IN INDEX, PROTECTED by RUNTIME // insert into primary index int res = TRI_InsertKeyPrimaryIndex(&document->_primaryIndex, header, (void const**) &found); @@ -436,7 +436,7 @@ static int InsertPrimaryIndex (TRI_document_collection_t* document, // we found a previous revision in the index // the found revision is still alive LOG_TRACE("document '%s' already existed with revision %llu while creating revision %llu", - TRI_EXTRACT_MARKER_KEY(header), // ONLY IN INDEX + TRI_EXTRACT_MARKER_KEY(header), // ONLY IN INDEX, PROTECTED by RUNTIME (unsigned long long) found->_rid, (unsigned long long) header->_rid); @@ -484,7 +484,7 @@ static int DeletePrimaryIndex (TRI_document_collection_t* document, // remove from main index // ............................................................................. - TRI_doc_mptr_t* found = static_cast(TRI_RemoveKeyPrimaryIndex(&document->_primaryIndex, TRI_EXTRACT_MARKER_KEY(header))); // ONLY IN INDEX + TRI_doc_mptr_t* found = static_cast(TRI_RemoveKeyPrimaryIndex(&document->_primaryIndex, TRI_EXTRACT_MARKER_KEY(header))); // ONLY IN INDEX, PROTECTED by RUNTIME if (found == nullptr) { return TRI_ERROR_ARANGO_DOCUMENT_NOT_FOUND; @@ -540,7 +540,7 @@ static int CreateHeader (TRI_document_collection_t* document, header->_rid = marker->_rid; header->_fid = fid; header->setDataPtr(marker); // ONLY IN OPENITERATOR - header->_hash = TRI_FnvHashString(TRI_EXTRACT_MARKER_KEY(header)); // ONLY IN OPENITERATOR + header->_hash = TRI_FnvHashString(TRI_EXTRACT_MARKER_KEY(header)); // ONLY IN OPENITERATOR, PROTECTED by RUNTIME *result = header; return TRI_ERROR_NO_ERROR; @@ -833,7 +833,7 @@ static int InsertDocumentShapedJson (TRI_transaction_collection_t* trxCollection uint64_t hash = TRI_FnvHashPointer(keyString.c_str(), keyString.size()); // construct a legend for the shaped json - triagens::basics::JsonLegend legend(document->getShaper()); + triagens::basics::JsonLegend legend(document->getShaper()); // PROTECTED by trx in trxCollection int res = legend.addShape(shaped->_sid, &shaped->_data); if (res != TRI_ERROR_NO_ERROR) { @@ -1055,7 +1055,7 @@ static int UpdateDocumentShapedJson (TRI_transaction_collection_t* trxCollection TRI_document_collection_t* document = trxCollection->_collection->_collection; // create legend - triagens::basics::JsonLegend legend(document->getShaper()); + triagens::basics::JsonLegend legend(document->getShaper()); // PROTECTED by trx in trxCollection int res = legend.addShape(shaped->_sid, &shaped->_data); if (res != TRI_ERROR_NO_ERROR) { @@ -1478,11 +1478,11 @@ static int OpenIteratorApplyInsert (open_iterator_state_t* state, dfi = TRI_FindDatafileInfoDocumentCollection(document, oldData._fid, true); } - if (dfi != NULL && found->getDataPtr() != NULL) { // ONLY IN OPENITERATOR + if (dfi != NULL && found->getDataPtr() != NULL) { // ONLY IN OPENITERATOR, PROTECTED by RUNTIME int64_t size; - TRI_ASSERT(found->getDataPtr() != NULL); // ONLY IN OPENITERATOR - size = (int64_t) ((TRI_df_marker_t*) found->getDataPtr())->_size; // ONLY IN OPENITERATOR + TRI_ASSERT(found->getDataPtr() != NULL); // ONLY IN OPENITERATOR, PROTECTED by RUNTIME + size = (int64_t) ((TRI_df_marker_t*) found->getDataPtr())->_size; // ONLY IN OPENITERATOR, PROTECTED by RUNTIME dfi->_numberAlive--; dfi->_sizeAlive -= TRI_DF_ALIGN_BLOCK(size); @@ -1500,10 +1500,10 @@ static int OpenIteratorApplyInsert (open_iterator_state_t* state, // it is a stale update else { if (state->_dfi != NULL) { - TRI_ASSERT(found->getDataPtr() != NULL); // ONLY IN OPENITERATOR + TRI_ASSERT(found->getDataPtr() != NULL); // ONLY IN OPENITERATOR, PROTECTED by RUNTIME state->_dfi->_numberDead++; - state->_dfi->_sizeDead += (int64_t) TRI_DF_ALIGN_BLOCK(((TRI_df_marker_t*) found->getDataPtr())->_size); // ONLY IN OPENITERATOR + state->_dfi->_sizeDead += (int64_t) TRI_DF_ALIGN_BLOCK(((TRI_df_marker_t*) found->getDataPtr())->_size); // ONLY IN OPENITERATOR, PROTECTED by RUNTIME } } @@ -1573,9 +1573,9 @@ static int OpenIteratorApplyRemove (open_iterator_state_t* state, if (dfi != NULL) { int64_t size; - TRI_ASSERT(found->getDataPtr() != NULL); // ONLY IN OPENITERATOR + TRI_ASSERT(found->getDataPtr() != NULL); // ONLY IN OPENITERATOR, PROTECTED by RUNTIME - size = (int64_t) ((TRI_df_marker_t*) found->getDataPtr())->_size; // ONLY IN OPENITERATOR + size = (int64_t) ((TRI_df_marker_t*) found->getDataPtr())->_size; // ONLY IN OPENITERATOR, PROTECTED by RUNTIME dfi->_numberAlive--; dfi->_sizeAlive -= TRI_DF_ALIGN_BLOCK(size); @@ -1840,7 +1840,7 @@ static int OpenIteratorHandleShapeMarker (TRI_df_marker_t const* marker, TRI_datafile_t* datafile, open_iterator_state_t* state) { TRI_document_collection_t* document = state->_document; - int res = TRI_InsertShapeVocShaper(document->getShaper(), marker); + int res = TRI_InsertShapeVocShaper(document->getShaper(), marker); // ONLY IN OPENITERATOR, PROTECTED by fake trx from above if (res == TRI_ERROR_NO_ERROR) { if (state->_fid != datafile->_fid) { @@ -1866,7 +1866,7 @@ static int OpenIteratorHandleAttributeMarker (TRI_df_marker_t const* marker, open_iterator_state_t* state) { TRI_document_collection_t* document = state->_document; - int res = TRI_InsertAttributeVocShaper(document->getShaper(), marker); + int res = TRI_InsertAttributeVocShaper(document->getShaper(), marker); // ONLY IN OPENITERATOR, PROTECTED by fake trx from above if (res == TRI_ERROR_NO_ERROR) { if (state->_fid != datafile->_fid) { @@ -2261,9 +2261,9 @@ static void DestroyBaseDocumentCollection (TRI_document_collection_t* document) TRI_DestroyPrimaryIndex(&document->_primaryIndex); { - TransactionBase trx(true); // just to protect the following getShaper call - if (document->getShaper() != nullptr) { - TRI_FreeVocShaper(document->getShaper()); + TransactionBase trx(true); // just to protect the following call + if (document->getShaper() != nullptr) { // PROTECTED by trx here + TRI_FreeVocShaper(document->getShaper()); // PROTECTED by trx here } } @@ -2535,8 +2535,8 @@ TRI_document_collection_t* TRI_CreateDocumentCollection (TRI_vocbase_t* vocbase, return nullptr; } - TransactionBase trx(true); // just to protect the following getShaper call - TRI_ASSERT(document->getShaper() != nullptr); + TransactionBase trx(true); // just to protect the following call + TRI_ASSERT(document->getShaper() != nullptr); // ONLY IN COLLECTION CREATION, PROTECTED by trx here return document; } @@ -3081,9 +3081,9 @@ TRI_document_collection_t* TRI_OpenDocumentCollection (TRI_vocbase_t* vocbase, return nullptr; } - TRI_ASSERT(document->getShaper() != nullptr); + TRI_ASSERT(document->getShaper() != nullptr); // ONLY in OPENCOLLECTION, PROTECTED by fake trx here - TRI_InitVocShaper(document->getShaper()); + TRI_InitVocShaper(document->getShaper()); // ONLY in OPENCOLLECTION, PROTECTED by fake trx here // fill internal indexes (this is, the edges index at the moment) FillInternalIndexes(document); @@ -3102,8 +3102,8 @@ int TRI_CloseDocumentCollection (TRI_document_collection_t* document) { // closes all open compactors, journals, datafiles int res = TRI_CloseCollection(document); - TransactionBase trx(true); // just to protect the getShaper call - TRI_FreeVocShaper(document->getShaper()); + TransactionBase trx(true); // just to protect the following call + TRI_FreeVocShaper(document->getShaper()); // ONLY IN CLOSECOLLECTION, PROTECTED by fake trx here document->setShaper(nullptr); return res; @@ -4136,7 +4136,7 @@ static TRI_index_t* CreateGeoIndexDocumentCollection (TRI_document_collection_t* loc = 0; idx = NULL; - shaper = document->getShaper(); + shaper = document->getShaper(); // ONLY IN INDEX, PROTECTED by RUNTIME if (location != NULL) { loc = shaper->findOrCreateAttributePathByName(shaper, location, true); @@ -4390,7 +4390,7 @@ TRI_index_t* TRI_LookupGeoIndex1DocumentCollection (TRI_document_collection_t* d TRI_shaper_t* shaper; size_t i, n; - shaper = document->getShaper(); + shaper = document->getShaper(); // ONLY IN INDEX, PROTECTED by RUNTIME loc = shaper->lookupAttributePathByName(shaper, location); @@ -4433,7 +4433,7 @@ TRI_index_t* TRI_LookupGeoIndex2DocumentCollection (TRI_document_collection_t* d TRI_shaper_t* shaper; size_t i, n; - shaper = document->getShaper(); + shaper = document->getShaper(); // ONLY IN INDEX, PROTECTED by RUNTIME lat = shaper->lookupAttributePathByName(shaper, latitude); lon = shaper->lookupAttributePathByName(shaper, longitude); @@ -4583,7 +4583,7 @@ static TRI_index_t* CreateHashIndexDocumentCollection (TRI_document_collection_t // determine the sorted shape ids for the attributes res = PidNamesByAttributeNames(attributes, - document->getShaper(), + document->getShaper(), // ONLY IN INDEX, PROTECTED by RUNTIME &paths, &fields, true, @@ -4691,7 +4691,7 @@ TRI_index_t* TRI_LookupHashIndexDocumentCollection (TRI_document_collection_t* d // determine the sorted shape ids for the attributes res = PidNamesByAttributeNames(attributes, - document->getShaper(), + document->getShaper(), // ONLY IN INDEX, PROTECTED by RUNTIME &paths, &fields, true, @@ -4777,7 +4777,7 @@ static TRI_index_t* CreateSkiplistIndexDocumentCollection (TRI_document_collecti int res; res = PidNamesByAttributeNames(attributes, - document->getShaper(), + document->getShaper(), // ONLY IN INDEX, PROTECTED by RUNTIME &paths, &fields, false, @@ -4879,7 +4879,7 @@ TRI_index_t* TRI_LookupSkiplistIndexDocumentCollection (TRI_document_collection_ // determine the unsorted shape ids for the attributes res = PidNamesByAttributeNames(attributes, - document->getShaper(), + document->getShaper(), // ONLY IN INDEX, PROTECTED by RUNTIME &paths, &fields, false, @@ -5219,7 +5219,7 @@ static TRI_index_t* CreateBitarrayIndexDocumentCollection (TRI_document_collecti int res; res = PidNamesByAttributeNames(attributes, - document->getShaper(), + document->getShaper(), // ONLY IN INDEX, PROTECTED by RUNTIME &paths, &fields, false, @@ -5353,7 +5353,7 @@ TRI_index_t* TRI_LookupBitarrayIndexDocumentCollection (TRI_document_collection_ // ........................................................................... result = PidNamesByAttributeNames(attributes, - document->getShaper(), + document->getShaper(), // ONLY IN INDEX, PROTECTED by RUNTIME &paths, &fields, false, @@ -5513,7 +5513,7 @@ std::vector TRI_SelectByExample ( TRI_document_collection_t* document = trxCollection->_collection->_collection; - TRI_shaper_t* shaper = document->getShaper(); + TRI_shaper_t* shaper = document->getShaper(); // PROTECTED by trx in trxCollection // use filtered to hold copies of the master pointer std::vector filtered; diff --git a/arangod/VocBase/edge-collection.cpp b/arangod/VocBase/edge-collection.cpp index 1c0c1e3cc9..2f29f22769 100644 --- a/arangod/VocBase/edge-collection.cpp +++ b/arangod/VocBase/edge-collection.cpp @@ -70,10 +70,10 @@ static TRI_edge_index_t* FindEdgesIndex ( //////////////////////////////////////////////////////////////////////////////// static bool IsReflexive (TRI_doc_mptr_t const* mptr) { - TRI_df_marker_t const* marker = static_cast(mptr->getDataPtr()); // ONLY IN INDEX + TRI_df_marker_t const* marker = static_cast(mptr->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME if (marker->_type == TRI_DOC_MARKER_KEY_EDGE) { - TRI_doc_edge_key_marker_t const* edge = static_cast(mptr->getDataPtr()); // ONLY IN INDEX + TRI_doc_edge_key_marker_t const* edge = static_cast(mptr->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME if (edge->_toCid == edge->_fromCid) { char const* fromKey = reinterpret_cast(edge) + edge->_offsetFromKey; @@ -83,7 +83,7 @@ static bool IsReflexive (TRI_doc_mptr_t const* mptr) { } } else if (marker->_type == TRI_WAL_MARKER_EDGE) { - triagens::wal::edge_marker_t const* edge = static_cast(mptr->getDataPtr()); // ONLY IN INDEX + triagens::wal::edge_marker_t const* edge = static_cast(mptr->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME if (edge->_toCid == edge->_fromCid) { char const* fromKey = reinterpret_cast(edge) + edge->_offsetFromKey; diff --git a/arangod/VocBase/headers.cpp b/arangod/VocBase/headers.cpp index 58a91c3cc4..7341370b60 100644 --- a/arangod/VocBase/headers.cpp +++ b/arangod/VocBase/headers.cpp @@ -122,10 +122,10 @@ static void MoveBackHeader (TRI_headers_t* h, TRI_ASSERT(header->_next != header); TRI_ASSERT(old != nullptr); - TRI_ASSERT(old->getDataPtr() != nullptr); // ONLY IN HEADERS + TRI_ASSERT(old->getDataPtr() != nullptr); // ONLY IN HEADERS, PROTECTED by RUNTIME - int64_t newSize = (int64_t) (((TRI_df_marker_t*) header->getDataPtr())->_size); // ONLY IN HEADERS - int64_t oldSize = (int64_t) (((TRI_df_marker_t*) old->getDataPtr())->_size); // ONLY IN HEADERS + int64_t newSize = (int64_t) (((TRI_df_marker_t*) header->getDataPtr())->_size); // ONLY IN HEADERS, PROTECTED by RUNTIME + int64_t oldSize = (int64_t) (((TRI_df_marker_t*) old->getDataPtr())->_size); // ONLY IN HEADERS, PROTECTED by RUNTIME // we must adjust the size of the collection headers->_totalSize += TRI_DF_ALIGN_BLOCK(newSize); @@ -175,11 +175,11 @@ static void UnlinkHeader (TRI_headers_t* h, int64_t size; TRI_ASSERT(header != nullptr); - TRI_ASSERT(header->getDataPtr() != nullptr); // ONLY IN HEADERS + TRI_ASSERT(header->getDataPtr() != nullptr); // ONLY IN HEADERS, PROTECTED by RUNTIME TRI_ASSERT(header->_prev != header); TRI_ASSERT(header->_next != header); - size = (int64_t) ((TRI_df_marker_t*) header->getDataPtr())->_size; // ONLY IN HEADERS + size = (int64_t) ((TRI_df_marker_t*) header->getDataPtr())->_size; // ONLY IN HEADERS, PROTECTED by RUNTIME TRI_ASSERT(size > 0); // unlink the header @@ -239,13 +239,13 @@ static void MoveHeader (TRI_headers_t* h, TRI_ASSERT(headers->_nrAllocated > 0); TRI_ASSERT(header->_prev != header); TRI_ASSERT(header->_next != header); - TRI_ASSERT(header->getDataPtr() != nullptr); // ONLY IN HEADERS - TRI_ASSERT(((TRI_df_marker_t*) header->getDataPtr())->_size > 0); // ONLY IN HEADERS + TRI_ASSERT(header->getDataPtr() != nullptr); // ONLY IN HEADERS, PROTECTED by RUNTIME + TRI_ASSERT(((TRI_df_marker_t*) header->getDataPtr())->_size > 0); // ONLY IN HEADERS, PROTECTED by RUNTIME TRI_ASSERT(old != nullptr); - TRI_ASSERT(old->getDataPtr() != nullptr); // ONLY IN HEADERS + TRI_ASSERT(old->getDataPtr() != nullptr); // ONLY IN HEADERS, PROTECTED by RUNTIME - int64_t newSize = (int64_t) (((TRI_df_marker_t*) header->getDataPtr())->_size); // ONLY IN HEADERS - int64_t oldSize = (int64_t) (((TRI_df_marker_t*) old->getDataPtr())->_size); // ONLY IN HEADERS + int64_t newSize = (int64_t) (((TRI_df_marker_t*) header->getDataPtr())->_size); // ONLY IN HEADERS, PROTECTED by RUNTIME + int64_t oldSize = (int64_t) (((TRI_df_marker_t*) old->getDataPtr())->_size); // ONLY IN HEADERS, PROTECTED by RUNTIME headers->_totalSize -= TRI_DF_ALIGN_BLOCK(newSize); headers->_totalSize += TRI_DF_ALIGN_BLOCK(oldSize); @@ -307,9 +307,9 @@ static void RelinkHeader (TRI_headers_t* h, return; } - TRI_ASSERT(header->getDataPtr() != nullptr); // ONLY IN HEADERS + TRI_ASSERT(header->getDataPtr() != nullptr); // ONLY IN HEADERS, PROTECTED by RUNTIME - int64_t size = (int64_t) ((TRI_df_marker_t*) header->getDataPtr())->_size; // ONLY IN HEADERS + int64_t size = (int64_t) ((TRI_df_marker_t*) header->getDataPtr())->_size; // ONLY IN HEADERS, PROTECTED by RUNTIME TRI_ASSERT(size > 0); TRI_ASSERT(headers->_begin != header); @@ -373,7 +373,7 @@ static TRI_doc_mptr_t* RequestHeader (TRI_headers_t* h, TRI_doc_mptr_t* result = const_cast(headers->_freelist); TRI_ASSERT(result != nullptr); - headers->_freelist = static_cast(result->getDataPtr()); // ONLY IN HEADERS + headers->_freelist = static_cast(result->getDataPtr()); // ONLY IN HEADERS, PROTECTED by RUNTIME result->setDataPtr(nullptr); // ONLY IN HEADERS // put new header at the end of the list diff --git a/arangod/VocBase/index.cpp b/arangod/VocBase/index.cpp index 15130fd5df..e6d19266c1 100644 --- a/arangod/VocBase/index.cpp +++ b/arangod/VocBase/index.cpp @@ -658,17 +658,17 @@ static uint64_t HashElementEdgeFrom (TRI_multi_pointer_t* array, } else { TRI_doc_mptr_t const* mptr = static_cast(data); - TRI_df_marker_t const* marker = static_cast(mptr->getDataPtr()); // ONLY IN INDEX + TRI_df_marker_t const* marker = static_cast(mptr->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME if (marker->_type == TRI_DOC_MARKER_KEY_EDGE) { - TRI_doc_edge_key_marker_t const* edge = static_cast(mptr->getDataPtr()); // ONLY IN INDEX + TRI_doc_edge_key_marker_t const* edge = static_cast(mptr->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME char const* key = (char const*) edge + edge->_offsetFromKey; hash = edge->_fromCid; hash ^= (uint64_t) fasthash64(key, strlen(key), 0x87654321); } else if (marker->_type == TRI_WAL_MARKER_EDGE) { - triagens::wal::edge_marker_t const* edge = static_cast(mptr->getDataPtr()); // ONLY IN INDEX + triagens::wal::edge_marker_t const* edge = static_cast(mptr->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME char const* key = (char const*) edge + edge->_offsetFromKey; hash = edge->_fromCid; @@ -693,17 +693,17 @@ static uint64_t HashElementEdgeTo (TRI_multi_pointer_t* array, } else { TRI_doc_mptr_t const* mptr = static_cast(data); - TRI_df_marker_t const* marker = static_cast(mptr->getDataPtr()); // ONLY IN INDEX + TRI_df_marker_t const* marker = static_cast(mptr->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME if (marker->_type == TRI_DOC_MARKER_KEY_EDGE) { - TRI_doc_edge_key_marker_t const* edge = static_cast(mptr->getDataPtr()); // ONLY IN INDEX + TRI_doc_edge_key_marker_t const* edge = static_cast(mptr->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME char const* key = (char const*) edge + edge->_offsetToKey; hash = edge->_toCid; hash ^= (uint64_t) fasthash64(key, strlen(key), 0x87654321); } else if (marker->_type == TRI_WAL_MARKER_EDGE) { - triagens::wal::edge_marker_t const* edge = static_cast(mptr->getDataPtr()); // ONLY IN INDEX + triagens::wal::edge_marker_t const* edge = static_cast(mptr->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME char const* key = (char const*) edge + edge->_offsetToKey; hash = edge->_toCid; @@ -727,15 +727,15 @@ static bool IsEqualKeyEdgeFrom (TRI_multi_pointer_t* array, char const* lKey = l->_key; TRI_doc_mptr_t const* rMptr = static_cast(right); - TRI_df_marker_t const* marker = static_cast(rMptr->getDataPtr()); // ONLY IN INDEX + TRI_df_marker_t const* marker = static_cast(rMptr->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME if (marker->_type == TRI_DOC_MARKER_KEY_EDGE) { - TRI_doc_edge_key_marker_t const* rEdge = static_cast(rMptr->getDataPtr()); // ONLY IN INDEX + TRI_doc_edge_key_marker_t const* rEdge = static_cast(rMptr->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME char const* rKey = (char const*) rEdge + rEdge->_offsetFromKey; return (l->_cid == rEdge->_fromCid) && (strcmp(lKey, rKey) == 0); } else if (marker->_type == TRI_WAL_MARKER_EDGE) { - triagens::wal::edge_marker_t const* rEdge = static_cast(rMptr->getDataPtr()); // ONLY IN INDEX + triagens::wal::edge_marker_t const* rEdge = static_cast(rMptr->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME char const* rKey = (char const*) rEdge + rEdge->_offsetFromKey; return (l->_cid == rEdge->_fromCid) && (strcmp(lKey, rKey) == 0); } @@ -756,15 +756,15 @@ static bool IsEqualKeyEdgeTo (TRI_multi_pointer_t* array, char const* lKey = l->_key; TRI_doc_mptr_t const* rMptr = static_cast(right); - TRI_df_marker_t const* marker = static_cast(rMptr->getDataPtr()); // ONLY IN INDEX + TRI_df_marker_t const* marker = static_cast(rMptr->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME if (marker->_type == TRI_DOC_MARKER_KEY_EDGE) { - TRI_doc_edge_key_marker_t const* rEdge = static_cast(rMptr->getDataPtr()); // ONLY IN INDEX + TRI_doc_edge_key_marker_t const* rEdge = static_cast(rMptr->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME char const* rKey = (char const*) rEdge + rEdge->_offsetToKey; return (l->_cid == rEdge->_toCid) && (strcmp(lKey, rKey) == 0); } else if (marker->_type == TRI_WAL_MARKER_EDGE) { - triagens::wal::edge_marker_t const* rEdge = static_cast(rMptr->getDataPtr()); // ONLY IN INDEX + triagens::wal::edge_marker_t const* rEdge = static_cast(rMptr->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME char const* rKey = (char const*) rEdge + rEdge->_offsetToKey; return (l->_cid == rEdge->_toCid) && (strcmp(lKey, rKey) == 0); } @@ -791,15 +791,15 @@ static bool IsEqualElementEdgeFrom (TRI_multi_pointer_t* array, TRI_voc_cid_t rCid; TRI_doc_mptr_t const* lMptr = static_cast(left); - marker = static_cast(lMptr->getDataPtr()); // ONLY IN INDEX + marker = static_cast(lMptr->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME if (marker->_type == TRI_DOC_MARKER_KEY_EDGE) { - TRI_doc_edge_key_marker_t const* lEdge = static_cast(lMptr->getDataPtr()); // ONLY IN INDEX + TRI_doc_edge_key_marker_t const* lEdge = static_cast(lMptr->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME lKey = (char const*) lEdge + lEdge->_offsetFromKey; lCid = lEdge->_fromCid; } else if (marker->_type == TRI_WAL_MARKER_EDGE) { - triagens::wal::edge_marker_t const* lEdge = static_cast(lMptr->getDataPtr()); // ONLY IN INDEX + triagens::wal::edge_marker_t const* lEdge = static_cast(lMptr->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME lKey = (char const*) lEdge + lEdge->_offsetFromKey; lCid = lEdge->_fromCid; } @@ -808,15 +808,15 @@ static bool IsEqualElementEdgeFrom (TRI_multi_pointer_t* array, } TRI_doc_mptr_t const* rMptr = static_cast(right); - marker = static_cast(rMptr->getDataPtr()); // ONLY IN INDEX + marker = static_cast(rMptr->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME if (marker->_type == TRI_DOC_MARKER_KEY_EDGE) { - TRI_doc_edge_key_marker_t const* rEdge = static_cast(rMptr->getDataPtr()); // ONLY IN INDEX + TRI_doc_edge_key_marker_t const* rEdge = static_cast(rMptr->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME lKey = (char const*) rEdge + rEdge->_offsetFromKey; rCid = rEdge->_fromCid; } else if (marker->_type == TRI_WAL_MARKER_EDGE) { - triagens::wal::edge_marker_t const* rEdge = static_cast(rMptr->getDataPtr()); // ONLY IN INDEX + triagens::wal::edge_marker_t const* rEdge = static_cast(rMptr->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME rKey = (char const*) rEdge + rEdge->_offsetFromKey; rCid = rEdge->_fromCid; } @@ -847,15 +847,15 @@ static bool IsEqualElementEdgeTo (TRI_multi_pointer_t* array, TRI_voc_cid_t rCid; TRI_doc_mptr_t const* lMptr = static_cast(left); - marker = static_cast(lMptr->getDataPtr()); // ONLY IN INDEX + marker = static_cast(lMptr->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME if (marker->_type == TRI_DOC_MARKER_KEY_EDGE) { - TRI_doc_edge_key_marker_t const* lEdge = static_cast(lMptr->getDataPtr()); // ONLY IN INDEX + TRI_doc_edge_key_marker_t const* lEdge = static_cast(lMptr->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME lKey = (char const*) lEdge + lEdge->_offsetToKey; lCid = lEdge->_toCid; } else if (marker->_type == TRI_WAL_MARKER_EDGE) { - triagens::wal::edge_marker_t const* lEdge = static_cast(lMptr->getDataPtr()); // ONLY IN INDEX + triagens::wal::edge_marker_t const* lEdge = static_cast(lMptr->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME lKey = (char const*) lEdge + lEdge->_offsetToKey; lCid = lEdge->_toCid; } @@ -864,15 +864,15 @@ static bool IsEqualElementEdgeTo (TRI_multi_pointer_t* array, } TRI_doc_mptr_t const* rMptr = static_cast(right); - marker = static_cast(rMptr->getDataPtr()); // ONLY IN INDEX + marker = static_cast(rMptr->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME if (marker->_type == TRI_DOC_MARKER_KEY_EDGE) { - TRI_doc_edge_key_marker_t const* rEdge = static_cast(rMptr->getDataPtr()); // ONLY IN INDEX + TRI_doc_edge_key_marker_t const* rEdge = static_cast(rMptr->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME lKey = (char const*) rEdge + rEdge->_offsetToKey; rCid = rEdge->_toCid; } else if (marker->_type == TRI_WAL_MARKER_EDGE) { - triagens::wal::edge_marker_t const* rEdge = static_cast(rMptr->getDataPtr()); // ONLY IN INDEX + triagens::wal::edge_marker_t const* rEdge = static_cast(rMptr->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME rKey = (char const*) rEdge + rEdge->_offsetToKey; rCid = rEdge->_toCid; } @@ -1131,7 +1131,7 @@ static int FillLookupSLOperator (TRI_index_operator_t* slOperator, return TRI_ERROR_BAD_PARAMETER; } - TRI_shaped_json_t* shapedObject = TRI_ShapedJsonJson(document->getShaper(), jsonObject, false, false); + TRI_shaped_json_t* shapedObject = TRI_ShapedJsonJson(document->getShaper(), jsonObject, false, false); // ONLY IN INDEX, PROTECTED by RUNTIME if (shapedObject != NULL) { relationOperator->_fields[j] = *shapedObject; // shallow copy here is ok @@ -1207,10 +1207,10 @@ static int SkiplistIndexHelper (const TRI_skiplist_index_t* skiplistIndex, // .......................................................................... TRI_ASSERT(document != nullptr); - TRI_ASSERT(document->getDataPtr() != nullptr); // ONLY IN INDEX + TRI_ASSERT(document->getDataPtr() != nullptr); // ONLY IN INDEX, PROTECTED by RUNTIME TRI_shaped_json_t shapedJson; - TRI_EXTRACT_SHAPED_JSON_MARKER(shapedJson, document->getDataPtr()); // ONLY IN INDEX + TRI_EXTRACT_SHAPED_JSON_MARKER(shapedJson, document->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME if (shapedJson._sid == 0) { LOG_WARNING("encountered invalid marker with shape id 0"); @@ -1219,7 +1219,7 @@ static int SkiplistIndexHelper (const TRI_skiplist_index_t* skiplistIndex, } skiplistElement->_document = const_cast(document); - char const* ptr = skiplistElement->_document->getShapedJsonPtr(); // ONLY IN INDEX + char const* ptr = skiplistElement->_document->getShapedJsonPtr(); // ONLY IN INDEX, PROTECTED by RUNTIME for (size_t j = 0; j < skiplistIndex->_paths._length; ++j) { TRI_shape_pid_t shape = *((TRI_shape_pid_t*)(TRI_AtVector(&skiplistIndex->_paths, j))); @@ -1228,7 +1228,7 @@ static int SkiplistIndexHelper (const TRI_skiplist_index_t* skiplistIndex, // Determine if document has that particular shape // .......................................................................... - TRI_shape_access_t const* acc = TRI_FindAccessorVocShaper(skiplistIndex->base._collection->getShaper(), shapedJson._sid, shape); + TRI_shape_access_t const* acc = TRI_FindAccessorVocShaper(skiplistIndex->base._collection->getShaper(), shapedJson._sid, shape); // ONLY IN INDEX, PROTECTED by RUNTIME if (acc == nullptr || acc->_resultSid == TRI_SHAPE_ILLEGAL) { return TRI_ERROR_ARANGO_INDEX_DOCUMENT_ATTRIBUTE_MISSING; @@ -1377,7 +1377,7 @@ static TRI_json_t* JsonSkiplistIndex (TRI_index_t const* idx) { for (size_t j = 0; j < skiplistIndex->_paths._length; ++j) { TRI_shape_pid_t shape = *((TRI_shape_pid_t*) TRI_AtVector(&skiplistIndex->_paths, j)); - const TRI_shape_path_t* path = document->getShaper()->lookupAttributePathByPid(document->getShaper(), shape); + const TRI_shape_path_t* path = document->getShaper()->lookupAttributePathByPid(document->getShaper(), shape); // ONLY IN INDEX, PROTECTED by RUNTIME if (path == nullptr) { TRI_Free(TRI_CORE_MEM_ZONE, (void*) fieldList); @@ -1616,8 +1616,8 @@ static TRI_fulltext_wordlist_t* GetWordlist (TRI_index_t* idx, fulltextIndex = (TRI_fulltext_index_t*) idx; // extract the shape - TRI_EXTRACT_SHAPED_JSON_MARKER(shaped, document->getDataPtr()); // ONLY IN INDEX - ok = TRI_ExtractShapedJsonVocShaper(fulltextIndex->base._collection->getShaper(), &shaped, 0, fulltextIndex->_attribute, &shapedJson, &shape); + TRI_EXTRACT_SHAPED_JSON_MARKER(shaped, document->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME + ok = TRI_ExtractShapedJsonVocShaper(fulltextIndex->base._collection->getShaper(), &shaped, 0, fulltextIndex->_attribute, &shapedJson, &shape); // ONLY IN INDEX, PROTECTED by RUNTIME if (! ok || shape == nullptr) { return nullptr; @@ -1723,7 +1723,7 @@ static TRI_json_t* JsonFulltextIndex (TRI_index_t const* idx) { TRI_document_collection_t* document = idx->_collection; // convert attribute to string - path = document->getShaper()->lookupAttributePathByPid(document->getShaper(), fulltextIndex->_attribute); + path = document->getShaper()->lookupAttributePathByPid(document->getShaper(), fulltextIndex->_attribute); // ONLY IN INDEX, PROTECTED by RUNTIME if (path == 0) { return nullptr; @@ -1797,7 +1797,7 @@ TRI_index_t* TRI_CreateFulltextIndex (TRI_document_collection_t* document, TRI_shape_pid_t attribute; // look up the attribute - shaper = document->getShaper(); + shaper = document->getShaper(); // ONLY IN INDEX, PROTECTED by RUNTIME attribute = shaper->findOrCreateAttributePathByName(shaper, attributeName, true); if (attribute == 0) { @@ -2022,7 +2022,7 @@ static int BitarrayIndexHelper(const TRI_bitarray_index_t* baIndex, // Determine if document has that particular shape // .......................................................................... - acc = TRI_FindAccessorVocShaper(baIndex->base._collection->getShaper(), shapedDoc->_sid, shape); + acc = TRI_FindAccessorVocShaper(baIndex->base._collection->getShaper(), shapedDoc->_sid, shape); // ONLY IN INDEX, PROTECTED by RUNTIME if (acc == nullptr || acc->_resultSid == TRI_SHAPE_ILLEGAL) { return TRI_ERROR_ARANGO_INDEX_BITARRAY_UPDATE_ATTRIBUTE_MISSING; @@ -2063,9 +2063,9 @@ static int BitarrayIndexHelper(const TRI_bitarray_index_t* baIndex, // Determine if document has that particular shape // .......................................................................... - TRI_EXTRACT_SHAPED_JSON_MARKER(shapedJson, document->getDataPtr()); // ONLY IN INDEX + TRI_EXTRACT_SHAPED_JSON_MARKER(shapedJson, document->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME - acc = TRI_FindAccessorVocShaper(baIndex->base._collection->getShaper(), shapedJson._sid, shape); + acc = TRI_FindAccessorVocShaper(baIndex->base._collection->getShaper(), shapedJson._sid, shape); // ONLY IN INDEX, PROTECTED by RUNTIME if (acc == nullptr || acc->_resultSid == TRI_SHAPE_ILLEGAL) { return TRI_ERROR_ARANGO_INDEX_DOCUMENT_ATTRIBUTE_MISSING; @@ -2229,7 +2229,7 @@ static TRI_json_t* JsonBitarrayIndex (TRI_index_t const* idx) { for (j = 0; j < baIndex->_paths._length; ++j) { TRI_shape_pid_t shape = *((TRI_shape_pid_t*)(TRI_AtVector(&baIndex->_paths,j))); - const TRI_shape_path_t* path = document->getShaper()->lookupAttributePathByPid(document->getShaper(), shape); + const TRI_shape_path_t* path = document->getShaper()->lookupAttributePathByPid(document->getShaper(), shape); // ONLY IN INDEX, PROTECTED by RUNTIME if (path == NULL) { TRI_Free(TRI_CORE_MEM_ZONE, (void*) fieldList); diff --git a/arangod/VocBase/primary-index.cpp b/arangod/VocBase/primary-index.cpp index fd1d05ae73..89caf0ea0e 100644 --- a/arangod/VocBase/primary-index.cpp +++ b/arangod/VocBase/primary-index.cpp @@ -119,7 +119,7 @@ static inline bool IsEqualKeyElement (TRI_doc_mptr_t const* header, } // only after that compare actual keys - return (strcmp(TRI_EXTRACT_MARKER_KEY(header), TRI_EXTRACT_MARKER_KEY(e)) == 0); // ONLY IN INDEX + return (strcmp(TRI_EXTRACT_MARKER_KEY(header), TRI_EXTRACT_MARKER_KEY(e)) == 0); // ONLY IN INDEX, PROTECTED by RUNTIME } //////////////////////////////////////////////////////////////////////////////// @@ -132,7 +132,7 @@ static inline bool IsEqualHashElement (char const* key, uint64_t hash, void cons if (hash != e->_hash) { return false; } - return (strcmp(key, TRI_EXTRACT_MARKER_KEY(e)) == 0); // ONLY IN INDEX + return (strcmp(key, TRI_EXTRACT_MARKER_KEY(e)) == 0); // ONLY IN INDEX, PROTECTED by RUNTIME } // ----------------------------------------------------------------------------- diff --git a/arangod/VocBase/replication-dump.cpp b/arangod/VocBase/replication-dump.cpp index 3d219073f6..6522095ffb 100644 --- a/arangod/VocBase/replication-dump.cpp +++ b/arangod/VocBase/replication-dump.cpp @@ -421,7 +421,7 @@ static bool StringifyMarkerDump (TRI_replication_dump_t* dump, // the actual document data TRI_EXTRACT_SHAPED_JSON_MARKER(shaped, m); - TRI_StringifyArrayShapedJson(document->getShaper(), buffer, &shaped, true); + TRI_StringifyArrayShapedJson(document->getShaper(), buffer, &shaped, true); // ONLY IN DUMP, PROTECTED by fake trx above APPEND_STRING(buffer, "}}\n"); } @@ -556,7 +556,7 @@ static bool StringifyMarkerLog (TRI_replication_dump_t* dump, TRI_shaped_json_t shaped; TRI_ASSERT(marker->_type == TRI_DOC_MARKER_KEY_DOCUMENT); - shaper = document->getShaper(); + shaper = document->getShaper(); // ONLY IN DUMP, PROTECTED by a fake trx from above TRI_EXTRACT_SHAPED_JSON_MARKER(shaped, m); @@ -606,6 +606,14 @@ static int DumpCollection (TRI_replication_dump_t* dump, bool bufferFull; bool ignoreMarkers; + // The following fake transaction allows us to access data pointers + // and shapers, essentially disabling the runtime checks. This is OK, + // since the dump only considers data files (and not WAL files), so + // the collector has no trouble. Also, the data files of the collection + // are protected from the compactor by a barrier and the dump only goes + // until a certain tick. + TransactionBase trx(true); + LOG_TRACE("dumping collection %llu, tick range %llu - %llu, chunk size %llu", (unsigned long long) document->_info._cid, (unsigned long long) dataMin, diff --git a/arangod/VocBase/replication-logger.cpp b/arangod/VocBase/replication-logger.cpp index 9d9b4d6619..2250180bcd 100644 --- a/arangod/VocBase/replication-logger.cpp +++ b/arangod/VocBase/replication-logger.cpp @@ -508,8 +508,8 @@ static int LogEvent (TRI_replication_logger_t* logger, lock = isStandaloneOperation; TRI_document_collection_t* document = logger->_trxCollection->_collection->_collection; - zone = document->getShaper()->_memoryZone; - shaped = TRI_ShapedJsonJson(document->getShaper(), &json, true, ! lock); + zone = document->getShaper()->_memoryZone; // ONLY IN INDEX, PROTECTED by RUNTIME + shaped = TRI_ShapedJsonJson(document->getShaper(), &json, true, ! lock); // ONLY IN INDEX, PROTECTED by RUNTIME TRI_DestroyJson(TRI_CORE_MEM_ZONE, &json); ReturnBuffer(logger, buffer); @@ -826,7 +826,7 @@ static bool StringifyDocumentOperation (TRI_replication_logger_t* logger, // the actual document data TRI_EXTRACT_SHAPED_JSON_MARKER(shaped, m); - TRI_StringifyArrayShapedJson(document->getShaper(), buffer, &shaped, true); + TRI_StringifyArrayShapedJson(document->getShaper(), buffer, &shaped, true); // PROTECTED by trx in logger APPEND_STRING(buffer, "}}"); } diff --git a/arangod/VocBase/transaction.cpp b/arangod/VocBase/transaction.cpp index c34fb5e4ae..abd6f9da2e 100644 --- a/arangod/VocBase/transaction.cpp +++ b/arangod/VocBase/transaction.cpp @@ -139,7 +139,7 @@ static void FreeOperations (TRI_transaction_t* trx) { if (op->type == TRI_VOC_DOCUMENT_OPERATION_UPDATE || op->type == TRI_VOC_DOCUMENT_OPERATION_REMOVE) { TRI_voc_fid_t fid = op->oldHeader._fid; - TRI_df_marker_t const* marker = static_cast(op->oldHeader.getDataPtr()); + TRI_df_marker_t const* marker = static_cast(op->oldHeader.getDataPtr()); // PROTECTED by trx from above auto it2 = stats.find(fid); @@ -900,7 +900,7 @@ int TRI_AddOperationTransaction (triagens::wal::DocumentOperation& operation, // the old header might point to the WAL. in this case, there'll be no stats update if (dfi != nullptr) { - TRI_df_marker_t const* marker = static_cast(operation.oldHeader.getDataPtr()); + TRI_df_marker_t const* marker = static_cast(operation.oldHeader.getDataPtr()); // PROTECTED by trx from above dfi->_numberDead += 1; dfi->_sizeDead += TRI_DF_ALIGN_BLOCK(marker->_size); } diff --git a/arangod/VocBase/vocbase.cpp b/arangod/VocBase/vocbase.cpp index d19f560a9e..0b627624f2 100644 --- a/arangod/VocBase/vocbase.cpp +++ b/arangod/VocBase/vocbase.cpp @@ -1205,7 +1205,7 @@ static bool ScanTrxCallback (TRI_doc_mptr_t const* mptr, void* data) { TRI_vocbase_t* vocbase = static_cast(data); - char const* key = TRI_EXTRACT_MARKER_KEY(mptr); + char const* key = TRI_EXTRACT_MARKER_KEY(mptr); // PROTECTED by trx in caller if (vocbase->_oldTransactions == nullptr) { vocbase->_oldTransactions = new std::set; diff --git a/arangod/Wal/CollectorThread.cpp b/arangod/Wal/CollectorThread.cpp index f4bde65d87..808636406c 100644 --- a/arangod/Wal/CollectorThread.cpp +++ b/arangod/Wal/CollectorThread.cpp @@ -571,11 +571,11 @@ int CollectorThread::processCollectionOperations (CollectorCache* cache) { } else if (marker->_type == TRI_DF_MARKER_ATTRIBUTE) { // move the pointer to the attribute from WAL to the datafile - TRI_MoveMarkerVocShaper(document->getShaper(), const_cast(marker)); + TRI_MoveMarkerVocShaper(document->getShaper(), const_cast(marker)); // ONLY IN COLLECTOR, PROTECTED by COLLECTION LOCK and fake trx here } else if (marker->_type == TRI_DF_MARKER_SHAPE) { // move the pointer to the shape from WAL to the datafile - TRI_MoveMarkerVocShaper(document->getShaper(), const_cast(marker)); + TRI_MoveMarkerVocShaper(document->getShaper(), const_cast(marker)); // ONLY IN COLLECTOR, PROTECTED by COLLECTION LOCK and fake trx here } else { // a marker we won't care about (e.g. shapes and attributes)