1
0
Fork 0

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
This commit is contained in:
Vasiliy 2018-10-30 23:41:30 +03:00 committed by Andrey Abramov
parent a054e31f73
commit 21a89c9270
9 changed files with 267 additions and 156 deletions

View File

@ -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<AsyncMeta>(); // create an instance not shared with cluster-view
@ -2176,4 +2177,4 @@ void IResearchView::verifyKnownCollections() {
// -----------------------------------------------------------------------------
// --SECTION-- END-OF-FILE
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------

View File

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

View File

@ -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 <interval> 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 !!!

View File

@ -79,6 +79,9 @@ void MMFilesWalRecoveryFeature::start() {
// notify everyone that recovery is now done
auto databaseFeature = ApplicationServer::getFeature<DatabaseFeature>("Database");
databaseFeature->recoveryDone();
LOG_TOPIC(INFO, arangodb::Logger::ENGINES)
<< "DB recovery finished successfully";
}
} // arangodb

View File

@ -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<bool>("force", false);
bool overwrite = _request->parsedValue<bool>("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;

View File

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

View File

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

View File

@ -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<size_t>() && 24 == slice.get("cleanupIntervalStep").getNumber<size_t>()));
CHECK((slice.hasKey("consolidationIntervalMsec") && slice.get("consolidationIntervalMsec").isNumber<size_t>() && 42 == slice.get("consolidationIntervalMsec").getNumber<size_t>()));
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<size_t>() && 24 == slice.get("cleanupIntervalStep").getNumber<size_t>()));
CHECK((slice.hasKey("consolidationIntervalMsec") && slice.get("consolidationIntervalMsec").isNumber<size_t>() && 52 == slice.get("consolidationIntervalMsec").getNumber<size_t>()));
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<size_t>() && 24 == slice.get("cleanupIntervalStep").getNumber<size_t>()));
CHECK((slice.hasKey("consolidationIntervalMsec") && slice.get("consolidationIntervalMsec").isNumber<size_t>() && 52 == slice.get("consolidationIntervalMsec").getNumber<size_t>()));
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<size_t>() && 24 == slice.get("cleanupIntervalStep").getNumber<size_t>()));
CHECK((slice.hasKey("consolidationIntervalMsec") && slice.get("consolidationIntervalMsec").isNumber<size_t>() && 52 == slice.get("consolidationIntervalMsec").getNumber<size_t>()));
@ -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<size_t>() && 24 == slice.get("cleanupIntervalStep").getNumber<size_t>()));
CHECK((slice.hasKey("consolidationIntervalMsec") && slice.get("consolidationIntervalMsec").isNumber<size_t>() && 42 == slice.get("consolidationIntervalMsec").getNumber<size_t>()));
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<size_t>() && 10 == slice.get("cleanupIntervalStep").getNumber<size_t>()));
CHECK((slice.hasKey("consolidationIntervalMsec") && slice.get("consolidationIntervalMsec").isNumber<size_t>() && 52 == slice.get("consolidationIntervalMsec").getNumber<size_t>()));
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<size_t>() && 10 == slice.get("cleanupIntervalStep").getNumber<size_t>()));
CHECK((slice.hasKey("consolidationIntervalMsec") && slice.get("consolidationIntervalMsec").isNumber<size_t>() && 52 == slice.get("consolidationIntervalMsec").getNumber<size_t>()));
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<size_t>() && 10 == slice.get("cleanupIntervalStep").getNumber<size_t>()));
CHECK((slice.hasKey("consolidationIntervalMsec") && slice.get("consolidationIntervalMsec").isNumber<size_t>() && 52 == slice.get("consolidationIntervalMsec").getNumber<size_t>()));
@ -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<size_t>() && 24 == slice.get("cleanupIntervalStep").getNumber<size_t>()));
CHECK((slice.hasKey("consolidationIntervalMsec") && slice.get("consolidationIntervalMsec").isNumber<size_t>() && 42 == slice.get("consolidationIntervalMsec").getNumber<size_t>()));
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<size_t>() && 24 == slice.get("cleanupIntervalStep").getNumber<size_t>()));
CHECK((slice.hasKey("consolidationIntervalMsec") && slice.get("consolidationIntervalMsec").isNumber<size_t>() && 52 == slice.get("consolidationIntervalMsec").getNumber<size_t>()));
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<size_t>() && 24 == slice.get("cleanupIntervalStep").getNumber<size_t>()));
CHECK((slice.hasKey("consolidationIntervalMsec") && slice.get("consolidationIntervalMsec").isNumber<size_t>() && 52 == slice.get("consolidationIntervalMsec").getNumber<size_t>()));
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<size_t>() && 24 == slice.get("cleanupIntervalStep").getNumber<size_t>()));
CHECK((slice.hasKey("consolidationIntervalMsec") && slice.get("consolidationIntervalMsec").isNumber<size_t>() && 52 == slice.get("consolidationIntervalMsec").getNumber<size_t>()));
@ -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<size_t>() && 24 == slice.get("cleanupIntervalStep").getNumber<size_t>()));
CHECK((slice.hasKey("consolidationIntervalMsec") && slice.get("consolidationIntervalMsec").isNumber<size_t>() && 42 == slice.get("consolidationIntervalMsec").getNumber<size_t>()));
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<size_t>() && 10 == slice.get("cleanupIntervalStep").getNumber<size_t>()));
CHECK((slice.hasKey("consolidationIntervalMsec") && slice.get("consolidationIntervalMsec").isNumber<size_t>() && 52 == slice.get("consolidationIntervalMsec").getNumber<size_t>()));
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<size_t>() && 10 == slice.get("cleanupIntervalStep").getNumber<size_t>()));
CHECK((slice.hasKey("consolidationIntervalMsec") && slice.get("consolidationIntervalMsec").isNumber<size_t>() && 52 == slice.get("consolidationIntervalMsec").getNumber<size_t>()));
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<size_t>() && 10 == slice.get("cleanupIntervalStep").getNumber<size_t>()));
CHECK((slice.hasKey("consolidationIntervalMsec") && slice.get("consolidationIntervalMsec").isNumber<size_t>() && 52 == slice.get("consolidationIntervalMsec").getNumber<size_t>()));

View File

@ -74,6 +74,9 @@ SECTION("test_defaults") {
CHECK((false == !meta._consolidationPolicy.policy()));
CHECK((0.1f == meta._consolidationPolicy.properties().get("threshold").getNumber<float>()));
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<float>()));
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<float>()));
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<TRI_voc_cid_t> 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<float>()));
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<float>() && .1f == tmpSlice2.getNumber<float>()));
tmpSlice2 = tmpSlice.get("type");
CHECK((tmpSlice2.isString() && std::string("bytes_accum") == tmpSlice2.copyString()));
tmpSlice = slice.get("segmentCountMax");
CHECK((true == tmpSlice.isNumber<size_t>() && 0 == tmpSlice.getNumber<size_t>()));
tmpSlice = slice.get("segmentDocsMax");
CHECK((true == tmpSlice.isNumber<size_t>() && 0 == tmpSlice.getNumber<size_t>()));
tmpSlice = slice.get("segmentMemoryMax");
CHECK((true == tmpSlice.isNumber<size_t>() && 32*(size_t(1)<<20) == tmpSlice.getNumber<size_t>()));
}
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<TRI_voc_cid_t> 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<float>() && .11f == tmpSlice2.getNumber<float>()));
tmpSlice2 = tmpSlice.get("type");
CHECK((tmpSlice2.isString() && std::string("bytes") == tmpSlice2.copyString()));
tmpSlice = slice.get("segmentCountMax");
CHECK((true == tmpSlice.isNumber<size_t>() && 10 == tmpSlice.getNumber<size_t>()));
tmpSlice = slice.get("segmentDocsMax");
CHECK((true == tmpSlice.isNumber<size_t>() && 11 == tmpSlice.getNumber<size_t>()));
tmpSlice = slice.get("segmentMemoryMax");
CHECK((true == tmpSlice.isNumber<size_t>() && 12 == tmpSlice.getNumber<size_t>()));
}
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") {