boinc/todo

336 lines
11 KiB
Plaintext
Executable File

-----------------------
BUGS (arranged from high to low priority)
-----------------------
- global battery/user active prefs are always true in the client
- GUI client should display "Upload failed" and "Download failed"
in transfers tab when failure occurs
- GUI: Result status should say "downloading files", "uploading files", etc.
- message window should reposition to bottom when new message
- show_message should expect \n, discard it if GUI
- Win GUI: line between menus and tabs
- "show graphics" should not use right-click
- win GUI: reduce flicker?
- on major version change, should discard any pending WUs
- labels on disk graph are not clear
- document and add to global prefs?
start_saver
run_minimized
run_on_startup
hangup_if_dialed
- trim leading/trailing spaces from account ID (Win GUI)
- when i quit a project, I have to exit and restart the client, which is ugly.
- after quitting a project, the project name still showed up in gray
in the projects list - I could right click on it to "relogin"
(which did nothing) or "quit project"
which I thought I already did.
- consider warning message during windows (and perhaps other platforms)
install that checks to see if the BOINC directory already exists,
and if so, should the user overwrite it? or upgrade it?
- After running all night (on Win98) I shook the mouse to wake up
the blank screen, and all I saw was the top half of the screen
was solid gray, and the bottom half the
bottom half of the astropulse graphics.
They weren't moving. The computer was frozen.
I had to ctrl-alt-del to restart.
-----------------------
HIGH-PRIORITY (should do for beta test)
-----------------------
"Add project" behavior:
Goal: give user timely feedback if bad project URL or account ID;
don't leave bad project files sitting around
A project addition is "successful" when
1) the client fetches the master page,
2) the master page has at least one scheduler URL
3) the client contacts a scheduler and gets a user name back.
The cmdline and GUI clients need to inform the user if a project
add is not successful, since it probably means the master URL
or account ID were typed in wrong.
A project is "tentative" if the above hasn't happened yet.
This is flagged in the project file (<tentative/>) and in memory
A "failure event" is
- master fetch fails
- master page has no scheduler URLs
- scheduler RPC fails
- scheduler RPC returns no user name
A "success event" is
- scheduler RPC returns user name
cmdline client
first time (no projects initially) or -add_new_project flag:
new project is tentative (write flag to project file)
if failure event occurs for tentative project:
project_add_fail(PROJECT&)
print "check URL and account ID" message
delete project file
exit
If success event occurs for tentative project
project_add_succeed(PROJECT&)
clear tentative flag, rewrite account file
GUI client:
first-time dialog or "attach to project" command:
show a modal dialog
("verifying account" w/ "cancel" button)
project_add_fail(PROJECT&)
replace w/ modal error dialog w/ retry, cancel
project_add_succeed(PROJECT&)
Delete files if needed to honor disk usage constraint
should include per-result constraints (e.g. giant stderr files)
inform user if files deleted
- "Connect Now" command should apply to a particular project,
and should override the backoff on that project
implement server watchdogs
-----------------------
THINGS TO TEST (preferably with test scripts)
-----------------------
time-of-day limitation
Limit frequency of disk writes
make sure it actually works
- Test suspend/resume functionality on Windows/UNIX
- verify that if file xfer is interrupted, it resumes at right place
- result reissue
- WU failure: too many errors
- WU failure: too many good results
- credit is granted even if result arrives very late
- multiple preference sets
- shared memory and CPU time measurement, with and without the BOINC API
- timezone on all platforms
- preference propagation between projects
- ensure cpu time doesn't reset if app is killed rather than quitting
-----------------------
MEDIUM-PRIORITY (should do before public release)
-----------------------
add an RPC to verify an account ID (returns DB ID for user)
needed for multi-project stats sites
implement a "clear project" command (GUI and cmdline)
implement a "fetch prefs" command (regular RPC w/o work request)
all RPCs should return a "user-specific project URL"
to be used in GUI (might refer to user page)
when you create a team you should join that team
in GUI, project name should hyperlink to a project-specified URL
(typically user page for that project)
preference flag for confirm before accepting executable file
abort result if any file exceeds max_nbytes
per-WU limits
max disk
max CPU
max VM size
let user choose language files in installation process
write general language file manipulation functions
use https to secure login pages, do we care about authenticator
being transmitted without encryption from the client?
abort app if excess memory used
Windows 9x CPU time calculated incorrectly
write docs for project management
how to start/stop server complex
what needs to be backed up and how
account creation: show privacy/usage policies
finish SOCKS implementation, test
decide what to do with invalid result files in upload directory
make get_local_ip_addr() work in all cases
think about sh_fopen related functionality in BOINC client
Implement FIFO mechanism in scheduler for results that can't be sent
user profiles on web (borrow logic from SETI@home)
Devise system for porting applications
password-protected web-based interface for
uploading app versions and adding them to DB
XXX should do this manually since need to sign
Add 2-D waterfall display to Astropulse
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?)
Testing framework
better mechanisms to model server/client/communication failure
better mechanisms to simulate large load
do client/server on separate hosts?
Global preferences
test propagation mechanism
set up multi-project, multi-host test;
change global prefs at one web site,
make sure they propagate to all hosts
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
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
rather than by the core client.
This would eliminate the GUI-starvation problem,
and would make it possible to have architecture-specific
benchmarking programs (e.g. for graphics coprocessor)
or project-specific programs.
investigate binary diff mechanism for updating persistent files
verify support for > 4 GB files everywhere
use FTP instead of HTTP for file xfer??
measure speed diff
Local scheduling
more intelligent decision about when/what to work on
- monitor VM situation, run small-footprint programs
even if user active
- monitor network usage, do net xfers if network idle
even if user active
The following would require client to accept connections:
- clients can act as proxy scheduling server
- exiting client can pass work to another client
- client can transfer files to other clients
User/host "reputation"
keep track of % results bad, %results claimed > 2x granted credit
both per-host and per-user.
Make these visible to project, to that user (only)
Storage validation
periodic rehash of persistent files;
compare results between hosts
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)
WU/result sequence mechanism
design/implement/document
Multiple application files
document, test
Versioning
think through issues involved in:
compatibility of core client and scheduling server
compatibility of core client and data server
compatibility of core client and app version
compatibility of core client and client state file?
Need version numbers for protocols/interfaces?
What messages to show user? Project?
Persistent files
test
design/implement test reporting, retrieval mechanisms
(do this using WU/results with null application?)
NET_XFER_SET
review logic; prevent one stream for starving others
Kill app if there is a memory leak
Other user preferences:
memory restrictions
process priority/affinity
show disk usage as two pie charts (one for overall, one for per project)