Sometimes (I don't understand why) you get "constant already defined"
warnings for constants in project/project.inc.
This is related to recursive includes.
Principle:
- include project.inc from util.inc (and nowhere else)
- include util.inc from the top-level .php file (and nowhere else)
I seemed to be playing whack-a-mole with problems related to
recursive inclusions of project.inc.
Solve this by changing how the use of mysqli can be inhibited:
instead of defining NO_MYSQL in project, put <no_mysqli/> in config.xml
projects may have developed a lot of PHP code that uses the
old mysql_* interface.
Let them keep using this interface by putting
define('MYSQLI', false);
in project/project.inc
Change all the PHP code to use _mysql_query() instead of mysql_query()
(and similar for other functions).
_mysql_query() uses the mysqli API if available, else the old API.
Going forward, all PHP code should the DB abstration layer if possible;
else it should use the _mysql_* functions.
See http://boinc.berkeley.edu/trac/wiki/PerAppCredit
If enabled (by the <credit_by_app> config flag)
validators will maintain on a per-(app, user, credit type) basis,
and same for teams,
in new DB tables credit_user and credit_team.
This info is displayed in the web site, on user and team pages,
using project-supplied functions to generate the HTML.
Note: update_stats doesn't decay the recent-average values
for per-app credit; I'll add this if needed.
I set out to make project-specific prefs use the same object framework
(PREF_BOOL, PREF_NUM etc.) as other prefs.
This turned out to be infeasible, so I settled for a code cleanup instead.
The reason it's infeasible is that the "other prefs" code
uses a SAX parser (xml_parser_create() etc.),
while the code for project-specific prefs uses the primitive
parse_element() and parse_next_element() functions in util_basic.inc.
If I'm going to change anything, I want to switch to a DOM parser
(e.g. simplexml) for both purposes.
When deleting a spammer, delete
- forum_logging
- private messages
- notifications
Also, when displaying private messages, check if sender
doesn't exist, and delete if so
Having a project symlink its html/ to a different dir doesn't work,
because if you cd into html/ops to run a script,
there's no way to know where the project dir is, so you can't find config.xml
* The previous implementation doesn't work if the /html directory is a symlink
* The new implementation supports symlinks while not adding any additional
assumptions regarding relative file locations
Background:
BOINC's codebase consists of regular source code for compilation as well as
source code for direct deployment, such as the /html folder. Projects might
choose to use a checkout of the BOINC repository and a symlink in their deployed
project root directory targeting the /html directory to facilitate html-related
patch tracking and deployment (in situ). This requires the "html" symlink not to be
resolved during lookups of the project root directory (e.g. to access config.xml).
My last commit did this using a new API call.
But this would require rebuilding apps any time you want to change it;
too much work.
So instead make it an attribute of apps,
which you can set via the admin web interface.
Corresponding changes to client.
Depending on your mail server, PHPMailer can take various config options.
Instead of passings these as variables from project.inc to email.inc,
have project project.inc define a function make_php_mailer()
that creates a PHPMailer object, configures it as needed, and returns it.
For projects that use PHPMailer, this will require modifying your project.inc.
- I'd like to transition from Python (and the clunky
DB interface we developed) to PHP for tools like xadd
- I'd like to figure out how to change the PHP DB interface
so that we can define generic functions like insert(), update() etc.
just one, in a base class.
Do this by putting
define("DISABLE_FORUMS", true);
in your html/project/project.inc.
If this is set, admin users can still see enough forum functionality
to post and edit news items
(this is linked to from the Admin web interface).
Other users, or non-logged-in access, sees news but no forums
or forum-related info.
Spam needs to be deleted, not hidden.
Add buttons for deleting posts and threads.
For now, these are available only to admins
(ADMIN, DEV, SCIENTIST privileges).
It doesn't make sense to show the project banner in admin pages;
the banner typically has (broken) links to non-admin pages.
Also, include basic stylesheets in admin pages.
The latest client reports the peak working set size, swap size,
and disk usage for completed jobs.
Add fields to the results table to store these.
Parse them in scheduler request messages, and write to the DB.
Display them in the result web page.
This data can be used to improve (or even automate)
the job estimates for memory and disk usage.
The older interface is deprecated and may eventually be removed.
Note: some of the more ancient PHP code directly uses the old interface.
We'll have to update this at some point.
Now that the manager supports images/video in notices,
we need to allow these in new posts
(i.e. posts to the News forum, which only admins can do).
Don't escape HTML tags in the web display of news items,
or in their export in RSS
- the exported team list wasn't parsing due to non-ASCII characters
in some team descriptions.
htmlspecialchars() wasn't doing the job.
Use DOMDocument instead.
- If SHOW_NONVALIDATE_TEAMS is set (as on the BOINC-wide teams site)
show teams whose founders email addresses are not validated
(and hence won't be exported).
On some hosts, gpu_active_frac may be much less than active_frac
(i.e., GPUs may be available much less than CPUs).
Use gpu_active_frac in the following places:
- scheduler: in estimating the elapsed time of jobs,
to decide whether they can meet deadline
- scheduler: in computing the effective speed of a (host, app version),
when deciding what size class it belongs to
- size_census: in computing effective speed of (host, app versions)
(Previously, we were just using active_frac in all these cases)
- gpu_active_frac is the fraction of time GPU use is allowed
while the client is running.
Previously the client reported it but we weren't storing it in the DB.
We may need it in the future for batch scheduling logic.
- fix a crashing bug in scheduler
- client: minor message tweak
The web RPCs done by the client during project attach
(lookup_account, create_account)
have an email address and password hash in their request.
Network sniffers could potentially see these,
so we should use HTTPS for these RPCs if possible.
However, not all BOINC projects have SSL-enabled web servers.
So I did the following:
- Change get_project_config.php to return an additional
<web_rpc_url_base> element.
This is SECURE_URL_BASE (if specified in the project's
project.inc config file) or, if not, the master URL.
- This new element is parsed into the PROJECT_CONFIG structure.
- In calls to create_account and lookup_account,
the Manager uses PROJECT_CONFIG::web_rpc_url_base
if it's available, else the master URL.
So, the new Manager/client uses HTTPS for RPCs to projects
that have updated their get_project_config.php,
and specify a SECURE_URL_BASE with https:// prefix.
Android note: I added code to parse the new config element,
but didn't change the higher-level code;
Joachim will need to do this.
The batch query call used by Condor (query_batch_set(), in the C++ API)
returned info about all the jobs in the set of batches,
even those that hadn't changed.
This is potentially inefficient - a query might return info
about 10,000 jobs, only a few (or none) of which have changed state
since the last call.
Solution: add a "min_mod_time" parameter to the call.
Only jobs that have changed state since that time are reported.
Also, add a "server_time" field to the return,
giving the current time on the server
(in case there's clock skew between client and server)
Also, fix some text scrambling introduced in previous checkin;
there must have been a gremlin in my vim.