From 268d9d465894240791b569dbc757ad69e4902e1b Mon Sep 17 00:00:00 2001 From: Christian Dietrich Date: Mon, 25 Aug 2014 12:34:29 +0200 Subject: [PATCH] db-campaign: Do only load completed pilots from variant Since we know for which variant we want to have the completed pilots, we do not have to catch all pilot_ids but only those who of pilots that are finished and have the correct variant_id. This speeds the startup of the campaign server enormously when having many completed campaigns in the database. Change-Id: I8be584a2dd6d8d7315f30dcb5bff89647353001e --- src/core/cpn/DatabaseCampaign.cc | 14 ++++++++++---- src/core/cpn/DatabaseCampaign.hpp | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/core/cpn/DatabaseCampaign.cc b/src/core/cpn/DatabaseCampaign.cc index 274fd0a9..07f3f598 100644 --- a/src/core/cpn/DatabaseCampaign.cc +++ b/src/core/cpn/DatabaseCampaign.cc @@ -79,11 +79,14 @@ bool DatabaseCampaign::run() { boost::thread collect_thread(&DatabaseCampaign::collect_result_thread, this); #endif - load_completed_pilots(); std::vector variants = db->get_variants(variant, benchmark); for (std::vector::const_iterator it = variants.begin(); it != variants.end(); ++it) { + // Which Pilots were already processed? + load_completed_pilots(*it); + + // Push all other variants to the queue if (!run_variant(*it)) { log_send << "run_variant failed for " << it->variant << "/" << it->benchmark <query_stream(sql.str().c_str()); - log_send << "loading completed pilot IDs ..." << std::endl; MYSQL_ROW row; unsigned rowcount = 0; while ((row = mysql_fetch_row(ids)) != 0) { diff --git a/src/core/cpn/DatabaseCampaign.hpp b/src/core/cpn/DatabaseCampaign.hpp index 11f4a8f7..cc8c593c 100644 --- a/src/core/cpn/DatabaseCampaign.hpp +++ b/src/core/cpn/DatabaseCampaign.hpp @@ -29,7 +29,7 @@ class DatabaseCampaign : public Campaign { int fspmethod_id; // !< Which fspmethod should be put out to the clients void collect_result_thread(); - void load_completed_pilots(); + void load_completed_pilots(fail::Database::Variant); unsigned existing_results_for_pilot(unsigned pilot_id); #ifndef __puma