Atomatically reload recommendation engines

This commit is contained in:
emeric
2020-02-16 16:33:38 +01:00
parent a414a80bbb
commit 53b3429c74
2 changed files with 13 additions and 10 deletions
+10 -9
View File
@@ -148,7 +148,7 @@ Engine::reload()
{ {
using namespace Database; using namespace Database;
LMS_LOG(RECOMMENDATION, DEBUG) << "Reloading recommendation engines..."; LMS_LOG(RECOMMENDATION, INFO) << "Reloading recommendation engines...";
const ScanSettings::RecommendationEngineType engineType {[&]() const ScanSettings::RecommendationEngineType engineType {[&]()
{ {
@@ -157,21 +157,25 @@ Engine::reload()
return ScanSettings::get(_dbSession)->getRecommendationEngineType(); return ScanSettings::get(_dbSession)->getRecommendationEngineType();
}()}; }()};
// TODO: just replace the classifier once it is ready std::map<ClassifierPriority, std::unique_ptr<IClassifier>> newClassifiers;
clearClassifiers();
switch (engineType) switch (engineType)
{ {
case ScanSettings::RecommendationEngineType::Features: case ScanSettings::RecommendationEngineType::Features:
// addClassifier(createFeaturesClassifier(), 0); // higher priority // newClassifiers.emplace_back(0, createFeaturesClassifier()); // higher priority
// [[fallthrough]]; // [[fallthrough]];
case ScanSettings::RecommendationEngineType::Clusters: case ScanSettings::RecommendationEngineType::Clusters:
addClassifier(createClustersClassifier(_dbSession), 1); // lower priority newClassifiers.emplace(1, createClustersClassifier(_dbSession)); // lower priority
break; 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(); _sigReloaded.emit();
} }
@@ -180,9 +184,6 @@ Engine::reload()
void void
Engine::clearClassifiers() Engine::clearClassifiers()
{ {
std::unique_lock lock {_classifiersMutex};
_classifiers.clear();
} }
void void
+3 -1
View File
@@ -37,6 +37,8 @@ namespace Recommendation
private: private:
using ClassifierPriority = unsigned;
void start() override; void start() override;
void stop() override; void stop() override;
@@ -59,7 +61,7 @@ namespace Recommendation
Wt::Signal<> _sigReloaded; Wt::Signal<> _sigReloaded;
std::shared_mutex _classifiersMutex; std::shared_mutex _classifiersMutex;
std::map<unsigned, std::unique_ptr<IClassifier>> _classifiers; std::map<ClassifierPriority, std::unique_ptr<IClassifier>> _classifiers;
}; };
} // ns Recommendation } // ns Recommendation