1
0
Fork 0

Merge branch 'mjmh' of https://github.com/triAGENS/ArangoDB into mjmh

This commit is contained in:
Jan Steemann 2014-06-12 11:29:08 +02:00
commit 101b5ac95f
24 changed files with 160 additions and 151 deletions

View File

@ -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;

View File

@ -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) {

View File

@ -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) {

View File

@ -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<TRI_doc_mptr_t*>(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;

View File

@ -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;

View File

@ -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);

View File

@ -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;

View File

@ -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
}
////////////////////////////////////////////////////////////////////////////////

View File

@ -158,7 +158,7 @@ static int CmpElmElm (void* sli,
}
SkiplistIndex* skiplistindex = static_cast<SkiplistIndex*>(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<SkiplistIndex*>(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

View File

@ -338,7 +338,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
}
////////////////////////////////////////////////////////////////////////////////

View File

@ -1032,7 +1032,7 @@ static v8::Handle<v8::Value> ExecuteSkiplistQuery (v8::Arguments const& argv,
v8::Handle<v8::Object> 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<v8::Value> 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<v8::Value> 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<v8::Object> example = argv[0]->ToObject();
@ -1988,7 +1988,7 @@ static v8::Handle<v8::Value> 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<bool WR, bool WD> 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);
}

View File

@ -2267,7 +2267,7 @@ static v8::Handle<v8::Value> 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<v8::Value> 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<v8::Value> 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<v8::Value> 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<v8::Value> 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<v8::Value> 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<v8::Value> 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);
@ -9296,7 +9296,7 @@ static v8::Handle<v8::Value> MapGetNamedShapedJson (v8::Local<v8::String> 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) {
@ -9344,7 +9344,7 @@ static v8::Handle<v8::Array> 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);
@ -9430,7 +9430,7 @@ static v8::Handle<v8::Integer> PropertyQueryShapedJson (v8::Local<v8::String> 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) {
@ -9657,7 +9657,7 @@ v8::Handle<v8::Value> 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, marker); // PROTECTED by trx from above

View File

@ -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");

View File

@ -490,8 +490,8 @@ static bool Compactifier (TRI_df_marker_t const* marker,
}
TRI_doc_mptr_t* found2 = const_cast<TRI_doc_mptr_t*>(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");

View File

@ -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_doc_mptr_t*>(TRI_RemoveKeyPrimaryIndex(&document->_primaryIndex, TRI_EXTRACT_MARKER_KEY(header))); // ONLY IN INDEX
TRI_doc_mptr_t* found = static_cast<TRI_doc_mptr_t*>(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_doc_mptr_copy_t> 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<TRI_doc_mptr_copy_t> filtered;

View File

@ -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<TRI_df_marker_t const*>(mptr->getDataPtr()); // ONLY IN INDEX
TRI_df_marker_t const* marker = static_cast<TRI_df_marker_t const*>(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<TRI_doc_edge_key_marker_t const*>(mptr->getDataPtr()); // ONLY IN INDEX
TRI_doc_edge_key_marker_t const* edge = static_cast<TRI_doc_edge_key_marker_t const*>(mptr->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME
if (edge->_toCid == edge->_fromCid) {
char const* fromKey = reinterpret_cast<char const*>(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<triagens::wal::edge_marker_t const*>(mptr->getDataPtr()); // ONLY IN INDEX
triagens::wal::edge_marker_t const* edge = static_cast<triagens::wal::edge_marker_t const*>(mptr->getDataPtr()); // ONLY IN INDEX, PROTECTED by RUNTIME
if (edge->_toCid == edge->_fromCid) {
char const* fromKey = reinterpret_cast<char const*>(edge) + edge->_offsetFromKey;

View File

@ -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<TRI_doc_mptr_t*>(headers->_freelist);
TRI_ASSERT(result != nullptr);
headers->_freelist = static_cast<TRI_doc_mptr_t const*>(result->getDataPtr()); // ONLY IN HEADERS
headers->_freelist = static_cast<TRI_doc_mptr_t const*>(result->getDataPtr()); // ONLY IN HEADERS, PROTECTED by RUNTIME
result->setDataPtr(nullptr); // ONLY IN HEADERS
// put new header at the end of the list

View File

@ -658,17 +658,17 @@ static uint64_t HashElementEdgeFrom (TRI_multi_pointer_t* array,
}
else {
TRI_doc_mptr_t const* mptr = static_cast<TRI_doc_mptr_t const*>(data);
TRI_df_marker_t const* marker = static_cast<TRI_df_marker_t const*>(mptr->getDataPtr()); // ONLY IN INDEX
TRI_df_marker_t const* marker = static_cast<TRI_df_marker_t const*>(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<TRI_doc_edge_key_marker_t const*>(mptr->getDataPtr()); // ONLY IN INDEX
TRI_doc_edge_key_marker_t const* edge = static_cast<TRI_doc_edge_key_marker_t const*>(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<triagens::wal::edge_marker_t const*>(mptr->getDataPtr()); // ONLY IN INDEX
triagens::wal::edge_marker_t const* edge = static_cast<triagens::wal::edge_marker_t const*>(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<TRI_doc_mptr_t const*>(data);
TRI_df_marker_t const* marker = static_cast<TRI_df_marker_t const*>(mptr->getDataPtr()); // ONLY IN INDEX
TRI_df_marker_t const* marker = static_cast<TRI_df_marker_t const*>(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<TRI_doc_edge_key_marker_t const*>(mptr->getDataPtr()); // ONLY IN INDEX
TRI_doc_edge_key_marker_t const* edge = static_cast<TRI_doc_edge_key_marker_t const*>(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<triagens::wal::edge_marker_t const*>(mptr->getDataPtr()); // ONLY IN INDEX
triagens::wal::edge_marker_t const* edge = static_cast<triagens::wal::edge_marker_t const*>(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<TRI_doc_mptr_t const*>(right);
TRI_df_marker_t const* marker = static_cast<TRI_df_marker_t const*>(rMptr->getDataPtr()); // ONLY IN INDEX
TRI_df_marker_t const* marker = static_cast<TRI_df_marker_t const*>(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<TRI_doc_edge_key_marker_t const*>(rMptr->getDataPtr()); // ONLY IN INDEX
TRI_doc_edge_key_marker_t const* rEdge = static_cast<TRI_doc_edge_key_marker_t const*>(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<triagens::wal::edge_marker_t const*>(rMptr->getDataPtr()); // ONLY IN INDEX
triagens::wal::edge_marker_t const* rEdge = static_cast<triagens::wal::edge_marker_t const*>(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<TRI_doc_mptr_t const*>(right);
TRI_df_marker_t const* marker = static_cast<TRI_df_marker_t const*>(rMptr->getDataPtr()); // ONLY IN INDEX
TRI_df_marker_t const* marker = static_cast<TRI_df_marker_t const*>(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<TRI_doc_edge_key_marker_t const*>(rMptr->getDataPtr()); // ONLY IN INDEX
TRI_doc_edge_key_marker_t const* rEdge = static_cast<TRI_doc_edge_key_marker_t const*>(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<triagens::wal::edge_marker_t const*>(rMptr->getDataPtr()); // ONLY IN INDEX
triagens::wal::edge_marker_t const* rEdge = static_cast<triagens::wal::edge_marker_t const*>(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<TRI_doc_mptr_t const*>(left);
marker = static_cast<TRI_df_marker_t const*>(lMptr->getDataPtr()); // ONLY IN INDEX
marker = static_cast<TRI_df_marker_t const*>(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<TRI_doc_edge_key_marker_t const*>(lMptr->getDataPtr()); // ONLY IN INDEX
TRI_doc_edge_key_marker_t const* lEdge = static_cast<TRI_doc_edge_key_marker_t const*>(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<triagens::wal::edge_marker_t const*>(lMptr->getDataPtr()); // ONLY IN INDEX
triagens::wal::edge_marker_t const* lEdge = static_cast<triagens::wal::edge_marker_t const*>(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<TRI_doc_mptr_t const*>(right);
marker = static_cast<TRI_df_marker_t const*>(rMptr->getDataPtr()); // ONLY IN INDEX
marker = static_cast<TRI_df_marker_t const*>(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<TRI_doc_edge_key_marker_t const*>(rMptr->getDataPtr()); // ONLY IN INDEX
TRI_doc_edge_key_marker_t const* rEdge = static_cast<TRI_doc_edge_key_marker_t const*>(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<triagens::wal::edge_marker_t const*>(rMptr->getDataPtr()); // ONLY IN INDEX
triagens::wal::edge_marker_t const* rEdge = static_cast<triagens::wal::edge_marker_t const*>(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<TRI_doc_mptr_t const*>(left);
marker = static_cast<TRI_df_marker_t const*>(lMptr->getDataPtr()); // ONLY IN INDEX
marker = static_cast<TRI_df_marker_t const*>(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<TRI_doc_edge_key_marker_t const*>(lMptr->getDataPtr()); // ONLY IN INDEX
TRI_doc_edge_key_marker_t const* lEdge = static_cast<TRI_doc_edge_key_marker_t const*>(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<triagens::wal::edge_marker_t const*>(lMptr->getDataPtr()); // ONLY IN INDEX
triagens::wal::edge_marker_t const* lEdge = static_cast<triagens::wal::edge_marker_t const*>(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<TRI_doc_mptr_t const*>(right);
marker = static_cast<TRI_df_marker_t const*>(rMptr->getDataPtr()); // ONLY IN INDEX
marker = static_cast<TRI_df_marker_t const*>(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<TRI_doc_edge_key_marker_t const*>(rMptr->getDataPtr()); // ONLY IN INDEX
TRI_doc_edge_key_marker_t const* rEdge = static_cast<TRI_doc_edge_key_marker_t const*>(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<triagens::wal::edge_marker_t const*>(rMptr->getDataPtr()); // ONLY IN INDEX
triagens::wal::edge_marker_t const* rEdge = static_cast<triagens::wal::edge_marker_t const*>(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<TRI_doc_mptr_t*>(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);

View File

@ -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
}
// -----------------------------------------------------------------------------

View File

@ -40,6 +40,7 @@
#include "VocBase/transaction.h"
#include "VocBase/vocbase.h"
#include "VocBase/voc-shaper.h"
#include "Utils/transactions.h"
// -----------------------------------------------------------------------------
// --SECTION-- REPLICATION
@ -421,7 +422,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 +557,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 +607,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.
triagens::arango::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,

View File

@ -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, "}}");
}

View File

@ -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<TRI_df_marker_t const*>(op->oldHeader.getDataPtr());
TRI_df_marker_t const* marker = static_cast<TRI_df_marker_t const*>(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<TRI_df_marker_t const*>(operation.oldHeader.getDataPtr());
TRI_df_marker_t const* marker = static_cast<TRI_df_marker_t const*>(operation.oldHeader.getDataPtr()); // PROTECTED by trx from above
dfi->_numberDead += 1;
dfi->_sizeDead += TRI_DF_ALIGN_BLOCK(marker->_size);
}

View File

@ -1205,7 +1205,7 @@ static bool ScanTrxCallback (TRI_doc_mptr_t const* mptr,
void* data) {
TRI_vocbase_t* vocbase = static_cast<TRI_vocbase_t*>(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<TRI_voc_tid_t>;

View File

@ -574,11 +574,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<TRI_df_marker_t*>(marker));
TRI_MoveMarkerVocShaper(document->getShaper(), const_cast<TRI_df_marker_t*>(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<TRI_df_marker_t*>(marker));
TRI_MoveMarkerVocShaper(document->getShaper(), const_cast<TRI_df_marker_t*>(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)