From 5f067cb1fbfdad6191a12b313d014a52deedf7f3 Mon Sep 17 00:00:00 2001 From: Michael Hackstein Date: Tue, 30 Aug 2016 11:11:25 +0200 Subject: [PATCH 1/2] Fixed creation of volatile collections. They can now again not waitForSync at the same time. --- arangod/VocBase/LogicalCollection.cpp | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/arangod/VocBase/LogicalCollection.cpp b/arangod/VocBase/LogicalCollection.cpp index 1fc6ea504b..c81cdf7eb5 100644 --- a/arangod/VocBase/LogicalCollection.cpp +++ b/arangod/VocBase/LogicalCollection.cpp @@ -321,6 +321,12 @@ LogicalCollection::LogicalCollection(TRI_vocbase_t* vocbase, VPackSlice info) _numberDocuments(0), _collection(nullptr), _lock() { + if (_isVolatile && _waitForSync) { + // Illegal collection configuration + THROW_ARANGO_EXCEPTION_MESSAGE( + TRI_ERROR_BAD_PARAMETER, + "A collection cannot be volatile and waitForSync at the same time."); + } if (info.isObject()) { // Otherwise the cluster communication is broken. // We cannot store anything further. @@ -372,20 +378,6 @@ LogicalCollection::LogicalCollection(TRI_vocbase_t* vocbase, VPackSlice info) createPhysical(); - VPackSlice slice; - if (_keyOptions != nullptr) { - slice = VPackSlice(_keyOptions->data()); - } - - std::unique_ptr keyGenerator(KeyGenerator::factory(slice)); - - if (keyGenerator == nullptr) { - THROW_ARANGO_EXCEPTION(TRI_ERROR_ARANGO_INVALID_KEY_GENERATOR); - } - - _keyGenerator.reset(keyGenerator.release()); - - // TODO Only DBServer? Is this correct? if (ServerState::instance()->isDBServer()) { _followers.reset(new FollowerInfo(this)); From 9c0382ed192dca869ad4a4f9121f26efec7d8ef1 Mon Sep 17 00:00:00 2001 From: Michael Hackstein Date: Tue, 30 Aug 2016 11:18:36 +0200 Subject: [PATCH 2/2] Now also the journalSize is checked if it is too small. Also reverted report message for isVolatile to be equal to the pre 3.1 message. --- arangod/VocBase/LogicalCollection.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/arangod/VocBase/LogicalCollection.cpp b/arangod/VocBase/LogicalCollection.cpp index c81cdf7eb5..1461f2b782 100644 --- a/arangod/VocBase/LogicalCollection.cpp +++ b/arangod/VocBase/LogicalCollection.cpp @@ -194,7 +194,7 @@ LogicalCollection::LogicalCollection(TRI_vocbase_t* vocbase, _isLocal(isLocal), // THESE VALUES HAVE ARBITRARY VALUES. FIX THEM. _isDeleted(false), - _doCompact(false), + _doCompact(true), _isSystem(LogicalCollection::IsSystemName(name)), _isVolatile(isVolatile), _waitForSync(false), @@ -299,7 +299,7 @@ LogicalCollection::LogicalCollection(TRI_vocbase_t* vocbase, VPackSlice info) info, "status", TRI_VOC_COL_STATUS_CORRUPTED)), _isLocal(!ServerState::instance()->isCoordinator()), _isDeleted(ReadBooleanValue(info, "deleted", false)), - _doCompact(ReadBooleanValue(info, "doCompact", false)), + _doCompact(ReadBooleanValue(info, "doCompact", true)), _isSystem(ReadBooleanValue(info, "isSystem", false)), _isVolatile(ReadBooleanValue(info, "isVolatile", false)), _waitForSync(ReadBooleanValue(info, "waitForSync", false)), @@ -325,7 +325,11 @@ LogicalCollection::LogicalCollection(TRI_vocbase_t* vocbase, VPackSlice info) // Illegal collection configuration THROW_ARANGO_EXCEPTION_MESSAGE( TRI_ERROR_BAD_PARAMETER, - "A collection cannot be volatile and waitForSync at the same time."); + "volatile collections do not support the waitForSync option"); + } + if (_journalSize < TRI_JOURNAL_MINIMAL_SIZE) { + THROW_ARANGO_EXCEPTION_MESSAGE(TRI_ERROR_BAD_PARAMETER, + ".journalSize too small"); } if (info.isObject()) { // Otherwise the cluster communication is broken.