From 8567738db71a8596252b0af969f6592cdbd35327 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Wed, 18 Dec 2002 01:34:51 +0000 Subject: [PATCH] file deleter fixes svn path=/trunk/boinc/; revision=756 --- checkin_notes | 28 +++++ db/db.h | 10 +- db/db_mysql.C | 4 +- doc/backend.fig | 164 +++++++++++++++++++++++++++ doc/backend.html | 54 ++++++--- doc/backend.png | Bin 0 -> 6058 bytes doc/create_project.html | 5 +- doc/index.html | 8 ++ doc/intro.html | 17 ++- doc/project.fig | 94 +++++++-------- doc/project.png | Bin 8021 -> 7407 bytes doc/work_states.html | 80 +++++++++++++ html/ops/db.inc | 99 ++++++++++------ html/user/user.inc | 17 +-- sched/assimilator.C | 21 +++- sched/file_deleter.C | 12 +- sched/handle_request.C | 3 - test/test.inc | 14 +++ test/test_uc.php | 5 + todo | 245 ++++++++++++++++++---------------------- 20 files changed, 604 insertions(+), 276 deletions(-) create mode 100644 doc/backend.fig create mode 100644 doc/backend.png create mode 100644 doc/work_states.html diff --git a/checkin_notes b/checkin_notes index 6fa5e1509f..c5dd0696b4 100755 --- a/checkin_notes +++ b/checkin_notes @@ -2660,3 +2660,31 @@ David Dec. 17 2002 test.inc tools/ backend_lib.C + +David Dec 17 2002 + - The assimilator takes a -app argument + - Added execution of file_delete and assimilator to test_uc.php + this should delete all input and output files + TODO: check that it actually does + - fixed bugs in file_deleter + + todo + db/ + db.h + db_mysql.C + doc/ + backend.gif (new) + backend.html + backend.png (new) + work_states.html + html_ops/ + db.inc + html_user/ + user.inc + sched/ + assimilator.C + file_deleter.C + handle_request.C + test/ + test.inc + test_uc.php diff --git a/db/db.h b/db/db.h index 85b397e8f5..34a7c3bc72 100644 --- a/db/db.h +++ b/db/db.h @@ -38,16 +38,12 @@ struct PROJECT { }; // A compilation target, i.e. a architecture/OS combination. -// Currently the core client will be given only applications -// that match its platform exactly. -// This could be generatlized to allow, say, an app compiled -// for AMD to be run on a "generic Intel x86" core client. -// In this case we'd need a 1 to N mapping from APP_VERSION to PLATFORM +// The core client will be given only applications with the same platform // struct PLATFORM { int id; unsigned int create_time; - char name[256]; // i.e. "sparc-sun-solaris2.7" + char name[256]; // i.e. "sparc-sun-solaris" }; // An application. @@ -341,7 +337,7 @@ extern int db_workunit_lookup_name(WORKUNIT&); extern int db_workunit_enum_app_need_validate(WORKUNIT&); extern int db_workunit_enum_retry_check_time(WORKUNIT&); extern int db_workunit_enum_file_delete_state(WORKUNIT&); -extern int db_workunit_enum_assimilate_state(WORKUNIT&); +extern int db_workunit_enum_app_assimilate_state(WORKUNIT&); extern int db_result_new(RESULT& p); extern int db_result(int id, RESULT&); diff --git a/db/db_mysql.C b/db/db_mysql.C index 6a8e9d2f52..3d49b7434e 100644 --- a/db/db_mysql.C +++ b/db/db_mysql.C @@ -620,12 +620,12 @@ int db_workunit_enum_file_delete_state(WORKUNIT& p) { return db_enum(e, &p, TYPE_WORKUNIT, buf); } -int db_workunit_enum_assimilate_state(WORKUNIT& p) { +int db_workunit_enum_app_assimilate_state(WORKUNIT& p) { static ENUM e; char buf[256]; if (!e.active) { - sprintf(buf, "where assimilate_state=%d", p.assimilate_state); + sprintf(buf, "where appid=%d and assimilate_state=%d", p.appid, p.assimilate_state); } return db_enum(e, &p, TYPE_WORKUNIT, buf); } diff --git a/doc/backend.fig b/doc/backend.fig new file mode 100644 index 0000000000..ff79299ed3 --- /dev/null +++ b/doc/backend.fig @@ -0,0 +1,164 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +0 32 #c7b696 +0 33 #effbff +0 34 #dfcba6 +0 35 #414141 +0 36 #868286 +0 37 #c7c3c7 +0 38 #e7e3e7 +0 39 #8e8e8e +0 40 #aeaaae +0 41 #515551 +0 42 #414141 +0 43 #868286 +0 44 #c7c3c7 +0 45 #868286 +0 46 #c7c3c7 +0 47 #e7e3e7 +0 48 #8e8e8e +0 49 #8e8e8e +0 50 #414141 +0 51 #868286 +0 52 #c7c3c7 +0 53 #e7e3e7 +0 54 #414141 +0 55 #868286 +0 56 #c7c3c7 +0 57 #e7e3e7 +0 58 #868286 +0 59 #c7c3c7 +0 60 #e7e3e7 +0 61 #c7b696 +0 62 #effbff +0 63 #dfcba6 +0 64 #c7b696 +0 65 #effbff +0 66 #dfcba6 +0 67 #aeaaae +0 68 #515551 +0 69 #8e8e8e +0 70 #414141 +0 71 #868286 +0 72 #c7c3c7 +0 73 #e7e3e7 +0 74 #414141 +0 75 #868286 +0 76 #c7c3c7 +0 77 #e7e3e7 +0 78 #868286 +0 79 #c7c3c7 +0 80 #e7e3e7 +0 81 #414141 +0 82 #868286 +0 83 #c7c3c7 +0 84 #414141 +0 85 #c7c3c7 +0 86 #e7e3e7 +0 87 #414141 +0 88 #868286 +0 89 #c7c3c7 +0 90 #8e8e8e +0 91 #414141 +0 92 #868286 +0 93 #c7c3c7 +0 94 #e7e3e7 +0 95 #414141 +0 96 #868286 +0 97 #c7c3c7 +0 98 #e7e3e7 +0 99 #bebebe +0 100 #515151 +0 101 #000049 +0 102 #797979 +0 103 #303430 +0 104 #414541 +0 105 #414141 +0 106 #868286 +0 107 #c7c3c7 +0 108 #e7e3e7 +6 300 525 2175 1425 +2 2 0 1 0 11 50 0 20 0.000 0 0 -1 0 0 5 + 300 975 2175 975 2175 1425 300 1425 300 975 +2 2 0 1 0 30 50 0 20 0.000 0 0 -1 0 0 5 + 300 525 2175 525 2175 975 300 975 300 525 +4 0 0 50 0 18 14 0.0000 4 210 1575 450 825 work generator\001 +-6 +6 2400 525 3900 1425 +2 2 0 1 0 11 50 0 20 0.000 0 0 -1 0 0 5 + 2400 525 3900 525 3900 1425 2400 1425 2400 525 +4 0 0 50 0 18 15 0.0000 4 210 1155 2625 1050 result retry\001 +-6 +6 4125 525 5625 1425 +2 2 0 1 0 11 50 0 20 0.000 0 0 -1 0 0 5 + 4125 975 5625 975 5625 1425 4125 1425 4125 975 +2 2 0 1 0 30 50 0 20 0.000 0 0 -1 0 0 5 + 4125 525 5625 525 5625 975 4125 975 4125 525 +4 0 0 50 0 18 14 0.0000 4 165 900 4350 825 validater\001 +-6 +6 5850 525 7350 1425 +2 2 0 1 0 11 50 0 20 0.000 0 0 -1 0 0 5 + 5850 525 7350 525 7350 1425 5850 1425 5850 525 +4 0 0 50 0 18 15 0.0000 4 165 1080 6075 1050 file deleter\001 +-6 +6 7575 525 9150 1425 +2 2 0 1 0 11 50 0 20 0.000 0 0 -1 0 0 5 + 7575 975 9150 975 9150 1425 7575 1425 7575 975 +2 2 0 1 0 30 50 0 20 0.000 0 0 -1 0 0 5 + 7575 525 9150 525 9150 975 7575 975 7575 525 +4 0 0 50 0 18 14 0.0000 4 165 1140 7800 825 assimilator\001 +-6 +6 3000 2925 3975 4200 +5 1 0 1 -1 -1 0 0 -1 0.000 0 1 0 0 3450.000 3375.000 3000 3975 3450 4125 3900 3975 +1 2 0 1 -1 11 0 0 20 0.000 1 0.0000 3471 3144 450 150 3021 3144 3921 3144 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 3000 3150 3000 3975 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 3900 3225 3900 3975 +4 1 -1 0 0 18 12 0.0000 6 135 600 3450 3600 BOINC\001 +4 1 -1 0 0 18 12 0.0000 6 135 270 3450 3825 DB\001 +-6 +6 8775 2850 12225 3975 +2 2 0 1 0 30 50 0 20 0.000 0 0 -1 0 0 5 + 8775 2850 9300 2850 9300 3300 8775 3300 8775 2850 +2 2 0 1 0 11 50 0 20 0.000 0 0 -1 0 0 5 + 8775 3450 9300 3450 9300 3900 8775 3900 8775 3450 +4 0 0 50 0 16 14 0.0000 4 210 2775 9450 3300 project-specific components\001 +4 0 0 50 0 16 14 0.0000 4 210 1920 9450 3900 BOINC components\001 +-6 +6 4800 3075 6300 3975 +2 2 0 1 0 7 50 0 20 0.000 0 0 -1 0 0 5 + 4800 3075 6300 3075 6300 3975 4800 3975 4800 3075 +4 0 0 50 0 18 15 0.0000 4 165 1170 5025 3600 data server\001 +-6 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1725 1425 3075 3000 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2100 1425 4800 3150 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3225 1425 3450 2925 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 4875 1425 3675 2925 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6225 1425 3825 2925 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 7875 1425 3975 3000 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6675 1425 5700 3000 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 8550 1425 6225 3000 diff --git a/doc/backend.html b/doc/backend.html index 864205b4ec..99a89188b4 100644 --- a/doc/backend.html +++ b/doc/backend.html @@ -8,11 +8,17 @@ for generating work and handling results. Some of these components are supplied by BOINC; other parts are project- or application-specific: +
+ +
+

+ + that compares sets of redundant results. + + + + + + + + + +
Component BOINC-supplied part project-supplied part
Work generator: generates work units, work sequences, results, @@ -46,6 +52,36 @@ basic logic for validation.
Assimilator: parse output files of +completed results, and take appropriate action +(record results in a database, and/or generate more work) +A main program that enumerates unassimilated workunits +and updates the database. + +A function that assimilates a workunit, +either by processing its canonical result +or handling an error return. +
File deleter: delete input and output files +when they are no longer needed.A program, file_deleter, that does the job.None.
+

+Project that use work sequences will need two additional processes: +

+ + + + + + + @@ -60,22 +96,4 @@ Similar to result validation, but for work sequences. - - - - - - - - - -
ComponentBOINC-supplied partproject-supplied part
Work sequence relocater: detects work sequences whose hosts have failed, and relocates them to other hosts.An application-specific function, linked with seq_validate, that compares sets of redundant results.
Result processing: parse output files of -completed results, and take appropriate action -(record results in a database, and/or generate more work)Function for enumerating unprocessed results. -Functions and programs that handle the details of -creating workunit, work sequence, and result database records. - -The rest. -
Garbage collector: delete input and output files -when they are no longer needed.A program, garbage_collect, that does the job.None.
diff --git a/doc/backend.png b/doc/backend.png new file mode 100644 index 0000000000000000000000000000000000000000..cb88ddb8b171b35b7a5f4eb73a200883881b6619 GIT binary patch literal 6058 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 literal 0 HcmV?d00001 diff --git a/doc/create_project.html b/doc/create_project.html index bd0ead8798..5f767d341e 100644 --- a/doc/create_project.html +++ b/doc/create_project.html @@ -69,11 +69,12 @@ How to feed work into a BOINC system and collect the results.

diff --git a/doc/index.html b/doc/index.html index b27901e269..9039a89d16 100644 --- a/doc/index.html +++ b/doc/index.html @@ -8,10 +8,12 @@
+ Berkeley Open Infrastructure for Network Computing (BOINC) is software that combines many volunteer PCs into a parallel supercomputer. +
@@ -74,6 +76,12 @@ width="210" height="62" border="0" alt="SourceForge Logo">
Version 0.06 of BOINC is available on SourceForge.net.

+December 10, 2002 +
+We have started a beta test of BOINC using +the Astropulse application. +Many bugs have been found and fixed. +

November 25, 2002
Version 0.03 of BOINC is available on SourceForge.net. diff --git a/doc/intro.html b/doc/intro.html index 570c65664e..fee4be032f 100644 --- a/doc/intro.html +++ b/doc/intro.html @@ -32,7 +32,7 @@ Existing applications in common languages (C, C++, Fortran) can run as BOINC applications with little or no modification. An application can consist of several files (e.g. multiple programs and a coordinating script). -New versions of applications can be deployed with minimal participant involvement. +New versions of applications can be deployed with no participant involvement.
  • Security
    @@ -45,7 +45,14 @@ to protect against the distribution of viruses. Projects can have separate scheduling and data servers, with multiple servers of each type. Clients automatically try alternate servers; -if all servers are unavailable, they do exponential backoff. +if all servers are down, clients do exponential backoff +to avoid flooding the servers when they come back up. +
  • +System monitoring tools +
    +BOINC includes a web-based system for displaying time-varying +measurements (CPU load, network traffic, database table sizes). +This simplifies the task of diagnosing performance problems.
  • Open source
    @@ -80,7 +87,7 @@ Windows, Linux and other Unix systems). The client can use multiple CPUs.
  • -Web-based administrative interfaces +Web-based participant interfaces
    BOINC provides web-based interfaces for account creation, preference editing, and participant status display. @@ -92,6 +99,6 @@ making it easy to manage large numbers of hosts.
    The core client downloads enough work to keep its host busy for a user-specifiable amount of time. -This allows the host to continue to function during project downtimes, -and decreases the frequency of connections. +This can be used to decrease the frequency of connections or to +allow the host to keep working during project downtime. diff --git a/doc/project.fig b/doc/project.fig index c07f57f63f..b0ed72d355 100644 --- a/doc/project.fig +++ b/doc/project.fig @@ -84,28 +84,6 @@ Single 0 106 #868286 0 107 #c7c3c7 0 108 #e7e3e7 -6 3225 2625 4650 3300 -2 2 0 1 0 11 50 0 20 0.000 0 0 -1 0 0 5 - 3225 2625 4650 2625 4650 3300 3225 3300 3225 2625 -4 0 0 50 0 18 14 0.0000 4 210 1155 3375 2925 scheduling\001 -4 0 0 50 0 18 14 0.0000 4 120 660 3600 3150 server\001 --6 -6 4950 3675 5925 4950 -5 1 0 1 -1 -1 0 0 -1 0.000 0 1 0 0 5400.000 4125.000 4950 4725 5400 4875 5850 4725 -1 2 0 1 -1 11 0 0 20 0.000 1 0.0000 5421 3894 450 150 4971 3894 5871 3894 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 - 4950 3900 4950 4725 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 - 5850 3975 5850 4725 -4 1 -1 0 0 18 12 0.0000 6 135 600 5400 4350 BOINC\001 -4 1 -1 0 0 18 12 0.0000 6 135 270 5400 4575 DB\001 --6 -6 7650 750 8775 1500 -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 - 7650 750 8775 750 8775 1500 7650 1500 7650 750 -4 0 0 50 0 18 14 0.0000 4 120 780 7800 1350 servers\001 -4 0 0 50 0 18 14 0.0000 4 165 450 7950 1050 data\001 --6 6 2100 4050 2775 4800 2 1 0 1 0 3 50 0 20 0.000 0 0 -1 1 0 2 0 0 1.00 60.00 120.00 @@ -118,24 +96,34 @@ Single 2400 5550 2400 6075 4 0 0 50 0 16 14 0.0000 4 165 510 2100 5475 client\001 -6 -6 4800 2625 6225 3300 +6 3225 4050 4650 4725 2 2 0 1 0 11 50 0 20 0.000 0 0 -1 0 0 5 - 4800 2625 6225 2625 6225 3300 4800 3300 4800 2625 -4 0 0 50 0 18 14 0.0000 4 210 585 5175 2925 utility\001 -4 0 0 50 0 18 14 0.0000 4 165 1005 5025 3150 programs\001 + 3225 4050 4650 4050 4650 4725 3225 4725 3225 4050 +4 0 0 50 0 18 14 0.0000 4 210 1155 3375 4350 scheduling\001 +4 0 0 50 0 18 14 0.0000 4 120 660 3600 4575 server\001 -6 -6 6375 2625 7800 3300 +6 6975 3975 8100 4725 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 6975 3975 8100 3975 8100 4725 6975 4725 6975 3975 +4 0 0 50 0 18 14 0.0000 4 120 780 7125 4575 servers\001 +4 0 0 50 0 18 14 0.0000 4 165 450 7275 4275 data\001 +-6 +6 8475 4050 9900 4725 2 2 0 1 0 11 50 0 20 0.000 0 0 -1 0 0 5 - 6375 2625 7800 2625 7800 3300 6375 3300 6375 2625 -4 0 0 50 0 18 14 0.0000 4 165 465 6900 2925 Web\001 -4 0 0 50 0 18 14 0.0000 4 165 1020 6600 3150 interfaces\001 + 8475 4050 9900 4050 9900 4725 8475 4725 8475 4050 +4 0 0 50 0 18 14 0.0000 4 165 465 9000 4350 Web\001 +4 0 0 50 0 18 14 0.0000 4 165 1020 8700 4575 interfaces\001 +-6 +6 5175 2175 6150 3450 +5 1 0 1 -1 -1 0 0 -1 0.000 0 1 0 0 5625.000 2625.000 5175 3225 5625 3375 6075 3225 +1 2 0 1 -1 11 0 0 20 0.000 1 0.0000 5646 2394 450 150 5196 2394 6096 2394 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 5175 2400 5175 3225 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 6075 2475 6075 3225 +4 1 -1 0 0 18 12 0.0000 6 135 600 5625 2850 BOINC\001 +4 1 -1 0 0 18 12 0.0000 6 135 270 5625 3075 DB\001 -6 -2 2 0 1 0 30 50 0 20 0.000 0 0 -1 0 0 5 - 3600 750 6900 750 6900 1500 3600 1500 3600 750 -2 1 0 1 0 3 50 0 20 0.000 0 0 -1 1 1 2 - 0 0 1.00 60.00 120.00 - 0 0 1.00 60.00 120.00 - 3900 3300 3900 7200 2 2 0 1 0 30 50 0 20 0.000 0 0 -1 0 0 5 9825 750 10350 750 10350 1200 9825 1200 9825 750 2 2 0 1 0 11 50 0 20 0.000 0 0 -1 0 0 5 @@ -154,30 +142,34 @@ Single 3600 7200 8850 7200 8850 8100 3600 8100 3600 7200 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 0 0 1.00 60.00 120.00 - 8250 7200 8250 1500 + 7575 7200 7575 4725 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 4350 3300 4950 3750 + 0 0 1.00 60.00 120.00 + 9900 6225 9225 4725 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 5400 3300 5400 3675 + 0 0 1.00 60.00 120.00 + 3900 7200 3900 4725 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 6825 3300 6000 3750 + 0 0 1.00 60.00 120.00 + 4200 4050 5325 3300 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 6309 1488 7125 2625 + 0 0 1.00 60.00 120.00 + 8850 4050 6075 3225 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 5409 1488 5400 2625 + 0 0 1.00 60.00 120.00 + 5625 1650 5625 2250 +2 2 0 1 0 11 50 0 20 0.000 0 0 -1 0 0 5 + 4350 1200 7650 1200 7650 1650 4350 1650 4350 1200 +2 2 0 1 0 30 50 0 20 0.000 0 0 -1 0 0 5 + 4350 750 7650 750 7650 1200 4350 1200 4350 750 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 10081 6123 7500 3300 -4 0 0 50 0 18 14 0.0000 4 210 1740 4350 1275 project back end\001 + 0 0 1.00 60.00 120.00 + 6825 1650 7500 4050 4 0 0 50 0 16 14 0.0000 4 210 2775 10500 1200 project-specific components\001 4 0 0 50 0 16 14 0.0000 4 210 1920 10500 1800 BOINC components\001 4 0 0 50 0 18 14 0.0000 4 210 1785 4751 6000 application client\001 4 0 0 50 0 18 14 0.0000 4 165 990 4981 6600 client API\001 4 0 0 50 0 18 14 0.0000 4 165 1095 5550 7725 core client\001 -4 0 0 50 0 18 14 0.0000 4 210 2355 2100 2400 BOINC server complex\001 4 0 0 50 0 18 14 0.0000 4 210 1245 9450 6525 participants\001 +4 0 0 50 0 18 14 0.0000 4 210 2355 2325 3675 BOINC server complex\001 +4 0 0 50 0 18 14 0.0000 4 210 1740 2400 900 project back end\001 diff --git a/doc/project.png b/doc/project.png index 68f367109f557d2960e8a27421fb3264ba3b6aeb..9822a6c2b2fb5047635d05d379ca0bfe87698654 100644 GIT binary patch literal 7407 zcmb_>cQl+`-|o$X#F&Ld9VJB)Ari)n8lr?m8$_9iP8cG((d!_F1Q9{>5=3tiJ-Q&q zC?TRoi59&Z!Eh$eo9FrRzUMn+~Vpm9{v!vFw8?bnZ@zo$r@Y~*se`_M((!P3Ru%ozb{mPPjMVw?^$uFjwz)l zex`_8%BLPojvptMixcd@rv{4yBQH~YJ0$s003UZqOJI+B5n^DwBAUgoyTm4=g@28_PPwJ&6vZ~m{|zNaLlrEASK}KBbgN|j6ybiaW&fOx44b5 zPi;dlwC(eVfyEhox8F!GjFps2V#!!V9=5;OxgAG1Bzhe_i z+i)^cDgc;%7Sha?xzfwk)gco{KRt6!om4gl=IC!7McsHoNU?QvYQ@`80%3Foc%M%e z(!-ej5(sDTJGf#IB{01Hg;)E+W!zS$g@caogZPzJcK3rD#gBxf)a)_cxX#-^X@?N2 zIdO=A`31hUAh_Tu&qC){t%u%bW7o&{8ii|$+w9Jdm7W1$3#Ivl?}KeKQ(6+e9zAwk z$Y8Tdk%HmvhU-a`z}H*Z*SAw^O9+)`v>2V9up53*>fS+hy}tZH7zBifuh=&xMRp(P z0od*}KPpB*ws|6-aQxz&(M_PqG9M1enr1)%hIn2OaEb>H00GbbFv-$#PdJMBmOHL9 zZ$}ua#!#eFjjd_9+1YC_ZKCt0W&~DZQZngxpSc`t05h9Xm~D+p znR0|5r?XirkFKV%s+m_~_lV_}x~Q#MmTNE2{)36`!uF-56w!#tljE623>XCk*3dtm zKra}E%uJ3;mCW|Vcf(SpU4Gn{k0;7RC+QfgdLArKnt9hj$0n>j^IUGWCXMdBm}lo} z9Iyo$XZlBVHewQZK}``B9W|RfEmFG?H`?O}78U81HzkJ}sz1#_3XX9$RX)YdZ9i=$ zwkq?(>3D$AcR#t)YwqH><$PtnL<`D|ZnNf|NLndCfzi$5^@q`cwv}7ltp#)KVkPzM z-?=$Pr3^_XruLi1A*hHSrj%3n$}X{w&3CR1mE~_bX^YtW93SlpL-v%K-JPQv5)~)1 z@(PyKB)+{4YO0Spjm-MS5WP+4hKbdWXKET7k@Q)_4s+dW&F+p(e4g)4HJnN9ZfIa@ zQ`cCFnX6oR_(%dHwpAnWD*A)&T3-^TuzFnyl}**?7jm@mIX}(hyDLnN-n0+#fEv5; zB_|DuqQ-t0_Mhvr9_2^3`6~WjqZ{^)B6UsL{V*6zUaESnb+x42HqEVgaxls77h#&z zz!_u=1whI8E583NntT z{;Lw-?FGiNI0mYsMMWfpj226~*Ztc$Dl3~iDN)@=BzjWJ@w&uO-OpZUF>-N;Z5@|% zMONzxKsAz+J&*b=g65vtaPSdi?#EJKwO5gd-Qa|VGv%IlbD&^}paXPB2Fba2%WemQ4d~w6&#k^TDh3;C{Ny8oI)*?_zxJTuLz%Qw?QwQ9FQ?=XN|hMlDv% z)cLr3NMqF&meS}K_4>Oio*4;@D@~WB5F5i@wF|~ZgfYabq2Gg(q0FB>R zq9F3+64MnR6&Vx2^240+JQ+j&NvRC>TAhh?;@}u%6IucK_~|sf3Gq*753Q0ZoX{jb zX+p_R!Lm{;s5NoR ztIq@rvLeDn0K2}Tp4bDa&CmN^8zz`BTbl4c=9aCk67hEfdxH-CttgtNMrPh!h=bZ+F5gp1rV(IG-J`q z_QIQv!hVs4nv_->L8QEY5${-eJmpm-i=Y#724v4Nq zotryvKv%uL?9E13nMC@W56rOu6=}szH{gzg`Bis` z79uZ+VP*&JXva<)*ZSj3Oiotm^^ve>Wi*NwIK_>3G~s|N&T;o55dxjmiCICG^b5;i~4 z5Any=e1P~wPKrJdC@#cNeIlO(eH`CT+B|&rzLw%Z}9;5b4Ro6(lap zctjKPI0TI)#<<37bj-;Mdyx;hrd$9opnHuG^U6zDP3>8{5Arypi9DLY$5yqsc9)ysZ>W<^oxVG#=ubxOyh@HTgVhkMzOQ zZxY8^HKgG%U+ZcE{prEB?CLre=bzN~%?D4riO9MBQNB%dCX;g@eeOc!D@C28IYK)?U{gch8Ppu`GfsRIXH}k<8#x>6mM!*IlL;7a( zcXYp5J{JOeT$@)BvHp6x`h5f{0TfaSksL_82i~^$nR(wN!Qcw2asNAa^uPd7QV*VB zFk@kzZ-`W(*YQ4n%VeH7EA&m)rNgk@_JYw9|oMQt!8gNL)_fzg3NAT)M!@~xnwsPAON0FY$-tR0ucEdmERy1FkpTA0a z!odd_pHyteGg12x@}T%z5>j&&!d{oZ2|9?MFER32t53tgcpX-8b};ySCyrjrObOgH z_X5g~P&$pV7#J$fD9fwyK~(McR1C2>Y*gog{a;Fx&(m)b#^Y<`MCS(W#?%vqM@X|X z6ywc8s05ct(TNYJwe=?~hJzk^THVRPVrBaR;IYceJc(fA(oU4E^b&77?Aof~gM5m$ zCbm$Z43Ael>0~nh^hIYY<_VV8lUn;qnzRzzM3?AD-{GbLw)ZUBgPaKBJsvs{z04b$ z8A#x{kb*@P%#p66R8c$pO?!ZuZXUIGay|jW*X}6&O`~aAA>o=<__T9v8a7j0(4Vu7 zO;mirJW~f`n|^)!;&Y+#WwBtW!vdK5+$Z!m`|In}!5t|GORY*`` zGM^H@2bO2bK(din(+t}pO2j;wnpa2w$SpkMxzzT#B;El6bT(unluO8_VlzQviFS~1 zo@b!F5l;W^HvZIg=A#2H)60UJ+XdbAurH-n@#ejy$a#$i|VYTWzG`HZV3lv@;)JA5NRBfui2$2XpK7YIc{*c>>ZF zX;;@>Zxq%+KYab)q2`dW$pH`MAwZ)M3fu zcKaf`Hvv3U1Z}s;UC)>otI7x9A#A5pj1_jKxgRe=y2TgYgqDVU;} zxE#DFvb~Xb@<5&ERj2Q#zEDB&@MrL!`>{0xDPV5~EA^&~Hk&vsTytJTpgl`a?bz_; z-f?(AbK02DqGE_Ba!ua2VHCE$s0&kjG0fFl`nX!@Qj)*@!RVgN@PHiCOjjZck$Em| zsx#F%Ht)iz_ruLG-KA#9-J%CQ)5r5}XQG3)dHjofXwK)3A%q2e!^iDhjfmwXzNGGJ zetuN@tXamPC9~&GH#DDKgD#CA7`g@|x1$rFje&u{;I%~Pd@x6gCXE? zgG~N@kq%S6>Encgc?mbUsjGOvP&G6lB|KKo?nr8^WoNqf$Bv%U$k9y5cXa`KSxAV| z1%ni0M@fnLw0*zE5Z(82IKHqjR!ds4|57HLytis1gTLLWoXSr@dfuE#cyl`+z8vm; zdv0;Yq@!xT&~QADi^DN4Pf^;FDwiMqqz^jy=tbPw3d6ZC4W??dm|8~bSuVR2z7ku+9x-$Ml ziaklYqAS7D$!Yj<1k=o-c`W9EfOOT~gQ5dt`sqv`6~u^yNYxWbhQyp8>y$!&uhpPQ z9*w#s){vC4W})DIB{jQj21Rh#P+>hvWODgHahOFvcT!spq=WvNz!@i|MBBsB^VCg% zE{rE+lCFQcmLs1hEG%wlA|ExmT=)VmCg3ryFIr!h6WAUK=O=(0xt`aL?XgR;hN!e| zjM*MI2J}}x)vVc1MSbk=2)#`n!FhdFe?`NCoeRm&)RS8l_hddyfyZHap>Z%f^y)^yCDz!8>*fM=7xZ9z`$>BN)Q+ z|BvFrZ@qz3Kej$AkLo{k&aS$m5!ag?xvnBzlP<{u03rK(2kt|86Aa?G$MBzo7&9+X zr?Ef)7;};L={$GOO}BeT!f_^~9ep*SjjDI&sa3o!S&v}r56jE%q^GC zPpfg319(P)Tl6P!UWA9Y?6dDbhBoTdTm;PBl1lMaZxr*ylEGO6CaP`2JA)`%N|;jD zn63lu(>JevI{C^ntvr4eNu1_!h@fDqzI(oDm6srUTa$Xq7`J>a3z~Zg4~)l1^W>Tp z5|j;1m0Nx4WSUKwum3)$0`3-t5S?>>@b0PX9U(dJZ{}4k7z}-Q<@d3%DjNnu|6*^$ zXtDMl4LGhF_RVFWRqcXtZRcM6v3uFV`HeHFn@;B|dnkV@=*o;=u0{g;TNZ=hGVZ(9q@IWcTA zk9Ejdph*p>kl^A-NRK?q7X*kFg5Bn%Rnz>sFyyTyFc@&GaVYV>Y=m=xvo7&lsVYkW zIYN(cR$38K&sqe*+nWvaCoEDg4Q46I<;`%X|MY)4-$A@b;;6x_8oXhJb5G^VcI>HC zOWl}h;eUyhlt28As=XMisj9kWG|586Un&|H{s>3r27jq1SW)s?8Gd`J??x~*RrU`e zjD5Xmp5gg-t9USU^lv3@RXhHT+3$vpGhjry%AcR*^mQmiD?p_S4mUFoH_eZ>=kM*6 zzc+LB{<^!kdg>Q|NsF$j$w3xZ4 zg%{t6*JqPz7F&B~Ruc@b@Fz1(-0hYuN|P|qHG5AX{*qVTUVNt~LVwkS>q6>6c5e~- zNZzx4SFNbb%_+#!8ruT7Il_j0T<*xAruOjZl>W z(lW2h+Yi3|66{pHySkp|7~a}Fk7i|^d@leT9F4lP%BZssi38u>3Jaf;B_ zl|a(^Nc&Emy3V~FNj5*LGAVAw4?o)EwgbdN=yZ{iCiU>*;UI@>tVtu+wTFA#s!LSo6;Ct%hl1NX z==#mkOzr^FeRN?I^6)R!1w+LstK)ms+#}i5P1#3(;fIOJg2siw+ny36k4?~!bZV+y z`}a|^^y?r719qx*#s%Z+gwp-xY?F_)I(m?F_*Q1!I!8)FbZnONeb0e@T+P2OZKXP)&`M`MNZ5>NiQ8t# z*r99^+^&N@<1l#B{u_NTaGX?x|N0!^um_Txhu;i zw=;Rbgl_GDmg5Qy(YI{!w^2~H1pW-$B>&v>toN}U72%4rgrc+TuOqbiBJK5rjq40w z{oEOSgN&I5Hpp!`}Ocu1k$#2ixbiQB>4>Nwi3K8-1Gur-F*p*TLyCfU5 zt6qi~UVq0S-wHXTN^SQ=Q#!t63tx|>FfW5!m*I-glQF>Rue}DJTD0M>PX!nq`UC_nz!r-A{TfUl#?(MpmudYw@ zsncaqIFGX81Yzinp4Z3gQ8v6&BeQTJ=pui(&=Yp*fy$$ z|9Z&IY#n0(>}khd%DQyQ!rIjSU^ZrJccFQoi@FOf(G(I z0uwmI-VcBJ9vBvo={E>)7I-(VVr*PfFpn=1x4T|26=z-l?{0cT`i`x9)~$z?=+0un;;Z5Kw9&NJr_NCiq}R|p((m?n&baUX?mgq(G2VE8WbCom+N)%)xxP8SZ^l`e>BD$o006)Y z4RkI80P6w(u*|Wuf-S60jemfTBRGR=0RR9u{rzKMw3nHIjRJUG8~hbNH+-;*KNiq8 zvl7<#@C(2PxcYnI@WSV1&dW{g{7D1=!68GPi;BVD@*y9u#iau_JUZbD=MSpP@U!yjnV?I-wB6cG5YzFi!PMP>t4VUOj$3rmqt|9(f2=Qc@y z)xO6f7bsECx<sN8W@$mHzZv3cQ$UhA`rU|)+al9N3lXST z$hI{}gIMZWLD^4B7^Dk(+^7F>?u;dZJPZUcm@a%m<%K>HJaf{-nHD`!b zf-?5tPX$2BStT7newbF>W+Y;0`--~liPp4ocl@Ybjf-*q7j8R4lf^zYua8AeBQ|{} zm~mI~>&dGRiq4v#or5Ns`{uhIhIdQg0G3&6Tg2AA|Emh!;g0j*r^{sx22a13Oy8*J z6)&uMlD)qb*5g>yy#7Ot)+si)H}0vGDIUt4#u?!Xs~(kWqI>nsl*Pf&gf3m93xBFca-5SM9O!w& zC1A47Q}nR6wkRA)agZ`zeIb)E?MAilS~h*LuUsqbU~G}_jq_3XD%?GNe^)njqSI=^ zd!nYS_!KG2rH#P&!`ESiA!s1`x|S?PwZvLJO0O@itw&G2w0LFN#8c)K6q@H^r}Wsy zZu0KHT6jO}LfQg$I`)AKoq}#*tgT(dSATzFnberl<(9K<5bW(Sbh>X~u2;HfGk|=w zC=?$%?&40JF8?;)s~koN#>!;)+6%%@|U~C;Q6G4lL3sEWcRj>p=c=pbDNNMMeX4(R8AWh<=xnEYbT8dxM zz2|}h$~tlR{*iv8=brZ7*0VG8R{vH>TQ6875B%`TC=NQ;99Ohlm{q&><5}Y!qFGTO zGxI|+TU}ZGioMrnz^#L1o1rh_3#TuqJg3g|e&`&2qTGRR4;L_rbE#C$xUf>KVEw^I zZvYnl$pEi?W}&a9y8Y-gLd9u5wCR<}W!YN}B!RQaRX+A5Tia4g(si~|JgIuy%I>P{ zgo)H|ne)Sp$@yk%JNKW7l?`#1jvm)#yJ8i@c5Lt5PtSBUM)A#d0wD-z__g&l^Fu)8 z(fh(wAlQzVzY~#a9&|sx>qDmCAz%Vt z&^$Q6nT~`2hs3D>5FPjX&iA)K zcYi}$!;rSj#h=i4X~dbwASddvFe>I*abzR}ASS0`b?v?0^EPCHF=Qz4@g z1)TDLNm9jD_v6zG%h~xZnwAGsbFCwKv14CjBh98hJB@fpOS$ha=qVNU=j_c7)E1)i z;6IRNg4i6RMK2gB?8*&vMloN*?9mZjl!a|ifpOr1V4 zCuI8i{`}WotT)f(9_P)4*QD$Z5zPhAmsCD0( zoz7&59%cQ+V`i)A(Q=$VqzLo8$XrC|`SIfI)8XqJOOiozzQGaKBDVs@twIl5A*wT) z;f2dyXV9+LVHPMI$kZjWL}ehO94->0-H|jP^Aa(-%>V_o#VIVE0nbnPuYeXED@g7g{)&~k9xxQ(nFlADky#8l|B9yUS}suMI3z?KoPwf*VAm$I zq;vh%^*{&g8t0ubk0D#B%(bc=M2#eKF^00~Yuoh_X6(aP=57-vG_bx^6UGoc~C@rWU}xMG>=o`=+v$ z7FVv~_#qb&)qap~f?85ewRQ{84xKElbxZu2&y3S01f6Sm^J#7kbGR^PaR2R_56n^K z4;ib_5I)e@s5xg|$)|VfkC&usG@zzvPIu7Z_;DL@c7?2w53d8dUl9l?KCs62MUTzW zWoa+6HP6rFe|AzU_I-8!t{R`fox|>+VT6NUm~7uKx~8ms%{{jG&i;@4i~%jim~ zO3&rOwulaqGXu7<@&$NbO~Y}(3oa~@$RE)9QqI+!HL&yjp%XO+rxbx~(Z3Mw_zh;TNDuYs zp+Rk8vJOA1f466lfsokNyv&*G5U*DQ~fJ6EutC_SiAXoxQoJL=D| zP{Y|_ORAN5nt3(uYE#@yqC!r`)Rb&a#%jbJC*{iCK;yZZfvdp+P2ymp^S@?y0BhI> zv6c2NhvA!>hrjxt6lxE^1&EweAI$8R?RN6@t#;SAmqn?mm@^Spu|hmcotjRwEIoqh@Q||OaA2C zWs21{^RaWFdfULuxRv@sz-czCfRS?C)?U3%pXza5QCGLiwoKHM`g*BkO?J2SXUb%kwhI~IdHn6N zK2u*}Vbbcmz0ppTNVmbm7P&<}XAgS3$lc+=9gSL_5*MGJ(t6<#yo$wm^#v*!FV>tU z7wvPPooD6+Oip~2b#9Vv%BZiu_ng%@t^Qr37=Y8XBJtL#RoCr~KHPB2 zO-68HHgHtp_%_>|sahus*`Iu8jN4ms22&ipX4kq*AwLa? zy{^pW*TzD#q<~3T$JhJCu(Z6E>5VxK=)});WwqS($v+M`xpdwXukYllRbTdp)o(_r zOgs0vp$Wpb_~{kMaoP5-j~$2yYS1UENChF!?UZX1gOJh7DZOq%b2t2YBwvp8&%FQO zYN+;c&1_+6>x^omLY3g2Tpja#@}Orv%Lj_sn+Bnm3H5B>FA{s5J%7#PJU%6K3EJ18 z^D(klD2c($GeuoK^EXEputMGQgQqJS2VaYn|0LJAuC|RZgFN* z}$@fc+{9xv&oeU_!X`;E_pkcsJ)NO!ugW<#+fU>7_v z_fE0RF62i^d*DKOSjt+tYM$rJffl3)FL$e9K>yajNx-}CUfkU?W+Kq2Yb6SqlSGTQpaYK5HM1u<*4{-`SXt3_Ns{TtB)75ufQVQx9TU*a3A z90Qv`CRV~IBq=1`8UMq2p1s>SSG+_aZI<#u-N`XFC9+wvjtiyWRbVZ!#BN1`t$&tm z9Z7OrD?W!Gi>?NTVy8`n!{sNL1n-lt=vr7ytk)#1XvJ#j5UlNh5FxB(kw=@@=GfHN zmac_HZyT7}=L7oC_VN73C%1S{`dl$xB?$U@<#G zO`5HAH5a+%!gJm7n3)6}a6g7MKnQpb2FxMUFDp;N7;qd6Lm+ylQTY5hC z5)2(E#4KLt5hKll`9hoWy*T^5V|$EOr#Uv})-qBZ7RK+3gBcZpp1>b?wejx3?%OiW z*;eh`eC8D}@UdeEUtnXOkk4P(W<^%}w>4K6Ae@yj1Y`a<*$lX~%#ZuxbYSO!LgtGv z+-V=v#5!%ps(JoIL*|63I5L|y&9WOFEza)=?J**b9MX+R7l{@Z1>batBhQLFVQ_iv z@Z4MYcrY1Xd8Z>7OU!X)r*^GIndHI!mRHlXPiw{KAU6K6e)8DuI+(lpKTw!EzRa^a zRy%U)y#cC83PafItK3^2a3S0@L}`(cEh5p3_$Maz40w_-bqR)9IcW@TH*S`Svy6-d;6lc zvt!cu)SqTMg-BQ-7ABn`O>rAe)^Q!(%tCC!`G-hbA#w#9?B9dzMN54R{jaB00U{(L3sbb1`a=^&)FVe*V^Ub8 z&d{5}evPoopw&~)?R^}_hejfK_r7n;$@)beXD2NsCogf8DEutx5Xu*R@{3hHtQ((K zF$^pgNVQB91rmF=jrLDXN2nX0;GIU&n)sekaqlK8_B%Qn_b!&|lY0wZd&25cFQP2e zF$BB$PyD1m4N&JEyXE@k!P9OYZ1Yba@kfrbdqSnesY~%Ax3KFxD7#yTviH#s(VkE* zY>#YOM)vuE#8m;)4*L-XuP`0y{Om~yylN&vwA1zT%r`8$CE9Qi#_1p)4i8^cE)yL^lY>cq#}3yGg%|l%%O2ZnQ~qwJ@Lin3$WyEY#_s0U zoti3aF$aG*nzSe17_sd!+HjbK6_XL2x65=Umr>WM^haFDx~WFzOaEy0;Sam;7!8^D zwXwC6ow>m|QHRlw`LTOAuKWNgtNB#VQ{vUM=iN)Yh_fjEZ;VZJS%YrukZ}#EzRIbP zqd`n_EJleV>fZkBto)UhTd258U)IWLho85+EU_k*TlvGgztIng{Zdpp3X6S5Gs`*8 z>yq3k9LV$NS455S;kWl^Bz0TH>L7kA*&Ma*uJ<`t-8dS)46Z_BS;NC>SiZaAx%Sm_ z7E7YkjD4VjXQ;S1X5q1lU&J(LWGotDehgdvgP9f<)a&t3jNWuw2jTmAErW-G@+QNm zBJ`#`9fY9V&P7d_Oahw@==LDjHyX*$@iIW+iVw1V0j(H&bq?Rte@hE#7U|I-#sk)m z-G-rg@TQmoL^T-+!AW~ULEHxH!K0W3yMvS5hD8${T0M7D7cyLGm_-@B+lWqw{KPbz zIyIwuO~PK9T6@k&RRjhq7*&kULsKB*TM(x=#pxiT*ubSv{w=VE5Srm2S7ix_M?*la z3Yb4}`^{B{T^MkXrUGi_)OEX%0fPZc)dw1p`Za6J8+SDpeU-Ae4bqE9Q2TDQTwa6oH{be63eZf(}euaqURE=l6>wz!gkyKp9#^z#i zh895Y?(Q`GZA{sMdq;AmLdhX~7-+5{16~0#FG~aRi2C20KGzI}s=E(bSlW{SGA_VN zoDPB)G}oU2|1ERRNYE|h!DBg5fbas{pe_cjodO#7)MK}2;IS;pFyJZ2uz;gJ`KdVQ zG<=3AOYOhU!O_TtpaOc#q8QzR1w*)b-pL8v)Y`^E3jei^1iC=)kFNRqR}4@(65zC1 zXl;)n&?jSfQ-ABVvE2Q?MO!9FDl}EYZG=e<0cKaY%WS<2_i2=VTOY;ag~lkKevJXn z9uq49BH#CMp(d($szS4VAX73<)7|cE&4(+Mg&A?2-`&`ah%VkXwl-1{@i4B^&VV0{ z==w%=pN=`v{AR;Z%(xn3m!#isgysV;5eRB6Hj&c~yl?vkRMpjFO`ZCvYkHxzTcv$B zW=El`mz6vTxF9{!e$2uNr@{=5F6FnG8Fo*Y%g`3kK-V!TE-!>yLp?h_;ct9im=~mR zmyUVr5v0Ed=#&*8SZ_hOR~h#l2=3D_%!b~?btlueRnG6l# zc#C)#`0Sn`nI(k7lc0b&3(=DCB(Q>4(OZ~q!3*kx-Rbhnd5U`hQE2|0f+^>_VGHUVpz7)V_P_ zJf!kpT2bcvL!4IDpFR338|CY(ItR{YHag8vaDqGdW$r4CEDf)ZGe4ddOF=mMo|^`bc)X6ojoBZo^bNcB#1i<3Pfcst z?8pk&R1nph&dpY(A$5%DENW^+;D)bWG<)u<66qw4=(66{jJ)HwaRPI77HyG(QFnDZ z&I4s5v}&7do3HPQ~5TaEFII zU}PKd5VkMp^q#FfmsL$ne_iv7!Mow3F5mdH!TWcrCUDIq7|hcO5N7<97lTG%+3Fj{ zf@)uE5N1h&V+ylV6_q=ij}?InT2_RBafx)__Og`pR)k4AX7ufG*WrArmW!PsuWYX) z=r3!}BpXPx!kWUot1SV2?;5EV{51!;@n6e(U5nGF7ZrqMto~O6- z|Fw|!54F92Ynt>o?Tq(*nW%oGiTK~tciKc><^0DWu<(etyH1h#Pd)QL*L!#Gm4N#z z2^Jnte!i7=3Vd>3*d*1a!3rh&Bob0>TJMa7p~x2;T4ux*&wExg_sd-zB;4u1nP*ha zj%PRB(&1O#`Syc7+cOc0bj{s>Sy1V{k|L7sa(fJw=1S<)$0mLg&DXS6diB;Ye?CH7 zmsboCHD-xrf6l>@kA8^`4>Ag!^SN$i44*t)orBa4DgLg=ICi5={08rDc6t8|di%ze zs9#&9^ZVf^y%g=NGaN+#Yq_h0XL`$dLQ$_nC%?^QDreX{X>4Y0iwQ>E1E&_3XLs}b zNt-dcddeQgzm)+Uwm0qHrqR354cZV_&4wM}7>VcqR6O}--~z$#-%2e1k6-=x?H_#2 l9^^@;IPhUv64tRTbkBEuv?GRW1lGg>LtQhS@=MNl{{!b9#_0e6 diff --git a/doc/work_states.html b/doc/work_states.html new file mode 100644 index 0000000000..9bf7dcaa21 --- /dev/null +++ b/doc/work_states.html @@ -0,0 +1,80 @@ +Workunit and result states +

    Workunit and result states

    + +

    +The processing of workunits and results involves +several independent activities. +To keep track of these activities, +workunit and result database records have several "state" fields, +and their processing can be viewed as the combination +of several finite-state machines. + +

    +A workunit has the following state fields: +

      +
    • +main_state: +Initially INIT. +If a canonical result is found (by validate) +it transitions to DONE. +If it's decided that no canonical result can be found +(by result_retry) +it transitions to ERROR. + +
    • +file_delete_state: +Initially INIT. +When the main state transitions to either DONE or ERROR, +it transitions to READY, +indicating that input files can be deleted. +When file deletion is completed (by file_deleter) +it transitions to DONE. + +
    • +assimilate_state: +Initially INIT. +When the main state transitions to either DONE or ERROR, +it transitions to READY, +indicating that the workunit can be assimilated. +When assimplateion is completed (by assimilator) +it transitions to DONE. + +
    • +need_validate: +A boolean, true whenever +the workunit has a result whose validate state is NEED_CHECK. +The validate program sets it back to false. + +
    + + +

    + +A result has the following state fields: +

      +
    • +server_state: +Initially UNSENT. +Becomes IN_PROGRESS when the result has been sent to a client. +Becomes DONE or ERROR if the client returns the result, +or TIMEOUT if result_retry gives up on the result. +
    • +client_state: +Records the client state (upload, process, or download) +where an error occurred. +Not relevant here. +
    • +file_delete_state: +Initially INIT. +When the parent workunit becomes ERROR, becomes READY, +indication that the output files can be deleted. +When the parent workunit becomes DONE, becomes READY +except for the canonical result, which remains INIT. +When the output files have been deleted (by file_deleter) becomes DONE. +
    • +validate_state: +Initially INITIAL. +When the result is returned, becomes NEED_CHECK. +When a canonical result has been found for the workunit, +becomes either VALID or INVALID. +
    diff --git a/html/ops/db.inc b/html/ops/db.inc index 57c1cb1a33..32390ff700 100644 --- a/html/ops/db.inc +++ b/html/ops/db.inc @@ -37,8 +37,8 @@ function show_platform($platform) { start_table(); row("ID", $platform->id); row("Created", time_str($platform->create_time)); - row("Platform Name", $platform->name); - row("","id>Application Versions for Platform $platform->name "); + row("Name", $platform->name); + row("","id>App versions for this platform"); end_table(); } @@ -46,9 +46,9 @@ function show_app($app) { start_table(); row("ID", $app->id); row("Created", time_str($app->create_time)); - row("Application Name", $app->name); - row("","id>Application Versions for Application $app->name"); - row("","id>Workunits for this Application"); + row("Name", $app->name); + row("","id>App Versions for this application"); + row("","id>Workunits for this application"); end_table(); } @@ -109,9 +109,17 @@ function show_host($host) { } -function retry_state_str($s) { +function main_state_str($s) { switch($s) { - case 0: return "Default"; + case 0: return "Initial"; + case 1: return "Done"; + case 2: return "Error"; + } +} + +function error_str($s) { + switch($s) { + case 0: return "No error"; case 1: return "Send failed"; case 2: return "Too many errors (may have bug)"; case 3: return "Too many done (may be nondeterministic)"; @@ -119,6 +127,22 @@ function retry_state_str($s) { return "unknown"; } +function assimilate_state_str($s) { + switch($s) { + case 0: return "Initial"; + case 1: return "Ready to assimilate"; + case 2: return "Assimilated"; + } +} + +function file_delete_state_str($s) { + switch($s) { + case 0: return "Initial"; + case 1: return "Ready to delete"; + case 2: return "Deleted"; + } +} + function show_workunit($wu,$show_xml_doc) { start_table(); row("Created", time_str($wu->create_time)); @@ -136,8 +160,11 @@ function show_workunit($wu,$show_xml_doc) { row("Canonical resultid", $wu->canonical_resultid); row("Canonical credit", $wu->canonical_credit); row("Retry check time", time_str($wu->retry_check_time)); - row("Retry state", retry_state_str($wu->state)); row("Delay bound", $wu->delay_bound); + row("Main state", main_state_str($wu->main_state)); + row("Error", error_str($wu->error)); + row("File delete state", file_delete_state_str($wu->file_delete_state)); + row("Assimilation state", assimilate_state_str($wu->assimilate_state)); row("","id>Show associated results"); end_table(); echo "

    "; @@ -168,16 +195,16 @@ function validate_state_str($s) { function show_result($result,$show_xml_docs,$show_stderr,$show_times) { start_table(); if ($show_times) { - row("created", time_str($result->create_time)); - row("sent", time_str($result->sent_time)); - row("received", time_str($result->received_time)); + row("Created", time_str($result->create_time)); + row("Sent", time_str($result->sent_time)); + row("Received", time_str($result->received_time)); } row("Name", $result->name); row("Workunit", "workunitid>" . wu_name_by_id($result->workunitid) . "" ); - row("state", res_state_string($result->server_state)); + row("Server state", res_state_string($result->server_state)); row("Deadline", time_str($result->report_deadline)); row("Host ID", "hostid>" . host_name_by_id($result->hostid) . ""); - row("Client_state: ", $result->client_state); + row("Client state", $result->client_state); row("CPU time", $result->cpu_time); if ($show_xml_docs) { row("XML doc in", "

    ".htmlspecialchars($result->xml_doc_in)."
    "); @@ -186,42 +213,42 @@ function show_result($result,$show_xml_docs,$show_stderr,$show_times) { if ($show_stderr) { row("stderr out", "
    ".htmlspecialchars($result->stderr_out)."
    "); } - row("batch", $result->batch); - row("project state", $result->project_state); + row("Batch", $result->batch); + row("File delete state", file_delete_state_str($result->file_delete_state)); row("Validate state", validate_state_str($result->validate_state)); row("claimed credit", $result->claimed_credit); - row("granted credit", $result->granted_credit); + row("Granted credit", $result->granted_credit); end_table(); echo "

    "; } function show_user($user) { start_table(); - row("created", time_str($user->create_time)); - row("total credit", $user->total_credit); - row("recent averaged credit:", $user->expavg_credit); - row("name", $user->name); - row("email address", $user->email_addr); - row("country", $user->country); - row("postal code", $user->postal_code); - row("total credit", $user->total_credit); - row("average credit", $user->expavg_credit); - row("last average time", time_str($user->expavg_time)); + row("Created", time_str($user->create_time)); + row("Total credit", $user->total_credit); + row("Recent averaged credit:", $user->expavg_credit); + row("Name", $user->name); + row("Email address", $user->email_addr); + row("Country", $user->country); + row("Postal code", $user->postal_code); + row("Total credit", $user->total_credit); + row("Average credit", $user->expavg_credit); + row("Last average time", time_str($user->expavg_time)); end_table(); } function team_type_string($s) { switch ($s) { - case 1: return "Small Company"; - case 2: return "Medium Company"; - case 3: return "Large Company"; - case 4: return "Club"; - case 5: return "Primary School"; - case 6: return "Secondary School"; - case 7: return "Junior College"; - case 8: return "University or Department"; - case 9: return "Government Agency"; - default: return "Unknown"; + case 1: return "Small Company"; + case 2: return "Medium Company"; + case 3: return "Large Company"; + case 4: return "Club"; + case 5: return "Primary School"; + case 6: return "Secondary School"; + case 7: return "Junior College"; + case 8: return "University or Department"; + case 9: return "Government Agency"; + default: return "Unknown"; } } diff --git a/html/user/user.inc b/html/user/user.inc index af9624bba5..866bf9b8fe 100644 --- a/html/user/user.inc +++ b/html/user/user.inc @@ -1,10 +1,11 @@ ".TD2.LG_FONT."User Stats:\n"; - row("User Name: ", $user->name); - $row = sprintf("%s user since: ", $project); + row("Name: ", $user->name); + $row = sprintf("%s Participant since: ", $project); row($row, time_str($user->create_time)); row("Total credit: ", $user->total_credit); row("Recent average credit: ", $user->expavg_credit); @@ -18,6 +19,8 @@ function show_user_stats($user) { echo "\n"; } +// show private user info +// function show_user_profile($user) { echo TABLE2."\n"; echo "".TD2.LG_FONT."User Information:\n"; @@ -48,10 +51,10 @@ function show_hosts($user) { function show_host_brief($host) { echo " - id>$host->domain_name - $host->total_credit - $host->expavg_credit - "; + id>$host->domain_name + $host->total_credit + $host->expavg_credit + "; } // show a summary of the user. diff --git a/sched/assimilator.C b/sched/assimilator.C index 6d14c464d4..5bc81c4128 100644 --- a/sched/assimilator.C +++ b/sched/assimilator.C @@ -10,14 +10,15 @@ CONFIG config; // return nonzero if did anything // -bool do_pass() { +bool do_pass(APP app) { WORKUNIT wu; RESULT result; bool did_something = false; int retval; + wu.appid = app.id; wu.assimilate_state = ASSIMILATE_READY; - while (db_workunit_enum_assimilate_state(wu)) { + while (!db_workunit_enum_app_assimilate_state(wu)) { did_something = true; switch(wu.main_state) { case WU_MAIN_STATE_INIT: @@ -50,6 +51,7 @@ bool do_pass() { int main(int argc, char** argv) { int retval; bool asynch = false, one_pass = false; + APP app; int i; for (i=1; i", filename, sizeof(filename))) { - continue; } else if (match_tag(p, "")) { no_delete = false; strcpy(filename, ""); @@ -27,9 +25,11 @@ int wu_delete_files(WORKUNIT& wu) { } else if (match_tag(p, "")) { if (!no_delete) { sprintf(pathname, "%s/%s", config.download_dir, filename); + printf("deleting %s\n", pathname); unlink(pathname); } } + p = strtok(0, "\n"); } return 0; } @@ -41,9 +41,7 @@ int result_delete_files(RESULT& result) { p = strtok(result.xml_doc_in, "\n"); while (p) { - p = strtok(0, "\n"); if (parse_str(p, "", filename, sizeof(filename))) { - continue; } else if (match_tag(p, "")) { no_delete = false; strcpy(filename, ""); @@ -52,9 +50,11 @@ int result_delete_files(RESULT& result) { } else if (match_tag(p, "")) { if (!no_delete) { sprintf(pathname, "%s/%s", config.upload_dir, filename); + printf("deleting %s\n", pathname); unlink(pathname); } } + p = strtok(0, "\n"); } return 0; } @@ -67,7 +67,7 @@ bool do_pass() { bool did_something = false; wu.file_delete_state = FILE_DELETE_READY; - while (db_workunit_enum_file_delete_state(wu)) { + while (!db_workunit_enum_file_delete_state(wu)) { did_something = true; wu_delete_files(wu); wu.file_delete_state = FILE_DELETE_DONE; @@ -75,7 +75,7 @@ bool do_pass() { } result.file_delete_state = FILE_DELETE_READY; - while (db_result_enum_file_delete_state(result)) { + while (!db_result_enum_file_delete_state(result)) { did_something = true; result_delete_files(result); result.file_delete_state = FILE_DELETE_DONE; diff --git a/sched/handle_request.C b/sched/handle_request.C index efdeac106a..db792dfd32 100644 --- a/sched/handle_request.C +++ b/sched/handle_request.C @@ -363,9 +363,6 @@ int handle_results( if (retval) { fprintf(stderr, "Can't update WU\n"); } - fprintf(stderr, - "BOINC scheduler: set need_validate for WU %d\n", wu.id - ); } } } diff --git a/test/test.inc b/test/test.inc index b1f50374a7..42bcd0d56f 100644 --- a/test/test.inc +++ b/test/test.inc @@ -248,6 +248,8 @@ class Project { PassThru("cp $source_dir/sched/feeder $this->project_dir/cgi/"); PassThru("cp $source_dir/sched/result_retry $this->project_dir/cgi/"); PassThru("cp $source_dir/sched/validate_test $this->project_dir/cgi/"); + PassThru("cp $source_dir/sched/file_deleter $this->project_dir/cgi/"); + PassThru("cp $source_dir/sched/assimilator $this->project_dir/cgi/"); PassThru("cp $source_dir/html_ops/stripchart.cgi $this->project_dir/cgi/"); $f = fopen("$this->project_dir/cgi/config.xml", "w"); fputs($f, "\n"); @@ -420,6 +422,18 @@ class Project { PassThru("cd $this->project_dir/cgi; ./validate_test -one_pass -app $app->name -quorum $quorum > validate_out"); } + // do one pass of file_deleter + // + function file_delete() { + PassThru("cd $this->project_dir/cgi; ./file_deleter -one_pass > file_deleter_out"); + } + + // do one pass of assimilator + // + function assimilate($app) { + PassThru("cd $this->project_dir/cgi; ./assimilator -one_pass -app $app->name > assimilator_out"); + } + // this should stop the feeder and any other daemons // function stop() { diff --git a/test/test_uc.php b/test/test_uc.php index 10037d4099..8a6d506ad3 100644 --- a/test/test_uc.php +++ b/test/test_uc.php @@ -49,4 +49,9 @@ $project->check_results(2, $result); $project->compare_file("uc_wu_0_0", "uc_correct_output"); $project->compare_file("uc_wu_1_0", "uc_correct_output"); + + $project->file_delete(); + // input file should be gone here + $project->assimilate($app); + $project->file_delete(); ?> diff --git a/todo b/todo index 90d632551f..a2bd90ff19 100755 --- a/todo +++ b/todo @@ -1,36 +1,130 @@ -write garbage collector - -prevent 2 core clients from running at once - -support for HTTP and SOCKS proxies +----------------------- +HIGH-PRIORITY (should do for beta test) +----------------------- make get_local_ip_addr() work in all cases est_time_to_completion doesn't work for non-running tasks -get timezone working on all platforms -get benchmark working as separate process - must do this before send first scheduler request -validate in crontab +run backend programs (validate/file_deleter/assimilate) + from crontab; document Windows client make mini-logo fix "unable to calculate" completed results: show final CPU time + +Messages from core client + decide what messages should be shown to user, and how + log file? GUI? dialog? + +----------------------- +MEDIUM-PRIORITY (should do before public release) ----------------------- -use https for login (don't sent account ID or password in clear) - protect project admin web pages (htaccess) +get timezone working on all platforms Deadline mechanism for results - use in result dispatching - use in file uploading (decide what to upload next) - use in deciding when to make scheduler RPC (done already?) -create "result adder" program that detects WUs that don't have - a canonical result yet, and should, - and creates more results for them. - This should detect situations where we're getting lots - of error results, and skip over those WUs +Testing framework + better mechanisms to model server/client/communication failure + better mechanisms to simulate large load + do client/server on separate hosts? + +Delete files if needed to honor disk usage constraint + inform user if this happens + +implement max bytes/sec network preferences + +Global preferences + implement disk usage prefs + time-of-day prefs? + test propagation mechanism + set up multi-project, multi-host test; + change global prefs at one web site, + make sure they propagate to all hosts + limit on frequency of disk writes? + max net traffic per day? + implement in client + +Per-project preferences + test project-specific prefs + make example web edit pages + make app that uses them + set up a test with multiple projects + test "add project" feature, GUI and cmdline + test resource share mechanism + +CPU benchmarking + review CPU benchmarks - do they do what we want? + what to do when tests show hardware problem? + How should we weight factors for credit? + run CPU tests unobtrusively, periodically + check that on/conn/active fracs are maintainted correctly + check that bandwidth is measured correctly + measure disk/mem size on all platforms + get timezone to work + +CPU accounting in the presence of checkpoint/restart + test + +Test nslots > 1 + +Redundancy checking and validation + test the validation mechanism + make sure credit is granted correctly + make sure average, total credit maintained correctly for user, host + +Windows screensaver functionality + idle-only behavior without screensaver - test + +Data transfer + make sure restart of downloads works + make sure restart of uploads works + test download/upload with multiple data servers + make sure it tries servers in succession, + does exponential backoff if all fail + review and document prioritization of transfers + review protocol; make sure error returns are possible and handled correctly + +Scheduler + Should dispatch results based on deadline? + test that scheduler estimates WU completion time correctly + test that scheduler sends right amount of work + test that client estimates remaining work correctly, + requests correct # of seconds + test that hi/low water mark system works + test that scheduler sends only feasible WUs + +Scheduler RPC + formalize notion of "permanent failure" (e.g. can't download file) + report perm failures to scheduler, record in DB + make sure RPC backoff is done for any perm failure + (in general, should never make back-to-back RPCs to a project) + make sure that client eventually reloads master URL + +Application graphics + finish design, implementation, doc, testing + size, frame rate, whether to generate + +Work generation + generation of upload signature is very slow + +prevent file_xfer->req1 from overflowing. This problems seems to be + happening when the file_upload_handler returnes a message to the + client that is large. This causes project->parsefile to get wrong + input and so on. + +test HTTP redirect mechanism for all types of ops + +Add batch features to ops web +----------------------- +LONG-TERM IDEAS AND PROJECTS +----------------------- + +use https for login (don't sent account ID or password in clear) CPU benchmarking This should be done by a pseudo-application @@ -40,14 +134,6 @@ CPU benchmarking benchmarking programs (e.g. for graphics coprocessor) or project-specific programs. -Testing framework - better mechanisms to model server/client/communication failure - better mechanisms to simulate large load - do client/server on separate hosts? - -Add "garbage-collect state" fields to WU, result - whether deletion of files is OK, is done - investigate binary diff mechanism for updating persistent files verify support for > 4 GB files everywhere @@ -55,11 +141,6 @@ verify support for > 4 GB files everywhere use FTP instead of HTTP for file xfer?? measure speed diff -Delete files if needed to honor disk usage constraint - inform user if this happens - -implement max bytes/sec network preferences - Local scheduling more intelligent decision about when/what to work on - monitor VM situation, run small-footprint programs @@ -85,99 +166,12 @@ Include account ID in URL for file xfers This would let you verify network xfers by scanning web logs (could use that to give credit for xfers) -Global preferences - implement disk usage prefs - time-of-day prefs? - test propagation mechanism - set up multi-project, multi-host test; - change global prefs at one web site, - make sure they propagate to all hosts - limit on frequency of disk writes? - max net traffic per day? - implement in client - -Per-project preferences - test project-specific prefs - make example web edit pages - make app that uses them - set up a test with multiple projects - test "add project" feature, GUI and cmdline - test resource share mechanism - -Proxies - work through HTTP, Socks proxies - look at other open-source code (Mozilla?) - -Documentation - simplify/finish docs on server installation - get rid of text in INSTALL and INSTALL_CLIENT; - they should just refer to .html files - -Testing in general - figure out how to set up multi-project, multi-host tests - from a single script - automate some simple test cases - -Messages from core client - decide what messages should be shown to user, and how - log file? GUI? dialog? - -CPU benchmarking - review CPU benchmarks - do they do what we want? - what to do when tests show hardware problem? - How should we weight factors for credit? - run CPU tests unobtrusively, periodically - check that on/conn/active fracs are maintainted correctly - check that bandwidth is measured correctly - measure disk/mem size on all platforms - get timezone to work - WU/result sequence mechanism design/implement/document Multiple application files document, test -CPU accounting in the presence of checkpoint/restart - test - -Test nslots > 1 - -Redundancy checking and validation - test the validation mechanism - make sure credit is granted correctly - make sure average, total credit maintained correctly for user, host - -Scheduler RPC - formalize notion of "permanent failure" (e.g. can't download file) - report perm failures to scheduler, record in DB - make sure RPC backoff is done for any perm failure - (in general, should never make back-to-back RPCs to a project) - make sure that client eventually reloads master URL - -Data transfer - make sure restart of downloads works - make sure restart of uploads works - test download/upload with multiple data servers - make sure it tries servers in succession, - does exponential backoff if all fail - review and document prioritization of transfers - review protocol; make sure error returns are possible and handled correctly - -Application graphics - finish design, implementation, doc, testing - size, frame rate, whether to generate - -Work generation - generation of upload signature is very slow - -Windows GUI - finish design/implement - display credit info, team - -Windows screensaver functionality - idle-only behavior without screensaver - test - Versioning think through issues involved in: compatibility of core client and scheduling server @@ -187,29 +181,10 @@ Versioning Need version numbers for protocols/interfaces? What messages to show user? Project? -Scheduler - Should dispatch results based on deadline? - test that scheduler estimates WU completion time correctly - test that scheduler sends right amount of work - test that client estimates remaining work correctly, - requests correct # of seconds - test that hi/low water mark system works - test that scheduler sends only feasible WUs - Persistent files test design/implement test reporting, retrieval mechanisms (do this using WU/results with null application?) -User HTML - leader boards - NET_XFER_SET review logic; prevent one stream for starving others - -test HTTP redirect mechanism for all types of ops - -prevent file_xfer->req1 from overflowing. This problems seems to be -happening when the file_upload_handler returnes a message to the -client that is large. This causes project->parsefile to get wrong -input and so on.