diff --git a/arangod/VocBase/LogicalCollection.cpp b/arangod/VocBase/LogicalCollection.cpp index 94b021d3d6..b0e7d2f2d6 100644 --- a/arangod/VocBase/LogicalCollection.cpp +++ b/arangod/VocBase/LogicalCollection.cpp @@ -1078,7 +1078,11 @@ arangodb::Result LogicalCollection::updateProperties(VPackSlice const& slice, StorageEngine* engine = EngineSelectorFeature::ENGINE; engine->changeCollection(vocbase(), id(), this, doSync); - DatabaseFeature::DATABASE->versionTracker()->track("change collection"); + + if (DatabaseFeature::DATABASE != nullptr && + DatabaseFeature::DATABASE->versionTracker() != nullptr) { + DatabaseFeature::DATABASE->versionTracker()->track("change collection"); + } return {}; } @@ -1126,7 +1130,10 @@ std::shared_ptr LogicalCollection::createIndex(transaction::Methods* trx, bool& created) { auto idx = _physical->createIndex(trx, info, created); if (idx) { - DatabaseFeature::DATABASE->versionTracker()->track("create index"); + if (DatabaseFeature::DATABASE != nullptr && + DatabaseFeature::DATABASE->versionTracker() != nullptr) { + DatabaseFeature::DATABASE->versionTracker()->track("create index"); + } } return idx; } @@ -1140,7 +1147,10 @@ bool LogicalCollection::dropIndex(TRI_idx_iid_t iid) { arangodb::aql::QueryCache::instance()->invalidate(vocbase(), name()); bool result = _physical->dropIndex(iid); if (result) { - DatabaseFeature::DATABASE->versionTracker()->track("drop index"); + if (DatabaseFeature::DATABASE != nullptr && + DatabaseFeature::DATABASE->versionTracker() != nullptr) { + DatabaseFeature::DATABASE->versionTracker()->track("drop index"); + } } return result; } @@ -1440,4 +1450,4 @@ std::string LogicalCollection::generateGloballyUniqueId() const { // ----------------------------------------------------------------------------- // --SECTION-- END-OF-FILE -// ----------------------------------------------------------------------------- \ No newline at end of file +// ----------------------------------------------------------------------------- diff --git a/arangod/VocBase/vocbase.cpp b/arangod/VocBase/vocbase.cpp index 0bfe9007c8..c762c82e6e 100644 --- a/arangod/VocBase/vocbase.cpp +++ b/arangod/VocBase/vocbase.cpp @@ -1148,7 +1148,10 @@ arangodb::LogicalCollection* TRI_vocbase_t::createCollection( // API compatibility, we always return the collection, even if creation // failed. - DatabaseFeature::DATABASE->versionTracker()->track("create collection"); + if (DatabaseFeature::DATABASE != nullptr && + DatabaseFeature::DATABASE->versionTracker() != nullptr) { + DatabaseFeature::DATABASE->versionTracker()->track("create collection"); + } return collection; } @@ -1249,7 +1252,10 @@ int TRI_vocbase_t::dropCollection(arangodb::LogicalCollection* collection, engine->signalCleanup(collection->vocbase()); } - DatabaseFeature::DATABASE->versionTracker()->track("drop collection"); + if (DatabaseFeature::DATABASE != nullptr && + DatabaseFeature::DATABASE->versionTracker() != nullptr) { + DatabaseFeature::DATABASE->versionTracker()->track("drop collection"); + } } if (state == DROP_PERFORM || state == DROP_EXIT) { @@ -1418,7 +1424,10 @@ int TRI_vocbase_t::renameCollection(arangodb::LogicalCollection* collection, locker.unlock(); writeLocker.unlock(); - DatabaseFeature::DATABASE->versionTracker()->track("rename collection"); + if (DatabaseFeature::DATABASE != nullptr && + DatabaseFeature::DATABASE->versionTracker() != nullptr) { + DatabaseFeature::DATABASE->versionTracker()->track("rename collection"); + } // invalidate all entries for the two collections arangodb::aql::PlanCache::instance()->invalidate(this); @@ -1602,7 +1611,10 @@ std::shared_ptr TRI_vocbase_t::createView( // API compatibility, we always return the view, even if creation failed. if (view) { - DatabaseFeature::DATABASE->versionTracker()->track("create view"); + if (DatabaseFeature::DATABASE != nullptr && + DatabaseFeature::DATABASE->versionTracker() != nullptr) { + DatabaseFeature::DATABASE->versionTracker()->track("create view"); + } } return view; @@ -1672,7 +1684,10 @@ int TRI_vocbase_t::dropView(std::shared_ptr view) { writeLocker.unlock(); events::DropView(view->name(), TRI_ERROR_NO_ERROR); - DatabaseFeature::DATABASE->versionTracker()->track("drop view"); + if (DatabaseFeature::DATABASE != nullptr && + DatabaseFeature::DATABASE->versionTracker() != nullptr) { + DatabaseFeature::DATABASE->versionTracker()->track("drop view"); + } return TRI_ERROR_NO_ERROR; } @@ -2006,4 +2021,4 @@ TRI_voc_rid_t TRI_StringToRid(char const* p, size_t len, bool& isOld, // ----------------------------------------------------------------------------- // --SECTION-- END-OF-FILE -// ----------------------------------------------------------------------------- \ No newline at end of file +// ----------------------------------------------------------------------------- diff --git a/tests/IResearch/ExecutionBlockMock.cpp b/tests/IResearch/ExecutionBlockMock.cpp index d7e4832d1f..efdfba6522 100644 --- a/tests/IResearch/ExecutionBlockMock.cpp +++ b/tests/IResearch/ExecutionBlockMock.cpp @@ -39,6 +39,15 @@ ExecutionNodeMock::ExecutionNodeMock(size_t id /*= 0*/) arangodb::aql::ExecutionNode::NodeType ExecutionNodeMock::getType() const { return arangodb::aql::ExecutionNode::NodeType::SINGLETON; } + +std::unique_ptr ExecutionNodeMock::createBlock( + arangodb::aql::ExecutionEngine& engine, + std::unordered_map const& cache, + std::unordered_set const& includedShards + ) const { + TRI_ASSERT(false); + THROW_ARANGO_EXCEPTION_MESSAGE(TRI_ERROR_INTERNAL, "cannot create a block of ExecutionNodeMock"); +} arangodb::aql::ExecutionNode* ExecutionNodeMock::clone( arangodb::aql::ExecutionPlan* plan, diff --git a/tests/IResearch/ExecutionBlockMock.h b/tests/IResearch/ExecutionBlockMock.h index da6e986fdd..c9dd64914f 100644 --- a/tests/IResearch/ExecutionBlockMock.h +++ b/tests/IResearch/ExecutionBlockMock.h @@ -52,6 +52,12 @@ class ExecutionNodeMock final : public arangodb::aql::ExecutionNode { /// @brief return the type of the node virtual NodeType getType() const override; + + virtual std::unique_ptr createBlock( + arangodb::aql::ExecutionEngine& engine, + std::unordered_map const& cache, + std::unordered_set const& includedShards + ) const; /// @brief clone execution Node recursively, this makes the class abstract virtual ExecutionNode* clone(