From 53b3429c74fb15880bf831f50c743e716e3d008f Mon Sep 17 00:00:00 2001 From: emeric Date: Sun, 16 Feb 2020 16:33:38 +0100 Subject: [PATCH] Atomatically reload recommendation engines --- src/libs/recommendation/impl/Engine.cpp | 19 ++++++++++--------- src/libs/recommendation/impl/Engine.hpp | 4 +++- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/libs/recommendation/impl/Engine.cpp b/src/libs/recommendation/impl/Engine.cpp index 5b3d818f..2a4aa772 100644 --- a/src/libs/recommendation/impl/Engine.cpp +++ b/src/libs/recommendation/impl/Engine.cpp @@ -148,7 +148,7 @@ Engine::reload() { using namespace Database; - LMS_LOG(RECOMMENDATION, DEBUG) << "Reloading recommendation engines..."; + LMS_LOG(RECOMMENDATION, INFO) << "Reloading recommendation engines..."; const ScanSettings::RecommendationEngineType engineType {[&]() { @@ -157,21 +157,25 @@ Engine::reload() return ScanSettings::get(_dbSession)->getRecommendationEngineType(); }()}; - // TODO: just replace the classifier once it is ready - clearClassifiers(); + std::map> newClassifiers; switch (engineType) { case ScanSettings::RecommendationEngineType::Features: -// addClassifier(createFeaturesClassifier(), 0); // higher priority +// newClassifiers.emplace_back(0, createFeaturesClassifier()); // higher priority // [[fallthrough]]; case ScanSettings::RecommendationEngineType::Clusters: - addClassifier(createClustersClassifier(_dbSession), 1); // lower priority + newClassifiers.emplace(1, createClustersClassifier(_dbSession)); // lower priority break; } - LMS_LOG(RECOMMENDATION, DEBUG) << "Recommendation engines reloaded!"; + { + std::unique_lock lock {_classifiersMutex}; + _classifiers.swap(newClassifiers); + } + + LMS_LOG(RECOMMENDATION, INFO) << "Recommendation engines reloaded!"; _sigReloaded.emit(); } @@ -180,9 +184,6 @@ Engine::reload() void Engine::clearClassifiers() { - std::unique_lock lock {_classifiersMutex}; - - _classifiers.clear(); } void diff --git a/src/libs/recommendation/impl/Engine.hpp b/src/libs/recommendation/impl/Engine.hpp index bc6eea96..9fde430e 100644 --- a/src/libs/recommendation/impl/Engine.hpp +++ b/src/libs/recommendation/impl/Engine.hpp @@ -37,6 +37,8 @@ namespace Recommendation private: + using ClassifierPriority = unsigned; + void start() override; void stop() override; @@ -59,7 +61,7 @@ namespace Recommendation Wt::Signal<> _sigReloaded; std::shared_mutex _classifiersMutex; - std::map> _classifiers; + std::map> _classifiers; }; } // ns Recommendation