From 21a89c927035d7589f587b31e3e312821f917b40 Mon Sep 17 00:00:00 2001 From: Vasiliy Date: Tue, 30 Oct 2018 23:41:30 +0300 Subject: [PATCH] issue 496.2: allow customization of segmentsize lmts on arangosearch view creation, minor code cleanup (#7140) * issue 496.2: allow customization of segmentsize lmts on arangosearch view creation, minor code clanup * fix incorrect condition --- arangod/IResearch/IResearchView.cpp | 21 +-- arangod/IResearch/IResearchViewMeta.cpp | 99 +++++++++++++- arangod/IResearch/IResearchViewMeta.h | 6 + arangod/MMFiles/MMFilesWalRecoveryFeature.cpp | 3 + .../RestHandler/RestReplicationHandler.cpp | 72 +++------- tests/IResearch/IResearchView-test.cpp | 128 +++++++++--------- .../IResearchViewCoordinator-test.cpp | 4 +- .../IResearch/IResearchViewDBServer-test.cpp | 34 ++--- tests/IResearch/IResearchViewMeta-test.cpp | 56 +++++++- 9 files changed, 267 insertions(+), 156 deletions(-) diff --git a/arangod/IResearch/IResearchView.cpp b/arangod/IResearch/IResearchView.cpp index 1bfaa66126..fd0791cca9 100644 --- a/arangod/IResearch/IResearchView.cpp +++ b/arangod/IResearch/IResearchView.cpp @@ -59,11 +59,6 @@ namespace { -//////////////////////////////////////////////////////////////////////////////// -/// @brief flush segment when it reached approximately this size -//////////////////////////////////////////////////////////////////////////////// -constexpr size_t MAX_SEGMENT_SIZE = 32*(size_t(1)<<20); // 32MB - //////////////////////////////////////////////////////////////////////////////// /// @brief maximum number of threads that will not be blocked /// when inserting/removing data into/from a view @@ -965,7 +960,7 @@ IResearchView::~IResearchView() { if (_storePersisted) { try { - _storePersisted._writer->commit(); + // NOTE: do not commit writer so as not to go out-of-sync with the WAL (i.e. flush thread) _storePersisted._writer->close(); _storePersisted._writer.reset(); _storePersisted._directory->close(); @@ -1166,8 +1161,6 @@ arangodb::Result IResearchView::drop( // if an errors occurs below than a drop retry would most likely happen // ........................................................................... - _flushCallback.reset(); // unregister flush callback from flush thread - try { if (_storePersisted) { _storePersisted._writer->documents().remove(shared_filter); @@ -1250,6 +1243,7 @@ arangodb::Result IResearchView::dropImpl() { _asyncTerminate.store(true); // mark long-running async jobs for terminatation updateProperties(_meta); // trigger reload of settings for async jobs _asyncSelf->reset(); // the view data-stores are being deallocated, view use is no longer valid (wait for all the view users to finish) + _flushCallback.reset(); // unregister flush callback from flush thread WriteMutex mutex(_mutex); // members can be asynchronously updated SCOPED_LOCK(mutex); @@ -1685,8 +1679,12 @@ void IResearchView::open() { if (_storePersisted._directory) { // do not lock index, ArangoDB has it's own lock irs::index_writer::options options; + + TRI_ASSERT(_meta); options.lock_repository = false; - options.segment_memory_max = MAX_SEGMENT_SIZE; + options.segment_count_max = _meta->_segmentCountMax; + options.segment_docs_max = _meta->_segmentDocsMax; + options.segment_memory_max = _meta->_segmentMemoryMax; options.segment_pool_size = MAX_NON_BLOCKING_SEGMENTS_COUNT; // create writer before reader to ensure data directory is present @@ -1965,6 +1963,9 @@ arangodb::Result IResearchView::updateProperties( // reset non-updatable values to match current meta meta._locale = viewMeta->_locale; + meta._segmentCountMax = viewMeta->_segmentCountMax; + meta._segmentDocsMax = viewMeta->_segmentDocsMax; + meta._segmentMemoryMax = viewMeta->_segmentMemoryMax; if (arangodb::ServerState::instance()->isDBServer()) { viewMeta = std::make_shared(); // create an instance not shared with cluster-view @@ -2176,4 +2177,4 @@ void IResearchView::verifyKnownCollections() { // ----------------------------------------------------------------------------- // --SECTION-- END-OF-FILE -// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- \ No newline at end of file diff --git a/arangod/IResearch/IResearchViewMeta.cpp b/arangod/IResearch/IResearchViewMeta.cpp index 4edd5d0876..ce1f835977 100644 --- a/arangod/IResearch/IResearchViewMeta.cpp +++ b/arangod/IResearch/IResearchViewMeta.cpp @@ -391,13 +391,19 @@ IResearchViewMeta::Mask::Mask(bool mask /*=false*/) noexcept : _cleanupIntervalStep(mask), _consolidationIntervalMsec(mask), _consolidationPolicy(mask), - _locale(mask) { + _locale(mask), + _segmentCountMax(mask), + _segmentDocsMax(mask), + _segmentMemoryMax(mask) { } IResearchViewMeta::IResearchViewMeta() : _cleanupIntervalStep(10), _consolidationIntervalMsec(60 * 1000), - _locale(std::locale::classic()) { + _locale(std::locale::classic()), + _segmentCountMax(0), + _segmentDocsMax(0), + _segmentMemoryMax(32*(size_t(1)<<20)) { // 32MB std::string errorField; _consolidationPolicy = createConsolidationPolicy< @@ -427,6 +433,9 @@ IResearchViewMeta& IResearchViewMeta::operator=(IResearchViewMeta&& other) noexc _consolidationIntervalMsec = std::move(other._consolidationIntervalMsec); _consolidationPolicy = std::move(other._consolidationPolicy); _locale = std::move(other._locale); + _segmentCountMax = std::move(other._segmentCountMax); + _segmentDocsMax = std::move(other._segmentDocsMax); + _segmentMemoryMax = std::move(other._segmentMemoryMax); } return *this; @@ -438,6 +447,9 @@ IResearchViewMeta& IResearchViewMeta::operator=(IResearchViewMeta const& other) _consolidationIntervalMsec = other._consolidationIntervalMsec; _consolidationPolicy = other._consolidationPolicy; _locale = other._locale; + _segmentCountMax = other._segmentCountMax; + _segmentDocsMax = other._segmentDocsMax; + _segmentMemoryMax = other._segmentMemoryMax; } return *this; @@ -462,6 +474,18 @@ bool IResearchViewMeta::operator==(IResearchViewMeta const& other) const noexcep return false; // values do not match } + if (_segmentCountMax != other._segmentCountMax) { + return false; // values do not match + } + + if (_segmentDocsMax != other._segmentDocsMax) { + return false; // values do not match + } + + if (_segmentMemoryMax != other._segmentMemoryMax) { + return false; // values do not match + } + return true; } @@ -637,6 +661,64 @@ bool IResearchViewMeta::init( } } */ + + { + // optional size_t + static const std::string fieldName("segmentCountMax"); + + mask->_segmentCountMax = slice.hasKey(fieldName); + + if (!mask->_segmentCountMax) { + _segmentCountMax = defaults._segmentCountMax; + } else { + auto field = slice.get(fieldName); + + if (!getNumber(_segmentCountMax, field)) { + errorField = fieldName; + + return false; + } + } + } + + { + // optional size_t + static const std::string fieldName("segmentDocsMax"); + + mask->_segmentDocsMax = slice.hasKey(fieldName); + + if (!mask->_segmentDocsMax) { + _segmentDocsMax = defaults._segmentDocsMax; + } else { + auto field = slice.get(fieldName); + + if (!getNumber(_segmentDocsMax, field)) { + errorField = fieldName; + + return false; + } + } + } + + { + // optional size_t + static const std::string fieldName("segmentMemoryMax"); + + mask->_segmentMemoryMax = slice.hasKey(fieldName); + + if (!mask->_segmentMemoryMax) { + _segmentMemoryMax = defaults._segmentMemoryMax; + } else { + auto field = slice.get(fieldName); + + if (!getNumber(_segmentMemoryMax, field)) { + errorField = fieldName; + + return false; + } + } + } + return true; } @@ -665,6 +747,19 @@ bool IResearchViewMeta::json( builder.add("locale", arangodb::velocypack::Value(irs::locale_utils::name(_locale))); } */ + + if ((!ignoreEqual || _segmentCountMax != ignoreEqual->_segmentCountMax) && (!mask || mask->_segmentCountMax)) { + builder.add("segmentCountMax", arangodb::velocypack::Value(_segmentCountMax)); + } + + if ((!ignoreEqual || _segmentDocsMax != ignoreEqual->_segmentDocsMax) && (!mask || mask->_segmentDocsMax)) { + builder.add("segmentDocsMax", arangodb::velocypack::Value(_segmentDocsMax)); + } + + if ((!ignoreEqual || _segmentMemoryMax != ignoreEqual->_segmentMemoryMax) && (!mask || mask->_segmentMemoryMax)) { + builder.add("segmentMemoryMax", arangodb::velocypack::Value(_segmentMemoryMax)); + } + return true; } diff --git a/arangod/IResearch/IResearchViewMeta.h b/arangod/IResearch/IResearchViewMeta.h index 073544900d..f633b559bc 100644 --- a/arangod/IResearch/IResearchViewMeta.h +++ b/arangod/IResearch/IResearchViewMeta.h @@ -78,6 +78,9 @@ struct IResearchViewMeta { bool _consolidationIntervalMsec; bool _consolidationPolicy; bool _locale; + bool _segmentCountMax; + bool _segmentDocsMax; + bool _segmentMemoryMax; explicit Mask(bool mask = false) noexcept; }; @@ -85,6 +88,9 @@ struct IResearchViewMeta { size_t _consolidationIntervalMsec; // issue consolidation after milliseconds (0 == disable) ConsolidationPolicy _consolidationPolicy; // the consolidation policy to use std::locale _locale; // locale used for ordering processed attribute names + size_t _segmentCountMax; // maximum number of concurrent segments before segment aquisition blocks, e.g. max number of concurrent transacitons) (0 == unlimited) + size_t _segmentDocsMax; // maximum number of documents per segment before a segment flush is triggered (0 == unlimited) + size_t _segmentMemoryMax; // maximum memory byte size per segment before a segment flush is triggered (0 == unlimited) // NOTE: if adding fields don't forget to modify the default constructor !!! // NOTE: if adding fields don't forget to modify the copy constructor !!! // NOTE: if adding fields don't forget to modify the move constructor !!! diff --git a/arangod/MMFiles/MMFilesWalRecoveryFeature.cpp b/arangod/MMFiles/MMFilesWalRecoveryFeature.cpp index ae1ee6584c..ec825cabf6 100644 --- a/arangod/MMFiles/MMFilesWalRecoveryFeature.cpp +++ b/arangod/MMFiles/MMFilesWalRecoveryFeature.cpp @@ -79,6 +79,9 @@ void MMFilesWalRecoveryFeature::start() { // notify everyone that recovery is now done auto databaseFeature = ApplicationServer::getFeature("Database"); databaseFeature->recoveryDone(); + + LOG_TOPIC(INFO, arangodb::Logger::ENGINES) + << "DB recovery finished successfully"; } } // arangodb diff --git a/arangod/RestHandler/RestReplicationHandler.cpp b/arangod/RestHandler/RestReplicationHandler.cpp index 72680bc6e2..d3dc2f9709 100644 --- a/arangod/RestHandler/RestReplicationHandler.cpp +++ b/arangod/RestHandler/RestReplicationHandler.cpp @@ -51,6 +51,7 @@ #include "StorageEngine/StorageEngine.h" #include "Transaction/StandaloneContext.h" #include "Utils/CollectionGuard.h" +#include "Utils/CollectionNameResolver.h" #include "Utils/OperationOptions.h" #include "Utils/SingleCollectionTransaction.h" #include "VocBase/LogicalCollection.h" @@ -1728,7 +1729,6 @@ void RestReplicationHandler::handleCommandRestoreView() { return; } - bool force = _request->parsedValue("force", false); bool overwrite = _request->parsedValue("overwrite", false); auto nameSlice = slice.get(StaticStrings::DataSourceName); auto typeSlice = slice.get(StaticStrings::DataSourceType); @@ -1741,87 +1741,49 @@ void RestReplicationHandler::handleCommandRestoreView() { LOG_TOPIC(TRACE, Logger::REPLICATION) << "restoring view: " << nameSlice.copyString(); - if (ServerState::instance()->isCoordinator()) { - try { - auto* ci = ClusterInfo::instance(); - auto view = ci->getView(_vocbase.name(), nameSlice.toString()); + try { + CollectionNameResolver resolver(_vocbase); + auto view = resolver.getView(nameSlice.toString()); - if (view) { - if (overwrite) { - auto res = view->drop(); + if (view) { + if (!overwrite) { + generateError(TRI_ERROR_ARANGO_DUPLICATE_NAME); - if (!res.ok()) { - generateError(res); - - return; - } - - generateError(TRI_ERROR_ARANGO_DUPLICATE_NAME); - - return; - } + return; } - auto res = LogicalView::create(view, _vocbase, slice); // must create() since view was drop()ed + auto res = view->drop(); if (!res.ok()) { generateError(res); return; } - - if (!view) { - generateError(Result(TRI_ERROR_INTERNAL, "problem creating view")); - - return; - } - - velocypack::Builder result; - - result.openObject(); - result.add("result", velocypack::Slice::trueSlice()); - result.close(); - generateResult(rest::ResponseCode::OK, result.slice()); - } catch (basics::Exception const& ex) { - generateError(Result(ex.code(), ex.message())); - } catch (...) { - generateError(Result(TRI_ERROR_INTERNAL, "problem creating view")); } - return; // done - } + auto res = LogicalView::create(view, _vocbase, slice); // must create() since view was drop()ed - auto view = _vocbase.lookupView(nameSlice.copyString()); - - if (view) { - if (overwrite) { - Result res = _vocbase.dropView(view->id(), /*dropSytem*/force); - - if (res.fail()) { - generateError(res); - - return; - } - } else { - generateError(TRI_ERROR_ARANGO_DUPLICATE_NAME); + if (!res.ok()) { + generateError(res); return; } - } - - try { - view = _vocbase.createView(slice); if (view == nullptr) { generateError(rest::ResponseCode::SERVER_ERROR, TRI_ERROR_INTERNAL, "problem creating view"); + return; } } catch (basics::Exception const& ex) { generateError(GeneralResponse::responseCode(ex.code()), ex.code(), ex.message()); + + return; } catch (...) { generateError(rest::ResponseCode::SERVER_ERROR, TRI_ERROR_INTERNAL, "problem creating view"); + + return; } VPackBuilder result; diff --git a/tests/IResearch/IResearchView-test.cpp b/tests/IResearch/IResearchView-test.cpp index f09e3a1bd4..258d44741a 100644 --- a/tests/IResearch/IResearchView-test.cpp +++ b/tests/IResearch/IResearchView-test.cpp @@ -285,7 +285,7 @@ SECTION("test_defaults") { arangodb::iresearch::IResearchViewMetaState metaState; std::string error; - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK((slice.hasKey("globallyUniqueId") && slice.get("globallyUniqueId").isString() && false == slice.get("globallyUniqueId").copyString().empty())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); @@ -315,7 +315,7 @@ SECTION("test_defaults") { std::string error; CHECK((slice.isObject())); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK((false == slice.hasKey("deleted"))); @@ -411,7 +411,7 @@ SECTION("test_defaults") { arangodb::iresearch::IResearchViewMeta meta; std::string error; CHECK((slice.isObject())); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK((slice.get("name").copyString() == "testView")); CHECK((slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name())); CHECK((false == slice.hasKey("deleted"))); @@ -3297,7 +3297,7 @@ SECTION("test_update_overwrite") { std::string error; CHECK(slice.isObject()); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK(slice.get("deleted").isNone()); // no system properties @@ -3320,7 +3320,7 @@ SECTION("test_update_overwrite") { std::string error; CHECK(slice.isObject()); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK((slice.hasKey("deleted") && slice.get("deleted").isBoolean() && false == slice.get("deleted").getBoolean())); // has system properties @@ -3355,7 +3355,7 @@ SECTION("test_update_overwrite") { std::string error; CHECK(slice.isObject()); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK(slice.get("deleted").isNone()); // no system properties @@ -3378,7 +3378,7 @@ SECTION("test_update_overwrite") { std::string error; CHECK(slice.isObject()); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK((slice.hasKey("deleted") && slice.get("deleted").isBoolean() && false == slice.get("deleted").getBoolean())); // has system properties @@ -3417,7 +3417,7 @@ SECTION("test_update_overwrite") { std::string error; CHECK((slice.isObject())); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK((slice.get("name").copyString() == "testView")); CHECK((slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name())); CHECK((slice.get("deleted").isNone())); // no system properties @@ -3440,7 +3440,7 @@ SECTION("test_update_overwrite") { std::string error; CHECK((slice.isObject())); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK((slice.get("name").copyString() == "testView")); CHECK((slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name())); CHECK((slice.hasKey("deleted") && slice.get("deleted").isBoolean() && false == slice.get("deleted").getBoolean())); // has system properties @@ -3479,7 +3479,7 @@ SECTION("test_update_overwrite") { std::string error; CHECK((slice.isObject())); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK((slice.get("name").copyString() == "testView")); CHECK((slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name())); CHECK((slice.get("deleted").isNone())); // no system properties @@ -3502,7 +3502,7 @@ SECTION("test_update_overwrite") { std::string error; CHECK((slice.isObject())); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK((slice.get("name").copyString() == "testView")); CHECK((slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name())); CHECK((slice.hasKey("deleted") && slice.get("deleted").isBoolean() && false == slice.get("deleted").getBoolean())); // has system properties @@ -3545,7 +3545,7 @@ SECTION("test_update_overwrite") { std::string error; CHECK((slice.isObject())); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK((slice.get("name").copyString() == "testView")); CHECK((slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name())); CHECK((slice.get("deleted").isNone())); // no system properties @@ -3568,7 +3568,7 @@ SECTION("test_update_overwrite") { std::string error; CHECK((slice.isObject())); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK((slice.get("name").copyString() == "testView")); CHECK((slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name())); CHECK((slice.hasKey("deleted") && slice.get("deleted").isBoolean() && false == slice.get("deleted").getBoolean())); // has system properties @@ -3615,7 +3615,7 @@ SECTION("test_update_overwrite") { std::string error; CHECK((slice.isObject())); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK((slice.get("name").copyString() == "testView")); CHECK((slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name())); CHECK((slice.get("deleted").isNone())); // no system properties @@ -3655,7 +3655,7 @@ SECTION("test_update_overwrite") { std::string error; CHECK((slice.isObject())); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK((slice.get("name").copyString() == "testView")); CHECK((slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name())); CHECK((slice.hasKey("deleted") && slice.get("deleted").isBoolean() && false == slice.get("deleted").getBoolean())); // has system properties @@ -3693,7 +3693,7 @@ SECTION("test_update_overwrite") { std::string error; CHECK((slice.isObject())); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK((slice.get("name").copyString() == "testView")); CHECK((slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name())); CHECK((slice.get("deleted").isNone())); // no system properties @@ -3716,7 +3716,7 @@ SECTION("test_update_overwrite") { std::string error; CHECK((slice.isObject())); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK((slice.get("name").copyString() == "testView")); CHECK((slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name())); CHECK((slice.hasKey("deleted") && slice.get("deleted").isBoolean() && false == slice.get("deleted").getBoolean())); // has system properties @@ -3768,7 +3768,7 @@ SECTION("test_update_overwrite") { std::string error; CHECK(slice.isObject()); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK(slice.get("deleted").isNone()); // no system properties @@ -3808,7 +3808,7 @@ SECTION("test_update_overwrite") { std::string error; CHECK(slice.isObject()); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK((slice.hasKey("deleted") && slice.get("deleted").isBoolean() && false == slice.get("deleted").getBoolean())); // has system properties @@ -3848,7 +3848,7 @@ SECTION("test_update_overwrite") { std::string error; CHECK(slice.isObject()); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK(slice.get("deleted").isNone()); // no system properties @@ -3888,7 +3888,7 @@ SECTION("test_update_overwrite") { std::string error; CHECK(slice.isObject()); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK((slice.hasKey("deleted") && slice.get("deleted").isBoolean() && false == slice.get("deleted").getBoolean())); // has system properties @@ -3930,7 +3930,7 @@ SECTION("test_update_overwrite") { auto slice = builder.slice(); CHECK(slice.isObject()); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK(slice.get("deleted").isNone()); // no system properties @@ -3952,7 +3952,7 @@ SECTION("test_update_overwrite") { auto slice = builder.slice(); CHECK(slice.isObject()); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK((slice.hasKey("deleted") && slice.get("deleted").isBoolean() && false == slice.get("deleted").getBoolean())); // has system properties @@ -3978,7 +3978,7 @@ SECTION("test_update_overwrite") { builder.close(); auto slice = builder.slice(); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK(slice.get("deleted").isNone()); // no system properties @@ -3999,7 +3999,7 @@ SECTION("test_update_overwrite") { builder.close(); auto slice = builder.slice(); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK((slice.hasKey("deleted") && slice.get("deleted").isBoolean() && false == slice.get("deleted").getBoolean())); // has system properties @@ -4556,7 +4556,7 @@ SECTION("test_update_partial") { std::string error; CHECK(slice.isObject()); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK(slice.get("deleted").isNone()); // no system properties @@ -4579,7 +4579,7 @@ SECTION("test_update_partial") { std::string error; CHECK(slice.isObject()); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK((slice.hasKey("deleted") && slice.get("deleted").isBoolean() && false == slice.get("deleted").getBoolean())); // has system properties @@ -4617,7 +4617,7 @@ SECTION("test_update_partial") { std::string error; CHECK((slice.isObject())); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK((slice.get("name").copyString() == "testView")); CHECK((slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name())); CHECK((slice.get("deleted").isNone())); // no system properties @@ -4640,7 +4640,7 @@ SECTION("test_update_partial") { std::string error; CHECK((slice.isObject())); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK((slice.get("name").copyString() == "testView")); CHECK((slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name())); CHECK((slice.hasKey("deleted") && slice.get("deleted").isBoolean() && false == slice.get("deleted").getBoolean())); // has system properties @@ -4679,7 +4679,7 @@ SECTION("test_update_partial") { std::string error; CHECK((slice.isObject())); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK((slice.get("name").copyString() == "testView")); CHECK((slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name())); CHECK((slice.get("deleted").isNone())); // no system properties @@ -4702,7 +4702,7 @@ SECTION("test_update_partial") { std::string error; CHECK((slice.isObject())); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK((slice.get("name").copyString() == "testView")); CHECK((slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name())); CHECK((slice.hasKey("deleted") && slice.get("deleted").isBoolean() && false == slice.get("deleted").getBoolean())); // has system properties @@ -4745,7 +4745,7 @@ SECTION("test_update_partial") { std::string error; CHECK((slice.isObject())); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK((slice.get("name").copyString() == "testView")); CHECK((slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name())); CHECK((slice.get("deleted").isNone())); // no system properties @@ -4768,7 +4768,7 @@ SECTION("test_update_partial") { std::string error; CHECK((slice.isObject())); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK((slice.get("name").copyString() == "testView")); CHECK((slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name())); CHECK((slice.hasKey("deleted") && slice.get("deleted").isBoolean() && false == slice.get("deleted").getBoolean())); // has system properties @@ -4815,7 +4815,7 @@ SECTION("test_update_partial") { std::string error; CHECK((slice.isObject())); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK((slice.get("name").copyString() == "testView")); CHECK((slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name())); CHECK((slice.get("deleted").isNone())); // no system properties @@ -4855,7 +4855,7 @@ SECTION("test_update_partial") { std::string error; CHECK((slice.isObject())); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK((slice.get("name").copyString() == "testView")); CHECK((slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name())); CHECK((slice.hasKey("deleted") && slice.get("deleted").isBoolean() && false == slice.get("deleted").getBoolean())); // has system properties @@ -4896,7 +4896,7 @@ SECTION("test_update_partial") { std::string error; CHECK((slice.isObject())); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK((slice.get("name").copyString() == "testView")); CHECK((slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name())); CHECK((slice.get("deleted").isNone())); // no system properties @@ -4936,7 +4936,7 @@ SECTION("test_update_partial") { std::string error; CHECK((slice.isObject())); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK((slice.get("name").copyString() == "testView")); CHECK((slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name())); CHECK((slice.hasKey("deleted") && slice.get("deleted").isBoolean() && false == slice.get("deleted").getBoolean())); // has system properties @@ -4981,7 +4981,7 @@ SECTION("test_update_partial") { auto slice = builder.slice(); CHECK(slice.isObject()); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK(slice.get("deleted").isNone()); // no system properties @@ -5003,7 +5003,7 @@ SECTION("test_update_partial") { auto slice = builder.slice(); CHECK(slice.isObject()); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK((slice.hasKey("deleted") && slice.get("deleted").isBoolean() && false == slice.get("deleted").getBoolean())); // has system properties @@ -5051,7 +5051,7 @@ SECTION("test_update_partial") { std::string error; CHECK(slice.isObject()); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK(slice.get("deleted").isNone()); // no system properties @@ -5091,7 +5091,7 @@ SECTION("test_update_partial") { std::string error; CHECK(slice.isObject()); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK((slice.hasKey("deleted") && slice.get("deleted").isBoolean() && false == slice.get("deleted").getBoolean())); // has system properties @@ -5158,7 +5158,7 @@ SECTION("test_update_partial") { std::string error; CHECK(slice.isObject()); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK(slice.get("deleted").isNone()); // no system properties @@ -5198,7 +5198,7 @@ SECTION("test_update_partial") { std::string error; CHECK(slice.isObject()); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK((slice.hasKey("deleted") && slice.get("deleted").isBoolean() && false == slice.get("deleted").getBoolean())); // has system properties @@ -5241,7 +5241,7 @@ SECTION("test_update_partial") { std::string error; CHECK(slice.isObject()); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK(slice.get("deleted").isNone()); // no system properties @@ -5264,7 +5264,7 @@ SECTION("test_update_partial") { std::string error; CHECK(slice.isObject()); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK((slice.hasKey("deleted") && slice.get("deleted").isBoolean() && false == slice.get("deleted").getBoolean())); // has system properties @@ -5303,7 +5303,7 @@ SECTION("test_update_partial") { auto slice = builder.slice(); CHECK(slice.isObject()); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK(slice.get("deleted").isNone()); // no system properties @@ -5334,7 +5334,7 @@ SECTION("test_update_partial") { auto slice = builder.slice(); CHECK(slice.isObject()); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK(slice.get("deleted").isNone()); // no system properties @@ -5383,7 +5383,7 @@ SECTION("test_update_partial") { std::string error; CHECK(slice.isObject()); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK(slice.get("deleted").isNone()); // no system properties @@ -5406,7 +5406,7 @@ SECTION("test_update_partial") { std::string error; CHECK(slice.isObject()); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK((slice.hasKey("deleted") && slice.get("deleted").isBoolean() && false == slice.get("deleted").getBoolean())); // has system properties @@ -5440,7 +5440,7 @@ SECTION("test_update_partial") { std::string error; CHECK(slice.isObject()); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK(slice.get("deleted").isNone()); // no system properties @@ -5463,7 +5463,7 @@ SECTION("test_update_partial") { std::string error; CHECK(slice.isObject()); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK((slice.hasKey("deleted") && slice.get("deleted").isBoolean() && false == slice.get("deleted").getBoolean())); // has system properties @@ -5504,7 +5504,7 @@ SECTION("test_update_partial") { std::string error; CHECK(slice.isObject()); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK(slice.get("deleted").isNone()); // no system properties @@ -5527,7 +5527,7 @@ SECTION("test_update_partial") { std::string error; CHECK(slice.isObject()); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK((slice.hasKey("deleted") && slice.get("deleted").isBoolean() && false == slice.get("deleted").getBoolean())); // has system properties @@ -5570,7 +5570,7 @@ SECTION("test_update_partial") { std::string error; CHECK(slice.isObject()); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK(slice.get("deleted").isNone()); // no system properties @@ -5593,7 +5593,7 @@ SECTION("test_update_partial") { std::string error; CHECK(slice.isObject()); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK((slice.hasKey("deleted") && slice.get("deleted").isBoolean() && false == slice.get("deleted").getBoolean())); // has system properties @@ -5629,7 +5629,7 @@ SECTION("test_update_partial") { auto slice = builder.slice(); CHECK(slice.isObject()); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK(slice.get("deleted").isNone()); // no system properties @@ -5647,7 +5647,7 @@ SECTION("test_update_partial") { auto slice = builder.slice(); CHECK(slice.isObject()); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK((slice.hasKey("deleted") && slice.get("deleted").isBoolean() && false == slice.get("deleted").getBoolean())); // has system properties @@ -5681,7 +5681,7 @@ SECTION("test_update_partial") { auto slice = builder.slice(); CHECK(slice.isObject()); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK(slice.get("deleted").isNone()); // no system properties @@ -5699,7 +5699,7 @@ SECTION("test_update_partial") { auto slice = builder.slice(); CHECK(slice.isObject()); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK((slice.hasKey("deleted") && slice.get("deleted").isBoolean() && false == slice.get("deleted").getBoolean())); // has system properties @@ -5744,7 +5744,7 @@ SECTION("test_update_partial") { auto slice = builder.slice(); CHECK(slice.isObject()); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK(slice.get("deleted").isNone()); // no system properties @@ -5766,7 +5766,7 @@ SECTION("test_update_partial") { auto slice = builder.slice(); CHECK(slice.isObject()); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK((slice.hasKey("deleted") && slice.get("deleted").isBoolean() && false == slice.get("deleted").getBoolean())); // has system properties @@ -5793,7 +5793,7 @@ SECTION("test_update_partial") { auto slice = builder.slice(); CHECK(slice.isObject()); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK(slice.get("deleted").isNone()); // no system properties @@ -5815,7 +5815,7 @@ SECTION("test_update_partial") { auto slice = builder.slice(); CHECK(slice.isObject()); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK(slice.get("name").copyString() == "testView"); CHECK(slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name()); CHECK((slice.hasKey("deleted") && slice.get("deleted").isBoolean() && false == slice.get("deleted").getBoolean())); // has system properties @@ -6144,4 +6144,4 @@ SECTION("test_update_partial") { // ----------------------------------------------------------------------------- // --SECTION-- END-OF-FILE -// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- \ No newline at end of file diff --git a/tests/IResearch/IResearchViewCoordinator-test.cpp b/tests/IResearch/IResearchViewCoordinator-test.cpp index ae11aaf76a..6824652b38 100644 --- a/tests/IResearch/IResearchViewCoordinator-test.cpp +++ b/tests/IResearch/IResearchViewCoordinator-test.cpp @@ -362,7 +362,7 @@ SECTION("test_defaults") { arangodb::iresearch::IResearchViewMeta meta; std::string error; - CHECK((10U == slice.length())); + CHECK((13U == slice.length())); CHECK((slice.hasKey("globallyUniqueId") && slice.get("globallyUniqueId").isString() && false == slice.get("globallyUniqueId").copyString().empty())); CHECK((slice.get("id").copyString() == "1")); CHECK((slice.hasKey("isSystem") && slice.get("isSystem").isBoolean() && false == slice.get("isSystem").getBoolean())); @@ -385,7 +385,7 @@ SECTION("test_defaults") { arangodb::iresearch::IResearchViewMeta meta; std::string error; - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK((slice.get("id").copyString() == "1")); CHECK((slice.get("name").copyString() == "testView")); CHECK((slice.get("type").copyString() == arangodb::iresearch::DATA_SOURCE_TYPE.name())); diff --git a/tests/IResearch/IResearchViewDBServer-test.cpp b/tests/IResearch/IResearchViewDBServer-test.cpp index 528a5b2356..3adfca4df5 100644 --- a/tests/IResearch/IResearchViewDBServer-test.cpp +++ b/tests/IResearch/IResearchViewDBServer-test.cpp @@ -889,7 +889,7 @@ SECTION("test_toVelocyPack") { wiew->toVelocyPack(builder, true, false); builder.close(); auto slice = builder.slice(); - CHECK((6U == slice.length())); + CHECK((9U == slice.length())); CHECK((slice.hasKey("id") && slice.get("id").isString() && std::string("2") == slice.get("id").copyString())); CHECK((slice.hasKey("name") && slice.get("name").isString() && std::string("testView") == slice.get("name").copyString())); CHECK((slice.hasKey("type") && slice.get("type").isString() && arangodb::iresearch::DATA_SOURCE_TYPE.name() == slice.get("type").copyString())); @@ -1057,7 +1057,7 @@ SECTION("test_updateProperties") { auto slice = builder.slice(); CHECK((slice.isObject())); - CHECK((6U == slice.length())); + CHECK((9U == slice.length())); CHECK((slice.hasKey("cleanupIntervalStep") && slice.get("cleanupIntervalStep").isNumber() && 24 == slice.get("cleanupIntervalStep").getNumber())); CHECK((slice.hasKey("consolidationIntervalMsec") && slice.get("consolidationIntervalMsec").isNumber() && 42 == slice.get("consolidationIntervalMsec").getNumber())); CHECK((!slice.hasKey("links"))); @@ -1077,7 +1077,7 @@ SECTION("test_updateProperties") { auto slice = builder.slice(); CHECK((slice.isObject())); - CHECK((6U == slice.length())); + CHECK((9U == slice.length())); CHECK((slice.hasKey("cleanupIntervalStep") && slice.get("cleanupIntervalStep").isNumber() && 24 == slice.get("cleanupIntervalStep").getNumber())); CHECK((slice.hasKey("consolidationIntervalMsec") && slice.get("consolidationIntervalMsec").isNumber() && 52 == slice.get("consolidationIntervalMsec").getNumber())); CHECK((!slice.hasKey("links"))); @@ -1098,7 +1098,7 @@ SECTION("test_updateProperties") { auto slice = builder.slice(); CHECK((slice.isObject())); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK((slice.hasKey("cleanupIntervalStep") && slice.get("cleanupIntervalStep").isNumber() && 24 == slice.get("cleanupIntervalStep").getNumber())); CHECK((slice.hasKey("consolidationIntervalMsec") && slice.get("consolidationIntervalMsec").isNumber() && 52 == slice.get("consolidationIntervalMsec").getNumber())); CHECK((slice.hasKey("links") && slice.get("links").isObject() && 0 == slice.get("links").length())); @@ -1114,7 +1114,7 @@ SECTION("test_updateProperties") { auto slice = builder.slice(); CHECK((slice.isObject())); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK((slice.hasKey("collections") && slice.get("collections").isArray() && 0 == slice.get("collections").length())); CHECK((slice.hasKey("cleanupIntervalStep") && slice.get("cleanupIntervalStep").isNumber() && 24 == slice.get("cleanupIntervalStep").getNumber())); CHECK((slice.hasKey("consolidationIntervalMsec") && slice.get("consolidationIntervalMsec").isNumber() && 52 == slice.get("consolidationIntervalMsec").getNumber())); @@ -1147,7 +1147,7 @@ SECTION("test_updateProperties") { auto slice = builder.slice(); CHECK((slice.isObject())); - CHECK((6U == slice.length())); + CHECK((9U == slice.length())); CHECK((slice.hasKey("cleanupIntervalStep") && slice.get("cleanupIntervalStep").isNumber() && 24 == slice.get("cleanupIntervalStep").getNumber())); CHECK((slice.hasKey("consolidationIntervalMsec") && slice.get("consolidationIntervalMsec").isNumber() && 42 == slice.get("consolidationIntervalMsec").getNumber())); CHECK((!slice.hasKey("links"))); @@ -1167,7 +1167,7 @@ SECTION("test_updateProperties") { auto slice = builder.slice(); CHECK((slice.isObject())); - CHECK((6U == slice.length())); + CHECK((9U == slice.length())); CHECK((slice.hasKey("cleanupIntervalStep") && slice.get("cleanupIntervalStep").isNumber() && 10 == slice.get("cleanupIntervalStep").getNumber())); CHECK((slice.hasKey("consolidationIntervalMsec") && slice.get("consolidationIntervalMsec").isNumber() && 52 == slice.get("consolidationIntervalMsec").getNumber())); CHECK((!slice.hasKey("links"))); @@ -1188,7 +1188,7 @@ SECTION("test_updateProperties") { auto slice = builder.slice(); CHECK((slice.isObject())); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK((slice.hasKey("cleanupIntervalStep") && slice.get("cleanupIntervalStep").isNumber() && 10 == slice.get("cleanupIntervalStep").getNumber())); CHECK((slice.hasKey("consolidationIntervalMsec") && slice.get("consolidationIntervalMsec").isNumber() && 52 == slice.get("consolidationIntervalMsec").getNumber())); CHECK((slice.hasKey("links") && slice.get("links").isObject() && 0 == slice.get("links").length())); @@ -1204,7 +1204,7 @@ SECTION("test_updateProperties") { auto slice = builder.slice(); CHECK((slice.isObject())); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK((slice.hasKey("collections") && slice.get("collections").isArray() && 0 == slice.get("collections").length())); CHECK((slice.hasKey("cleanupIntervalStep") && slice.get("cleanupIntervalStep").isNumber() && 10 == slice.get("cleanupIntervalStep").getNumber())); CHECK((slice.hasKey("consolidationIntervalMsec") && slice.get("consolidationIntervalMsec").isNumber() && 52 == slice.get("consolidationIntervalMsec").getNumber())); @@ -1242,7 +1242,7 @@ SECTION("test_updateProperties") { auto slice = builder.slice(); CHECK((slice.isObject())); - CHECK((6U == slice.length())); + CHECK((9U == slice.length())); CHECK((slice.hasKey("cleanupIntervalStep") && slice.get("cleanupIntervalStep").isNumber() && 24 == slice.get("cleanupIntervalStep").getNumber())); CHECK((slice.hasKey("consolidationIntervalMsec") && slice.get("consolidationIntervalMsec").isNumber() && 42 == slice.get("consolidationIntervalMsec").getNumber())); CHECK((!slice.hasKey("links"))); @@ -1262,7 +1262,7 @@ SECTION("test_updateProperties") { auto slice = builder.slice(); CHECK((slice.isObject())); - CHECK((6U == slice.length())); + CHECK((9U == slice.length())); CHECK((slice.hasKey("cleanupIntervalStep") && slice.get("cleanupIntervalStep").isNumber() && 24 == slice.get("cleanupIntervalStep").getNumber())); CHECK((slice.hasKey("consolidationIntervalMsec") && slice.get("consolidationIntervalMsec").isNumber() && 52 == slice.get("consolidationIntervalMsec").getNumber())); CHECK((!slice.hasKey("links"))); @@ -1280,7 +1280,7 @@ SECTION("test_updateProperties") { auto slice = builder.slice(); CHECK((slice.isObject())); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK((slice.hasKey("cleanupIntervalStep") && slice.get("cleanupIntervalStep").isNumber() && 24 == slice.get("cleanupIntervalStep").getNumber())); CHECK((slice.hasKey("consolidationIntervalMsec") && slice.get("consolidationIntervalMsec").isNumber() && 52 == slice.get("consolidationIntervalMsec").getNumber())); CHECK((slice.hasKey("links") && slice.get("links").isObject() && 0 == slice.get("links").length())); @@ -1296,7 +1296,7 @@ SECTION("test_updateProperties") { auto slice = builder.slice(); CHECK((slice.isObject())); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK((slice.hasKey("collections") && slice.get("collections").isArray() && 0 == slice.get("collections").length())); CHECK((slice.hasKey("cleanupIntervalStep") && slice.get("cleanupIntervalStep").isNumber() && 24 == slice.get("cleanupIntervalStep").getNumber())); CHECK((slice.hasKey("consolidationIntervalMsec") && slice.get("consolidationIntervalMsec").isNumber() && 52 == slice.get("consolidationIntervalMsec").getNumber())); @@ -1337,7 +1337,7 @@ SECTION("test_updateProperties") { auto slice = builder.slice(); CHECK((slice.isObject())); - CHECK((6U == slice.length())); + CHECK((9U == slice.length())); CHECK((slice.hasKey("cleanupIntervalStep") && slice.get("cleanupIntervalStep").isNumber() && 24 == slice.get("cleanupIntervalStep").getNumber())); CHECK((slice.hasKey("consolidationIntervalMsec") && slice.get("consolidationIntervalMsec").isNumber() && 42 == slice.get("consolidationIntervalMsec").getNumber())); CHECK((!slice.hasKey("links"))); @@ -1357,7 +1357,7 @@ SECTION("test_updateProperties") { auto slice = builder.slice(); CHECK((slice.isObject())); - CHECK((6U == slice.length())); + CHECK((9U == slice.length())); CHECK((slice.hasKey("cleanupIntervalStep") && slice.get("cleanupIntervalStep").isNumber() && 10 == slice.get("cleanupIntervalStep").getNumber())); CHECK((slice.hasKey("consolidationIntervalMsec") && slice.get("consolidationIntervalMsec").isNumber() && 52 == slice.get("consolidationIntervalMsec").getNumber())); CHECK((!slice.hasKey("links"))); @@ -1375,7 +1375,7 @@ SECTION("test_updateProperties") { auto slice = builder.slice(); CHECK((slice.isObject())); - CHECK((7U == slice.length())); + CHECK((10U == slice.length())); CHECK((slice.hasKey("cleanupIntervalStep") && slice.get("cleanupIntervalStep").isNumber() && 10 == slice.get("cleanupIntervalStep").getNumber())); CHECK((slice.hasKey("consolidationIntervalMsec") && slice.get("consolidationIntervalMsec").isNumber() && 52 == slice.get("consolidationIntervalMsec").getNumber())); CHECK((slice.hasKey("links") && slice.get("links").isObject() && 0 == slice.get("links").length())); @@ -1391,7 +1391,7 @@ SECTION("test_updateProperties") { auto slice = builder.slice(); CHECK((slice.isObject())); - CHECK((11U == slice.length())); + CHECK((14U == slice.length())); CHECK((slice.hasKey("collections") && slice.get("collections").isArray() && 0 == slice.get("collections").length())); CHECK((slice.hasKey("cleanupIntervalStep") && slice.get("cleanupIntervalStep").isNumber() && 10 == slice.get("cleanupIntervalStep").getNumber())); CHECK((slice.hasKey("consolidationIntervalMsec") && slice.get("consolidationIntervalMsec").isNumber() && 52 == slice.get("consolidationIntervalMsec").getNumber())); diff --git a/tests/IResearch/IResearchViewMeta-test.cpp b/tests/IResearch/IResearchViewMeta-test.cpp index dce6364b3f..c4e7851168 100644 --- a/tests/IResearch/IResearchViewMeta-test.cpp +++ b/tests/IResearch/IResearchViewMeta-test.cpp @@ -74,6 +74,9 @@ SECTION("test_defaults") { CHECK((false == !meta._consolidationPolicy.policy())); CHECK((0.1f == meta._consolidationPolicy.properties().get("threshold").getNumber())); CHECK(std::string("C") == irs::locale_utils::name(meta._locale)); + CHECK((0 == meta._segmentCountMax)); + CHECK((0 == meta._segmentDocsMax)); + CHECK((32*(size_t(1)<<20) == meta._segmentMemoryMax)); } SECTION("test_inheritDefaults") { @@ -92,6 +95,9 @@ SECTION("test_inheritDefaults") { std::move(*arangodb::velocypack::Parser::fromJson("{ \"type\": \"bytes\", \"threshold\": 0.11 }")) ); defaults._locale = irs::locale_utils::locale("C"); + defaults._segmentCountMax = 10; + defaults._segmentDocsMax = 11; + defaults._segmentMemoryMax = 12; { auto json = arangodb::velocypack::Parser::fromJson("{}"); @@ -105,6 +111,9 @@ SECTION("test_inheritDefaults") { CHECK((true == !meta._consolidationPolicy.policy())); CHECK((.11f == meta._consolidationPolicy.properties().get("threshold").getNumber())); CHECK(std::string("C") == irs::locale_utils::name(meta._locale)); + CHECK((10 == meta._segmentCountMax)); + CHECK((11 == meta._segmentDocsMax)); + CHECK((12 == meta._segmentMemoryMax)); } } @@ -125,11 +134,13 @@ SECTION("test_readDefaults") { CHECK((false == !meta._consolidationPolicy.policy())); CHECK((0.1f == meta._consolidationPolicy.properties().get("threshold").getNumber())); CHECK(std::string("C") == irs::locale_utils::name(meta._locale)); + CHECK((0 == meta._segmentCountMax)); + CHECK((0 == meta._segmentDocsMax)); + CHECK((32*(size_t(1)<<20) == meta._segmentMemoryMax)); } } SECTION("test_readCustomizedValues") { - auto viewJson = arangodb::velocypack::Parser::fromJson("{ \"id\": 123, \"name\": \"testView\", \"type\": \"testType\" }"); std::unordered_set expectedCollections = { 42 }; arangodb::iresearch::IResearchViewMeta meta; arangodb::iresearch::IResearchViewMetaState metaState; @@ -212,7 +223,10 @@ SECTION("test_readCustomizedValues") { \"consolidationIntervalMsec\": 456, \ \"cleanupIntervalStep\": 654, \ \"consolidationPolicy\": { \"type\": \"bytes\", \"threshold\": 0.11 }, \ - \"locale\": \"ru_RU.KOI8-R\" \ + \"locale\": \"ru_RU.KOI8-R\", \ + \"segmentCountMax\": 10, \ + \"segmentDocsMax\": 11, \ + \"segmentMemoryMax\": 12 \ }"); CHECK(true == meta.init(json->slice(), errorField)); CHECK((true == metaState.init(json->slice(), errorField))); @@ -230,6 +244,9 @@ SECTION("test_readCustomizedValues") { CHECK((false == !meta._consolidationPolicy.policy())); CHECK((.11f == meta._consolidationPolicy.properties().get("threshold").getNumber())); CHECK(std::string("C") == iresearch::locale_utils::name(meta._locale)); + CHECK((10 == meta._segmentCountMax)); + CHECK((11 == meta._segmentDocsMax)); + CHECK((12 == meta._segmentMemoryMax)); } SECTION("test_writeDefaults") { @@ -246,7 +263,7 @@ SECTION("test_writeDefaults") { auto slice = builder.slice(); - CHECK((4U == slice.length())); + CHECK((7U == slice.length())); tmpSlice = slice.get("collections"); CHECK((true == tmpSlice.isArray() && 0 == tmpSlice.length())); tmpSlice = slice.get("cleanupIntervalStep"); @@ -259,6 +276,12 @@ SECTION("test_writeDefaults") { CHECK((tmpSlice2.isNumber() && .1f == tmpSlice2.getNumber())); tmpSlice2 = tmpSlice.get("type"); CHECK((tmpSlice2.isString() && std::string("bytes_accum") == tmpSlice2.copyString())); + tmpSlice = slice.get("segmentCountMax"); + CHECK((true == tmpSlice.isNumber() && 0 == tmpSlice.getNumber())); + tmpSlice = slice.get("segmentDocsMax"); + CHECK((true == tmpSlice.isNumber() && 0 == tmpSlice.getNumber())); + tmpSlice = slice.get("segmentMemoryMax"); + CHECK((true == tmpSlice.isNumber() && 32*(size_t(1)<<20) == tmpSlice.getNumber())); } SECTION("test_writeCustomizedValues") { @@ -304,6 +327,9 @@ SECTION("test_writeCustomizedValues") { std::move(*arangodb::velocypack::Parser::fromJson("{ \"type\": \"bytes\", \"threshold\": 0.11 }")) ); meta._locale = iresearch::locale_utils::locale("en_UK.UTF-8"); + meta._segmentCountMax = 10; + meta._segmentDocsMax = 11; + meta._segmentMemoryMax = 12; std::unordered_set expectedCollections = { 42, 52, 62 }; arangodb::velocypack::Builder builder; @@ -317,7 +343,7 @@ SECTION("test_writeCustomizedValues") { auto slice = builder.slice(); - CHECK((4U == slice.length())); + CHECK((7U == slice.length())); tmpSlice = slice.get("collections"); CHECK((true == tmpSlice.isArray() && 3 == tmpSlice.length())); @@ -337,6 +363,12 @@ SECTION("test_writeCustomizedValues") { CHECK((tmpSlice2.isNumber() && .11f == tmpSlice2.getNumber())); tmpSlice2 = tmpSlice.get("type"); CHECK((tmpSlice2.isString() && std::string("bytes") == tmpSlice2.copyString())); + tmpSlice = slice.get("segmentCountMax"); + CHECK((true == tmpSlice.isNumber() && 10 == tmpSlice.getNumber())); + tmpSlice = slice.get("segmentDocsMax"); + CHECK((true == tmpSlice.isNumber() && 11 == tmpSlice.getNumber())); + tmpSlice = slice.get("segmentMemoryMax"); + CHECK((true == tmpSlice.isNumber() && 12 == tmpSlice.getNumber())); } SECTION("test_readMaskAll") { @@ -352,7 +384,10 @@ SECTION("test_readMaskAll") { \"consolidationIntervalMsec\": 654, \ \"cleanupIntervalStep\": 456, \ \"consolidationPolicy\": { \"type\": \"bytes\", \"threshold\": 0.1 }, \ - \"locale\": \"ru_RU.KOI8-R\" \ + \"locale\": \"ru_RU.KOI8-R\", \ + \"segmentCountMax\": 10, \ + \"segmentDocsMax\": 11, \ + \"segmentMemoryMax\": 12 \ }"); CHECK(true == meta.init(json->slice(), errorField, arangodb::iresearch::IResearchViewMeta::DEFAULT(), &mask)); CHECK((true == metaState.init(json->slice(), errorField, arangodb::iresearch::IResearchViewMetaState::DEFAULT(), &maskState))); @@ -361,6 +396,9 @@ SECTION("test_readMaskAll") { CHECK(true == mask._cleanupIntervalStep); CHECK((true == mask._consolidationPolicy)); CHECK((false == mask._locale)); + CHECK((true == mask._segmentCountMax)); + CHECK((true == mask._segmentDocsMax)); + CHECK((true == mask._segmentMemoryMax)); } SECTION("test_readMaskNone") { @@ -379,6 +417,9 @@ SECTION("test_readMaskNone") { CHECK(false == mask._cleanupIntervalStep); CHECK((false == mask._consolidationPolicy)); CHECK(false == mask._locale); + CHECK((false == mask._segmentCountMax)); + CHECK((false == mask._segmentDocsMax)); + CHECK((false == mask._segmentMemoryMax)); } SECTION("test_writeMaskAll") { @@ -396,12 +437,15 @@ SECTION("test_writeMaskAll") { auto slice = builder.slice(); - CHECK((4U == slice.length())); + CHECK((7U == slice.length())); CHECK(true == slice.hasKey("collections")); CHECK(true == slice.hasKey("cleanupIntervalStep")); CHECK(true == slice.hasKey("consolidationIntervalMsec")); CHECK(true == slice.hasKey("consolidationPolicy")); CHECK((false == slice.hasKey("locale"))); + CHECK((true == slice.hasKey("segmentCountMax"))); + CHECK((true == slice.hasKey("segmentDocsMax"))); + CHECK((true == slice.hasKey("segmentMemoryMax"))); } SECTION("test_writeMaskNone") {