- client: increase <abort> timeout from 5 sec to 60;
this gives the diagnostic system time to download
symbol files (which may be several MB) and write a stack trace.
svn path=/trunk/boinc/; revision=15162
and it doesn't do so within 10 seconds, kill it.
This deals with the situation where the app is ignoring messages
(e.g. because it forgot to end a critical section).
- client: if either the FP or int benchmark runs less than
3 CPU seconds (out of 10 seconds of wall time) ignore the benchmark.
This is an effort to deal with a problem where (for unknown reasons)
the int benchmark runs for a tiny amount of CPU time,
leading to an absurdly large result
- Manager: don't prepend "[error]" to MSG_INTERNAL_ERROR messages;
the client already does this.
THESE ARE ALL BUG FIXES
svn path=/trunk/boinc/; revision=15128
- update_versions: use __ (not :) as separator for plan class
- client: add plan_class to APP_VERSION;
an app version is now identified by platform/version/plan_class
- client CPU scheduler: don't assume apps use 1 CPU
- client: add avg_ncpus, max_cpus, flops, cmdline to RESULT
- scheduler: implement app planning scheme
Other changes:
- client: if symlink() fails, make a XML soft link instead
(for Unix running off a FAT32 FS)
- client: don't accept nonpositive resource share from AMS
- daemons and DB: check for error returns from enumerations,
and exit if so. Thus, if the MySQL server goes down,
all the daemons will soon exit.
The cron script will restart them every 5 min,
so when the DB server comes back up so will the project.
- web: show empty max CPU % as ---
- API: get rid of all_threads_cpu_time option (always the case now)
svn path=/trunk/boinc/; revision=14966
resulting in a lot of read-only files in its slot directories.
When the client attempts to delete these files,
each delete fails and the client retries for about 5 seconds.
This adds up to a delay of about 20 minutes,
during which the client (and Manager) appear to be hung.
Solution:
1) if a file delete fails with error ERROR_ACCESS_DENIED,
use SetFileAttributes() to clear the read-only flag, then try again.
2) Don't use the 5-second retry mechanism when clearing out
slot directories. These can contain unbounded numbers of files,
and this can lead to long periods where the client appears hung.
svn path=/trunk/boinc/; revision=14557
This is for debugging apps (currently works only in Unix).
What it does: when running an app,
the client does everything except actually fork/exec the app,
i.e. it sets up the slot dir, creates shared mem segment etc.
It then continues as if the app were actually running,
and you can then manually run your app under a debugger
in the slot directory.
Note: the client won't notice the termination of your app.
- API, Unix: in situations where the timer thread wants to exit
(e.g. it notices a missing heartbeat).
don't directly call boinc_exit(),
since this touches data structures that the worker thread
may be using concurrently.
Instead, set a flag telling the worker thread to call boinc_exit()
(which it will do from its signal handler)
This is an attempt to fix problems reported by Bernd;
I haven't tested it.
- scheduler: add config flag for uploading usage data
- web: show account key and weak account key on user page
- added some code for multithread support (not finished)
api/
boinc_api.C
svn path=/trunk/boinc/; revision=14542
removed references to "graphics thread"
removed HANDLE timer_quit_event
removed enable_heartbeat/disable_heartbeat messages
(not sure what the ideas was, but no longer exists)
removed heartbeat_active flag (use options.check_heartbeat instead)
read heartbeat-channel messages even if heartbeat disabled
(since we use that channel for WSS messages too)
- client: remove ACTIVE_TASK::thread_handle (not used)
svn path=/trunk/boinc/; revision=14323
- move client sandbox-specific code to a new file, sandbox.C
- remove g_use_sandbox from util.C; move to MainDocument.cpp (manager)
and sandbox.C (client)
- don't declare check_security() in util.h; it's not in util.C
- don't call remove_project_owned_file_or_dir() in
boinc_delete_file_aux() or boinc_rmdir();
rather, at the points in the client that delete
dirs that are usually owned by boinc_projects,
call remove_project_owned_file_or_dir() first,
then clean_out_dir().
- rename boinc_exec() to switcher_exec() and move it to sandbox.C
Note: this change was sparked by needing to remove a call to getgrnam()
from boinclib, to avoid requiring the same version of glibc
on both compile and target hosts
svn path=/trunk/boinc/; revision=13784
(deciding which app to use, implementing blanking interval, etc.)
This logic is all now in the screensaver itself.
- GUI RPC: removed get/set screensaver mode RPCs
- API: added a "backwards_compatible_graphics" flag to BOINC_OPTIONS.
V6 apps should set this.
If set, the runtime library checks for graphics messages
from the client, and launches/kills the graphics app (if any).
The app will then work graphically with pre-V6 clients.
- removed some old files
svn path=/trunk/boinc/; revision=13651
These let the Manager run the graphics app.
Graphics apps have physical name *v6graphics*
- Separated ACTIVE_TASK::write() and ACTIVE_TASK::write_gui().
These need to write largely disjoint set of items.
- code cleanup: remove a zillion "else"s in parsing code
- code cleanup: change a zillion match_tag(buf, "<foo/>"
to parse_bool(buf, "foo")
client/
app.C,h
client_state.C
client_types.C,h
lib/
gui_rpc_client.h
gui_rpc_client_ops.C
sched/
server_types.C
svn path=/trunk/boinc/; revision=12938
This cause the core client to exit immediately before or after
running a job,
letting you examine the contents of the slot directory.
- scheduler: changed max # of CPUs used in daily_result_quota
limit from 4 to 8, and make it a compile-time parameter
- feeder/scheduler: make the number of work items in shared
memory configurable (in config.xml).
The element is <shmem_work_items>
- feeder: make the size of the work item query configurable
(<feeder_query_size)
- feeder: remove code related to removing infeasible results
from shared mem.
This mechanism was never needed,
and I think a timeout would accomplish the same effect.
client/
app.C
app_start.C
client_state.C,h
cs_cmdline.C
sched/
feeder.C
sched_array.C
sched_config.C,h
sched_send.C
sched_shmem.C,h
sched_util.C
show_shmem.C
svn path=/trunk/boinc/; revision=12771
Remove the tacet assumption that a host can handle
applications for a single platform.
With the Apr 30 scheduler changes,
a project may (at different times)
send app versions for the same app and version number,
but different platforms.
Before we would have ignored all but the first;
now we handle them correctly.
Implementation notes:
- Add APP_VERSION.platform, RESULT.platform,
and RESULT.version_num.
If these are missing from an XML doc
(e.g. an existing state file or a scheduler reply
from a project not running current server)
then set to the primary platform.
- Continue to write workunit.version_num
and active_task.version_num to state file,
even though these are no longer part of the struct.
This allows users to revert to an older version.
client/
app.C
check_state.C
client_state.C,h
client_types.C,h
cs_apps.C
cs_scheduler.C
cs_statefile.C
sim.C
svn path=/trunk/boinc/; revision=12542