diff --git a/arangod/VocBase/document-collection.cpp b/arangod/VocBase/document-collection.cpp index 462c4345a7..452c65ed7d 100644 --- a/arangod/VocBase/document-collection.cpp +++ b/arangod/VocBase/document-collection.cpp @@ -1113,6 +1113,7 @@ static int OpenIteratorApplyInsert (open_iterator_state_t* state, SetRevision(document, d->_rid, false); #ifdef TRI_ENABLE_LOGGER +#ifdef TRI_ENABLE_MAINTAINER_MODE if (marker->_type == TRI_DOC_MARKER_KEY_DOCUMENT) { LOG_TRACE("document: fid %llu, key %s, rid %llu, _offsetJson %lu, _offsetKey %lu", (unsigned long long) operation->_fid, @@ -1123,7 +1124,6 @@ static int OpenIteratorApplyInsert (open_iterator_state_t* state, } else { TRI_doc_edge_key_marker_t const* e = reinterpret_cast(marker); - LOG_TRACE("edge: fid %llu, key %s, fromKey %s, toKey %s, rid %llu, _offsetJson %lu, _offsetKey %lu", (unsigned long long) operation->_fid, ((char*) d + d->_offsetKey), @@ -1132,7 +1132,9 @@ static int OpenIteratorApplyInsert (open_iterator_state_t* state, (unsigned long long) d->_rid, (unsigned long) d->_offsetJson, (unsigned long) d->_offsetKey); + } +#endif #endif key = ((char*) d) + d->_offsetKey; @@ -1264,11 +1266,13 @@ static int OpenIteratorApplyRemove (open_iterator_state_t* state, key = ((char*) d) + d->_offsetKey; +#ifdef TRI_ENABLE_MAINTAINER_MODE LOG_TRACE("deletion: fid %llu, key %s, rid %llu, deletion %llu", (unsigned long long) operation->_fid, (char*) key, (unsigned long long) d->_rid, (unsigned long long) marker->_tick); +#endif document->_keyGenerator->track(key); @@ -2358,26 +2362,19 @@ TRI_doc_datafile_info_t* TRI_FindDatafileInfoDocumentCollection (TRI_document_co TRI_datafile_t* TRI_CreateJournalDocumentCollection (TRI_document_collection_t* document, TRI_voc_fid_t fid, TRI_voc_size_t journalSize) { - TRI_col_header_marker_t cm; - TRI_datafile_t* journal; - TRI_df_marker_t* position; - int res; - TRI_ASSERT(fid > 0); + + TRI_datafile_t* journal; if (document->_info._isVolatile) { // in-memory collection journal = TRI_CreateDatafile(nullptr, fid, journalSize, true); } else { - char* jname; - char* number; - char* filename; - // construct a suitable filename (which is temporary at the beginning) - number = TRI_StringUInt64(fid); - jname = TRI_Concatenate3String("temp-", number, ".db"); - filename = TRI_Concatenate2File(document->_directory, jname); + char* number = TRI_StringUInt64(fid); + char* jname = TRI_Concatenate3String("temp-", number, ".db"); + char* filename = TRI_Concatenate2File(document->_directory, jname); TRI_FreeString(TRI_CORE_MEM_ZONE, number); TRI_FreeString(TRI_CORE_MEM_ZONE, jname); @@ -2403,14 +2400,15 @@ TRI_datafile_t* TRI_CreateJournalDocumentCollection (TRI_document_collection_t* document->_lastError = TRI_set_errno(TRI_ERROR_ARANGO_NO_JOURNAL); } - return NULL; + return nullptr; } LOG_TRACE("created new journal '%s'", journal->getName(journal)); // create a collection header, still in the temporary file - res = TRI_ReserveElementDatafile(journal, sizeof(TRI_col_header_marker_t), &position, journalSize); + TRI_df_marker_t* position; + int res = TRI_ReserveElementDatafile(journal, sizeof(TRI_col_header_marker_t), &position, journalSize); if (res != TRI_ERROR_NO_ERROR) { document->_lastError = journal->_lastError; @@ -2418,10 +2416,10 @@ TRI_datafile_t* TRI_CreateJournalDocumentCollection (TRI_document_collection_t* TRI_FreeDatafile(journal); - return NULL; + return nullptr; } - + TRI_col_header_marker_t cm; TRI_InitMarkerDatafile((char*) &cm, TRI_COL_MARKER_HEADER, sizeof(TRI_col_header_marker_t)); cm.base._tick = (TRI_voc_tick_t) fid; cm._type = (TRI_col_type_t) document->_info._type; @@ -2435,7 +2433,7 @@ TRI_datafile_t* TRI_CreateJournalDocumentCollection (TRI_document_collection_t* TRI_FreeDatafile(journal); - return NULL; + return nullptr; } TRI_ASSERT(fid == journal->_fid); @@ -2443,28 +2441,22 @@ TRI_datafile_t* TRI_CreateJournalDocumentCollection (TRI_document_collection_t* // if a physical file, we can rename it from the temporary name to the correct name if (journal->isPhysical(journal)) { - char* jname; - char* number; - char* filename; - bool ok; - // and use the correct name - number = TRI_StringUInt64(journal->_fid); - jname = TRI_Concatenate3String("journal-", number, ".db"); - - filename = TRI_Concatenate2File(document->_directory, jname); + char* number = TRI_StringUInt64(journal->_fid); + char* jname = TRI_Concatenate3String("journal-", number, ".db"); + char* filename = TRI_Concatenate2File(document->_directory, jname); TRI_FreeString(TRI_CORE_MEM_ZONE, number); TRI_FreeString(TRI_CORE_MEM_ZONE, jname); - ok = TRI_RenameDatafile(journal, filename); + bool ok = TRI_RenameDatafile(journal, filename); if (! ok) { LOG_ERROR("failed to rename the journal to '%s': %s", filename, TRI_last_error()); TRI_FreeDatafile(journal); TRI_FreeString(TRI_CORE_MEM_ZONE, filename); - return NULL; + return nullptr; } else { LOG_TRACE("renamed journal from %s to '%s'", journal->getName(journal), filename); @@ -2971,10 +2963,11 @@ static int FillIndex (TRI_document_collection_t* document, idx->sizeHint(idx, (size_t) document->_primaryIndex._nrUsed); } - +#ifdef TRI_ENABLE_MAINTAINER_MODE static const int LoopSize = 10000; int counter = 0; int loops = 0; +#endif for (; ptr < end; ++ptr) { TRI_doc_mptr_t const* p = static_cast(*ptr); @@ -2988,14 +2981,17 @@ static int FillIndex (TRI_document_collection_t* document, return res; } +#ifdef TRI_ENABLE_MAINTAINER_MODE if (++counter == LoopSize) { counter = 0; ++loops; LOG_TRACE("indexed %llu documents of collection %llu", - (unsigned long long) (LoopSize * loops), - (unsigned long long) document->_info._cid); + (unsigned long long) (LoopSize * loops), + (unsigned long long) document->_info._cid); } +#endif + } } diff --git a/arangod/VocBase/index.cpp b/arangod/VocBase/index.cpp index dbcf10c001..a8eca3d91e 100644 --- a/arangod/VocBase/index.cpp +++ b/arangod/VocBase/index.cpp @@ -664,16 +664,20 @@ static uint64_t HashElementEdgeFrom (TRI_multi_pointer_t* array, 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, PROTECTED by RUNTIME + TRI_doc_edge_key_marker_t const* edge = reinterpret_cast(marker); // ONLY IN INDEX, PROTECTED by RUNTIME char const* key = (char const*) edge + edge->_offsetFromKey; + // LOG_TRACE("HASH FROM: COLLECTION: %llu, KEY: %s", (unsigned long long) edge->_fromCid, key); + 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, PROTECTED by RUNTIME + triagens::wal::edge_marker_t const* edge = reinterpret_cast(marker); // ONLY IN INDEX, PROTECTED by RUNTIME char const* key = (char const*) edge + edge->_offsetFromKey; + // LOG_TRACE("HASH FROM: COLLECTION: %llu, KEY: %s", (unsigned long long) edge->_fromCid, key); + hash = edge->_fromCid; hash ^= (uint64_t) fasthash64(key, strlen(key), 0x87654321); } @@ -699,15 +703,19 @@ static uint64_t HashElementEdgeTo (TRI_multi_pointer_t* array, 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, PROTECTED by RUNTIME + TRI_doc_edge_key_marker_t const* edge = reinterpret_cast(marker); // ONLY IN INDEX, PROTECTED by RUNTIME char const* key = (char const*) edge + edge->_offsetToKey; + // LOG_TRACE("HASH TO: COLLECTION: %llu, KEY: %s", (unsigned long long) edge->_toCid, key); + 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, PROTECTED by RUNTIME + triagens::wal::edge_marker_t const* edge = reinterpret_cast(marker); // ONLY IN INDEX, PROTECTED by RUNTIME char const* key = (char const*) edge + edge->_offsetToKey; + + // LOG_TRACE("HASH TO: COLLECTION: %llu, KEY: %s", (unsigned long long) edge->_toCid, key); hash = edge->_toCid; hash ^= (uint64_t) fasthash64(key, strlen(key), 0x87654321); @@ -733,13 +741,18 @@ static bool IsEqualKeyEdgeFrom (TRI_multi_pointer_t* array, 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, PROTECTED by RUNTIME + TRI_doc_edge_key_marker_t const* rEdge = reinterpret_cast(marker); // ONLY IN INDEX, PROTECTED by RUNTIME char const* rKey = (char const*) rEdge + rEdge->_offsetFromKey; + + // LOG_TRACE("ISEQUAL FROM: LCOLLECTION: %llu, LKEY: %s, RCOLLECTION: %llu, RKEY: %s", (unsigned long long) l->_cid, lKey, (unsigned long long) rEdge->_fromCid, rKey); 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, PROTECTED by RUNTIME + triagens::wal::edge_marker_t const* rEdge = reinterpret_cast(marker); // ONLY IN INDEX, PROTECTED by RUNTIME char const* rKey = (char const*) rEdge + rEdge->_offsetFromKey; + + // LOG_TRACE("ISEQUAL FROM: LCOLLECTION: %llu, LKEY: %s, RCOLLECTION: %llu, RKEY: %s", (unsigned long long) l->_cid, lKey, (unsigned long long) rEdge->_fromCid, rKey); + return (l->_cid == rEdge->_fromCid) && (strcmp(lKey, rKey) == 0); } @@ -762,13 +775,19 @@ static bool IsEqualKeyEdgeTo (TRI_multi_pointer_t* array, 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, PROTECTED by RUNTIME + TRI_doc_edge_key_marker_t const* rEdge = reinterpret_cast(marker); // ONLY IN INDEX, PROTECTED by RUNTIME char const* rKey = (char const*) rEdge + rEdge->_offsetToKey; + + // LOG_TRACE("ISEQUAL TO: LCOLLECTION: %llu, LKEY: %s, RCOLLECTION: %llu, RKEY: %s", (unsigned long long) l->_cid, lKey, (unsigned long long) rEdge->_toCid, rKey); + 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, PROTECTED by RUNTIME + triagens::wal::edge_marker_t const* rEdge = reinterpret_cast(marker); // ONLY IN INDEX, PROTECTED by RUNTIME char const* rKey = (char const*) rEdge + rEdge->_offsetToKey; + + // LOG_TRACE("ISEQUAL TO: LCOLLECTION: %llu, LKEY: %s, RCOLLECTION: %llu, RKEY: %s", (unsigned long long) l->_cid, lKey, (unsigned long long) rEdge->_toCid, rKey); + return (l->_cid == rEdge->_toCid) && (strcmp(lKey, rKey) == 0); } @@ -793,16 +812,17 @@ static bool IsEqualElementEdgeFrom (TRI_multi_pointer_t* array, char const* rKey; TRI_voc_cid_t rCid; + // left element TRI_doc_mptr_t const* lMptr = static_cast(left); 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, PROTECTED by RUNTIME + TRI_doc_edge_key_marker_t const* lEdge = reinterpret_cast(marker); // 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, PROTECTED by RUNTIME + triagens::wal::edge_marker_t const* lEdge = reinterpret_cast(marker); // ONLY IN INDEX, PROTECTED by RUNTIME lKey = (char const*) lEdge + lEdge->_offsetFromKey; lCid = lEdge->_fromCid; } @@ -810,16 +830,17 @@ static bool IsEqualElementEdgeFrom (TRI_multi_pointer_t* array, return false; } + // right element TRI_doc_mptr_t const* rMptr = static_cast(right); 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, PROTECTED by RUNTIME - lKey = (char const*) rEdge + rEdge->_offsetFromKey; + TRI_doc_edge_key_marker_t const* rEdge = reinterpret_cast(marker); // ONLY IN INDEX, PROTECTED by RUNTIME + rKey = (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, PROTECTED by RUNTIME + triagens::wal::edge_marker_t const* rEdge = reinterpret_cast(marker); // ONLY IN INDEX, PROTECTED by RUNTIME rKey = (char const*) rEdge + rEdge->_offsetFromKey; rCid = rEdge->_fromCid; } @@ -827,7 +848,9 @@ static bool IsEqualElementEdgeFrom (TRI_multi_pointer_t* array, return false; } - return lCid == rCid && strcmp(lKey, rKey) == 0; + // LOG_TRACE("ISEQUALELEMENT FROM: LCOLLECTION: %llu, LKEY: %s, RCOLLECTION: %llu, RKEY: %s", (unsigned long long) lCid, lKey, (unsigned long long) rCid, rKey); + + return ((lCid == rCid) && (strcmp(lKey, rKey) == 0)); } } @@ -849,16 +872,17 @@ static bool IsEqualElementEdgeTo (TRI_multi_pointer_t* array, char const* rKey; TRI_voc_cid_t rCid; + // left element TRI_doc_mptr_t const* lMptr = static_cast(left); 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, PROTECTED by RUNTIME + TRI_doc_edge_key_marker_t const* lEdge = reinterpret_cast(marker); // 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, PROTECTED by RUNTIME + triagens::wal::edge_marker_t const* lEdge = reinterpret_cast(marker); // ONLY IN INDEX, PROTECTED by RUNTIME lKey = (char const*) lEdge + lEdge->_offsetToKey; lCid = lEdge->_toCid; } @@ -866,16 +890,17 @@ static bool IsEqualElementEdgeTo (TRI_multi_pointer_t* array, return false; } + // right element TRI_doc_mptr_t const* rMptr = static_cast(right); 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, PROTECTED by RUNTIME - lKey = (char const*) rEdge + rEdge->_offsetToKey; + TRI_doc_edge_key_marker_t const* rEdge = reinterpret_cast(marker); // ONLY IN INDEX, PROTECTED by RUNTIME + rKey = (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, PROTECTED by RUNTIME + triagens::wal::edge_marker_t const* rEdge = reinterpret_cast(marker); // ONLY IN INDEX, PROTECTED by RUNTIME rKey = (char const*) rEdge + rEdge->_offsetToKey; rCid = rEdge->_toCid; } @@ -883,7 +908,9 @@ static bool IsEqualElementEdgeTo (TRI_multi_pointer_t* array, return false; } - return lCid == rCid && strcmp(lKey, rKey) == 0; + // LOG_TRACE("ISEQUALELEMENT TO: LCOLLECTION: %llu, LKEY: %s, RCOLLECTION: %llu, RKEY: %s", (unsigned long long) lCid, lKey, (unsigned long long) rCid, rKey); + + return ((lCid == rCid) && (strcmp(lKey, rKey) == 0)); } }