Commit Graph

159 Commits

Author SHA1 Message Date
David Anderson fc8eca4216 client: if we request work from a project and don't get any notices, clear that project's scheduler notices
I.e. if you got an "insufficient disk space" notices, and you fixed the problem, the notice should go away.
2013-08-13 14:56:37 -07:00
David Anderson 59ba61b323 client (Android): don't use network preferences
Many Android users had existing preferences with settings like
"don't compute when idle" that make sense for PCs but not mobile devices.
When this pref is enforced on Android, no computing happens
and user confusion results.
We're addressing this by using only local prefs on Android.
We considered other approaches - e.g. having a "mobile" venue -
but they're too complex.
2013-08-04 15:13:26 -07:00
David Anderson 47562339e3 client: if idle instance, fetch work even if uploading 2013-06-21 19:57:25 -07:00
David Anderson eee2879a57 client: fix bug that allowed work fetch request while file uploads active
A while back we added a mechanism intended to defer work-request RPCs
while file uploads are happening,
with the goal of reporting completed tasks sooner
and reducing the number of RPCs.
There were 2 bugs in this mechanism.
First, the decision of whether an upload is active was flawed;
if several uploads were active and 1 finished,
it would act like all had finished.
Second, when WORK_FETCH::choose_project.cpp() picks a project,
it sets p->sched_rpc_pending to RPC_REASON_NEED_WORK.
If we then decide not to request work because an upload
is active, we need to clear this field.
Otherwise scheduler_rpc_poll() will do an RPC to it,
piggybacking a work request and bypassing the upload check.
2013-06-14 22:40:43 -07:00
David Anderson 1e106d6fd7 client: fix bug that sometimes prevented work fetch when CPU throttling in use 2013-06-13 20:50:21 -07:00
David Anderson 846b8c7757 all components: change strcpy() to strlcpy() when possible.
This commit should cover the client and manager code.
2013-06-03 20:24:48 -07:00
David Anderson 9c50abaffa Manager and GUI RPC interface: fix possible buffer overruns
If the user typed an extremely long URL into the
Attach to Account Manager wizard, a buffer overrun could result.
There were several places in the code that assumed user-entered
URLs are small (e.g. 256 chars):
- canonicalize_master_url.cpp()
- several GUI RPC interfaces, when generating XML request message
- URL-escaping (not relevant here, but fix anyway)
Change all these to stay within buffers regardless of URL size.
Note: do this by truncation.
This will cause error messages like "can't connect to project"
rather than saying the URL is too long.  That's OK.
2013-05-27 23:08:02 -07:00
David Anderson 5452d3998f client: show app_config warnings only on startup and reread config 2013-05-19 10:02:00 -07:00
David Anderson c6d79d1172 client: fix bug that could cause client to never contact project
if a project sends us <no_rsc_apps> flags for all processor types,
then by default the client will never do a scheduler RPC to that project again.
This could happen because of a transient condition in the project,
e.g. it deprecates all its app versions for a while.

To avoid this situation, the client now checks whether the no_rsc_apps flags
are set for all processor types.
If they are, it clears them all.
This will cause work fetch to use backoff,
and the client will occasionally contact the project.
2013-05-17 10:25:03 -07:00
David Anderson f1cb92184a client: apply app_config.xml settings after each scheduler RPC 2013-05-14 08:46:17 -07:00
David Anderson c00f27a5a5 client: message tweak (show "don't need" in work request msg) 2013-04-26 12:19:43 -07:00
David Anderson f6a61fe801 - client: major overhaul of work-fetch logic based on suggestions
by Jacob Klein.
    The new policy is roughly as follows:
    - find the highest-priority project P that is allowed
        to fetch work for a resource below buf_min
    - Ask P for work for all resources R below buf_max
        for which it's allowed to fetch work,
        unless there's a higher-priority project allowed
        to request work for R.
    If we're going to do an RPC to P for reasons other than work fetch,
    the policy is:
    - for each resource R for which P is the highest-priority project
        allowed to fetch work, and R is below buf_max,
        request work for R.
2013-04-02 12:32:28 -07:00
David Anderson 9481e04e7b - client: there were many places in the code where we keep track
(usually in a static variable called "last_time")
    of the last time we did something,
    and we only do it again when now - last_time exceeds some interval.
    Example: sending heartbeat messages to apps.
    Problem: if the system clock is decreased by X,
    we won't do any of these actions are time X,
    making it appear that the client is frozen.
    Solution: when we detect that the system clock has decreased,
    set a global var "clock_change" for 1 iteration of the polling loop,
    and disable these time checks if clock_change is set.
2013-03-22 10:28:20 +01:00
David Anderson 546ea233a0 - client: fix small work fetch bug that caused the client to
not add a piggyback work request when it should have.
2013-03-15 13:38:45 +01:00
David Anderson 7177185585 - client: show "%" correctly in messages from scheduler 2013-03-05 15:27:09 +01:00
David Anderson 7328d4a1ad - client: re-apply app configuration after each scheduler RPC;
otherwise the changes get overwritten
2013-03-04 17:01:36 +01:00
David Anderson 1174b00aba - client/manager: tweaks to Intel GPU code 2013-03-04 15:27:25 +01:00
Charlie Fenton ce87ec9848 OpenCL: First pass at adding support for Intel Ivy Bridge GPUs 2013-03-04 15:23:39 +01:00
David Anderson aa31777003 - client: if a project has 64 or more ready-to-report tasks,
report them.
    64 is chosen a bit arbitrarily, but the idea is to
    limit the number of tasks reported per RPC,
    and to accelerate the reporting of small tasks.
2013-03-04 15:04:51 +01:00
David Anderson 7768f6da60 - client: fix bug where, when updating a project, we fail to request work even though higher-priority projects are marked as no-new-tasks or are otherwise ineligible for work fetch. 2013-03-04 14:09:43 +01:00
David Anderson 1e06eb2fda - fix a few unlikely but possible file-descriptor leaks
- remote job submission: always compute fraction done when showing
    batch list; check for nonexistent user
2013-03-01 16:17:19 +01:00
David Anderson 9cf10b400a - GUI RPC: expose TIME_STATS info (e.g. on_frac) in
the binding of the get_state() RPC
- client: move client_start_time and previous_uptime
    from CLIENT_STATE to TIME_STATS,
    so that these are also visible in GUI RPC
- scheduler RPC: move uptime and previous_uptime
    into <time_stats>
- client: condition an RR simulation message on <rrsim_detail>
- boinccmd: show TIME_STATS info in --get_state
2013-03-01 16:08:52 +01:00
David Anderson 36c304e7d3 - client: maintain current and previous uptime, and include them in scheduler RPC request. - scheduler: parse them Note: this is to support a future feature where the scheduler will send non-checkpointing jobs only clients likely to be able to complete them. 2013-02-26 16:53:20 +01:00
David Anderson 8b67c32187 - client: if we get a job for which a GPU is missing,
keep the RESULT record so that we can report it to the scheduler.
		Otherwise we'll keep getting the same job if the project has
		<resend_lost_results> set.

svn path=/trunk/boinc/; revision=25879
2012-07-18 01:42:08 +00:00
David Anderson 331114d961 - client: minor code shuffle
svn path=/trunk/boinc/; revision=25627
2012-04-30 21:12:35 +00:00
David Anderson bbfbef0fe8 - client: code cleanup. Move RESULT and PROJECT to separate files
svn path=/trunk/boinc/; revision=25621
2012-04-30 21:00:28 +00:00
David Anderson 72368a6b20 - A first attempt to fix the bug where apps die with exit(1)
(whereas they didn't do this w/ older clients).
    On Windows, the client uses TerminateProcess(h, 1) to kill processes;
    the 1 is the exit code the process will appear to have.

    So instead, add a "will_restart" bool arg to the various kill
    functions, and if set use 0 (= STATUS_SUCCESS),
    otherwise use EXIT_ABORTED_BY_CLIENT.

    Note: in principle this shouldn't make any difference
    for quitting tasks,
    since handle_exited_app() checks for task state QUIT_PENDING
    and ignores the exit code in that case.
    The only place I can see where it would make any difference
    is when we kill a process because it hasn't been handling
    queued shared-memory messages for 180 seconds.

- client: add more info to the message about an exited app

- client: function return values (ERR_*) are different from
    process exit codes (EXIT_*).
    But in many places we were using return values as exit codes.
    Fix these.
    Also, break out the different types of limits a job can exceed
    (time, disk, memory) into difference exit codes.


svn path=/trunk/boinc/; revision=25601
2012-04-26 05:28:45 +00:00
David Anderson 6591272c80 - client: fix crashing bug that happened when a scheduler reply
had a parse error, and it included project files.
    While parsing the scheduler reply we'd add FILE_REFs to
    PROJECT::project_files,
    but wouldn't link them to FILE_INFOs since this is done
    only if the reply parses correctly.
    The next garbage_collect() would dereference these NULL pointers.

    Solution: parse the FILE_REFS into SCHEDULER_REPLY::project_files.
    Copy this to PROJECT::project_files only if the reply parses.


svn path=/trunk/boinc/; revision=25598
2012-04-25 05:51:26 +00:00
David Anderson 9d25481174 - scheduler: fix bug that tried to open plan class spec file
on each request.
- client: when showing how much work a scheduler request returned,
    scale by availability (as is done to show the amount of the request)
- client in account manager request, <not_started_dur> and
    <in_progress_dur> are in wall time, not run time
    (i.e. scale them by availability)

Note: there's some confusion in the code between runtime and wall time,
    where in general wall time = runtime / availability.
    New convention: let's use "runtime" for the former,
    and "duration" for the latter.

svn path=/trunk/boinc/; revision=25597
2012-04-25 04:10:29 +00:00
David Anderson c22ac04ad0 - scheduler: don't max with min_work_buffer() in estimating
job turnaround time.
    min_work_buffer doesn't necessarily reflect network disconnect periods
- client simulator: compile fixes


svn path=/trunk/boinc/; revision=25521
2012-03-30 21:39:22 +00:00
David Anderson 8ebe90fbe3 - client: report results if CPU suspend pending in next 30 min
svn path=/trunk/boinc/; revision=25492
2012-03-26 20:28:23 +00:00
David Anderson adab6254bc Update Translation
svn path=/trunk/boinc/; revision=25477
2012-03-23 16:25:19 +00:00
David Anderson ad232b2869 - client: report completed results if a time-of-day network suspend is
scheduled within the next 30 minutes


svn path=/trunk/boinc/; revision=25465
2012-03-20 19:37:04 +00:00
David Anderson a6bf5aecf3 - client: tweak to work-fetch policy:
if we're making a scheduler RPC to a project for reasons
    other than work fetch,
    and we're deciding whether to ask for work, ignore hysteresis;
    i.e. ask for work even if we're above the min buffer
    (idea from John McLeod).


svn path=/trunk/boinc/; revision=25291
2012-02-18 23:19:06 +00:00
David Anderson cdd40fcc10 - client: intermediate checkin for async file verification
svn path=/trunk/boinc/; revision=25202
2012-02-06 06:06:44 +00:00
David Anderson bba4ce24ce - client: compute projects' disk share (based on resource share).
Report it (along with disk usage) in scheduler request messages.
    This will allow the scheduler to send file-delete commands
    if the project is using more than its share.
- client: add <disk_usage_debug> log flag
- create_work: add --help, show --command_line option


svn path=/trunk/boinc/; revision=24968
2012-01-02 05:53:42 +00:00
David Anderson fc6d530a6c - client: shuffle disk usage code in preparation for disk accounting
- use new XML parser in some GUI RPC code


svn path=/trunk/boinc/; revision=24925
2011-12-28 14:52:03 +00:00
David Anderson bc35060726 - client: when contacting a project for reasons other than
work fetch (e.g. to report completed jobs)
    only request work if it's the project we would have chosen
    if we were fetching work.
- client: the way in which project priorities were adjusted
    in work fetch to reflected currently queued work was wrong.
- client: fix bug in the way project priorities are adjusted
    in RR simulator
- client emulator: if there are results in the state file
    with states DOWNLOADING or UPLOADING,
    change them to DOWNLOADED or UPLOADED.
    Otherwise they're stuck.


svn path=/trunk/boinc/; revision=24737
2011-12-06 04:21:27 +00:00
David Anderson 2ac9fe8566 - client/scheduler:
If the file "client_opaque.txt" exists on the client,
    include its contents in scheduler request messages.
    On the scheduler, parse this into SCHEDULER_REQUEST::client_opaque,
    where it can be used by the customizable scheduler functions.


svn path=/trunk/boinc/; revision=24586
2011-11-14 06:27:36 +00:00
David Anderson fb568462c6 - client: fix compile warning
svn path=/trunk/boinc/; revision=24527
2011-11-04 17:02:36 +00:00
Charlie Fenton bdf5cf405d client: Fix compile error
svn path=/trunk/boinc/; revision=24524
2011-11-04 09:27:01 +00:00
David Anderson 53af2ae778 - client/API: pass bool using_sandbox in APP_INIT_DATA;
says whether the client is using account-based sandboxing.
    Needed by vboxwrapper.
- web: don't show authenticator in Your Account page.
    The problem with authenticators is that if a bad guys gets yours,
    they can log in to your account even if you change your password.
    Eventually we should not use them at all
    (i.e. in cookies and sent to client).
- make_project: copy python stuff (e.g. bin/start) for web-only projects;
    generate appropriate project.readme file for web-only projects.


svn path=/trunk/boinc/; revision=24447
2011-10-21 06:58:35 +00:00
David Anderson 57c04979b3 - client: don't do scheduler-requested RPCs if
- project is set to No New Work, and
    - project has no jobs on the client


svn path=/trunk/boinc/; revision=24348
2011-10-07 21:20:42 +00:00
David Anderson 9d2d540267 - client: intermediate checkin for replicated trickle-ups.
Not finished yet.
- example app: add --trickle_up and --trickle_down options,
    for testing trickle messages


svn path=/trunk/boinc/; revision=24245
2011-09-20 18:49:38 +00:00
David Anderson c0f977b19c - client: fix bugs related to white space around code signing keys
- win compile fixes

svn path=/trunk/boinc/; revision=24095
2011-08-31 16:36:17 +00:00
Charlie Fenton 97f5146f2a define GPU_TYPE_NVIDIA, GPU_TYPE_ATI, use everywhere instead of literal strings "NVIDIA" and "ATI" to ensure uniformity
svn path=/trunk/boinc/; revision=24090
2011-08-31 11:08:13 +00:00
David Anderson 94e8c48220 - client: change --detach_phase_two (??) to --detach_console
- eliminate compiler warnings (e.g. shadowed vars)
    in various places, mostly in client


svn path=/trunk/boinc/; revision=23710
2011-06-12 20:58:43 +00:00
David Anderson d9574bacf7 - client: fix bug in logic that defers work fetch if upload active
svn path=/trunk/boinc/; revision=23707
2011-06-10 22:21:53 +00:00
David Anderson 436415cfe1 - scheduler, back end: add "homogeneous app version" feature.
Lets you specify, on a per-app basis,
    that all instances should be done using the same app version.
    This is for validation in the presence of GPUs.
- scheduler: code cleanup
    - Instead of adding a bunch of non-DB fields to RESULT,
        used a derived class SCHED_DB_RESULT.
    - Instead of storing a pointer to BEST_APP_VERSION in RESULT,
        store the structure itself.
        This simplifies the memory allocation situation.
- client: condition "Got server request to delete file" messages
    on <file_xfer_debug>


svn path=/trunk/boinc/; revision=23636
2011-06-06 03:40:42 +00:00
David Anderson e8c5e5bf5f - client: my checkin of 8 Apr 2011 didn't work in some cases, e.g.:
- client finishes a job
    - before upload starts, work fetch runs and decides to fetch work
        from that project.
    Solution:
    - set PROJECT::last_upload_start when job finishes,
        and clear it when a job is uploaded.
    - defer scheduler RPC for a limited time if last_upload_start
        is set, even if a transfer is not active


svn path=/trunk/boinc/; revision=23633
2011-06-03 18:45:21 +00:00