From ca94c88a79a4aa0775e9d37e2b2b9c7202ac2065 Mon Sep 17 00:00:00 2001 From: Jan Date: Mon, 29 Apr 2019 17:09:05 +0200 Subject: [PATCH] next hack attempt (#8802) --- arangod/RocksDBEngine/RocksDBCollection.cpp | 4 +-- arangod/RocksDBEngine/RocksDBFormat.cpp | 6 +++- arangod/RocksDBEngine/RocksDBFormat.h | 1 + arangod/RocksDBEngine/RocksDBIterators.cpp | 6 ++-- arangod/RocksDBEngine/RocksDBIterators.h | 7 ++--- arangod/RocksDBEngine/RocksDBKeyBounds.cpp | 35 ++++++++++++++++----- arangod/RocksDBEngine/RocksDBKeyBounds.h | 8 ++--- arangod/RocksDBEngine/RocksDBVPackIndex.cpp | 4 +-- 8 files changed, 45 insertions(+), 26 deletions(-) diff --git a/arangod/RocksDBEngine/RocksDBCollection.cpp b/arangod/RocksDBEngine/RocksDBCollection.cpp index c40f44636b..39ada8c546 100644 --- a/arangod/RocksDBEngine/RocksDBCollection.cpp +++ b/arangod/RocksDBEngine/RocksDBCollection.cpp @@ -555,11 +555,11 @@ bool RocksDBCollection::dropIndex(TRI_idx_iid_t iid) { } std::unique_ptr RocksDBCollection::getAllIterator(transaction::Methods* trx) const { - return std::make_unique(&_logicalCollection, trx, primaryIndex()); + return std::make_unique(&_logicalCollection, trx); } std::unique_ptr RocksDBCollection::getAnyIterator(transaction::Methods* trx) const { - return std::make_unique(&_logicalCollection, trx, primaryIndex()); + return std::make_unique(&_logicalCollection, trx); } void RocksDBCollection::invokeOnAllElements(transaction::Methods* trx, diff --git a/arangod/RocksDBEngine/RocksDBFormat.cpp b/arangod/RocksDBEngine/RocksDBFormat.cpp index 8826251f81..44c77913ac 100644 --- a/arangod/RocksDBEngine/RocksDBFormat.cpp +++ b/arangod/RocksDBEngine/RocksDBFormat.cpp @@ -68,6 +68,8 @@ inline void uint64ToPersistentBE(std::string& p, uint64_t value) { namespace arangodb { namespace rocksutils { +RocksDBEndianness rocksDBEndianness = RocksDBEndianness::Invalid; + uint16_t (*uint16FromPersistent)(char const* p) = nullptr; uint32_t (*uint32FromPersistent)(char const* p) = nullptr; uint64_t (*uint64FromPersistent)(char const* p) = nullptr; @@ -77,6 +79,8 @@ void (*uint32ToPersistent)(std::string& p, uint32_t value) = nullptr; void (*uint64ToPersistent)(std::string& p, uint64_t value) = nullptr; void setRocksDBKeyFormatEndianess(RocksDBEndianness e) { + rocksDBEndianness = e; + if (e == RocksDBEndianness::Little) { LOG_TOPIC("799b9", DEBUG, Logger::ENGINES) << "using little-endian keys"; uint16FromPersistent = &uint16FromPersistentLE; @@ -96,7 +100,7 @@ void setRocksDBKeyFormatEndianess(RocksDBEndianness e) { uint64ToPersistent = &uint64ToPersistentBE; return; } - LOG_TOPIC("b8243", FATAL, Logger::ENGINES) << "Invalid key endianess"; + LOG_TOPIC("b8243", FATAL, Logger::ENGINES) << "Invalid key endianness"; FATAL_ERROR_EXIT(); } diff --git a/arangod/RocksDBEngine/RocksDBFormat.h b/arangod/RocksDBEngine/RocksDBFormat.h index a857145910..62b8903d3e 100644 --- a/arangod/RocksDBEngine/RocksDBFormat.h +++ b/arangod/RocksDBEngine/RocksDBFormat.h @@ -30,6 +30,7 @@ namespace arangodb { namespace rocksutils { +extern RocksDBEndianness rocksDBEndianness; /* function pointers to serialization implementation */ extern uint16_t (*uint16FromPersistent)(char const* p); diff --git a/arangod/RocksDBEngine/RocksDBIterators.cpp b/arangod/RocksDBEngine/RocksDBIterators.cpp index 353e37235b..e41bdabca3 100644 --- a/arangod/RocksDBEngine/RocksDBIterators.cpp +++ b/arangod/RocksDBEngine/RocksDBIterators.cpp @@ -40,8 +40,7 @@ constexpr bool AnyIteratorFillBlockCache = false; // ================ All Iterator ================== RocksDBAllIndexIterator::RocksDBAllIndexIterator(LogicalCollection* col, - transaction::Methods* trx, - RocksDBPrimaryIndex const* index) + transaction::Methods* trx) : IndexIterator(col, trx), _bounds(RocksDBKeyBounds::CollectionDocuments( static_cast(col->getPhysical())->objectId())), @@ -143,8 +142,7 @@ void RocksDBAllIndexIterator::reset() { // ================ Any Iterator ================ RocksDBAnyIndexIterator::RocksDBAnyIndexIterator(LogicalCollection* col, - transaction::Methods* trx, - RocksDBPrimaryIndex const* index) + transaction::Methods* trx) : IndexIterator(col, trx), _cmp(RocksDBColumnFamily::documents()->GetComparator()), _objectId(static_cast(col->getPhysical())->objectId()), diff --git a/arangod/RocksDBEngine/RocksDBIterators.h b/arangod/RocksDBEngine/RocksDBIterators.h index 77ec84d2ff..a0500fd5e4 100644 --- a/arangod/RocksDBEngine/RocksDBIterators.h +++ b/arangod/RocksDBEngine/RocksDBIterators.h @@ -48,8 +48,7 @@ typedef std::functioncomparator()), + _cmp(static_cast(index->comparator())), _fullEnumerationObjectId(0), _reverse(reverse), _bounds(std::move(bounds)) { @@ -339,7 +339,7 @@ class RocksDBVPackIndexIterator final : public IndexIterator { } arangodb::RocksDBVPackIndex const* _index; - rocksdb::Comparator const* _cmp; + RocksDBVPackComparator const* _cmp; std::unique_ptr _iterator; uint64_t _fullEnumerationObjectId; bool const _reverse;