diff --git a/checkin_notes b/checkin_notes
index bf39124790..06ff452eaa 100644
--- a/checkin_notes
+++ b/checkin_notes
@@ -2226,3 +2226,16 @@ Bernd 27 feb 2012
sched/
validator.cpp
+
+Bernd 27 feb 2012
+ - scheduler: allow to configure userids for which the scheduler should
+ not scan the host table. This was previously hardcoded for
+ Einstein@home to prevent some users with many (identical) hosts
+ from flooding the DB with slow queries. Now add
+ userid
+ to the project config (in config.xml) for each such userid.
+
+ sched/
+ sched_config.h
+ sched_config.cpp
+ handle_request.cpp
diff --git a/sched/handle_request.cpp b/sched/handle_request.cpp
index 972d1ba420..8dc60b9345 100644
--- a/sched/handle_request.cpp
+++ b/sched/handle_request.cpp
@@ -68,11 +68,11 @@ static bool find_host_by_other(DB_USER& user, HOST req_host, DB_HOST& host) {
char buf[2048];
char dn[512], ip[512], os[512], pm[512];
-#ifdef EINSTEIN_AT_HOME
- // This is to prevent GRID hosts that manipulate their hostids from flooding E@H's DB with slow queries
- if ((user.id == 282952) || (user.id == 243543))
- return false;
-#endif
+ // don't dig through hosts of these users
+ // prevents flooding the DB with slow queries from users with many hosts
+ for(unsigned int i=0; i < config.dont_search_host_for_userid.size(); i++)
+ if (user.id == config.dont_search_host_for_userid[i])
+ return false;
// Only check if the fields are populated
if (strlen(req_host.domain_name) && strlen(req_host.last_ip_addr) && strlen(req_host.os_name) && strlen(req_host.p_model)) {
diff --git a/sched/sched_config.cpp b/sched/sched_config.cpp
index 486ae5f203..e72ffb96fd 100644
--- a/sched/sched_config.cpp
+++ b/sched/sched_config.cpp
@@ -199,6 +199,10 @@ int SCHED_CONFIG::parse(FILE* f) {
}
continue;
}
+ if (xp.parse_int(tag, "dont_search_host_for_user", retval)) {
+ dont_search_host_for_userid.push_back(retval);
+ continue;
+ }
if (xp.parse_int("daily_result_quota", daily_result_quota)) continue;
if (xp.parse_double("default_disk_max_used_gb", default_disk_max_used_gb)) continue;
if (xp.parse_double("default_disk_max_used_pct", default_disk_max_used_pct)) continue;
diff --git a/sched/sched_config.h b/sched/sched_config.h
index dcc8bd53b9..378b5fd41f 100644
--- a/sched/sched_config.h
+++ b/sched/sched_config.h
@@ -104,6 +104,7 @@ struct SCHED_CONFIG {
vector *ban_cpu;
vector *ban_os;
+ vector dont_search_host_for_userid;
int daily_result_quota; // max results per day is this * mult
double default_disk_max_used_gb;
double default_disk_max_used_pct;