diff --git a/checkin_notes b/checkin_notes
index 79c7266a52..bad6ddb170 100755
--- a/checkin_notes
+++ b/checkin_notes
@@ -7082,3 +7082,12 @@ David 25 May 2005
app_control.C
cs_apps.C
cs_benchmark.C
+
+David 26 May 2005
+ - feeder: added a "-mod n i" option.
+ This lets you run schedulers on more than one host.
+
+ db/
+ boinc_db.C,h
+ sched/
+ feeder.C
diff --git a/db/boinc_db.C b/db/boinc_db.C
index 10c5f9e4d2..33caa375cc 100644
--- a/db/boinc_db.C
+++ b/db/boinc_db.C
@@ -1211,7 +1211,9 @@ void WORK_ITEM::parse(MYSQL_ROW& r) {
strcpy2(wu.result_template_file, r[i++]);
}
-int DB_WORK_ITEM::enumerate(int limit, const char* order_clause) {
+int DB_WORK_ITEM::enumerate(
+ int limit, const char* select_clause, const char* order_clause
+) {
char query[MAX_QUERY_LEN];
int retval;
MYSQL_ROW row;
@@ -1221,9 +1223,11 @@ int DB_WORK_ITEM::enumerate(int limit, const char* order_clause) {
"select high_priority result.id, workunit.* from result left join workunit "
"on workunit.id = result.workunitid "
"where result.server_state=%d "
- "%s"
+ " %s "
+ " %s "
"limit %d",
RESULT_SERVER_STATE_UNSENT,
+ select_clause,
order_clause,
limit
);
diff --git a/db/boinc_db.h b/db/boinc_db.h
index cf94cbc738..c6b5afa1ae 100755
--- a/db/boinc_db.h
+++ b/db/boinc_db.h
@@ -618,7 +618,7 @@ class DB_WORK_ITEM : public WORK_ITEM, public DB_BASE_SPECIAL {
public:
DB_WORK_ITEM(DB_CONN* p=0);
// CURSOR cursor;
- int enumerate(int limit, const char* order_clause);
+ int enumerate(int limit, const char* select_clause, const char* order_clause);
// used by feeder
int read_result();
// used by scheduler to read result server state
diff --git a/doc/backend_programs.php b/doc/backend_programs.php
index 6898b51c18..10ef350b2a 100644
--- a/doc/backend_programs.php
+++ b/doc/backend_programs.php
@@ -31,6 +31,19 @@ then use the daemon program
make_work
to copy this workunit as needed to maintain a given supply of work.
+
Feeder
+
+This program is supplied by BOINC and is application independent.
+It creates a shared-memory segment used to pass database records
+to CGI scheduler processes.
+It has the command-line option:
+
+-mod n i
+
+If present, this instance of the feeder will handle
+only workunits for which mod(id, n) = i.
+This lets you run schedulers on arbitrarily many machines.
+
Transitioner
This program is supplied by BOINC and is application independent.
diff --git a/doc/contact.php b/doc/contact.php
index 48fbeb7398..7b75c4c520 100644
--- a/doc/contact.php
+++ b/doc/contact.php
@@ -81,6 +81,7 @@ show_name("Jakob Pedersen");
show_name("Stephen Pellicer");
show_name("Reinhard Prix");
show_name("Andy Read");
+show_name("Kevin Reed");
show_name("Thomas Richard");
show_name("Nikolay Saharov");
show_name("Jens Seidler");
diff --git a/doc/index.php b/doc/index.php
index 104dcbe9c7..fbb6cfc638 100644
--- a/doc/index.php
+++ b/doc/index.php
@@ -49,6 +49,8 @@ computer resources
investigate protein-related diseases
SETI@home:
Look for radio evidence of extraterrestrial life
+ Cell Computing
+ (Japanese; requires nonstandard client software)
To participate in a project:
diff --git a/doc/versions.inc b/doc/versions.inc
index 1d56986839..9199b977b8 100644
--- a/doc/versions.inc
+++ b/doc/versions.inc
@@ -61,11 +61,11 @@ $w419 = array(
"date"=>"25 Jan 2005",
"type"=>win_old(),
null,
- "
+ "bugs"=>"
- Doesn't work with some HTTP proxies (fixed in later versions).
-
- If BOINC runs at the same time as Windows XP 3D screensavers,
- the system becomes sluggish and unresponsive.
+ If BOINC runs at the same time as Windows XP 3-D screensavers,
+ the system becomes sluggish.
"
);
@@ -78,8 +78,9 @@ $w443= array(
"type"=>win_new(),
"features"=>"
-
- Scheduling within the client software package has been improved to support
- a larger group of projects.
+ When a slow computer is attached to a large number of projects,
+ BOINC does work only for a few of them at a time,
+ to avoid missed deadlines.
-
Fixes a bug in which Intellisense/Intellipoint
closes applications while in screensaver mode.
@@ -88,8 +89,8 @@ $w443= array(
-
A new 'Select Computer' dialog remembers which computers you have connected to.
-
- A new statistics tab has been added to the BOINC manager (thanks to
- Jens Breitbart for the great feature).
+ A new statistics tab has been added to the BOINC manager
+ (thanks to Jens Breitbart for the great feature).
-
Support for UMTS networks.
-
@@ -97,8 +98,7 @@ $w443= array(
-
Password protection for GUI access.
-
- BOINC Manager now sports a new button based interface which replaces the
- html based interface in previous versions.
+ BOINC Manager now uses buttons instead of web-type links.
",
"bugs"=>"
@@ -108,20 +108,17 @@ $w443= array(
or the Single-user install type with the password protect screensaver
option on NT based machines.
-
- If BOINC runs at the same time as Windows XP 3D screensavers,
+ If BOINC runs at the same time as Windows XP 3-D screensavers,
the system becomes sluggish and unresponsive.
-
Dial-up users should choose the single-user installation.
-
Graphics sometimes do not work with ATI Graphics card.
- If you have this problem,
- please visit
+ If you have this problem, please visit
the SETI@home Q&A area,
fill in the requested information, and click on the
\"I also have this question\" button.
- If you experience any of these problems,
- we recommend using BOINC version 4.19.
"
);
@@ -133,10 +130,8 @@ $m443 = array(
"type"=>mac_advanced(),
"bugs"=>"
-
- We have dropped the requirement of our distribution running on 10.2 since 10.4 has been released. You should still be able to build the client yourself and have it run on a 10.2 machine.
+ BOINC no longer works on Mac OS 10.2.
- If you experience any of these problems,
- we recommend using BOINC version 4.19.
"
);
@@ -147,8 +142,6 @@ $m443c = array(
"date"=>"21 May 2005",
"type"=>bare_core(),
"bugs"=>"
- If you experience any of these problems,
- we recommend using BOINC version 4.19.
"
);
@@ -166,7 +159,7 @@ $m437s = array(
"file"=>"boinc_menubar_v4.43_(4)_mac.zip",
"date"=>"23 May 2005",
"type"=>mac_simple(),
- "bugs"=>"- Includes improved BOINC client
+ "features"=>"- Includes improved BOINC client
"
);
diff --git a/sched/feeder.C b/sched/feeder.C
index dce1d26c1a..935a099565 100644
--- a/sched/feeder.C
+++ b/sched/feeder.C
@@ -19,8 +19,12 @@
// -------------------------------
//
-// feeder [-asynch] [-d debug_level] [-random_order | -priority_order]
-// -asynch fork and run in a separate process
+// feeder
+// [ -asynch ] fork and run in a separate process
+// [ -d x ] debug level x
+// [ -random_order ] order by "random" field of result
+// [ -priority_order ] order by "priority" field of result
+// [ -mod n i ] handle only results with (id mod n) == i
//
// Creates a shared memory segment containing DB info,
// including the work array (results/workunits to send).
@@ -125,6 +129,7 @@ SCHED_CONFIG config;
SCHED_SHMEM* ssp;
key_t sema_key;
const char* order_clause="";
+char select_clause[256];
void cleanup_shmem() {
detach_shmem((void*)ssp);
@@ -216,7 +221,7 @@ static void scan_work_array(
break;
#endif
case WR_STATE_EMPTY:
- retval = wi.enumerate(ENUM_LIMIT, order_clause);
+ retval = wi.enumerate(ENUM_LIMIT, select_clause, order_clause);
if (retval) {
// if we already restarted the enum on this array scan,
@@ -232,7 +237,7 @@ static void scan_work_array(
// restart the enumeration
//
restarted_enum = true;
- retval = wi.enumerate(ENUM_LIMIT, order_clause);
+ retval = wi.enumerate(ENUM_LIMIT, select_clause, order_clause);
log_messages.printf(SCHED_MSG_LOG::DEBUG,
"restarting enumeration\n"
);
@@ -384,6 +389,15 @@ int main(int argc, char** argv) {
order_clause = "order by random ";
} else if (!strcmp(argv[i], "-priority_order")) {
order_clause = "order by priority desc ";
+ } else if (!strcmp(argv[i], "-mod")) {
+ int n = atoi(argv[++i]);
+ int j = atoi(argv[++i]);
+ sprintf(select_clause, "and result.id %% d = %d ", n, j);
+ } else {
+ log_messages.printf(SCHED_MSG_LOG::CRITICAL,
+ "bad cmdline arg: %s\n", argv[i]
+ );
+ exit(1);
}
}